diff --git a/.github/workflows/CodeCov.yml b/.github/workflows/CodeCov.yml index c3ed91c..db43231 100644 --- a/.github/workflows/CodeCov.yml +++ b/.github/workflows/CodeCov.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Julia uses: julia-actions/setup-julia@latest with: - version: 1.10.3 + version: 1.10.5 - name: Test with coverage env: diff --git a/.github/workflows/JuliaFormatter.yml b/.github/workflows/JuliaFormatter.yml index 8200588..222278b 100644 --- a/.github/workflows/JuliaFormatter.yml +++ b/.github/workflows/JuliaFormatter.yml @@ -31,7 +31,7 @@ jobs: - uses: julia-actions/setup-julia@latest if: steps.filter.outputs.julia_file_change == 'true' with: - version: 1.10.3 + version: 1.10.5 - name: Apply JuliaFormatter if: steps.filter.outputs.julia_file_change == 'true' diff --git a/.github/workflows/UpDeps.yml b/.github/workflows/UpDeps.yml index aa1fef4..18421c4 100644 --- a/.github/workflows/UpDeps.yml +++ b/.github/workflows/UpDeps.yml @@ -23,7 +23,7 @@ jobs: - uses: julia-actions/setup-julia@latest with: - version: 1.10.3 + version: 1.10.5 - name: Apply UpDeps run: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ca7bbe..3419312 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: fail-fast: false matrix: version: - - '1.10.3' + - '1.10.5' os: - ubuntu-latest - macOS-latest diff --git a/Data/Atlas_LES_Profiles/download_atlas_les_profiles.jl b/Data/Atlas_LES_Profiles/download_atlas_les_profiles.jl index eed7787..1da7d78 100644 --- a/Data/Atlas_LES_Profiles/download_atlas_les_profiles.jl +++ b/Data/Atlas_LES_Profiles/download_atlas_les_profiles.jl @@ -92,7 +92,7 @@ SOCRATES_flight_observations_Box_links = Dict( # The raw observational data from These all have the same fiilename so we have to manually append the flight number to the filename """ -function download_atlas_les_outputs(; cases = cases) +function download_atlas_les_outputs(; cases::AbstractArray{Int} = cases, forcing_type::Symbol = :obs_data) # create joinpath(thisdir, "Output_Data") if doesn't exist if !isdir(joinpath(thisdir, "Output_Data")) @@ -106,23 +106,27 @@ function download_atlas_les_outputs(; cases = cases) ERA5_filename = RF_num * "_output/era5/SOCRATES_128x128_100m_10s_rad10_vg_M2005_aj.nc" # e.g. https://atmos.uw.edu/~ratlas/RF12_output/era5/SOCRATES_128x128_100m_10s_rad10_vg_M2005_aj.nc # download obs model output - try - obs_savepath = joinpath(thisdir, "Output_Data", RF_num * "_Obs_" * split(obs_filename, "/")[end]) # just the filename, not any paths - download("https://atmos.uw.edu/~ratlas/" * obs_filename, obs_savepath) - @info "Found $("https://atmos.uw.edu/~ratlas/"*obs_filename)" - catch e - @warn "Did not find $("https://atmos.uw.edu/~ratlas/"*obs_filename)" - # @warn e - end - # download ERA5 forcing - try - ERA5_savepath = joinpath(thisdir, "Output_Data", RF_num * "_ERA5_" * split(ERA5_filename, "/")[end]) # just the filename, not any paths - download("https://atmos.uw.edu/~ratlas/" * ERA5_filename, ERA5_savepath) - @info "Found $("https://atmos.uw.edu/~ratlas/"*ERA5_filename)" - catch e - @warn "Did not find $("https://atmos.uw.edu/~ratlas/"*ERA5_filename)" - # @warn e + if forcing_type == :obs_data + try + obs_savepath = joinpath(thisdir, "Output_Data", RF_num * "_Obs_" * split(obs_filename, "/")[end]) # just the filename, not any paths + download("https://atmos.uw.edu/~ratlas/" * obs_filename, obs_savepath) + @info "Found $("https://atmos.uw.edu/~ratlas/"*obs_filename)" + catch e + @warn "Did not find $("https://atmos.uw.edu/~ratlas/"*obs_filename)" + # @warn e + end + + elseif forcing_type == :ERA5_data + # download ERA5 forcing + try + ERA5_savepath = joinpath(thisdir, "Output_Data", RF_num * "_ERA5_" * split(ERA5_filename, "/")[end]) # just the filename, not any paths + download("https://atmos.uw.edu/~ratlas/" * ERA5_filename, ERA5_savepath) + @info "Found $("https://atmos.uw.edu/~ratlas/"*ERA5_filename)" + catch e + @warn "Did not find $("https://atmos.uw.edu/~ratlas/"*ERA5_filename)" + # @warn e + end end end end diff --git a/Manifest.toml b/Manifest.toml index 96689b5..2a3873d 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -1,14 +1,14 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.10.3" +julia_version = "1.10.5" manifest_format = "2.0" project_hash = "09cee719b9d2d781c7d51cda0b1b8d979bb782d1" [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" +git-tree-sha1 = "50c3c56a52972d78e8be9fd135bfb91c9574c140" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.0.4" +version = "4.1.1" weakdeps = ["StaticArrays"] [deps.Adapt.extensions] @@ -23,29 +23,34 @@ uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [[deps.Atomix]] deps = ["UnsafeAtomics"] -git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be" +git-tree-sha1 = "c3b238aa28c1bebd4b5ea4988bebf27e9a01b72b" uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" -version = "0.1.0" +version = "1.0.1" + + [deps.Atomix.extensions] + AtomixCUDAExt = "CUDA" + AtomixMetalExt = "Metal" + AtomixoneAPIExt = "oneAPI" + + [deps.Atomix.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" +git-tree-sha1 = "8873e196c2eb87962a2048b3b8e08946535864a1" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+1" - -[[deps.CEnum]] -git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.5.0" +version = "1.0.8+4" [[deps.CFTime]] deps = ["Dates", "Printf"] -git-tree-sha1 = "5afb5c5ba2688ca43a9ad2e5a91cbb93921ccfa1" +git-tree-sha1 = "937628bf8b377208ac359f57314fd85d3e0165d9" uuid = "179af706-886a-5703-950a-314cd64e0468" -version = "0.1.3" +version = "0.1.4" [[deps.CommonDataModel]] deps = ["CFTime", "DataStructures", "Dates", "Preferences", "Printf"] @@ -54,16 +59,16 @@ uuid = "1fbeeb36-5f17-413c-809b-666fb144f157" version = "0.2.5" [[deps.CommonSubexpressions]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +deps = ["MacroTools"] +git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.3.0" +version = "0.3.1" [[deps.Compat]] deps = ["TOML", "UUIDs"] -git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.15.0" +version = "4.16.0" weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] @@ -92,15 +97,15 @@ version = "1.9.1" [[deps.Dierckx]] deps = ["Dierckx_jll"] -git-tree-sha1 = "d1ea9f433781bb6ff504f7d3cb70c4782c504a3a" +git-tree-sha1 = "7da4b14cc4c3443a1afc64abee17f4fcb45ad837" uuid = "39dd38d3-220a-591b-8e3c-4c3a8c710a94" -version = "0.5.3" +version = "0.5.4" [[deps.Dierckx_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6596b96fe1caff3db36415eeb6e9d3b50bfe40ee" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "3251f44b3cac6fec4cec8db45d3ab0bfed51c4d8" uuid = "cd4c43a9-7502-52ba-aa6d-59fb2a88580b" -version = "0.1.0+0" +version = "0.2.0+0" [[deps.DiffResults]] deps = ["StaticArraysCore"] @@ -130,9 +135,9 @@ uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +git-tree-sha1 = "a2df1b776752e3f344e5116c06d75a10436ab853" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.36" +version = "0.10.38" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -146,9 +151,9 @@ version = "1.14.2+1" [[deps.Hwloc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "ca0f6bf568b4bfc807e7537f081c81e35ceca114" +git-tree-sha1 = "50aedf345a709ab75872f80a2779568dc0bb461b" uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.10.0+0" +version = "2.11.2+3" [[deps.InteractiveUtils]] deps = ["Markdown"] @@ -161,45 +166,31 @@ version = "0.2.2" [[deps.JLLWrappers]] deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +git-tree-sha1 = "a007feb38b422fbdab534406aeca1b86823cb4d6" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.5.0" +version = "1.7.0" [[deps.KernelAbstractions]] -deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] -git-tree-sha1 = "db02395e4c374030c53dc28f3c1d33dec35f7272" +deps = ["Adapt", "Atomix", "InteractiveUtils", "MacroTools", "PrecompileTools", "Requires", "StaticArrays", "UUIDs"] +git-tree-sha1 = "b9a838cd3028785ac23822cded5126b3da394d1a" uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" -version = "0.9.19" +version = "0.9.31" [deps.KernelAbstractions.extensions] EnzymeExt = "EnzymeCore" + LinearAlgebraExt = "LinearAlgebra" + SparseArraysExt = "SparseArrays" [deps.KernelAbstractions.weakdeps] EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - -[[deps.LLVM]] -deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] -git-tree-sha1 = "065c36f95709dd4a676dc6839a35d6fa6f192f24" -uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "7.1.0" - - [deps.LLVM.extensions] - BFloat16sExt = "BFloat16s" - - [deps.LLVM.weakdeps] - BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" - -[[deps.LLVMExtra_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" -uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.29+0" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.LLVMOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" +git-tree-sha1 = "78211fb6cbc872f77cad3fc0b6cf647d923f4929" uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" -version = "15.0.7+0" +version = "18.1.7+0" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] @@ -234,9 +225,9 @@ uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" [[deps.Libiconv_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.17.0+0" +version = "1.18.0+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] @@ -244,9 +235,9 @@ uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "18144f3e9cbe9b15b070288eef858f71b291ce37" +git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.27" +version = "0.3.29" [deps.LogExpFunctions.extensions] LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" @@ -263,9 +254,9 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[deps.MPICH_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "4099bb6809ac109bfc17d521dad33763bcf026b7" +git-tree-sha1 = "7715e65c47ba3941c502bffb7f266a41a7f54423" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.2.1+1" +version = "4.2.3+0" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] @@ -275,15 +266,14 @@ version = "0.1.11" [[deps.MPItrampoline_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "8c35d5420193841b2f367e658540e8d9e0601ed0" +git-tree-sha1 = "70e830dab5d0775183c99fc75e4c24c614ed7142" uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.4.0+0" +version = "5.5.1+2" [[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +git-tree-sha1 = "72aebe0b5051e5143a079a4685a46da330a40472" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.13" +version = "0.5.15" [[deps.Markdown]] deps = ["Base64"] @@ -296,9 +286,9 @@ version = "2.28.2+1" [[deps.MicrosoftMPI_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "f12a29c4400ba812841c6ace3f4efbb6dbb3ba01" +git-tree-sha1 = "bc95bf4149bf535c09602e3acdf950d9b4376227" uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" -version = "10.1.4+2" +version = "10.1.4+3" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" @@ -315,9 +305,9 @@ version = "0.12.17" [[deps.NaNMath]] deps = ["OpenLibm_jll"] -git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +git-tree-sha1 = "030ea22804ef91648f29b7ad3fc15fa49d0e6e71" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.2" +version = "1.0.3" [[deps.NetCDF_jll]] deps = ["Artifacts", "Bzip2_jll", "HDF5_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "XML2_jll", "Zlib_jll", "Zstd_jll"] @@ -341,31 +331,31 @@ version = "0.8.1+2" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] -git-tree-sha1 = "a9de2f1fc98b92f8856c640bf4aec1ac9b2a0d86" +git-tree-sha1 = "2dace87e14256edb1dd0724ab7ba831c779b96bd" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.3+0" +version = "5.0.6+0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3da7367955dcc5c54c1ba4d402ccdc09a1a3e046" +git-tree-sha1 = "7493f61f55a6cce7325f197443aa80d32554ba10" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.13+1" +version = "3.0.15+3" [[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.5+0" +version = "0.5.6+0" [[deps.OrderedCollections]] -git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +git-tree-sha1 = "12f1439c4f986bb868acda6ea33ebc78e19b95ad" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.3" +version = "1.7.0" [[deps.PCHIPInterpolation]] -git-tree-sha1 = "0a19c7df8f154657088ac84b58347863e45c465d" +git-tree-sha1 = "fa9c9839789b203e99580cd09c212df78f883562" uuid = "afe20452-48d1-4729-9a8b-50fb251f06cd" -version = "0.2.0" +version = "0.2.1" [deps.PCHIPInterpolation.extensions] PCHIPInterpolationRecipesBaseExt = "RecipesBase" @@ -431,9 +421,9 @@ version = "1.10.0" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +git-tree-sha1 = "64cca0c26b4f31ba18f13f6c12af7c85f478cfde" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.4.0" +version = "2.5.0" [deps.SpecialFunctions.extensions] SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" @@ -443,9 +433,9 @@ version = "2.4.0" [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "9ae599cd7529cfce7fea36cf00a62cfc56f0f37c" +git-tree-sha1 = "47091a0340a675c738b1304b58161f3b0839d454" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.4" +version = "1.9.10" [deps.StaticArrays.extensions] StaticArraysChainRulesCoreExt = "ChainRulesCore" @@ -456,9 +446,9 @@ version = "1.9.4" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [[deps.StaticArraysCore]] -git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.2" +version = "1.4.3" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] @@ -480,10 +470,6 @@ deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" version = "1.10.0" -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - [[deps.Thermodynamics]] deps = ["DocStringExtensions", "KernelAbstractions", "Random", "RootSolvers"] git-tree-sha1 = "090a50e507242bd6c85267645186260fe89a1cfe" @@ -504,21 +490,21 @@ uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" [[deps.UnsafeAtomics]] -git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278" +git-tree-sha1 = "b13c4edda90890e5b04ba24e20a310fbe6f249ff" uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" -version = "0.2.1" +version = "0.3.0" -[[deps.UnsafeAtomicsLLVM]] -deps = ["LLVM", "UnsafeAtomics"] -git-tree-sha1 = "d9f5962fecd5ccece07db1ff006fb0b5271bdfdd" -uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" -version = "0.1.4" + [deps.UnsafeAtomics.extensions] + UnsafeAtomicsLLVM = ["LLVM"] + + [deps.UnsafeAtomics.weakdeps] + LLVM = "929cbde3-209d-540e-8aea-75f648917ca0" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "52ff2af32e591541550bd753c0da8b9bc92bb9d9" +git-tree-sha1 = "a2fccc6559132927d4c5dc183e3e01048c6dcbd6" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.12.7+0" +version = "2.13.5+0" [[deps.Zlib_jll]] deps = ["Libdl"] @@ -527,20 +513,20 @@ version = "1.2.13+1" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" +git-tree-sha1 = "622cf78670d067c738667aaa96c553430b65e269" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.6+0" +version = "1.5.7+0" [[deps.libaec_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "46bf7be2917b59b761247be3f317ddf75e50e997" +git-tree-sha1 = "f5733a5a9047722470b95a81e1b172383971105c" uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" -version = "1.1.2+0" +version = "1.1.3+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+1" +version = "5.11.0+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] diff --git a/Project.toml b/Project.toml index 4e6942b..8f537b6 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "SOCRATESSingleColumnForcings" uuid = "efca6b66-9b98-11ed-1a32-7b7cdccd517a" authors = ["Jordan Benjamin"] -version = "0.10.2" +version = "0.10.3" [deps] Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" diff --git a/README.md b/README.md index 81a34af..288405b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # SOCRATESSingleColumnForcings -This repository includes scripts to take in SOCRATES flight data and create both 2D [lev,time] datasets and 1D [lev] columns of time-interpoloation functions to force the CliMa EDMF Turbulence-Convection single-column model. +This repository includes scripts to take in SOCRATES flight data and create both 2D [lev,time] datasets and 1D [lev] columns of time-interpoloation functions to force the CliMA EDMF Turbulence-Convection single-column model. The profiles are created off the data used to force LES simulations by Atlas, 2020 (https://doi.org/10.1029/2020MS002205), some of her scripts are included in /Rachel_Atlas_Scripts. @@ -27,4 +27,4 @@ The remainder of the properties are always taken from the ERA5 based Atlas input -Once this is finalized, perhaps the relevant parts can be ported to `CliMa/AtmosphericProfilesLibrary.jl` (`CliMa/TurbulenceConvection.jl` as is doesn't access this repo) +Once this is finalized, perhaps the relevant parts can be ported to `CliMA/AtmosphericProfilesLibrary.jl` (`CliMA/TurbulenceConvection.jl` as is doesn't access this repo) diff --git a/src/SOCRATESSingleColumnForcings.jl b/src/SOCRATESSingleColumnForcings.jl index de7f130..4067e4d 100644 --- a/src/SOCRATESSingleColumnForcings.jl +++ b/src/SOCRATESSingleColumnForcings.jl @@ -12,6 +12,8 @@ using Dates const FT = Float64 const flight_numbers = [1, 9, 10, 11, 12, 13] const forcing_types = [:obs_data, :ERA5_data] # maybe change these to [:obs,:ERA5] later? would need to mirror in Cases.jl in TC.jl +const TDPS = TD.Parameters.ThermodynamicsParameters +const TDTS = TD.ThermodynamicState # Two cases with shallow cloud-topped boundary layers, RF12 and RF13, are run on a 192-level vertical grid. # The other four cases have clouds extending through deeper boundary layers; they are run on a 320-level vertical grid. diff --git a/src/get_LES_reference_profiles.jl b/src/get_LES_reference_profiles.jl index 24bf900..69c0b8d 100644 --- a/src/get_LES_reference_profiles.jl +++ b/src/get_LES_reference_profiles.jl @@ -10,14 +10,16 @@ SAM seems to hold ρ constant with time, so we can probably just rely on that """ function get_LES_reference_profiles( flight_number::Int; - obs_or_ERA5 = "Obs"::Union{String, Symbol}, + forcing_type::Symbol = :obs_data, new_zc::Union{Nothing, AbstractArray} = nothing, new_zf::Union{Nothing, AbstractArray} = nothing, # thermo_params, ) + (forcing_type ∈ (:obs_data, :ERA5_data)) || error("forcing_type must be :obs_data or :ERA5_data") + # initial conditions - data = open_atlas_les_input(flight_number) + data = open_atlas_les_input(flight_number, forcing_type; open_files = true) return_values = (:p_c, :p_f, :ρ_c, :ρ_f) @@ -42,24 +44,15 @@ function get_LES_reference_profiles( error("You must provide either new_zc or new_zf, or both, but only providing new_zc is not allowed") end - # resolve forcing keyword - if obs_or_ERA5 ∈ ["Obs", :obs_data] - forcing = :obs_data - # data = data[(:obs_data, :ERA5_data)] - data = data[(:obs_data,)] # drop ERA if we're doing obs cause we don't need it (11 has no obs either i think) - elseif obs_or_ERA5 ∈ ["ERA5", :ERA5_data] - forcing = :ERA5_data - data = data[(:ERA5_data,)] # drop obs if we're doing era5 cause we don't need it (11 has no obs either i think) - else - if obs_or_ERA5 ∉ [:obs_data, :ERA5_data, "Obs", "ERA5"] - error("obs_or_ERA5 must be either \"Obs\"/[:obs_data] or \"ERA5\"/[:ERA5_data]") - else - forcing = obs_or_ERA5 - end - end + data = data[(forcing_type,)] - LES_data = open_atlas_les_output(flight_number)[forcing] + LES_data = open_atlas_les_output(flight_number, forcing_type)[forcing_type] + + if isnothing(LES_data) + error("No LES data found for flight $flight_number") + end + z = LES_data["z"][:] p = LES_data["p"][:] .* 100.0 # Pressure variations in SAM are under a milibar, so we can use the 1D p variable rather than the 2D PRES variable diff --git a/src/helper_functions.jl b/src/helper_functions.jl index 4104af2..5ec4bd3 100644 --- a/src/helper_functions.jl +++ b/src/helper_functions.jl @@ -69,14 +69,14 @@ end Does this cause we don't have surface q values as of rn """ -function data_to_tsg(data; thermo_params) +function data_to_tsg(data; thermo_params::TDPS) Tg = data["Tg"] pg = data["Ps"] # not sure what to do at surface, so assuming saturation at surface pvg = TD.saturation_vapor_pressure.(thermo_params, Tg, TD.Liquid()) - molmass_ratio = TD.molmass_ratio(thermo_params) + molmass_ratio = TDP.molmass_ratio(thermo_params) qg = (1 / molmass_ratio) .* pvg ./ (pg .- pvg) #Total water mixing ratio at surface , assuming saturation @@ -87,7 +87,7 @@ end """ data_to_ts """ -function data_to_ts(data; do_combine_air_and_ground_data = false, thermo_params) # add type data is ncdataset +function data_to_ts(data; do_combine_air_and_ground_data::Bool = false, thermo_params::TDPS) # add type data is ncdataset T = data["T"] q = data["q"] @@ -107,18 +107,11 @@ function data_to_ts(data; do_combine_air_and_ground_data = false, thermo_params) return ts end - -function insert_sorted(vect, val; by = monotonic_checker, monotonic_rev = monotonic_rev) - # @show(vect,val) - index = searchsortedfirst(vect, val; by = monotonic_checker, rev = monotonic_rev) #find index at which to insert x +function insert_sorted(vect, val; by = identity, rev = false) + index = searchsortedfirst(vect, val; by = by, rev = rev) #find index at which to insert x return insert!(vect, index, val) #insert x at index end -# function insert_sorted(vect, val;by=monotonic_checker,monotonic_rev=monotonic_rev) -# index = searchsortedfirst(vect, val; by=monotonic_checker, rev=monotonic_rev) #find index at which to insert x -# return insert!(vect, index, val) #insert x at index -# end - @@ -127,15 +120,15 @@ end # function lev_to_z_from_LES_output_column(tsz, lesz, lesp; thermo_params, data, flight_number, forcing_type, interp_method = :Spline1D, interp_kwargs = Dict(:f_enhancement_factor=>1, :f_p_enhancement_factor=>1)) function lev_to_z_from_LES_output_column( - tsz, + tsz::AbstractArray{TS}, lesz, lesp; - thermo_params, + thermo_params::TDPS, data, - flight_number, - forcing_type, - interp_method = :Spline1D, -) + flight_number::Int, + forcing_type::Symbol, + interp_method::Symbol = :Spline1D, +) where {TS <: TDTS} # Load pressure from the thermodynamic state p_in = TD.air_pressure.(thermo_params, tsz) # Interpolate z from the LES output to the pressure levels of the thermodynamic state @@ -152,11 +145,11 @@ We only have the forcing data at that scale so... function lev_to_z_from_LES_output( ts, tsg; - thermo_params, + thermo_params::TDPS, data, - assume_monotonic = false, - flight_number, - forcing_type, + assume_monotonic::Bool = false, + flight_number::Int, + forcing_type::Symbol, ground_indices = nothing, ) @@ -170,7 +163,7 @@ function lev_to_z_from_LES_output( Lt = size(ts, time_dim_num) if !assume_monotonic - LES_data = open_atlas_les_output(flight_number)[forcing_type] + LES_data = open_atlas_les_output(flight_number, forcing_type)[forcing_type] p_LES = LES_data["PRES"] # 2D,time varying z_LES = LES_data["z"] # 1D, constant # LES_min_z, LES_max_z = extrema(z_LES) @@ -208,12 +201,9 @@ function lev_to_z_from_LES_output( # p_LES = pyinterp(t_in, t_les, p_LES) # i think you need to map this bc of the splines... but there's probably some way... p_LES = mapslices(x -> pyinterp(t_in, t_les, x, bc = "nearest", method = :Spline1D), p_LES; dims = 2) # apply to each row, use nearest interp but outside les time bounds is bogus - # for ts, tsz, interpolation is more annoying, maybe need to do in p,T,q separately and reconstitute? - # tsz = combine_air_and_ground_data(ts, tsg, ldn; data, reshape_ground = true, insert_location = :end) # here we just want to assume monotonic so we can pass those to this fcn (no need to merge bc our column fcn isn't handling...) tsz = ts # preallocate z - # z = zeros(Float64, size(tsz)...) # should be same size as ts s_tsz = collect(size(ts)) s_tsz[ldn] += 1 # we just want to add a single slice of zeros for the ground -- these are all ocean cases so this should be fine for now... z = Array{Float64}(undef, s_tsz...) # should be same size as ts @@ -278,7 +268,7 @@ function lev_to_z_from_LES_output( # Handle z's lower than LES Data (highest pressure to sfc) | use the thickness equation - new_z = lev_to_z_column(tsz_t[i_t_max_p:end]; thermo_params, data) + new_z = lev_to_z_column(tsz_t[i_t_max_p:end]; thermo_params) new_dz = new_z[2:end] .- new_z[1:(end - 1)] # get the dz from the thickness equation, but instead of going up from the ground, we're gonna flip it to go down from the last good z new_dz = cumsum(new_dz) # sum up our dz new_z = selectdim(z, tdn, i_t)[i_t_max_p] .+ new_dz @@ -288,7 +278,7 @@ function lev_to_z_from_LES_output( # Handle z's higher than LES Data | use the thickness equation and add to the top of the LES data selectdim(z, tdn, i_t)[1:(i_t_min_p - 1)] = - lev_to_z_column(tsz_t[1:i_t_min_p]; thermo_params, data)[1:(end - 1)] .+ z[i_t_min_p] # go from start to top and add to existing top... + lev_to_z_column(tsz_t[1:i_t_min_p]; thermo_params)[1:(end - 1)] .+ z[i_t_min_p] # go from start to top and add to existing top... selectdim(z, tdn, i_t)[:] .-= selectdim(z, tdn, i_t)[index] # subtract out the ground value @@ -312,15 +302,13 @@ tsz should be a one dimensional array consising of [ts..., tg] # to do -- add capability to use precomputed indices (insert_location) """ -function lev_to_z_column(tsz; thermo_params, data = data) +function lev_to_z_column(tsz; thermo_params::TDPS) ts = tsz[1:(end - 1)] # need to make it a vector I guess... (not sure if this screws wit output shape) tsg = tsz[end] R_d = TDP.R_d(thermo_params) grav = TDP.grav(thermo_params) - # dimnames = NC.dimnames(data["T"]) # use this as default cause calculating ts doesn't maintain dim labellings - # lev_dim_num = findfirst(x->x=="lev",dimnames) L = length(ts) index = searchsortedfirst(ts, tsg; by = x -> TD.air_pressure(thermo_params, x), rev = false) # find where the ground value would be inserted... @@ -350,9 +338,9 @@ end TODO: document """ -function lev_to_z(p::FT, T::FT, q::FT, pg::FT, Tg::FT, qg::FT; thermo_params, data) where {FT <: Real} +function lev_to_z(p::FT, T::FT, q::FT, pg::FT, Tg::FT, qg::FT; thermo_params::TDPS, data) where {FT <: Real} ts = TD.PhaseEquil_pTq.(thermo_params, p, T, q) - tsg = TD.PhaseEquil_pTq.(thermo_params, pg, Tg, qtg) + tsg = TD.PhaseEquil_pTq.(thermo_params, pg, Tg, qg) return lev_to_z(ts, tsg; data = data, thermo_params) end @@ -365,7 +353,13 @@ tsg is thermodynamic state for ground if assume monotonic, everything should already be in the right order and we can use the vectorized version, otherwise we will use lev_to_z column applied column by column w/ mapslices """ -function lev_to_z(ts, tsg; thermo_params, data, assume_monotonic = false) +function lev_to_z( + ts::AbstractArray{TS}, + tsg::AbstractArray{TS}; + thermo_params::TDPS, + data, + assume_monotonic::Bool = false, +) where {TS <: TDTS} dimnames = NC.dimnames(data["T"]) # use this as default cause calculating ts doesn't maintain dim labellings lev_dim_num = findfirst(x -> x == "lev", dimnames) @@ -374,7 +368,7 @@ function lev_to_z(ts, tsg; thermo_params, data, assume_monotonic = false) if !assume_monotonic tsz = combine_air_and_ground_data(ts, tsg, ldn; data, reshape_ground = true, insert_location = :end) # here we just want to assume monotonic so we can pass those to this fcn - z = mapslices(x -> lev_to_z_column(x; thermo_params, data), tsz; dims = ldn) # need to make a stack cause that's all mapslices can take... + z = mapslices(x -> lev_to_z_column(x; thermo_params), tsz; dims = ldn) # need to make a stack cause that's all mapslices can take... else R_d = TDP.R_d(thermo_params) # TD.Parameters.R_d(thermo_params) @@ -408,7 +402,7 @@ function lev_to_z(ts, tsg; thermo_params, data, assume_monotonic = false) return z end -function z_from_data(data; thermo_params) +function z_from_data(data; thermo_params::TDPS) ts = data_to_ts(data; thermo_params, do_combine_air_and_ground_data = false) tsg = data_to_tsg(data; thermo_params) return lev_to_z(ts, tsg; thermo_params, data) @@ -420,7 +414,13 @@ end Get the indices where the ground tsg would fit into the array ts... """ -function get_ground_insertion_indices(ts, tsg, concat_dim; thermo_params, data = data) +function get_ground_insertion_indices( + ts::AbstractArray{TS}, + tsg::AbstractArray{TS}, + concat_dim::Union{Int, String}; + thermo_params::TDPS, + data, +) where {TS <: TDTS} function mapslice_func(vect; thermo_params = thermo_params, by = x -> TD.air_pressure(thermo_params, x)) vardata = vect[1:(end - 1)] vardatag = vect[end] @@ -455,12 +455,12 @@ assume_monotonic : assume that the ground value is actually below everything in function combine_air_and_ground_data( var, varg, - concat_dim; + concat_dim::Union{Int, String}; data = nothing, - reshape_ground = true, - insert_location = :end, + reshape_ground::Bool = true, + insert_location::Union{Symbol, AbstractArray, Function} = :end, ) - # if data is a string, read the data out from data (creates data `vardata` from `var` whether var is string or already is data) + # if var is a string, read the data out from data (creates data `vardata` from `var` whether var is string or already is data) vardata = isa(var, String) ? data[var] : var vardatag = isa(varg, String) ? data[varg] : varg concat_dim = isa(concat_dim, String) ? get_dim_num(concat_dim, vardata) : concat_dim # string to numbers @@ -549,25 +549,37 @@ end get the dimension number of dim from nc_data """ -function get_dim_num(dim, nc_data = nothing) - - # convert interp_dim to a number stored in interp_dim_num - if isa(dim, Number) # already a string, just returns... - dim_num = dim - elseif isa(dim, String) - if isa(nc_data, NC.CFVariable) # allow finding the number from an ncdataset and a string - dimnames = NC.dimnames(nc_data) - dim_num = findfirst(x -> x == dim, dimnames) - elseif isa(nc_data, NC.NCDataset) - @warn("dimension number for a dataset is not well defined, use a speciifc NC.CFVariable instead") - elseif isa(nc_data, AbstractArray) - error("cannot find dimension $(dim) in unlabeled data nc_data, pass in a labeled NCDataset instead...") - else - error("unsupported input type for nc_data $(typeof(nc_data))") - end - end +get_dim_num(dim::Number, nc_data) = dim +function get_dim_num(dim::String, nc_data::NC.CFVariable) + dimnames = NC.dimnames(nc_data) + dim_num = findfirst(x -> x == dim, dimnames) return dim_num end +get_dim_num(dim::String, nc_data::NC.NCDataset) = + error("dimension number for a dataset is not well defined, use a speciifc NC.CFVariable instead") +get_dim_num(dim::String, nc_data::AbstractArray) = + error("cannot find dimension $(dim) in unlabeled data nc_data, pass in a labeled NCDataset instead...") +get_dim_num(dim::String, nc_data) = error("unsupported input type for nc_data $(typeof(nc_data))") + +# function get_dim_num(dim, nc_data = nothing) + +# # convert interp_dim to a number stored in interp_dim_num +# if isa(dim, Number) # already a string, just returns... +# dim_num = dim +# elseif isa(dim, String) +# if isa(nc_data, NC.CFVariable) # allow finding the number from an ncdataset and a string +# dimnames = NC.dimnames(nc_data) +# dim_num = findfirst(x -> x == dim, dimnames) +# elseif isa(nc_data, NC.NCDataset) +# @warn("dimension number for a dataset is not well defined, use a speciifc NC.CFVariable instead") +# elseif isa(nc_data, AbstractArray) +# error("cannot find dimension $(dim) in unlabeled data nc_data, pass in a labeled NCDataset instead...") +# else +# error("unsupported input type for nc_data $(typeof(nc_data))") +# end +# end +# return dim_num +# end @@ -592,16 +604,16 @@ To Do : decide types """ function interp_along_dim( var, - interp_dim, + interp_dim::Union{String, Int}, interp_dim_in; interp_dim_out = nothing, data = nothing, - data_func = nothing, - interp_dim_in_is_full_array = true, - reshape_ground = true, - verbose = false, - interp_method = :Spline1D, - interp_kwargs = Dict{Symbol, Any}(), + data_func::Union{Function, Nothing} = nothing, + interp_dim_in_is_full_array::Bool = true, + reshape_ground::Bool = true, + verbose::Bool = false, + interp_method::Symbol = :Spline1D, + interp_kwargs::Dict = Dict{Symbol, Any}(), ) # would use kwargs but doesn't play nice w/ ODE solver for some reason... instead we get out the parameters we want explicitly and pass them all the time (splatting gives a union typle type object that apparently can't be handled?) f_enhancement_factor = get(interp_kwargs, :f_enhancement_factor, 1) # default to 1.0 @@ -627,32 +639,50 @@ function interp_along_dim( if !interp_dim_in_is_full_array if isnothing(interp_dim_out) return mapslices( - d -> - dd -> pyinterp( - dd, - interp_dim_in, - d; - method = interp_method, - f_enhancement_factor = f_enhancement_factor, - f_p_enhancement_factor = f_p_enhancement_factor, - bc = bc, - k = k, - ), + let interp_dim_in = interp_dim_in, + interp_method = interp_method, + f_enhancement_factor = f_enhancement_factor, + f_p_enhancement_factor = f_p_enhancement_factor, + bc = bc, + k = k + # let block for performance of captured variables + d -> let d = d + dd -> pyinterp( + dd, + interp_dim_in, + d; + method = interp_method, + f_enhancement_factor = f_enhancement_factor, + f_p_enhancement_factor = f_p_enhancement_factor, + bc = bc, + k = k, + ) + end + end, vardata, dims = [interp_dim_num], ) # will return a lambda fcn that can be evaluated along that dimensoin else return mapslices( - d -> pyinterp( - interp_dim_out, - interp_dim_in, - d; - method = interp_method, + let interp_dim_out = interp_dim_out, + interp_dim_in = interp_dim_in, + interp_method = interp_method, f_enhancement_factor = f_enhancement_factor, f_p_enhancement_factor = f_p_enhancement_factor, bc = bc, - k = k, - ), + k = k + # let block for performance of captured variables + d -> pyinterp( + interp_dim_out, + interp_dim_in, + d; + method = interp_method, + f_enhancement_factor = f_enhancement_factor, + f_p_enhancement_factor = f_p_enhancement_factor, + bc = bc, + k = k, + ) + end, vardata, dims = [interp_dim_num], ) # lambda fcn will evaluate @@ -664,17 +694,25 @@ function interp_along_dim( if isnothing(interp_dim_out) return dropdims( mapslices( - d -> - dd -> pyinterp( - dd, - d[:, 1], - d[:, 2]; - method = interp_method, - f_enhancement_factor = f_enhancement_factor, - f_p_enhancement_factor = f_p_enhancement_factor, - bc = bc, - k = k, - ), + let interp_method = interp_method, + f_enhancement_factor = f_enhancement_factor, + f_p_enhancement_factor = f_p_enhancement_factor, + bc = bc, + k = k + # let block for performance of captured variables + d -> let d = d + dd -> pyinterp( + dd, + d[:, 1], + d[:, 2]; + method = interp_method, + f_enhancement_factor = f_enhancement_factor, + f_p_enhancement_factor = f_p_enhancement_factor, + bc = bc, + k = k, + ) + end + end, _input, dims = [interp_dim_num, catd], ); @@ -683,16 +721,24 @@ function interp_along_dim( else return dropdims( mapslices( - d -> pyinterp( - interp_dim_out, - d[:, 1], - d[:, 2]; - method = interp_method, + let interp_dim_out = interp_dim_out, + interp_method = interp_method, f_enhancement_factor = f_enhancement_factor, f_p_enhancement_factor = f_p_enhancement_factor, bc = bc, - k = k, - ), + k = k + # let block for performance of captured variables + d -> pyinterp( + interp_dim_out, + d[:, 1], + d[:, 2]; + method = interp_method, + f_enhancement_factor = f_enhancement_factor, + f_p_enhancement_factor = f_p_enhancement_factor, + bc = bc, + k = k, + ) + end, _input, dims = [interp_dim_num, catd], ); @@ -734,12 +780,13 @@ if coord_new is nothing, then will return functions... function var_to_new_coord( var, coord_in, - interp_dim; + interp_dim::Union{String, Number}, + ; coord_new = nothing, data = nothing, - data_func = nothing, - interp_method = :Spline1D, - interp_kwargs = Dict{Symbol, Any}(), + data_func::Union{Function, Nothing} = nothing, + interp_method::Symbol = :Spline1D, + interp_kwargs::Dict = Dict{Symbol, Any}(), ) vardata = isa(var, String) ? data[var] : var if ~isnothing(data) @@ -772,19 +819,19 @@ to vectorize properly over z_new, it should be the same shape as vardata+vardata function get_data_new_z_t( var, z_new, - z_dim, - time_dim, - flight_number; - thermo_params, + z_dim::Union{String, Number}, + time_dim::Union{String, Number}, + flight_number::Int; + thermo_params::TDPS, varg = nothing, z_old = nothing, t_old = nothing, data = nothing, - initial_condition = false, - assume_monotonic = false, - interp_method = :Spline1D, - Spline1D_interp_kwargs = Dict{Symbol, Any}(), - pchip_interp_kwargs = Dict{Symbol, Any}(), + initial_condition::Bool = false, + assume_monotonic::Bool = false, + interp_method::Symbol = :Spline1D, + Spline1D_interp_kwargs::Dict = Dict{Symbol, Any}(), + pchip_interp_kwargs::Dict = Dict{Symbol, Any}(), ground_indices = :end, ) @@ -935,7 +982,7 @@ function calc_qg_extrapolate_pq(pg, p, q; interp_method = :Spline1D, interp_kawr return qg end -function calc_qg_from_pgTg(pg, Tg, thermo_params) +function calc_qg_from_pgTg(pg, Tg, thermo_params::TDPS) ρg = TD.air_density(thermo_params, Tg, pg) # original T? qg = TD.q_vap_saturation_generic(thermo_params, Tg, ρg, TD.Liquid()) # surface specific humidity over liquid return qg diff --git a/src/les_reader_helper.jl b/src/les_reader_helper.jl index e99f7ac..fc3195a 100644 --- a/src/les_reader_helper.jl +++ b/src/les_reader_helper.jl @@ -6,17 +6,6 @@ Read LES output file instead of the forcing input to set things -# function read_LES_output( -# flight_number::Int; -# forcing_type::Symbol = :obs_data, -# ) - -# LES_data = open_atlas_les_output(flight_number)[forcing_type] - -# end - - - """ This function is for reading things from LES since they don't have the same time setup and already have a z (which should match our desired output) @@ -25,26 +14,26 @@ LES data only has dimensions (time, z), no lev etc, but we keepthe syntax the sa function get_data_new_z_t_LES( var, z_new, # you'd htink this would be the same as our desired output z, but RF09 was run on a taller grid for some reason - z_dim, - time_dim, - flight_number; - thermo_params, + z_dim::Union{Int, String}, + time_dim::Union{Int, String}, + flight_number::Int, + forcing_type::Symbol; varg = nothing, z_old = nothing, t_old = nothing, data = nothing, - initial_condition = false, - assume_monotonic = false, - interp_method = :Spline1D, - Spline1D_interp_kwargs = Dict{Symbol, Any}(:bc => "extrapolate"), # default to extrapolate bc RF09 was run on a different grid for some reason, we're not necessarily guaranteed to have the same z - pchip_interp_kwargs = Dict{Symbol, Any}(:bc => "extrapolate"), + initial_condition::Bool = false, + assume_monotonic::Bool = false, + interp_method::Symbol = :Spline1D, + Spline1D_interp_kwargs::Dict = Dict{Symbol, Any}(:bc => "extrapolate"), # default to extrapolate bc RF09 was run on a different grid for some reason, we're not necessarily guaranteed to have the same z + pchip_interp_kwargs::Dict = Dict{Symbol, Any}(:bc => "extrapolate"), ground_indices = :end, ) if isa(var, String) && isnothing(data) - data = open_atlas_les_output(flight_number)[forcing_type] + data = open_atlas_les_output(flight_number, forcing_type)[forcing_type] end # get the data and dimensions we're working on, diff --git a/src/open_atlas_les_inputs.jl b/src/open_atlas_les_inputs.jl index f68cdc9..696699f 100644 --- a/src/open_atlas_les_inputs.jl +++ b/src/open_atlas_les_inputs.jl @@ -3,7 +3,52 @@ open_atlas_les_input(flight_number::Int) opens the files downloaded in download_atlas_les_profiles.jl """ -function open_atlas_les_input(flight_number::Int) +function open_atlas_les_input( + flight_number::Int, + forcing_type::Symbol; + open_files::Bool = true, + include_grid::Bool = true, +) + FT = Float64 # idk how to pass on a type here without necessarily having to give a variable... + atlas_dir = joinpath(dirname(@__DIR__), "Data", "Atlas_LES_Profiles", "Input_Data") # doesn't seem to work to use @__DIR__ directly as a variable + RF_num = "RF" * string(flight_number, pad = 2) + + if forcing_type == :obs_data + data_filename = joinpath(atlas_dir, RF_num * "_obs-based_SAM_input.nc") # e.g. https://atmos.uw.edu/~ratlas/RF12_obs-based_SAM_input.nc + elseif forcing_type == :ERA5_data + data_filename = joinpath(atlas_dir, RF_num * "_ERA5-based_SAM_input_mar18_2022.nc") # e.g. https://atmos.uw.edu/~ratlas/RF12_ERA5-based_SAM_input_mar18_2022.nc + else + error("forcing_type must be :obs_data or :ERA5_data") + end + + + data = isfile(data_filename) ? (open_files ? NC.Dataset(data_filename, "r") : data_filename) : nothing + + if include_grid + grid_filename = joinpath(atlas_dir, RF_num * "_grd.txt") + grid_data = isfile(grid_filename) ? (open_files ? vec(readdlm(grid_filename, FT)) : grid_filename) : nothing + return NamedTuple{(forcing_type, :grid_data)}((data, grid_data)) + else + return NamedTuple{(forcing_type,)}((data,)) + end +end + + +function open_atlas_les_grid(flight_number::Int; open_files::Bool = true) + FT = Float64 # idk how to pass on a type here without necessarily having to give a variable... + atlas_dir = joinpath(dirname(@__DIR__), "Data", "Atlas_LES_Profiles", "Input_Data") # doesn't seem to work to use @__DIR__ directly as a variable + RF_num = "RF" * string(flight_number, pad = 2) + grid_filename = joinpath(atlas_dir, RF_num * "_grd.txt") + + grid_data = isfile(grid_filename) ? (open_files ? vec(readdlm(grid_filename, FT)) : grid_filename) : nothing + + return (; grid_data) +end + + +function open_atlas_les_input(flight_number::Int; open_files::Bool = true) + + FT = Float64 # idk how to pass on a type here without necessarily having to give a variable... atlas_dir = joinpath(dirname(@__DIR__), "Data", "Atlas_LES_Profiles", "Input_Data") # doesn't seem to work to use @__DIR__ directly as a variable RF_num = "RF" * string(flight_number, pad = 2) @@ -13,30 +58,12 @@ function open_atlas_les_input(flight_number::Int) # @show(obs_filename, ERA5_filename, grid_filename) - local obs_data, ERA5_data, grid_data # initialize cause try catch scope is closed + # local obs_data, ERA5_data, grid_data # initialize cause try catch scope is closed # can't use do blocks here cause will close the files... - try # obs - # obs_data = NC.Dataset(obs_filename,"r") do ds; ds; end - obs_data = NC.Dataset(obs_filename, "r") - catch e - @warn e - obs_data = nothing - end - try # ERA5 - ERA5_data = NC.Dataset(ERA5_filename, "r") - catch e - @warn e - ERA5_data = nothing - end - - try # grid - grid_data = vec(readdlm(grid_filename, FT)) # is a txt file... - catch e - @warn e - grid_data = nothing - end + obs_data = isfile(obs_filename) ? (open_files ? NC.Dataset(obs_filename, "r") : obs_filename) : nothing + ERA5_data = isfile(ERA5_filename) ? (open_files ? NC.Dataset(ERA5_filename, "r") : ERA5_filename) : nothing + grid_data = isfile(grid_filename) ? (open_files ? vec(readdlm(grid_filename, FT)) : grid_filename) : nothing return (; obs_data = obs_data, ERA5_data = ERA5_data, grid_data = grid_data) - end diff --git a/src/open_atlas_les_outputs.jl b/src/open_atlas_les_outputs.jl index df861e1..3161ab7 100644 --- a/src/open_atlas_les_outputs.jl +++ b/src/open_atlas_les_outputs.jl @@ -21,52 +21,72 @@ SOCRATES_flight_observations_Box_links = Dict( # The raw observational data from """ -open_atlas_les_output(flight_number::Int) +open_atlas_les_output(flight_number::Int, forcing_type::Symbol; open_files::Bool = true, include_grid::Bool = true) opens the files downloaded in download_atlas_les_profiles.jl """ -function open_atlas_les_output(flight_number::Int) +function open_atlas_les_output( + flight_number::Int, + forcing_type::Symbol; + open_files::Bool = true, + include_grid::Bool = true, +) FT = Float64 # idk how to pass on a type here without necessarily having to give a variable... atlas_dir = joinpath(dirname(@__DIR__), "Data", "Atlas_LES_Profiles", "Output_Data") # doesn't seem to work to use @__DIR__ directly as a variable RF_num = "RF" * string(flight_number, pad = 2) - obs_filename = joinpath(atlas_dir, RF_num * "_Obs_" * "SOCRATES_128x128_100m_10s_rad10_vg_M2005_aj.nc") # e.g. https://atmos.uw.edu/~ratlas/RF12_obs-based_SAM_input.nc - ERA5_filename = joinpath(atlas_dir, RF_num * "_ERA5_" * "SOCRATES_128x128_100m_10s_rad10_vg_M2005_aj.nc") # e.g. https://atmos.uw.edu/~ratlas/RF12_ERA5-based_SAM_input_mar18_2022.nc - grid_filename = joinpath(atlas_dir, RF_num * "_grd.txt") - # @show(obs_filename, ERA5_filename, grid_filename) + if forcing_type == :obs_data + data_filename = joinpath(atlas_dir, RF_num * "_Obs_" * "SOCRATES_128x128_100m_10s_rad10_vg_M2005_aj.nc") # e.g. https://atmos.uw.edu/~ratlas/RF12_obs-based_SAM_input.nc + elseif forcing_type == :ERA5_data + data_filename = joinpath(atlas_dir, RF_num * "_ERA5_" * "SOCRATES_128x128_100m_10s_rad10_vg_M2005_aj.nc") # e.g. https://atmos.uw.edu/~ratlas/RF12_ERA5-based_SAM_input_mar18_2022.nc + else + error("forcing_type must be :obs_data or :ERA5_data") + end + # check if file exists and if not, download it - if !isfile(obs_filename) - # download(SOCRATES_flight_observations_Box_links[flight_number], obs_filename) # box link - download_atlas_les_outputs(; cases = [flight_number]) # Atlas website - end - if !isfile(ERA5_filename) - # download(SOCRATES_flight_observations_Box_links[flight_number], ERA5_filename) # box link - download_atlas_les_outputs(; cases = [flight_number]) # Atlas website + # The data is quite large so we'll try to load it from Box + if !isfile(data_filename) + download_atlas_les_outputs(; cases = [flight_number], forcing_type = forcing_type) # Atlas website end - # The data is quite large so we'll try to load it from Box + data = isfile(data_filename) ? (open_files ? NC.Dataset(data_filename, "r") : data_filename) : nothing - local obs_data, ERA5_data, grid_data # initialize cause try catch scope is closed - # can't use do blocks here cause will close the files... - try # obs - # obs_data = NC.Dataset(obs_filename,"r") do ds; ds; end - obs_data = NC.Dataset(obs_filename, "r") - grid_data = obs_data["z"][:] # read here cause no grid file - catch e - @warn e - obs_data = nothing + if include_grid + grid_filename = joinpath(atlas_dir, RF_num * "_grd.txt") + grid_data = isfile(grid_filename) ? (open_files ? vec(readdlm(grid_filename, FT)) : grid_filename) : nothing + return NamedTuple{(forcing_type, :grid_data)}((data, grid_data)) + else + return NamedTuple{(forcing_type,)}((data,)) end +end + - try # ERA5 - ERA5_data = NC.Dataset(ERA5_filename, "r") - grid_data = ERA5_data["z"][:] # read here cause no grid file - catch e - @warn e - ERA5_data = nothing +function open_atlas_les_output(flight_number::Int; open_files::Bool = true, include_grid::Bool = true) + FT = Float64 # idk how to pass on a type here without necessarily having to give a variable... + atlas_dir = joinpath(dirname(@__DIR__), "Data", "Atlas_LES_Profiles", "Output_Data") # doesn't seem to work to use @__DIR__ directly as a variable + RF_num = "RF" * string(flight_number, pad = 2) + obs_filename = joinpath(atlas_dir, RF_num * "_Obs_" * "SOCRATES_128x128_100m_10s_rad10_vg_M2005_aj.nc") # e.g. https://atmos.uw.edu/~ratlas/RF12_obs-based_SAM_input.nc + ERA5_filename = joinpath(atlas_dir, RF_num * "_ERA5_" * "SOCRATES_128x128_100m_10s_rad10_vg_M2005_aj.nc") # e.g. https://atmos.uw.edu/~ratlas/RF12_ERA5-based_SAM_input_mar18_2022.nc + + # check if file exists and if not, download it + # The data is quite large so we'll try to load it from Box + if !isfile(obs_filename) + download_atlas_les_outputs(; cases = [flight_number], forcing_type = :obs_data) # Atlas website + end + if !isfile(ERA5_filename) + download_atlas_les_outputs(; cases = [flight_number], forcing_type = :ERA5_data) # Atlas website end - return (; obs_data = obs_data, ERA5_data = ERA5_data, grid_data = grid_data) + obs_data = isfile(obs_filename) ? (open_files ? NC.Dataset(obs_filename, "r") : obs_filename) : nothing + ERA5_data = isfile(ERA5_filename) ? (open_files ? NC.Dataset(ERA5_filename, "r") : ERA5_filename) : nothing + if include_grid + grid_filename = joinpath(atlas_dir, RF_num * "_grd.txt") + grid_data = isfile(grid_filename) ? (open_files ? vec(readdlm(grid_filename, FT)) : grid_filename) : nothing + return (; obs_data, ERA5_data, grid_data) + else + return (; obs_data, ERA5_data) + end end diff --git a/src/process_case.jl b/src/process_case.jl index 98345e7..995f793 100644 --- a/src/process_case.jl +++ b/src/process_case.jl @@ -2,7 +2,7 @@ """ process_case( flight_number::Int; - obs_or_ERA5 = "Obs"::Union{String,Symbol}, + forcing_type::Symbol = :obs_data, new_z::Union{Nothing,AbstractArray}=nothing, initial_condition::Bool=false, thermo_params, @@ -13,26 +13,30 @@ Processes the flight data for that case If new_z is not specified, will use Rachel Atlas default grid If initial_condition is false, returns the data at time 0, if true, returns full spline interpolations over the time dimension -Some things are always forced by ERA5, otherwise we pull from whatever obs_or_ERA5 specifies... (list which is which?) +Some things are always forced by ERA5, otherwise we pull from whatever forcing_type specifies... (list which is which?) """ function process_case( flight_number::Int; - obs_or_ERA5 = "Obs"::Union{String, Symbol}, + forcing_type::Symbol = :obs_data, new_z::Union{Nothing, AbstractArray, NamedTuple} = nothing, initial_condition::Bool = false, - thermo_params, - surface = nothing, - use_LES_output_for_z = false, - return_old_z = false, + thermo_params::TDPS, + surface::Union{String, Nothing} = nothing, + use_LES_output_for_z::Bool = false, + return_old_z::Bool = false, + fail_on_missing_data::Bool = true, ) # initial conditions - data = open_atlas_les_input(flight_number) + (forcing_type ∈ (:obs_data, :ERA5_data)) || error("forcing_type must be :obs_data or :ERA5_data") + + + data = open_atlas_les_input(flight_number, forcing_type) # it's no longer our understanding that's there any need for ERA5 in obs and vice versa so just load the one you need # get the new grid we want from the atlas les grid file return_values = (:dTdt_hadv, :H_nudge, :dqtdt_hadv, :qt_nudge, :subsidence, :u_nudge, :v_nudge, :ug_nudge, :vg_nudge, :dTdt_rad) - if isnothing(new_z) + if new_z isa Nothing # better than isnothing() for JET.jl new_z = data[:grid_data] # named tuple repeated for each in return values new_z = NamedTuple{return_values}((new_z, new_z, new_z, new_z, new_z, new_z, new_z, new_z, new_z, new_z)) @@ -40,71 +44,69 @@ function process_case( new_z = NamedTuple{return_values}((new_z, new_z, new_z, new_z, new_z, new_z, new_z, new_z, new_z, new_z)) end - # resolve forcing keyword - if obs_or_ERA5 ∈ ["Obs", :obs_data] - forcing = :obs_data - # data = data[(:obs_data, :ERA5_data)] - data = data[(:obs_data,)] # drop ERA if we're doing obs cause we don't need it (11 has no obs either i think) - elseif obs_or_ERA5 ∈ ["ERA5", :ERA5_data] - forcing = :ERA5_data - data = data[(:ERA5_data,)] # drop obs if we're doing era5 cause we don't need it (11 has no obs either i think) - else - if obs_or_ERA5 ∉ [:obs_data, :ERA5_data, "Obs", "ERA5"] - error("obs_or_ERA5 must be either \"Obs\"/[:obs_data] or \"ERA5\"/[:ERA5_data]") - else - forcing = obs_or_ERA5 - end - end + # (new_z isa NamedTuple) || error("") # To help union split + + data = data[(forcing_type,)] # drop the other forcing_type type and grid, keeps as a named tuple # specify our action dimensions - z_dim_num = get_dim_num("lev", data[forcing]["T"]) - time_dim_num = get_dim_num("time", data[forcing]["T"]) + z_dim_num = get_dim_num("lev", data[forcing_type]["T"]) + time_dim_num = get_dim_num("time", data[forcing_type]["T"]) - # We use map here a lot to map over all forcings in our data, but that could maybe be deprecated if we stop carrying it around as a named tuple + # We use map here a lot to map over all forcing_types in our data, but that could maybe be deprecated if we stop carrying it around as a named tuple ## For surface values, adjust to the time period of interest and return only the surface values, these are called in TC.jl if ~isnothing(surface) - initial_ind = get_initial_ind(data[forcing], flight_number) # should the reference be the first timestep? or what is the reference meant to be... + initial_ind = get_initial_ind(data[forcing_type], flight_number) # should the reference be the first timestep? or what is the reference meant to be... summary_file = joinpath(dirname(@__DIR__), "Data", "SOCRATES_summary.nc") SOCRATES_summary = NC.Dataset(summary_file, "r") flight_ind = findfirst(SOCRATES_summary["flight_number"][:] .== flight_number) Tg_offset = SOCRATES_summary[:deltaT][flight_ind] # I think this is backwards in table 2 in the paper... is really T_2m - SST as in Section 3 if surface ∈ ["reference_state", "reference", "ref"] # we just want the surface reference state and we'll just return that - Tg = data[forcing]["Tg"][:][initial_ind] + Tg_offset # might have to drop lon,lat dims or sum - pg = data[forcing]["Ps"][:][initial_ind] + Tg = data[forcing_type]["Tg"][:][initial_ind] + Tg_offset # might have to drop lon,lat dims or sum + pg = data[forcing_type]["Ps"][:][initial_ind] if Tg_offset < 0 # SST/T_orig > Tg, assume SST sets qg at ground level and serves as a source qg = calc_qg_from_pgTg(pg, Tg, thermo_params) else # SST/T_orig < Tg, stable boundary layer, assume latent air RH controls things... not SST - p = vec(data[forcing]["lev"])[:] - q = vec(selectdim(data[forcing]["q"], time_dim_num, initial_ind))[:] # select our q value subset along the time dimension + p = vec(data[forcing_type]["lev"])[:] + q = vec(selectdim(data[forcing_type]["q"], time_dim_num, initial_ind))[:] # select our q value subset along the time dimension q = q ./ (1 .+ q) # mixing ratio to specific humidity qg = calc_qg_extrapolate_pq([pg], p, q) qg = collect(qg)[] # Thermodynamics 0.10.2 returns a tuple rather than scalar, so this can collapse to scalar in either 0.10.1<= or 0.10.2>= end return TD.PhaseEquil_pTq(thermo_params, pg, Tg, qg) elseif surface ∈ ["surface_conditions", "conditions", "cond"] - pg = vec(data[forcing]["Ps"])[:][initial_ind:end] - Tg_orig = vec(data[forcing]["Tg"])[:][initial_ind:end] # SST + pg = vec(data[forcing_type]["Ps"])[:][initial_ind:end] + Tg_orig = vec(data[forcing_type]["Tg"])[:][initial_ind:end] # SST Tg = Tg_orig .+ Tg_offset # might have to drop lon,lat dims or sum # before we were extrapolating to surface to get qg which looks ok at first but after ts 1, the LES diverges, maybe it's supposed to be going towards Tg SST if Tg_offset < 0 # SST > Tg, assume SST sets qg at ground level going forward and serves as a source (so use full Tg not Tg_orig) qg = calc_qg_from_pgTg.(pg, Tg, thermo_params) # surface specific humidity over liquid else # SST < Tg, so stable boundary layer, so still set qg to the exigent air RH value not the SST saturation so that it doesnt serve as a source of moisture (even if SST saturation value is greater) (Not sure why boundary layer parameterization doesn't just handle it but we were getting huge moisture spikes at sfc from SST when RH was low, maybe it's a subsidence thing) - p = vec(data[forcing]["lev"])[:] - q = selectdim(data[forcing]["q"], time_dim_num, initial_ind:size(data[forcing]["q"], time_dim_num)) # select our q value subset along the time dimension + p = vec(data[forcing_type]["lev"])[:] + q = selectdim( + data[forcing_type]["q"], + time_dim_num, + initial_ind:size(data[forcing_type]["q"], time_dim_num), + ) # select our q value subset along the time dimension q = vec.(collect(eachslice(q, dims = time_dim_num))) # turn our q from [lon, lat, lev, time] to a list of vectors along [lon,lat,lev] to match p q = map(mr -> mr ./ (1.0 .+ mr), q) # mixing ratio to specific humidity for each vector we created in q qg = map((pg, q) -> calc_qg_extrapolate_pq([pg], p, q)[1], pg, q) # map the function to get out qg for each time step end - tg = data[forcing]["tsec"][initial_ind:end] # get the time array + tg = data[forcing_type]["tsec"][initial_ind:end] # get the time array tg = tg .- tg[1] # i think we need this to get the initial time to be 0, so the interpolation works # in this interpolation, tsec has to be adjusted to our offsets no? or we clip e.g. pg to be pg[initial_ind:end], tsec would also need to be adjusted no?, subtract the value at initial_ind i guess... return (; - pg = t -> pyinterp([t], tg, pg; method = :Spline1D)[1], # in time always use spline1d rn... - Tg = t -> pyinterp([t], tg, Tg; method = :Spline1D)[1], - qg = t -> pyinterp([t], tg, qg; method = :Spline1D)[1], + pg = let tg = tg, pg = pg # let block for performance of captured variables + t -> pyinterp([t], tg, pg; method = :Spline1D)[1] # in time always use spline1d rn... + end, + Tg = let tg = tg, Tg = Tg # let block for performance of capturd variables + t -> pyinterp([t], tg, Tg; method = :Spline1D)[1] + end, + qg = let tg = tg, qg = qg # let block for performance of captured variables + t -> pyinterp([t], tg, qg; method = :Spline1D)[1] + end, ) # would use ref and broadcast but doesnt convert back to array else error( @@ -120,7 +122,7 @@ function process_case( T = map(x -> x["T"], data) Tg = map(x -> x["Tg"], data) q = map(x -> x["q"], data) - q = map(mr -> mr ./ (1 .+ mr), q) # mixing ratio to specific humidity for each forcing + q = map(mr -> mr ./ (1 .+ mr), q) # mixing ratio to specific humidity for each forcing_type #For not surface though, we need to add in the ΔT from the summary table in the Atlas paper (to tsg above?) summary_file = joinpath(dirname(@__DIR__), "Data", "SOCRATES_summary.nc") @@ -142,7 +144,7 @@ function process_case( pg, p, q, - ) # iterate over forcings, the pg value, the p value is a fixed array, for the q value we take our slices in z and align them along the time dimension to match the shape of pg for calc_qg broadcasting, + ) # iterate over forcing_types, the pg value, the p value is a fixed array, for the q value we take our slices in z and align them along the time dimension to match the shape of pg for calc_qg broadcasting, else # Tg > SST/T_orig, assume SST sets moisture below last known point (t > t_orig), t_orig = Tg_q_sfc # Tg_q_sfc = map((x,y) -> min.(x, y), Tg, Tg_orig) # min of Tg and T (Moisture comes from evaporation, if Tg < SST, SST limits moisture, if Tg > SST, Tg limits moisture) This is important bc it's how we extrapolate from the surface... @@ -154,25 +156,30 @@ function process_case( ) # TESTINGGGG (if p_input < pg, there may be a sfc discontinuity, otherwise we should get cleaner extrapolation... end - # Set up thermodynamic states for easier use (for both forcing and ERA -- note ERA subsidence for example depends on density which relies on T,p,q so need both even if forcing is :obs_data) + # Set up thermodynamic states for easier use (for both forcing_type and ERA -- note ERA subsidence for example depends on density which relies on T,p,q so need both even if forcing_type is :obs_data) tsg = map((pg, Tg, qg) -> TD.PhaseEquil_pTq.(thermo_params, pg, Tg, qg), pg, Tg, qg) - # In principle at initiation they assume domination by liquid, so T_l,i ≈ T_l. We are given in the forcing files T_L = T - L q_c/ c_p. Then, θ_L,I ≈ θ_L = θ - θ\T L q_c/ c_p = (θ/T) ( T - L q_c/ c_p) = (θ/T) T_L thus θ_L = T_L (p_0/p)^k, the same as just calculating the dry potential temperature subsitututing T_L + # In principle at initiation they assume domination by liquid, so T_l,i ≈ T_l. We are given in the forcing_type files T_L = T - L q_c/ c_p. Then, θ_L,I ≈ θ_L = θ - θ\T L q_c/ c_p = (θ/T) ( T - L q_c/ c_p) = (θ/T) T_L thus θ_L = T_L (p_0/p)^k, the same as just calculating the dry potential temperature subsitututing T_L θ = map((T, p) -> TD.dry_pottemp_given_pressure.(thermo_params, T, p), T, p) # should be same as # θ = map((T, p, q) -> TD.dry_pottemp_given_pressure.(thermo_params, T, p, TD.PhasePartition.(q)), T, p, q) ts = map((p, θ, q) -> TD.PhaseEquil_pθq.(thermo_params, p, θ, q), p, θ, q) # get indices where the ground would get inserted in... (and convert to same shape/dims.) ground_indices = - map((ts) -> get_ground_insertion_indices(ts, tsg[forcing], z_dim_num; thermo_params, data = data), ts) # - - q_full = combine_air_and_ground_data(q[forcing], qg[forcing], z_dim_num; insert_location = ground_indices[forcing]) # full q_array/qt_nudge -- is used from the chosen forcing dataset + map((ts) -> get_ground_insertion_indices(ts, tsg[forcing_type], z_dim_num; thermo_params, data = data), ts) # + + q_full = combine_air_and_ground_data( + q[forcing_type], + qg[forcing_type], + z_dim_num; + insert_location = ground_indices[forcing_type], + ) # full q_array/qt_nudge -- is used from the chosen forcing_type dataset qt_nudge = q_full ts_full = map( (ts, ground_indices) -> - combine_air_and_ground_data(ts, tsg[forcing], z_dim_num; insert_location = ground_indices), + combine_air_and_ground_data(ts, tsg[forcing_type], z_dim_num; insert_location = ground_indices), ts, ground_indices, ) # is it era5? their output les plots sure don't look it... @@ -181,22 +188,22 @@ function process_case( # old_z => Precompute old z coordinate (precompute to save us some trouble later (get_data_new_z_t func can self-calculate it but it's redundant to keep calculating z) if !use_LES_output_for_z - z_old = map((ts, data) -> lev_to_z(ts, tsg[forcing]; thermo_params, data = data), ts, data) # should this be tsg[:ERA5_data] cause surface is always ERA5 (is it?) + z_old = map((ts, data) -> lev_to_z(ts, tsg[forcing_type]; thermo_params, data = data), ts, data) # should this be tsg[:ERA5_data] cause surface is always ERA5 (is it?) else z_old = map( (ts, data, ground_indices) -> lev_to_z_from_LES_output( ts, - tsg[forcing]; + tsg[forcing_type]; thermo_params, data = data, flight_number = flight_number, - forcing_type = forcing, + forcing_type = forcing_type, ground_indices = ground_indices, ), ts, data, ground_indices, - ) # should this be tsg[:ERA5_data] cause surface is always ERA5 (is it?) [ + Testing getting z from the forcing data ] + ) # should this be tsg[:ERA5_data] cause surface is always ERA5 (is it?) [ + Testing getting z from the forcing_type data ] end if return_old_z @@ -205,13 +212,13 @@ function process_case( # ω (subsidence) # always forced by era5 - ρ = TD.air_density.(thermo_params, ts[forcing]) - ρg = TD.air_density.(thermo_params, tsg[forcing]) - ρ = combine_air_and_ground_data(ρ, ρg, z_dim_num; insert_location = ground_indices[forcing]) - ω = data[forcing]["omega"] - dpdt_g = data[forcing]["Ptend"] + ρ = TD.air_density.(thermo_params, ts[forcing_type]) + ρg = TD.air_density.(thermo_params, tsg[forcing_type]) + ρ = combine_air_and_ground_data(ρ, ρg, z_dim_num; insert_location = ground_indices[forcing_type]) + ω = data[forcing_type]["omega"] + dpdt_g = data[forcing_type]["Ptend"] dpdt_g = add_dim(dpdt_g, z_dim_num) # should be lon lat lev time (hopefully order was already correct) - ω = combine_air_and_ground_data(ω, dpdt_g, z_dim_num; insert_location = ground_indices[forcing]) + ω = combine_air_and_ground_data(ω, dpdt_g, z_dim_num; insert_location = ground_indices[forcing_type]) p_grid = map((p,) -> add_dim(align_along_dimension(p, z_dim_num), time_dim_num), p) # align on dimension 3 lev, add time dimensino 4 p_full = map( @@ -233,12 +240,12 @@ function process_case( L = 2.2 # maximum value (shape parameter) a = -L / 2 p0 = 250.0 * 100 - p1 = add_dim(pg[forcing][:], z_dim_num) + p1 = add_dim(pg[forcing_type][:], z_dim_num) (p1, y1) = (p1, 1) # use our ground pressure (can't use pfull cause would need to pull) (p2, y2) = (p0, 0) k = @. log((L / 2 + 1) / (L / 2 - 1)) / (p1 - p0) # ps is an array so we have an array of ks - f_p = @. cos(π / 2 * (p1 - p_full[forcing]) / (p1 - p0)) * (p_full[forcing] >= p0) # atlas email - f_p_alt = @. (a + L / (1 + exp(-k * (p_full[forcing] - p0)))) * (p_full[forcing] >= p0) # my original + f_p = @. cos(π / 2 * (p1 - p_full[forcing_type]) / (p1 - p0)) * (p_full[forcing_type] >= p0) # atlas email + f_p_alt = @. (a + L / (1 + exp(-k * (p_full[forcing_type] - p0)))) * (p_full[forcing_type] >= p0) # my original @@ -260,10 +267,10 @@ function process_case( # u, v # always forced by ERA5 - u = data[forcing]["u"] - v = data[forcing]["v"] - u = combine_air_and_ground_data(u, FT(0), z_dim_num; insert_location = ground_indices[forcing]) - v = combine_air_and_ground_data(v, FT(0), z_dim_num; insert_location = ground_indices[forcing]) + u = data[forcing_type]["u"] + v = data[forcing_type]["v"] + u = combine_air_and_ground_data(u, FT(0), z_dim_num; insert_location = ground_indices[forcing_type]) + v = combine_air_and_ground_data(v, FT(0), z_dim_num; insert_location = ground_indices[forcing_type]) u_nudge, v_nudge = u, v #= @@ -271,33 +278,34 @@ function process_case( "forced by ERA5-derived geostrophic winds and nudged toward the ERA5 horizontal winds with a nudging timescale of 1 hr for the ERA5-based simulation and 20 min for the Obs-based simulation." means so we're just using u,v not ug,vg for now... - What does it mean to have both the forcing and the nudging? are they not overlapping/competing? + What does it mean to have both the forcing_type and the nudging? are they not overlapping/competing? =# # u_g, v_g # always forced by ERA5 - ug = data[forcing]["ug"] - vg = data[forcing]["vg"] - ug = combine_air_and_ground_data(ug, FT(0), z_dim_num; insert_location = ground_indices[forcing]) - vg = combine_air_and_ground_data(vg, FT(0), z_dim_num; insert_location = ground_indices[forcing]) + ug = data[forcing_type]["ug"] + vg = data[forcing_type]["vg"] + ug = combine_air_and_ground_data(ug, FT(0), z_dim_num; insert_location = ground_indices[forcing_type]) + vg = combine_air_and_ground_data(vg, FT(0), z_dim_num; insert_location = ground_indices[forcing_type]) ug_nudge, vg_nudge = ug, vg # H (nudge) - θ_liq_ice = TD.liquid_ice_pottemp.(thermo_params, ts_full[forcing]) + θ_liq_ice = TD.liquid_ice_pottemp.(thermo_params, ts_full[forcing_type]) H_nudge = θ_liq_ice # dTdt_hadv (i think these are supposed to be always ERA5) - dTdt_hadv = data[forcing]["divT"] - dTdt_hadv = combine_air_and_ground_data(dTdt_hadv, FT(0), z_dim_num; insert_location = ground_indices[forcing]) + dTdt_hadv = data[forcing_type]["divT"] + dTdt_hadv = combine_air_and_ground_data(dTdt_hadv, FT(0), z_dim_num; insert_location = ground_indices[forcing_type]) # dqdt_hadv (i think these are supposed to be always ERA5) - dqtdt_hadv = data[forcing]["divq"] - dqtdt_hadv = combine_air_and_ground_data(dqtdt_hadv, FT(0), z_dim_num; insert_location = ground_indices[forcing]) + dqtdt_hadv = data[forcing_type]["divq"] + dqtdt_hadv = + combine_air_and_ground_data(dqtdt_hadv, FT(0), z_dim_num; insert_location = ground_indices[forcing_type]) # expand everything to new z grid and make t operation (initial condition or time splines) - # dTdt_hadv = get_data_new_z_t(dTdt_hadv , new_z, z_dim_num,time_dim_num, flight_number; z_old = z_old[forcing], data=data[forcing], thermo_params, initial_condition) + # dTdt_hadv = get_data_new_z_t(dTdt_hadv , new_z, z_dim_num,time_dim_num, flight_number; z_old = z_old[forcing_type], data=data[forcing_type], thermo_params, initial_condition) # ======================================================================================================================== # - LES_data = open_atlas_les_output(flight_number)[forcing] + LES_data = open_atlas_les_output(flight_number, forcing_type)[forcing_type] dTdt_rad = LES_data["RADQR"] ./ (24 * 3600) # convert to K/s from K/day (dividing drops nc dim data tho but converts it to array from ncvariable) z_dim_num_LES = get_dim_num("z", LES_data["RADQR"]) # assume it's same for all LES 2D vars? @@ -308,26 +316,27 @@ function process_case( new_z[:dTdt_rad], z_dim_num_LES, time_dim_num_LES, - flight_number; + flight_number, + forcing_type, + ; z_old = nothing, data = LES_data, - thermo_params, initial_condition, )[:] # ======================================================================================================================== # dTdt_hadv = get_data_new_z_t( - dTdt_hadv,#.* (forcing == :ERA5_data), + dTdt_hadv,#.* (forcing_type == :ERA5_data), new_z[:dTdt_hadv], z_dim_num, time_dim_num, flight_number; - z_old = z_old[forcing], - data = data[forcing], + z_old = z_old[forcing_type], + data = data[forcing_type], thermo_params, initial_condition, - )[:] # testing not using forcing for obs to see if fixes anything + )[:] # testing not using forcing_type for obs to see if fixes anything H_nudge = get_data_new_z_t( H_nudge, @@ -335,8 +344,8 @@ function process_case( z_dim_num, time_dim_num, flight_number; - z_old = z_old[forcing], - data = data[forcing], + z_old = z_old[forcing_type], + data = data[forcing_type], thermo_params, initial_condition, # interp_method = :pchip_smooth, # testing if this is the one that breaks things @@ -347,18 +356,18 @@ function process_case( ), # not too high to avoid cusps (changed to high to keep model fidelity) )[:] - # dqtdt_hadv = get_data_new_z_t(dqtdt_hadv, new_z, z_dim_num,time_dim_num, flight_number; z_old = z_old[forcing], data=data[forcing], thermo_params, initial_condition) + # dqtdt_hadv = get_data_new_z_t(dqtdt_hadv, new_z, z_dim_num,time_dim_num, flight_number; z_old = z_old[forcing_type], data=data[forcing_type], thermo_params, initial_condition) dqtdt_hadv = get_data_new_z_t( - dqtdt_hadv,#.* (forcing == :ERA5_data), + dqtdt_hadv,#.* (forcing_type == :ERA5_data), new_z[:dqtdt_hadv], z_dim_num, time_dim_num, flight_number; - z_old = z_old[forcing], - data = data[forcing], + z_old = z_old[forcing_type], + data = data[forcing_type], thermo_params, initial_condition, - )[:] # testing not using forcing for obs to see if fixes anything + )[:] # testing not using forcing_type for obs to see if fixes anything qt_nudge = get_data_new_z_t( qt_nudge, @@ -366,8 +375,8 @@ function process_case( z_dim_num, time_dim_num, flight_number; - z_old = z_old[forcing], - data = data[forcing], + z_old = z_old[forcing_type], + data = data[forcing_type], thermo_params, initial_condition, # interp_method = :pchip_smooth, @@ -384,8 +393,8 @@ function process_case( z_dim_num, time_dim_num, flight_number; - z_old = z_old[forcing], - data = data[forcing], + z_old = z_old[forcing_type], + data = data[forcing_type], thermo_params, initial_condition, interp_method = :Spline1D, # verifying if this is still unstable @@ -402,8 +411,8 @@ function process_case( z_dim_num, time_dim_num, flight_number; - z_old = z_old[forcing], - data = data[forcing], + z_old = z_old[forcing_type], + data = data[forcing_type], thermo_params, initial_condition, )[:] @@ -414,8 +423,8 @@ function process_case( z_dim_num, time_dim_num, flight_number; - z_old = z_old[forcing], - data = data[forcing], + z_old = z_old[forcing_type], + data = data[forcing_type], thermo_params, initial_condition, )[:] @@ -426,8 +435,8 @@ function process_case( z_dim_num, time_dim_num, flight_number; - z_old = z_old[forcing], - data = data[forcing], + z_old = z_old[forcing_type], + data = data[forcing_type], thermo_params, initial_condition, )[:] @@ -437,8 +446,8 @@ function process_case( z_dim_num, time_dim_num, flight_number; - z_old = z_old[forcing], - data = data[forcing], + z_old = z_old[forcing_type], + data = data[forcing_type], thermo_params, initial_condition, )[:] @@ -449,7 +458,7 @@ end function get_default_new_z(flight_number::Int;) - data = open_atlas_les_input(flight_number) + data = open_atlas_les_grid(flight_number) new_z = data[:grid_data] return new_z end @@ -457,12 +466,12 @@ end """ surface_ref_state( flight_number::Int; - obs_or_ERA5 = "Obs"::Union{String,Symbol}, + forcing_type::Symbol = :obs_data, thermo_params ) In Cases.jl from TurbulenceConvection.jl you're asked to provide a surface reference state so I'm gonna provide one based off just whatever our base profile is """ -function surface_ref_state(flight_number::Int; obs_or_ERA5 = "Obs"::Union{String, Symbol}, thermo_params) +function surface_ref_state(flight_number::Int; forcing_type::Symbol = :obs_data, thermo_params::TDPS) return nothing end diff --git a/test/pchip_test.jl b/test/pchip_test.jl deleted file mode 100644 index 0b39c04..0000000 --- a/test/pchip_test.jl +++ /dev/null @@ -1,389 +0,0 @@ - - -using Dierckx -include("../src/interpolating_methods.jl") -using NCDatasets - -# ============================================== # -using Plots -dpi = 600 - -outpath = expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/test/") -if !isdir(joinpath(outpath, "pchip_test")) - mkdir(joinpath(outpath, "pchip_test")) -end - - -# ============================================================================================ # - -FT = Float64 -flight_number = 13 -forcing_str = "Obs" -initial_condition = true - -reload_SSCF = true -if @isdefined(old_flight_number) && flight_number != old_flight_number - reload_SSCF = true # force reload if flight number changes and we forgot to update - old_flight_number = flight_number - @info("flight number changed, forcing reload of SSCF") -end -if reload_SSCF - using Pkg - using Revise - Pkg.activate(expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/test")) - import CLIMAParameters as CP # use CLIMAParameters = "0.7, 0.8, 0.9, 0.10" - # import ClimaParams as CPP # would using this trouble w/ TC.jl? it's a different uuid technically..., use ClimaParams = "0.10" - import Thermodynamics as TD - import Thermodynamics.Parameters as TDP - # FT = Float64 - - toml_dict = CP.create_toml_dict(FT; dict_type = "alias") # CP 0.7 and below, Thermodynamics 0.11 and above - aliases = string.(fieldnames(TDP.ThermodynamicsParameters)) - param_pairs = CP.get_parameter_values!(toml_dict, aliases, "Thermodynamics") - thermo_params = TDP.ThermodynamicsParameters{FT}(; param_pairs...) - Pkg.activate(expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/")) - include( - "/home/jbenjami/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/src/SOCRATESSingleColumnForcings.jl", - ) - - # get sscf output - SSCFout = Main.SOCRATESSingleColumnForcings.process_case( - flight_number; - thermo_params = thermo_params, - initial_condition = initial_condition, - use_LES_output_for_z = false, - ) - SSCFout_lesz = Main.SOCRATESSingleColumnForcings.process_case( - flight_number; - thermo_params = thermo_params, - initial_condition = initial_condition, - use_LES_output_for_z = true, - ) - # get old z - SSCFout_z_old = Main.SOCRATESSingleColumnForcings.process_case( - flight_number; - thermo_params = thermo_params, - initial_condition = initial_condition, - use_LES_output_for_z = false, - return_old_z = true, - ) - SSCFout_z_old_lesz = Main.SOCRATESSingleColumnForcings.process_case( - flight_number; - thermo_params = thermo_params, - initial_condition = initial_condition, - use_LES_output_for_z = true, - return_old_z = true, - ) -end -redo_SSCF_postprocessing = false -if redo_SSCF_postprocessing | reload_SSCF - @info("redoing post processing") - z_SSCF = Main.SOCRATESSingleColumnForcings.open_atlas_les_input(flight_number)[:grid_data] - old_z = SSCFout_z_old[:obs_data][:, :, :, 1][:] - old_z_lesz = SSCFout_z_old_lesz[:obs_data][:, :, :, 1][:] - - old_z = reverse(old_z) # so it can be used for interpolation, it must be increasing - - # read input data - SOCRATES_input_path = "/home/jbenjami/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/Data/Atlas_LES_Profiles/Input_Data/" - LES_forcing_str = forcing_str == "Obs" ? "obs" : "ERA5" - LES_forcing_suffix = forcing_str == "Obs" ? ".nc" : "_mar18_2022.nc" - LES_input_file = - "RF" * string(flight_number, pad = 2) * "_" * LES_forcing_str * "-based_SAM_input" * LES_forcing_suffix - LES_in_data = NCDatasets.Dataset(joinpath(SOCRATES_input_path, LES_input_file), "r") # technically there's some time editing we should do for this but we can put it off for obs - input_lev = LES_in_data["lev"][:] / 100 - input_p_L = LES_in_data["lev"][:] / 100 - - # cutoff top of plot in p - p_cutoff = 550 - valid = input_p_L .> p_cutoff - old_z_L = reverse(old_z[2:end])# take off the surface value (though it may have been inserted somewhere.... so technically this isn't right...) - input_p_L = input_p_L[valid] - -end - -# ============================================================================================ # - - - -# x_0 = FT.(collect(1:100:450)) -x_0 = FT.(collect(100:100:550)) - -x_0 = FT.(collect(1:100:450)) -y_0 = [] - -f(x) = sind(x) * x - log(abs(x)) -y_0 = f.(x_0) -xx = (x_0[1] - 50):1:(x_0[end] + 50) - -spl_extrap = pyinterp(xx, x_0, y_0; method = :pchip, bc = "extrapolate", return_spl = true) -y_spl_extrap = spl_extrap.(xx) - -spl_smooth = pyinterp( - xx, - x_0, - y_0; - method = :pchip_smooth_derivative, - bc = "extrapolate", - return_spl = true, - f_enhancement_factor = 2, - f_p_enhancement_factor = 4, -) - -y_spl_smooth = spl_smooth.(xx) - - - -# plot fcn -plot( - x_0, - y_0, - label = "y(x)", - lw = 2, - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 5.0, - markerstrokewidth = 0.2, - color = :black, -) -plot!(xx, y_spl_extrap, label = "pchip_extrap(x)", lw = 2, linestyle = :dot, color = :red) -plot!(xx, y_spl_smooth, label = "pchip_smooth(x)", lw = 2, linestyle = :dot, color = :blue) - -savefig(joinpath(outpath, "pchip_test", "f(x).png")) - -# plot derivative -dspl_extrap_dx = ForwardDiff.derivative.(Ref(spl_extrap), xx) -dspl_smooth_dx = ForwardDiff.derivative.(Ref(spl_smooth), xx) - - -dfdx = ForwardDiff.derivative.(f, xx) -dfdx_x_0 = ForwardDiff.derivative.(f, x_0) - -plot( - xx, - dfdx, - label = "df/dx", - lw = 2, - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - color = :black, -) - -scatter!(x_0, dfdx_x_0, markersize = 5.0, markerstrokewidth = 0.2, color = :black, label = :none) -plot!( - xx, - dspl_extrap_dx, - lw = 1, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - label = "dspl_extrap_dx", - color = :red, -) -plot!( - xx, - dspl_smooth_dx, - lw = 1, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - label = "dspl_smooth_dx", - color = :blue, -) -savefig(joinpath(outpath, "pchip_test", "dfdx.png")) - - -# ================================================================================================================================================================ # -# new_z = [6.25, 24.48, 47.875, 70.11, 91.135, 110.92500000000001, 129.47, 146.775, 162.875, 177.825, 191.69, 204.565, 216.57, 227.835, 238.51, 248.775, 258.83, 268.83, 278.83, 288.83, 298.83, 308.83, 318.83, 328.83, 338.83, 348.83, 358.83, 368.83, 378.83, 388.83, 398.83, 408.83, 418.83, 428.83, 438.83, 448.83, 458.83, 468.83, 478.83, 488.83, 498.83, 508.83000000000004, 518.83, 528.83, 538.83, 548.83, 558.83, 568.83, 578.83, 588.83, 598.83, 608.83, 618.83, 628.83, 638.83, 648.83, 658.83, 668.83, 678.83, 688.83, 698.83, 708.83, 718.83, 728.83, 738.83, 748.83, 758.83, 768.83, 778.83, 788.83, 798.83, 808.83, 818.83, 828.83, 838.83, 848.83, 858.83, 868.83, 878.83, 888.83, 898.83, 908.83, 918.83, 928.83, 938.83, 948.83, 958.83, 968.83, 978.83, 988.83, 998.83, 1008.83, 1018.83, 1028.83, 1038.83, 1048.83, 1058.83, 1068.83, 1078.83, 1088.83, 1098.83, 1108.83, 1118.83, 1128.83, 1138.83, 1148.83, 1158.83, 1168.83, 1178.83, 1188.83, 1198.83, 1208.83, 1218.83, 1228.83, 1238.83, 1248.83, 1258.83, 1268.83, 1278.83, 1288.83, 1298.83, 1308.83, 1318.83, 1328.83, 1338.83, 1348.83, 1358.83, 1368.83, 1378.83, 1388.83, 1398.83, 1408.83, 1418.83, 1428.83, 1438.83, 1448.83, 1458.83, 1468.83, 1478.83, 1488.83, 1498.83, 1508.83, 1518.83, 1528.83, 1538.83, 1548.83, 1558.83, 1568.83, 1578.83, 1588.83, 1598.83, 1608.83, 1618.83, 1628.83, 1638.83, 1648.83, 1658.83, 1668.83, 1678.83, 1688.83, 1698.83, 1708.83, 1718.83, 1728.83, 1738.83, 1748.83, 1758.83, 1768.83, 1778.83, 1788.83, 1798.83, 1808.83, 1818.83, 1828.83, 1838.83, 1848.83, 1858.83, 1868.83, 1878.83, 1888.83, 1898.83, 1908.83, 1918.83, 1928.83, 1938.83, 1948.83, 1958.83, 1968.83, 1978.83, 1988.83, 1998.83, 2008.83, 2018.83, 2028.83, 2038.83, 2048.83, 2058.83, 2068.83, 2078.83, 2088.83, 2098.83, 2108.83, 2118.83, 2128.83, 2138.83, 2148.83, 2158.83, 2168.83, 2178.83, 2188.83, 2198.83, 2208.83, 2218.83, 2228.83, 2238.83, 2248.83, 2258.83, 2268.83, 2278.83, 2288.83, 2298.83, 2308.83, 2318.83, 2328.83, 2338.83, 2348.83, 2358.83, 2368.83, 2378.83, 2388.83, 2398.83, 2408.83, 2418.83, 2428.83, 2438.83, 2448.83, 2458.83, 2468.83, 2478.83, 2488.83, 2498.83, 2508.83, 2518.83, 2528.83, 2538.83, 2548.83, 2558.83, 2568.83, 2578.83, 2588.83, 2598.83, 2608.83, 2618.83, 2628.83, 2638.83, 2648.83, 2658.83, 2668.8450000000003, 2678.91, 2689.075, 2699.395, 2709.915, 2720.685, 2731.75, 2743.1549999999997, 2754.9449999999997, 2767.16, 2779.8450000000003, 2793.04, 2806.79, 2821.13, 2836.095, 2851.725, 2868.05, 2885.1099999999997, 2902.9449999999997, 2921.58, 2941.04, 2961.365, 2982.58, 3004.71, 3027.79, 3051.8450000000003, 3076.895, 3102.96, 3130.0699999999997, 3158.25, 3187.51, 3217.87, 3249.3599999999997, 3281.99, 3315.77, 3350.72, 3386.8549999999996, 3424.1899999999996, 3462.7349999999997, 3502.5, 3543.495, 3585.7250000000004, 3629.2, 3673.9300000000003, 3719.915, 3767.16, 3815.675, 3865.455, 3916.5, 3968.8100000000004, 4022.385, 4077.225, 4133.33, 4190.6900000000005, 4249.295, 4309.145, 4370.23, 4432.545, 4496.075000000001, 4560.8099999999995, 4626.74, 4693.85, 4762.13] -# old_z = [49016.5793075644, 43524.14361418918, 40344.120985314774, 36465.48750332606, 34004.69901079954, 31469.227732031584, 26681.360259984187, 23948.867484796476, 20546.016457980706, 18314.765750099687, 15947.088241232785, 14462.409337912199, 13247.745148906668, 12218.240268020056, 11321.214934309339, 10526.942113769623, 9815.733965004321, 8586.05974489884, 7549.196022619308, 6646.141731635911, 5835.645597342913, 5097.115540454137, 4418.035274282339, 3789.5593785950255, 3205.2628845210947, 2658.6015095883554, 2274.725705348264, 2254.4560470016236, 2234.2751069551605, 2143.9829150366454, 1897.2927276143064, 1656.4887170530435, 1421.4847412639022, 1191.9652889438523, 967.367547294151, 747.5683513351748, 532.2462079677715, 321.0786444349109, 114.04799823594456, 0.0] - - -# lev = [100.0, 200.0, 300.0, 500.0, 700.0, 1000.0, 2000.0, 3000.0, 5000.0, 7000.0, 10000.0, 12500.0, 15000.0, 17500.0, 20000.0, 22500.0, 25000.0, 30000.0, 35000.0, 40000.0, 45000.0, 50000.0, 55000.0, 60000.0, 65000.0, 70000.0, 73700.0, 73900.0, 74100.0, 75000.0, 77500.0, 80000.0, 82500.0, 85000.0, 87500.0, 90000.0, 92500.0, 95000.0, 97500.0, 98897.29226050233] -# lev = reverse(lev) -# ================================================================================================================================================================ # - - - -# ================================================================================================================================================================ # - - -# --------------------------------------------------------------------------- # -#input -# don't have bc have to convert -# omega = [0.0689441324567163, 0.018601494247351285, 0.021586949767148585, -0.0198081700590118, 0.0008729602420883373, 0.02371155785651021, -0.00855045241800271, -0.005811092472464776, 0.0006139748555038891, 0.0168843919504238, -0.009646556206486205, -0.006270549174022626, 0.006732173115450085, 0.010498548457957849, 0.013839470816738654, 0.009499773542600834, -0.003270777650673191, -0.022438284639654672, -0.018138221828806828, -0.025622008450603178, -0.022464950321425904, -0.008664653834707478, 0.001407488342779453, 0.003940785549045592, 0.00868309884126105, 0.00870066686057692, 0.008735713112905568, 0.00871763285360348, 0.008718068996567185, 0.008731641354188078, 0.007564288199206238, 0.006104646460491195, 0.004425989321448251, 0.0029448475972575702, 0.0017023783729773387, 0.0009601629876168848, 0.0009264094911733292, 0.0006414507277809865, 0.0002316123582038783, -0.0] -# what we got -# omega_nudge = [0.0689441324567163, 0.018601494247351285, 0.021586949767148585, -0.0198081700590118, 0.0008729602420883373, 0.02371155785651021, -0.00855045241800271, -0.005811092472464776, 0.0006139748555038891, 0.0168843919504238, -0.009646556206486205, -0.006270549174022626, 0.006732173115450085, 0.010498548457957849, 0.013839470816738654, 0.009499773542600834, -0.003270777650673191, -0.022438284639654672, -0.018138221828806828, -0.025622008450603178, -0.022464950321425904, -0.008664653834707478, 0.001407488342779453, 0.003940785549045592, 0.00868309884126105, 0.00870066686057692, 0.008735713112905568, 0.00871763285360348, 0.008718068996567185, 0.008731641354188078, 0.007564288199206238, 0.006104646460491195, 0.004425989321448251, 0.0029448475972575702, 0.0017023783729773387, 0.0009601629876168848, 0.0009264094911733292, 0.0006414507277809865, 0.0002316123582038783, -0.0] -# omega_nudge = reverse(omega_nudge) -# w = pyinterp(old_z, old_z, omega; method=:Dierckx, bc="extrapolate", return_spl=true) -# spl_smooth = pyinterp(new_z, old_z, omega_nudge; method=:pchip_smooth_derivative, bc="extrapolate", return_spl=true, f_enhancement_factor=1, f_p_enhancement_factor=1) - - -# plot( -# omega_nudge, -# old_z, -# label="omega(z)", -# lw=2, -# legend = :bottomright, -# dpi = dpi, -# marker = :circle, -# markersize = 5.0, -# markerstrokewidth = 0.2, -# color = :black, -# ylims = (-100, 4900), -# xlim = (-0.0041, .0091), -# minorgrid = true, -# ) -# plot!(spl_smooth.(new_z), new_z, label="omega_smooth(z)", lw=2, linestyle=:dot, color=:red, marker = :circle, markersize = 1.0, markerstrokewidth = 0.2) -# plot!() -# vertical line at 0 -# vline!([0], label="w = 0", color="black", linestyle=:dash) -# savefig(joinpath(outpath, "pchip_test", "omega(z).png")) - -# --------------------------------------------------------------------------- # - -# q_in_real = reverse(LES_in_data["q"][:][1,1,:,1][:]) - -input_q_L = LES_in_data["q"][1, 1, :, 1][:] - -input_q_L = input_q_L ./ (1 .+ input_q_L) # input to mixing ratio -# SSCFout.qt_nudge[:] .= SSCFout.qt_nudge ./(1 .- SSCFout.qt_nudge) - -#input -# q_in = [4.0570837325538955e-6, 3.878708196813387e-6, 3.7003326610728776e-6, 3.521957125333236e-6, 3.343581589592727e-6, 3.165206053852218e-6, 3.022505625259811e-6, 2.986830518111709e-6, 2.8084549823712e-6, 2.8084549823712e-6, 2.630079446630691e-6, 2.630079446630691e-6, 2.630079446630691e-6, 2.8084549823712e-6, 3.3328790574482965e-6, 4.14270398970934e-6, 5.894351750679611e-6, 1.6175917630754325e-5, 3.2158365633090786e-5, 4.273603490249429e-5, 5.2553824389643806e-5, 7.573550901446149e-5, 9.979123376440675e-5, 0.00013670069961980265, 0.00023155472919533413, 0.0003542429059743881, 0.0007306963205337525, 0.0010847300291061401, 0.0015356799733095786, 0.0015924761862504625, 0.0017141961145682625, 0.0018768185277631942, 0.002072617620229721, 0.0019257424473762513, 0.0021404151916503905, 0.00241292142868042, 0.0023815269470214844, 0.0021495237350463866, 0.0026412579650232334] -# # qg_in = does not exist -# qg = 0.0029078267131820972 -# q_in = [q_in; qg] -# # what we got -# qt_nudge = [4.057067272692262e-6, 3.878693152494463e-6, 3.7003189686617413e-6, 3.5219447211949303e-6, 3.34357041009226e-6, 3.165196035354565e-6, 3.0224964897471683e-6, 2.9868215969818115e-6, 2.808447094973964e-6, 2.808447094973964e-6, 2.6300725293309885e-6, 2.6300725293309885e-6, 2.6300725293309885e-6, 2.808447094973964e-6, 3.3328679494025067e-6, 4.142686827784091e-6, 5.894317007501839e-6, 1.6175655974675654e-5, 3.2157331505866436e-5, 4.273420861186352e-5, 5.255106263032685e-5, 7.572977358151175e-5, 9.978127646772145e-5, 0.00013668201509271403, 0.00023150112401525437, 0.00035411746237545995, 0.0007301627932673214, 0.0010835546648230285, 0.0015333252763900572, 0.0015899442379141181, 0.001711262674740217, 0.001873302678587912, 0.0020683307614490784, 0.0019220410912612084, 0.002135843599562897, 0.0024071132535297174, 0.002375868751567041, 0.002144913193227929, 0.00263430009890474, 0.0029078267131820972] - -# q_in = reverse(q_in) -# qt_nudge = reverse(qt_nudge) -# q_in = pyinterp(old_z, old_z, q_in; method=:Dierckx, bc="extrapolate", return_spl=true) -# spl_smooth = pyinterp(new_z, old_z, q_in; method=:pchip_smooth_derivative, bc="extrapolate", return_spl=true, f_enhancement_factor=5, f_p_enhancement_factor=8) -plot( - # q_in, - # old_z, - input_q_L, - old_z_L, - label = "q_in(z)", - lw = 0.25, - legend = :topright, - dpi = dpi * 4, - marker = :circle, - markersize = 0.25, - markerstrokewidth = 0.025, - color = :black, - ylims = (-100, 4900), - # xlim = (0, 0.0028), # 9 - xlim = (0, 0.005), # 13 - minorgrid = true, -) -# plot!(spl_smooth.(new_z), new_z, label="q_smooth(z)", lw=.5, linestyle=:dot, color=:red, marker = :circle, markersize = 0.25, markerstrokewidth = 0.025) -# plot!(qt_nudge, old_z, label="q_nudge(z)", lw=.5, linestyle=:dot, color=:blue, marker = :circle, markersize = 0.25, markerstrokewidth = 0.025) - -# plot!( q_in_real, old_z[2:end], label="q_in_real(z)", lw=.25, linestyle=:dot, color=:purple, marker = :circle, markersize = 0.25, markerstrokewidth = 0.025) - -plot!( - SSCFout.qt_nudge, - z_SSCF, - label = "q_sscf(z)", - lw = 0.03, - color = :cyan, - marker = :circle, - markersize = 0.1, - markerstrokewidth = 0.005, -) -plot!( - SSCFout_lesz.qt_nudge, - z_SSCF, - label = "q_sscf_lesz(z)", - lw = 0.03, - color = :magenta, - marker = :circle, - markersize = 0.1, - markerstrokewidth = 0.005, -) -savefig(joinpath(outpath, "pchip_test", "q(z).png")) - -# --------------------------------------------------------------------------- # -# input -# T_in = [270.1995358747312, 271.491853711981, 264.66169192367835, 254.39951764043985, 245.56318333855592, 240.3947700616327, 231.80883957877097, 228.891149357076, 226.4982927915522, 226.82898764053874, 226.96912919780084, 227.87329200240646, 227.56650058982146, 228.99123733564977, 230.2427048129979, 230.75570933269347, 230.7010072378514, 230.36445911148962, 229.45073493232331, 232.86006980810896, 237.54183363624094, 241.56144163061776, 245.3625783453703, 248.3100559262735, 250.56016043185605, 253.59022494950955, 255.7461354302619, 255.22323726581826, 254.41980685337265, 255.08936691847282, 257.4900041725251, 259.58967728526727, 261.06013908864617, 263.6792255439185, 265.3640244587275, 267.3134081104423, 269.18683252198093, 271.42147063283096, 272.67124007894427] -# Tg_in = 278.3704840626871 -# Tg = 274.3204840626871 -# T_in = [T_in; Tg_in] - -# T_in_real = reverse(LES_in_data["T"][:][1,1,:,1][:]) - -input_q_T = LES_in_data["T"][1, 1, :, 1][:] .* (1000 ./ input_lev) .^ 0.286 - -# what we got -# θ_nudge = [1944.5835710665965, 1602.8407093918106, 1391.595245076395, 1155.9867693177894, 1013.5589888761049, 896.093129986276, 708.8423198654262, 623.3570815972575, 533.0740425693108, 484.9202476135982, 438.2085983376255, 412.7803095729882, 391.3007482909537, 376.7849606884522, 364.66277508553725, 353.3808232892484, 342.8201851026278, 324.9442209141309, 309.70963044731946, 302.54570367068675, 298.41522748036755, 294.465624449812, 291.0640848421155, 287.3277443129354, 283.3755290509006, 280.7930868142308, 279.0415072417078, 278.25342445813305, 277.16070341286894, 276.93217585959337, 276.9333890511754, 276.67086727628293, 275.8029519235561, 276.2056440134155, 275.6783137734898, 275.47785551306595, 275.2466480289731, 275.4264077960204, 274.64953535062017, 275.1903215901881] -# T_in = reverse(T_in) -# θ_nudge = reverse(θ_nudge) - -# θ_in = pyinterp(old_z, old_z, θ; method=:Dierckx, bc="extrapolate", return_spl=true) -f_enhancement_factor = 5 -f_p_enhancement_factor = 6 -# spl_smooth_T = pyinterp(new_z, old_z, T_in; method=:pchip_smooth_derivative, bc="extrapolate", return_spl=true, f_enhancement_factor=f_enhancement_factor, f_p_enhancement_factor=f_p_enhancement_factor) -# spl_smooth_θ = pyinterp(new_z, old_z, θ_nudge; method=:pchip_smooth_derivative, bc="extrapolate", return_spl=true, f_enhancement_factor=f_enhancement_factor, f_p_enhancement_factor=f_p_enhancement_factor) -# spl_smooth_θ = pyinterp(new_z, old_z, θ_nudge; method=:Spline1D, bc="extrapolate", return_spl=true, f_enhancement_factor=f_enhancement_factor, f_p_enhancement_factor=f_p_enhancement_factor) - -plot( - # T_in, - # old_z, - input_q_T, - old_z_L, - label = "θ(z)", - lw = 0.5, - legend = :right, - dpi = dpi * 4, - marker = :circle, - markersize = 0.25, - markerstrokewidth = 0.025, - color = :black, - ylims = (-100, 4900), - # xlim = (270, 295), # 9 - xlim = (275, 300), # 13 - minorgrid = true, -) -# plot!(spl_smooth_T.(new_z), new_z, label="θ_smooth(z)", lw=.5, linestyle=:dot, color=:red, marker = :circle, markersize = .25, markerstrokewidth = 0.05) -# twin axis -ax2 = twiny() -# plot!( ax2, θ_nudge, old_z, label="θ_nudge(z)", lw=.5, linestyle=:dot, color=:blue, marker = :circle, markersize = .25, markerstrokewidth = 0.025, ylims = (-100, 4900),xlim = (270, 300)) -# plot!( ax2, spl_smooth_θ.(new_z), new_z, label="θ_nudge_smooth(z)", lw=.5, linestyle=:dot, color=:green, marker = :circle, markersize = 0.25, markerstrokewidth = 0.025, ylims = (-100, 4900),xlim = (270, 300)) -# plot!( T_in_real, old_z[2:end], label="q_in_real(z)", lw=.5, linestyle=:dot, color=:purple, marker = :circle, markersize = .25, markerstrokewidth = 0.025) - -# H_nudge_320 = [275.13104980901556, 275.0174376588642, 274.9091836777308, 274.80657237016504, 274.70979340586666, 274.67378262369425, 274.7410235730707, 274.80364921174777, 274.8618471539815, 274.9158425368792, 274.9658980203994, 275.01246387875665, 275.0559903861655, 275.097002862543, 275.1361016735085, 275.17403727608644, 275.2115601273009, 275.2490829785155, 275.28660582973004, 275.32412868094457, 275.3616515321591, 275.3991743833736, 275.4240736489235, 275.41556163404044, 275.40704961915736, 275.3985376042742, 275.39002558939114, 275.38151357450806, 275.373001559625, 275.3644895447419, 275.3559775298588, 275.34746551497574, 275.33895350009266, 275.3304414852096, 275.32192947032644, 275.3134174554434, 275.3049054405603, 275.29639342567714, 275.28788141079406, 275.27936939591103, 275.2708573810279, 275.2623453661448, 275.25383335126173, 275.24832149912095, 275.2590584270762, 275.26979535503136, 275.28053228298654, 275.2912692109417, 275.3020061388969, 275.3127430668521, 275.32347999480726, 275.3342169227625, 275.3449538507177, 275.35569077867285, 275.3664277066281, 275.3771646345832, 275.38790156253845, 275.3986384904936, 275.4093754184488, 275.420112346404, 275.43084927435916, 275.4415862023144, 275.4523231302696, 275.4630600582248, 275.47379698617993, 275.483527897143, 275.4926474421566, 275.5017669871703, 275.5108865321839, 275.5200060771976, 275.52912562221127, 275.5382451672249, 275.5473647122385, 275.5564842572522, 275.5656038022658, 275.5747233472795, 275.5838428922931, 275.5929624373067, 275.60208198232044, 275.61120152733406, 275.6203210723477, 275.62944061736135, 275.63856016237503, 275.64767970738865, 275.6567992524023, 275.66591879741594, 275.6750383424296, 275.6933591678578, 275.71683700423796, 275.7403148406182, 275.7637926769984, 275.7872705133786, 275.8107483497588, 275.834226186139, 275.8577040225192, 275.88118185889937, 275.9046596952796, 275.9281375316598, 275.95161536804, 275.9750932044202, 275.99857104080036, 276.02204887718057, 276.0455267135608, 276.0690045499409, 276.0924823863212, 276.11596022270135, 276.13943805908156, 276.16291589546177, 276.1863937318419, 276.20248632579853, 276.18495002488606, 276.16741372397365, 276.1498774230612, 276.13234112214866, 276.1148048212362, 276.0972685203238, 276.0797322194113, 276.06219591849884, 276.0446596175863, 276.02712331667385, 276.00958701576144, 275.992050714849, 275.9745144139365, 275.956978113024, 275.93944181211157, 275.92190551119904, 275.90436921028663, 275.88683290937416, 275.8692966084617, 275.85176030754917, 275.83422400663676, 275.81668770572423, 275.8109543331821, 275.84787894076004, 275.8848035483379, 275.9217281559159, 275.9586527634938, 275.9955773710717, 276.0325019786496, 276.0694265862275, 276.10635119380544, 276.14327580138337, 276.18020040896124, 276.21712501653917, 276.2540496241171, 276.290974231695, 276.32789883927296, 276.36482344685083, 276.40174805442877, 276.43867266200664, 276.47559726958457, 276.5125218771625, 276.54944648474043, 276.5863710923183, 276.62329569989623, 276.66022030747416, 276.6786234273401, 276.6895221552136, 276.700420883087, 276.7113196109605, 276.72221833883395, 276.7331170667074, 276.74401579458083, 276.7549145224543, 276.76581325032777, 276.77671197820126, 276.7876107060747, 276.7985094339482, 276.8094081618216, 276.8203068896951, 276.8312056175685, 276.842104345442, 276.85300307331545, 276.86390180118894, 276.8748005290623, 276.8856992569358, 276.89659798480926, 276.9074967126827, 276.9183954405562, 276.9292941684297, 276.9333583590354, 276.93330919488255, 276.9332600307296, 276.93321086657676, 276.9331617024239, 276.93311253827096, 276.9330633741181, 276.9330142099652, 276.9329650458123, 276.9329158816594, 276.9328667175065, 276.93281755335363, 276.93276838920076, 276.9327192250479, 276.932670060895, 276.9326208967421, 276.9325717325892, 276.9325225684363, 276.9324734042834, 276.93242424013056, 276.9323750759777, 276.93232591182476, 276.9322767476719, 276.932227583519, 276.9321784193661, 276.9561531605606, 276.9814474287444, 277.0067416969282, 277.03203596511196, 277.0573302332958, 277.0826245014796, 277.10791876966334, 277.13321303784716, 277.15850730603097, 277.65476439413584, 278.19579927445426, 278.6008544047283, 278.9896999758492, 279.0810554166068, 279.1266826714774, 279.172309926348, 279.2179371812187, 279.2635644360894, 279.30919169095995, 279.35481894583063, 279.40044620070125, 279.4460734555719, 279.49170071044256, 279.5373279653132, 279.58295522018386, 279.6285824750545, 279.6742097299251, 279.71983698479573, 279.7654642396664, 279.81109149453704, 279.8567187494077, 279.90234600427834, 279.94797325914897, 279.9936005140196, 280.03922776889027, 280.0848550237609, 280.1304822786316, 280.1761095335022, 280.2217367883728, 280.26736404324345, 280.3129912981141, 280.35861855298475, 280.40424580785543, 280.44987306272606, 280.4955003175967, 280.5411275724673, 280.586754827338, 280.6323820822086, 280.67800933707923, 280.7236365919499, 280.76926384682054, 280.8156634478242, 280.86304863050503, 280.9107645173521, 280.9590945690794, 281.0082750029485, 281.05849479276867, 281.110037399254, 281.16304455276133, 281.2177997140046, 281.27444461334096, 281.33321546803177, 281.3943012518865, 281.45789093871434, 281.524220745777, 281.5933851599791, 281.66562039858223, 281.7410681919434, 281.81987027041953, 281.90226285127227, 281.9883876648586, 282.0783391980832, 282.17225918130293, 282.27038383177955, 282.37271314951295, 282.47948335176477, 282.59078892543977, 282.70677160089474, 282.82747862158215, 282.95305171785884, 283.0836326200819, 283.219315815156, 283.36010130308097, 283.5626233351589, 283.77952333505823, 284.00413593632646, 284.23659644775955, 284.4770401781533, 284.72553478190576, 284.9822155678129, 285.24708253587465, 285.520270994887, 285.80178094485007, 286.09168004016163, 286.39003593521977, 286.69691628442234, 287.0122534333715, 287.33516042874476, 287.62739869784286, 287.92712873131654, 288.2344099876133, 288.5491830082857, 288.87150725178117, 289.2013232596523, 289.53869049034654, 289.8834305685216, 290.23560295262484, 290.59514818420894, 290.9620068048264, 291.29336721208136, 291.6146789164077, 291.94205310572124, 292.275339470477, 292.6145380106749, 292.95954851995145] -# plot!(ax2, H_nudge_320, new_z, label="H_nudge_320(z)", lw=.5, linestyle=:dot, color=:cyan, marker = :circle, markersize = 0.25, markerstrokewidth = 0.025) - -plot!( - SSCFout.H_nudge, - z_SSCF, - label = "q_sscf(z)", - lw = 0.03, - color = :cyan, - marker = :circle, - markersize = 0.1, - markerstrokewidth = 0.005, -) -plot!( - SSCFout_lesz.H_nudge, - z_SSCF, - label = "q_sscf_lesz(z)", - lw = 0.03, - color = :magenta, - marker = :circle, - markersize = 0.1, - markerstrokewidth = 0.005, -) -savefig(joinpath(outpath, "pchip_test", "θ(z).png")) - -# --------------------------------------------------------------------------- # - - - -# construct thermodynamic states, then calcualte T from them... diff --git a/test/random_test.jl b/test/random_test.jl deleted file mode 100644 index 4af2a3b..0000000 --- a/test/random_test.jl +++ /dev/null @@ -1,3176 +0,0 @@ -a = [ - 6.25 1.2692701855051111e-5 344.5726759079331 0.003622583654954105 - 24.48 4.97147746258642e-5 343.83788070682715 0.003561342988890416 - 47.875 9.72260962096915e-5 342.90329351546205 0.003483122571131849 - 70.11 0.00014238165232922134 342.01715233411124 0.003409096709105384 - 91.135 0.0001850799013696133 341.18111837181493 0.00333938183561283 - 110.92500000000001 0.00022527007252344714 340.3958633655331 0.003274012272282246 - 129.47 0.00026214179031762165 339.8235231019965 0.0032136331863819945 - 146.775 0.0002963988103083523 339.31445799184155 0.0031575459404652837 - 162.875 0.00032827040937514 338.85356560863056 0.003105640724996747 - 177.825 0.00035786546565144293 338.42020741248996 0.0030575290578638606 - 191.69 0.00038531265329498404 337.9521504842157 0.0030124365776040218 - 204.565 0.0004108000345362817 337.57074450542115 0.002971147521730923 - 216.57 0.0004345651616665169 337.2154573578035 0.0029327406099777997 - 227.835 0.00045686538300113584 336.88237449203496 0.0028967818593268442 - 238.51 0.0004779976389041146 336.5670084261369 0.002862778443831147 - 248.775 0.000498318257812225 336.2640042125891 0.0028301470046177583 - 258.83 0.0005182231602107685 335.9674359734023 0.0027982457722790584 - 268.83 0.000538019184475854 335.6727227931577 0.0027665804337840207 - 278.83 0.0005578152087409396 335.37824173866716 0.002734976237945195 - 288.83 0.0005776112330060252 335.0842104297892 0.0027034348557095425 - 298.83 0.0005974072572711107 334.79022740408277 0.0026719529415005884 - 308.83 0.0006172032815361964 334.49647765888784 0.0026405319189527487 - 318.83 0.0006369993058012818 334.2029610842402 0.0026091717022533266 - 328.83 0.0006519107466375208 333.86641982533143 0.0026103602174730807 - 338.83 0.000665405184827977 333.5176630016966 0.002620958617858943 - 348.83 0.0006788996230184332 333.1692520099049 0.002631532704611388 - 358.83 0.0006923940612088896 332.82118657249447 0.002642082514476489 - 368.83 0.0007058884993993457 332.4734664108339 0.0026526080841514556 - 378.83 0.000719382937589802 332.1260912453956 0.00266310945028658 - 388.83 0.0007328773757802583 331.77906079600916 0.0026735866494871003 - 398.83 0.0007463718139707144 331.4323747821006 0.0026840397183149995 - 408.83 0.0007598662521611707 331.086032922903 0.002694468693290634 - 418.83 0.0007733606903516268 330.74003493765525 0.002704873610894312 - 428.83 0.0007868551285420832 330.3943805457698 0.002715254507567672 - 438.83 0.0008003495667325395 330.0490694669768 0.0027256114197148967 - 448.83 0.0008138440049229956 329.7041014214407 0.0027359443837037412 - 458.83 0.0008273384431134519 329.3594761299436 0.0027462534358671407 - 468.83 0.0008408328813039081 329.0151933139151 0.002756538612503577 - 478.83 0.0008543273194943643 328.67125269550223 0.002766799949877794 - 488.83 0.0008678217576848205 328.32765399762275 0.002777037484221381 - 498.83 0.0008813161958752768 327.98439694400844 0.0027872512517332945 - 508.83000000000004 0.0008948106340657331 327.6414812592272 0.0027974412885801957 - 518.83 0.0009083050722561893 327.29890666869966 0.0028076076308967634 - 528.83 0.0009217995104466455 326.9566728986944 0.00281775031478581 - 538.83 0.0009274415540976042 326.62981935896914 0.0028204582768689337 - 548.83 0.0009290091353930385 326.31107146273257 0.002819316114847624 - 558.83 0.0009305767166884729 325.99261726521803 0.0028181732204950686 - 568.83 0.0009321442979839071 325.67445656288703 0.0028170295967807307 - 578.83 0.0009337118792793412 325.35658915285035 0.0028158852466749398 - 588.83 0.0009352794605747756 325.0390148328214 0.0028147401731485003 - 598.83 0.00093684704187021 324.7217334010665 0.0028135943791722834 - 608.83 0.0009384146231656441 324.40474465629666 0.0028124478677162947 - 618.83 0.0009399822044610783 324.0880483976675 0.002811300641749694 - 628.83 0.0009415497857565127 323.77164442472997 0.0028101527042403724 - 638.83 0.0009431173670519469 323.455532537348 0.0028090040581542535 - 648.83 0.0009446849483473812 323.1397125356406 0.0028078547064547955 - 658.83 0.0009462525296428156 322.8241842199248 0.0028067046521025015 - 668.83 0.0009478201109382497 322.5089473906601 0.0028055538980544465 - 678.83 0.0009493876922336839 322.194001848395 0.00280440244726381 - 688.83 0.0009509552735291183 321.87934739371116 0.0028032503026794004 - 698.83 0.0009525228548245525 321.5649838271754 0.002802097467245233 - 708.83 0.0009540904361199868 321.2509109492897 0.0028009439439000933 - 718.83 0.0009556580174154211 320.93712856044596 0.0027997897355771487 - 728.83 0.0009572255987108552 320.62363646088073 0.0027986348452035442 - 738.83 0.0009587931800062896 320.3104344506362 0.0027974792757000646 - 748.83 0.0009644233082512129 319.9972852522195 0.002794301652304971 - 758.83 0.0009981911927114903 319.682785862424 0.0027771413469767354 - 768.83 0.0010319590771717675 319.36857977450995 0.002760012890377515 - 778.83 0.0010657269616320445 319.0546667818306 0.0027429162381512654 - 788.83 0.0010994948460923218 318.7410466773804 0.002725851345981782 - 798.83 0.001133262730552599 318.42771925377656 0.0027088181695926047 - 808.83 0.0011670306150128765 318.11468430323464 0.002691816664746894 - 818.83 0.0012007984994731537 317.8019416175547 0.0026748467872473956 - 828.83 0.001234566383933431 317.48949098810044 0.0026579084929363576 - 838.83 0.001268334268393708 317.1773322057902 0.002641001737695539 - 848.83 0.0013021021528539854 316.8654650610844 0.0026241264774462037 - 858.83 0.0013358700373142624 316.55388934397564 0.0026072826681491344 - 868.83 0.0013696379217745397 316.24260484398417 0.002590470265804695 - 878.83 0.001403405806234817 315.93161135015214 0.002573689226452876 - 888.83 0.0014371736906950944 315.62090865103795 0.0025569395061733617 - 898.83 0.0014709415751553714 315.3104965347141 0.0025402210610856 - 908.83 0.0015047094596156484 315.00037477506004 0.0025235338472391097 - 918.83 0.001538477344075926 314.69064204275395 0.002506878608558256 - 928.83 0.001572245228536203 314.3810789462991 0.0024902535517853574 - 938.83 0.0016060131129964801 314.07180879834505 0.0024736596223617247 - 948.83 0.0016397809974567574 313.7628311648407 0.002457096774451791 - 958.83 0.0016735488819170348 313.4541455841644 0.0024405649620891233 - 968.83 0.0017104686256470064 313.1481368744625 0.0024245329901064782 - 978.83 0.0017657883815427745 312.8563252061238 0.0024112652953038813 - 988.83 0.0018211081374385429 312.56477103731913 0.002398021984814805 - 998.83 0.0018764278933343112 312.2734739420615 0.002384803022489697 - 1008.83 0.0019317476492300796 311.982433492304 0.0023716083722344697 - 1018.83 0.0019870674051258477 311.69315774968766 0.0023584494121256143 - 1028.83 0.0020423871610216154 311.40119742418494 0.002345292440874166 - 1038.83 0.002097706916917384 311.1098214735451 0.0023321622408839318 - 1048.83 0.002153026672813152 310.8208290869466 0.0023190721687951603 - 1058.83 0.0022083464287089207 310.53106537199494 0.0023059985394585673 - 1068.83 0.002263666184604689 310.24155575709995 0.0022929490072992787 - 1078.83 0.002318985940500457 309.95229977649717 0.002279923536442439 - 1088.83 0.0023743056963962256 309.66329700326486 0.0022669220913740227 - 1098.83 0.002429625452291994 309.37454701246594 0.002253944636665445 - 1108.83 0.0024849452081877627 309.0860493814815 0.0022409911369756113 - 1118.83 0.0025402649640835304 308.79780369032073 0.0022280615570527094 - 1128.83 0.002595584719979299 308.50980952192504 0.0022151558617359035 - 1138.83 0.002650904475875067 308.2220664624515 0.0022022740159568168 - 1148.83 0.0027062242317708357 307.93457410150575 0.002189415984740596 - 1158.83 0.002761543987666604 307.6473320323855 0.002176581733206992 - 1168.83 0.0028168637435623724 307.3603398523032 0.0021637712265712566 - 1178.83 0.0028721834994581406 307.07359716259504 0.002150984430144895 - 1188.83 0.0029275032553539087 306.78710356891344 0.0021382213093362463 - 1198.83 0.0029892859906046907 306.46960991796146 0.0021375879338118085 - 1208.83 0.0030540205336665204 306.13817059789227 0.0021424770546932463 - 1218.83 0.00311875507672835 305.8070716814573 0.0021473538878615476 - 1228.83 0.003183489619790179 305.476512302684 0.0021522198575346743 - 1238.83 0.003248224162852009 305.14613046794346 0.002157072440077767 - 1248.83 0.003312958705913838 304.8160917380353 0.002161912819476801 - 1258.83 0.0033776932489756684 304.4863958281436 0.0021667410151411477 - 1268.83 0.0034424277920374977 304.1570424325075 0.0021715570463092743 - 1278.83 0.003507162335099327 303.82803123370786 0.0021763609321127884 - 1288.83 0.003571896878161157 303.4993619091982 0.0021811526916219975 - 1298.83 0.0036366314212229866 303.1710341416253 0.0021859323439197085 - 1308.83 0.0037013659642848155 302.8430476151386 0.002190699908075137 - 1318.83 0.0037661005073466453 302.5154020121663 0.0021954554031206777 - 1328.83 0.003830835050408475 302.18809701476954 0.002200198848061553 - 1338.83 0.003895569593470305 301.86113230463747 0.0022049302618757298 - 1348.83 0.003960304136532134 301.53450756308536 0.0022096496635138486 - 1358.83 0.0040250386795939634 301.2082224710498 0.002214357071899139 - 1368.83 0.004089773222655793 300.88227670908583 0.002219052505927351 - 1378.83 0.004154507765717623 300.5566699573657 0.0022237359844666815 - 1388.83 0.004219242308779452 300.2314018956744 0.002228407526357698 - 1398.83 0.004283976851841282 299.90647220340617 0.0022330671504132544 - 1408.83 0.004348711394903112 299.58188055956066 0.002237714875418413 - 1418.83 0.004413445937964941 299.2576266427433 0.0022423507201303873 - 1428.83 0.00448315163437661 298.9770809772997 0.0022352928336579537 - 1438.83 0.004554654017113588 298.7124432396562 0.0022240291216213876 - 1448.83 0.004626156399850566 298.44802210022397 0.0022127859509001187 - 1458.83 0.004697658782587545 298.18381741240364 0.0022015632926219372 - 1468.83 0.004769161165324523 297.9198290146524 0.00219036111783786 - 1478.83 0.004840663548061501 297.6560567943727 0.002179179397992159 - 1488.83 0.004912165930798479 297.39233267375965 0.002168016880076439 - 1498.83 0.004983668313535456 297.12899547311986 0.002156876011563444 - 1508.83 0.005055170696272435 296.8658739549265 0.002145755511170298 - 1518.83 0.005126673079009414 296.60296797345995 0.002134655350232767 - 1528.83 0.005198175461746391 296.3402773767356 0.0021235755000745624 - 1538.83 0.005269677844483369 296.0778020121606 0.0021125159320486563 - 1548.83 0.005341180227220348 295.8155417265301 0.002101476617537326 - 1558.83 0.005412682609957325 295.55349636602494 0.002090457527952207 - 1568.83 0.005484184992694304 295.2916657762081 0.0020794586347343443 - 1578.83 0.005555687375431282 295.03004980201695 0.0020684799093542107 - 1588.83 0.005627189758168259 294.7686482877643 0.0020575213233117824 - 1598.83 0.005698692140905239 294.50746107712956 0.002046582848136563 - 1608.83 0.005770194523642216 294.2464880131572 0.002035664455387637 - 1618.83 0.005841696906379194 293.98572893825303 0.0020247661166537248 - 1628.83 0.005913199289116172 293.72518369417685 0.0020138878035532094 - 1638.83 0.005984701671853151 293.4648521220433 0.002003029487734218 - 1648.83 0.006056204054590129 293.2047340623116 0.0019921911408746266 - 1658.83 0.006125171960298014 292.9383779679217 0.0019817618765605787 - 1668.83 0.0061858491797099615 292.65116621035077 0.0019726233790889423 - 1678.83 0.006246526399121908 292.36422362348117 0.0019635013794234374 - 1688.83 0.006307203618533854 292.07754996261565 0.0019543958543386053 - 1698.83 0.006367880837945801 291.7911449824936 0.001945306780632695 - 1708.83 0.006428558057357748 291.50500843728616 0.001936234135127693 - 1718.83 0.006489235276769693 291.2191400805921 0.0019271778946693624 - 1728.83 0.006549912496181641 290.9335396654361 0.0019181380361272952 - 1738.83 0.006610589715593587 290.6482069442613 0.0019091145363949273 - 1748.83 0.006671266935005533 290.3631416689284 0.001900107372389602 - 1758.83 0.006731944154417481 290.0783435907103 0.001891116521052599 - 1768.83 0.006792621373829426 289.7938124602886 0.0018821419593491782 - 1778.83 0.006853298593241373 289.5095480277507 0.0018731836642686274 - 1788.83 0.00691397581265332 289.2255500425848 0.0018642416128242995 - 1798.83 0.006974653032065266 288.9418182536758 0.0018553157820536553 - 1808.83 0.0070353302514772125 288.65835240930403 0.0018464061490183182 - 1818.83 0.007096007470889159 288.37515225714696 0.001837512690804161 - 1828.83 0.007156684690301105 288.0922175442846 0.0018286353845214035 - 1838.83 0.0072173619097130525 287.80954801715666 0.0018197742073044123 - 1848.83 0.007278039129124999 287.52714342158646 0.0018109291363119224 - 1858.83 0.007338716348536945 287.2450035027805 0.0018021001487271073 - 1868.83 0.007399393567948892 286.96312800532456 0.0017932872217576207 - 1878.83 0.007460070787360838 286.681516673177 0.0017844903326356294 - 1888.83 0.007520748006772785 286.40016924967085 0.0017757094586178968 - 1898.83 0.007579378602336287 286.1173537383611 0.001767232253740821 - 1908.83 0.007626742476192219 285.82528161518724 0.001760352483196975 - 1918.83 0.007674106350048151 285.5334956016088 0.0017534848431040562 - 1928.83 0.007721470223904082 285.24199540464963 0.001746629316425514 - 1938.83 0.007768834097760015 284.95078073073415 0.0017397858861419502 - 1948.83 0.007816197971615946 284.65985128568497 0.001732954535251156 - 1958.83 0.007863561845471878 284.36920677471755 0.0017261352467681345 - 1968.83 0.00791092571932781 284.07884690243924 0.0017193280037251458 - 1978.83 0.007958289593183742 283.78877137284366 0.001712532789171733 - 1988.83 0.008005653467039674 283.498979889311 0.0017057495861747716 - 1998.83 0.008053017340895606 283.2094721546013 0.001698978377818489 - 2008.83 0.008100381214751538 282.920247870881 0.0016922191472046751 - 2018.83 0.00814774508860747 282.63130673970903 0.0016854718774526537 - 2028.83 0.008195108962463404 282.3426484619793 0.001678736551698994 - 2038.83 0.008242472836319334 282.05427273796596 0.0016720131530978367 - 2048.83 0.008289836710175266 281.7661792673212 0.0016653016648209393 - 2058.83 0.008337200584031198 281.47836774907375 0.0016586020700577195 - 2068.83 0.00838456445788713 281.1908378816243 0.0016519143520152839 - 2078.83 0.008431928331743062 280.9035893627442 0.0016452384939184784 - 2088.83 0.008479292205598996 280.6166218895714 0.0016385744790099177 - 2098.83 0.008526656079454928 280.32993515860994 0.001631922290550041 - 2108.83 0.008574019953310858 280.04352886572605 0.0016252819118171417 - 2118.83 0.00862138382716679 279.7574027061456 0.0016186533261074148 - 2128.83 0.008668747701022723 279.4715563744512 0.0016120365167349919 - 2138.83 0.008716111574878655 279.18598956458203 0.0016054314670320023 - 2148.83 0.008739775384011342 278.91299686293365 0.0015981777927892848 - 2158.83 0.00873824375695812 278.65331523129095 0.0015902358781187456 - 2168.83 0.008736712129904895 278.39386042001973 0.001582308454329848 - 2178.83 0.008735180502851672 278.134632196375 0.0015743955007495364 - 2188.83 0.008733648875798448 277.8756303268398 0.0015664969967289942 - 2198.83 0.008732117248745225 277.61685457712895 0.0015586129216437394 - 2208.83 0.008730585621692002 277.3583047121941 0.0015507432548937299 - 2218.83 0.008729053994638778 277.0999804962883 0.0015428879759037978 - 2228.83 0.008727522367585554 276.8418816928227 0.001535047064122921 - 2238.83 0.008724968478227057 276.8174568661556 0.0014287716690216555 - 2248.83 0.008721192534358463 277.0715686775177 0.0012051424185277964 - 2258.83 0.008722659952657117 277.2606415628407 0.0010031046002354806 - 2268.83 0.008730871705430878 277.3665097422118 0.0008286368772392309 - 2278.83 0.008735338408002558 277.330835068376 0.0007216421518183574 - 2288.83 0.008734425449906694 277.09256115467815 0.0007111789125504795 - 2298.83 0.008733512491810834 276.8544712448103 0.0007007362826229436 - 2308.83 0.008732599533714972 276.61656515467183 0.0006903142321037609 - 2318.83 0.00873168657561911 276.3788426992859 0.0006799127311041853 - 2328.83 0.008730773617523249 276.1413036927955 0.000669531749778821 - 2338.83 0.008729860659427387 275.90394794846475 0.0006591712583257446 - 2348.83 0.008728947701331523 275.6667752786754 0.0006488312269866149 - 2358.83 0.008728034743235663 275.4297854949244 0.0006385116260467878 - 2368.83 0.0087271217851398 275.192978407824 0.0006282124258354349 - 2378.83 0.00872620882704394 274.95635382709963 0.0006179335967256578 - 2388.83 0.008725295868948076 274.7199115615876 0.0006076751091346035 - 2398.83 0.008724382910852214 274.48365141923523 0.0005974369335235835 - 2408.83 0.008723469952756352 274.24757320709847 0.0005872190403981894 - 2418.83 0.00872255699466049 274.01167673134097 0.0005770214003084096 - 2428.83 0.008721644036564629 273.77596179724725 0.0005668439838487778 - 2438.83 0.008720731078468767 273.54042820932693 0.0005566867616587019 - 2448.83 0.008719818120372905 273.30507577109785 0.0005465497044221301 - 2458.83 0.008718905162277045 273.06990428516843 0.0005364327828678493 - 2468.83 0.008717992204181181 272.83491355327277 0.0005263359677696753 - 2478.83 0.00871707924608532 272.60010337626636 0.0005162592299465619 - 2488.83 0.008716166287989458 272.36547355412745 0.0005062025402627189 - 2498.83 0.008715253329893596 272.131023885956 0.000496165869627728 - 2508.83 0.008714340371797734 271.8967541699728 0.00048614918899665764 - 2518.83 0.008713427413701872 271.66266420351815 0.0004761524693701766 - 2528.83 0.008712514455606009 271.4287537830524 0.00046617568179467246 - 2538.83 0.008711601497510147 271.1950227041551 0.0004562187973623663 - 2548.83 0.008710688539414285 270.96147076152505 0.00044628178721142976 - 2558.83 0.008709775581318425 270.7280977489789 0.000436364622526099 - 2568.83 0.008708862623222563 270.4949034594528 0.0004264672745367943 - 2578.83 0.0087079496651267 270.26188768499924 0.0004165897145202309 - 2588.83 0.008707036707030838 270.029050216791 0.0004067319137995416 - 2598.83 0.008706123748934978 269.79639084511774 0.00039689384374438826 - 2608.83 0.008705210790839114 269.5639093593882 0.00038707547577108054 - 2618.83 0.008704297832743253 269.3316055481293 0.00037727678134269086 - 2628.83 0.00870338487464739 269.09947919898616 0.00036749773196917055 - 2638.83 0.008702471916551529 268.86753009872444 0.00035773829920746796 - 2648.83 0.008701558958455669 268.6357580332281 0.00034799845466164175 - 2658.83 0.008700659517596148 268.4041979828298 0.00033844313405744734 - 2668.8450000000003 0.008700337666224318 268.17397337808615 0.00033595082302481617 - 2678.91 0.008700014208005898 267.9427744314085 0.000333450842828394 - 2689.075 0.0086996875360943 267.709456322259 0.0003309308744055996 - 2699.395 0.008699355882958277 267.47276314000703 0.0003283774593404216 - 2709.915 0.008699017802435895 267.23167205885693 0.00032577971510337446 - 2720.685 0.008698671687680567 266.9850492223517 0.00032312562133688635 - 2731.75 0.008698316092530363 266.7318790865574 0.0003204044937589016 - 2743.1549999999997 0.008697949570823354 266.4711498955205 0.0003176057511510233 - 2754.9449999999997 0.008697570676397605 266.2018539109293 0.0003147189215701552 - 2767.16 0.008697178123775847 265.92310172413966 0.00031173486948310084 - 2779.8450000000003 0.00869677046679615 265.63389412416603 0.0003086433547653599 - 2793.04 0.008696346419981243 265.33335060165257 0.0003054354837438475 - 2806.79 0.008695904537169195 265.0204816908401 0.000302101281097326 - 2821.13 0.008695443693567393 264.69453068213596 0.0002986333380444916 - 2836.095 0.008694962764383227 264.3547458320207 0.00029502438066253406 - 2851.725 0.008694460464139422 264.00026735827623 0.0002912660782606801 - 2868.05 0.008693935828728027 263.63046804896186 0.00028735266156905447 - 2885.1099999999997 0.008693387572671771 263.2445000426994 0.00028327612365018677 - 2902.9449999999997 0.00869281441049338 262.8415224365277 0.0002790286465999648 - 2921.58 0.00869221553876956 262.42103995931274 0.0002746061671442548 - 2941.04 0.00869159015407702 261.98256324961994 0.0002700047826650741 - 2961.365 0.008690936970938482 261.525271899304 0.0002652172324061497 - 2982.58 0.008690255185930659 261.0486907769389 0.0002602400009399265 - 3004.71 0.00868954399563025 260.55235161198914 0.000255069759811069 - 3027.79 0.008688802275244644 260.0355695567649 0.0002497010544796127 - 3051.8450000000003 0.008688029221350549 259.49789209109974 0.00024413098645838086 - 3076.895 0.008687224191209326 258.9389859371834 0.00023835801994738452 - 3102.96 0.008686386542082343 258.35852502737936 0.00023238081718315108 - 3130.0699999999997 0.008685515309861645 257.75596865621014 0.0002261959689801103 - 3158.25 0.008684609691123935 257.13089633202185 0.0002198014571784731 - 3187.51 0.008683669364499897 256.4832280443057 0.0002131988826189025 - 3217.87 0.008580775976211407 255.83588175027643 0.00020709348875087792 - 3249.3599999999997 0.008325194354403886 255.19964330883812 0.00020182612727616482 - 3281.99 0.00806036017467764 254.54164607206658 0.00019640156224556038 - 3315.77 0.007786192274243909 253.8618174159068 0.0001908215535613851 - 3350.72 0.007502528327525176 253.15988884466148 0.00018508636108294612 - 3386.8549999999996 0.007209246590338299 252.43569838883678 0.00017919723809355667 - 3424.1899999999996 0.006906225318500133 251.68908967024706 0.0001731555994258938 - 3462.7349999999997 0.0065933833492219165 250.9200893817243 0.0001669638752849161 - 3502.5 0.006270639519714892 250.1284712878834 0.00016062446370606015 - 3543.495 0.005937912667190301 249.3142998774209 0.00015414009701953684 - 3585.7250000000004 0.005595162210253757 248.4776361401757 0.00014751435569759807 - 3629.2 0.005242306986116509 247.61844557185518 0.00014075015925435843 - 3673.9300000000003 0.004879265831989783 246.73669767930963 0.00013385056615865994 - 3719.915 0.004506038747873592 245.8325621824419 0.0001268202953715263 - 3767.16 0.004122585152373548 244.9061124719276 0.0001196633936015751 - 3815.675 0.0038355171828296144 243.93917816588527 0.00011467825616883388 - 3865.455 0.0036348610625339993 242.9340075550911 0.00011162091929331613 - 3916.5 0.0034291059066382636 241.9064458549572 0.00010851500747621877 - 3968.8100000000004 0.0032182517151424076 240.85669479320958 0.00010536249730248193 - 4022.385 0.0030022984880464336 239.78495669810397 0.00010216539025281861 - 4077.225 0.00278124622535034 238.69143421152936 9.892571137828071e-5 - 4133.33 0.0025550949270541265 237.57633000765716 9.564550799380334e-5 - 4190.6900000000005 0.00232388490173961 236.4400442851121 9.232742374611894e-5 - 4249.295 0.0020876564579886164 235.28290207757698 8.89740694936877e-5 - 4309.145 0.001846409595801138 234.10523590260988 8.558756526352608e-5 - 4370.23 0.0016001846237590025 232.90737521220953 8.217052693534798e-5 - 4432.545 0.0011922795851925403 231.67880240976976 7.899430518019319e-5 - 4496.075000000001 0.0002500004108277978 230.3946787391585 7.669199996537603e-5 - 4560.8099999999995 -0.0007101513655376954 229.09126349131424 7.437320838759246e-5 - 4626.74 -0.0016880274235554363 227.76896931455786 7.203957368418927e-5 - 4693.85 -0.0026834052827025764 226.42830360420388 6.969290118469227e-5 - 4762.13 -0.003696136622630543 225.06966783836282 6.733480334122536e-5 -] - - -# pchip -a_pchip = [ - 6.25 9.601459904000006e-6 344.5420231046023 0.003860742641485514 - 24.48 4.1432601859289795e-5 343.7359719302042 0.0037543235326636154 - 47.875 8.8555789522687e-5 342.7518795285017 0.0036142052612748274 - 70.11 0.0001369957034095158 341.8660689219712 0.003484178694745823 - 91.135 0.00018337706633641193 341.07624166649947 0.003370462877406898 - 110.92500000000001 0.00022528083836418738 340.37808187084374 0.003276971399698051 - 129.47 0.000262880477400844 339.7671077893171 0.003198578783216842 - 146.775 0.00029862915911828107 339.2270467717058 0.0031238849288421546 - 162.875 0.0003322917642376775 338.7621857902187 0.0030543038948581277 - 177.825 0.00036371734887041525 338.34167864137146 0.0029905156498874633 - 191.69 0.0003928619825420611 337.89586272485514 0.002932367833216519 - 204.565 0.00041980994817745543 337.54086367373776 0.0028808736027705773 - 216.57 0.00044474352817845214 337.2127019712548 0.0028351559222697283 - 227.835 0.00046789419183344757 336.9052328651085 0.002794705229047507 - 238.51 0.000489548614442425 336.6125817905407 0.0027589227356612208 - 248.775 0.0005100552575374961 336.3285168953521 0.0027271679287084604 - 258.83 0.0005297909814928844 336.04639814927737 0.002698870380288816 - 268.83 0.0005490249204082629 335.760744824618 0.0026737564347972245 - 278.83 0.0005678177525338275 335.46876363376856 0.0026519317179633604 - 288.83 0.000586121211797265 335.1694157654367 0.002633665057975637 - 298.83 0.0006038870321262643 334.8610482949275 0.002619219303733237 - 308.83 0.0006210669474485126 334.5426000408284 0.00260886083101325 - 318.83 0.0006376126916916975 334.21282977614356 0.0026028534530774857 - 328.83 0.0006538254249444043 333.8735886993379 0.002601067200734642 - 338.83 0.0006704453465071318 333.5316734122957 0.0026025393423489648 - 348.83 0.0006873981306693903 333.1876551504074 0.0026069136842198134 - 358.83 0.0007045748174397067 332.8418173802265 0.0026138680665577173 - 368.83 0.0007218664468266097 332.49444243227055 0.0026230816172455244 - 378.83 0.0007391640588386267 332.1458115040026 0.002634234748767018 - 388.83 0.0007563586934842859 331.796204662791 0.002647009155140043 - 398.83 0.0007733413907721148 331.4459008488496 0.002661087808854203 - 408.83 0.0007900031907106422 331.0951778781453 0.0026761549578130793 - 418.83 0.0008062351333083946 330.7443124452891 0.0026918961222811046 - 428.83 0.0008219282585739007 330.3935801263944 0.0027079980918349933 - 438.83 0.0008369736065156881 330.04325538190363 0.0027241489223197224 - 448.83 0.0008512622171422851 329.6936115593871 0.0027400379328090794 - 458.83 0.0008646851304622192 329.34492089640077 0.0027553557025715076 - 468.83 0.0008771333864840181 328.9974545231896 0.0027697940680394204 - 478.83 0.0008884980252162101 328.6514824654251 0.0027830461197835376 - 488.83 0.000898670086667323 328.30727364692194 0.0027948061994917534 - 498.83 0.0009075406108458843 327.9650958923416 0.002804769896952565 - 508.83000000000004 0.000915000637760422 327.6252159298699 0.0028126340470429204 - 518.83 0.0009209412074194642 327.28789939388577 0.0028180967267206042 - 528.83 0.0009252533598315389 326.9534108276036 0.00282085725202097 - 538.83 0.0009281163390024631 326.62191374018585 0.0028212314655286083 - 548.83 0.0009305430663769877 326.2931050259734 0.002821310350253951 - 558.83 0.0009326627140099166 325.96677585951403 0.0028212915724403053 - 568.83 0.0009345097418730037 325.64274198804765 0.002821170328488927 - 578.83 0.0009361186099380026 325.3208198925569 0.0028209418349403625 - 588.83 0.0009375237781766667 325.0008267859669 0.0028206013284248627 - 598.83 0.0009387597065607495 324.6825806113463 0.002820144065612832 - 608.83 0.0009398608550620049 324.36590004005024 0.002819565323164847 - 618.83 0.0009408616836521864 324.05060446997555 0.002818860397682673 - 628.83 0.0009417966523030477 323.736514023769 0.0028180246056599347 - 638.83 0.0009427002209863424 323.42344954700474 0.002817053283432558 - 648.83 0.0009436068496738239 323.1112326063895 0.0028159417871295054 - 658.83 0.0009445509983372455 322.7996854879704 0.0028146854926235807 - 668.83 0.0009455671269483617 322.4886311953479 0.002813279795482323 - 678.83 0.0009466896954789252 322.1778934478916 0.002811720110918984 - 688.83 0.0009479531639006903 321.86729667895906 0.002810001873743565 - 698.83 0.0009493919921854103 321.5566660341221 0.0028081205383139857 - 708.83 0.0009510406403048387 321.245827369395 0.0028060715784873143 - 718.83 0.000952933568230729 320.934607249471 0.002803850487571112 - 728.83 0.0009551052359348352 320.6228329459593 0.002801452778274846 - 738.83 0.0009575901033889106 320.3103324356327 0.002798873982661441 - 748.83 0.0009604393452199899 319.99693729013615 0.0027961000171113594 - 758.83 0.0009662118811694043 319.68297152329 0.002791677457389476 - 768.83 0.0009765345946904087 319.3687938057808 0.002784710793864016 - 778.83 0.0009911267804895423 319.05447355021414 0.0027754077409901197 - 788.83 0.0010097077332733458 318.74007988916804 0.002763975185544588 - 798.83 0.0010319967477483572 318.42568167584636 0.0027506191886133317 - 808.83 0.001057713118621117 318.11134748472864 0.002735544987575856 - 818.83 0.0010865761405981652 317.7971456122286 0.0027189569980868647 - 828.83 0.0011183051083860406 317.48314407734296 0.002701058816054839 - 838.83 0.0011526193166912831 317.16941062231353 0.0026820532196177574 - 848.83 0.0011892380602204326 316.8560127132832 0.0026621421711157988 - 858.83 0.0012278806336800286 316.54301754095417 0.002641526819061095 - 868.83 0.0012682663317766098 316.2304920212501 0.002620407500104506 - 878.83 0.0013101144492167177 315.9185027959758 0.002598983740999414 - 888.83 0.0013531442807068902 315.6071162334785 0.002577454260562473 - 898.83 0.001397075120953667 315.29639842930607 0.0025560169716313673 - 908.83 0.001441626264663589 314.98641519316675 0.0025348689829092696 - 918.83 0.0014865170065431943 314.677330956396 0.0025142073911655996 - 928.83 0.0015314666412990232 314.36899183158056 0.0024942259475909737 - 938.83 0.0015761944636376163 314.0615863506748 0.0024751203540336864 - 948.83 0.0016204197682655114 313.7551790354261 0.0024570845203458437 - 958.83 0.0016638618498892495 313.44983411168215 0.0024403115619345754 - 968.83 0.0017062541864625855 313.145630654664 0.0024249839212580966 - 978.83 0.0017492922068053382 312.8445979660116 0.0024099250821943007 - 988.83 0.0017942143172018806 312.5478016044722 0.0023943049299397627 - 998.83 0.001840912661014752 312.2547738940955 0.0023782366578187233 - 1008.83 0.0018892793816064919 311.96504903217675 0.0023618330023545187 - 1018.83 0.0019392066223396383 311.67967151114937 0.002345217594463862 - 1028.83 0.001990586526576729 311.3937305971646 0.0023284687830828032 - 1038.83 0.0020433112376803063 311.1100352807712 0.002311722647077188 - 1048.83 0.002097272899012906 310.82992689385725 0.002295103348796812 - 1058.83 0.0021523636539370686 310.54979447713134 0.0022786979144524193 - 1068.83 0.0022084756458153327 310.27020924109405 0.002262623985873509 - 1078.83 0.002265501018010237 309.9907183448751 0.0022469911328758694 - 1088.83 0.00232333191388432 309.7108708254795 0.002231908477608768 - 1098.83 0.0023818604768001215 309.43021755646 0.0022174846953700554 - 1108.83 0.0024409788501201777 309.148311243798 0.0022038280156922822 - 1118.83 0.002500579177207032 308.8647064217766 0.002191046223425053 - 1128.83 0.0025605536014232195 308.5789594488587 0.002179246659813807 - 1138.83 0.002620794266131281 308.290628503563 0.002168536223574982 - 1148.83 0.0026811933146937542 307.9992735802999 0.0021590213719674114 - 1158.83 0.0027416428904731786 307.7044564852339 0.002150808121860438 - 1168.83 0.0028020351368320934 307.40574083213704 0.0021440020507986165 - 1178.83 0.0028622621971330377 307.1026920382446 0.002138708298063098 - 1188.83 0.002922216214738549 306.79487732010335 0.0021350315657297655 - 1198.83 0.0029819922806828755 306.48201051704046 0.0021330830534879532 - 1208.83 0.003042294293519468 306.16460300549005 0.0021328747095048697 - 1218.83 0.003103173951537994 305.8431444384702 0.002134249403774919 - 1228.83 0.0031646093925369427 305.51828968419414 0.0021370430017433077 - 1238.83 0.0032265787543148067 305.1901305809619 0.002141088112052785 - 1248.83 0.003289060174670074 304.85928476509145 0.0021462216890343134 - 1258.83 0.003352031791401234 304.5262021892101 0.002152280190176875 - 1268.83 0.003415471742306777 304.19133097090156 0.002159100731823009 - 1278.83 0.003479358165185194 303.85511740640493 0.002166521087629873 - 1288.83 0.003543669197834973 303.51800598155114 0.0021743796870143436 - 1298.83 0.0036083829780546046 303.1804393864815 0.002182515613629195 - 1308.83 0.0036734776436425772 302.84285851634525 0.002190768603742792 - 1318.83 0.003738931332397382 302.505702472458 0.0021989790446241718 - 1328.83 0.0038047221821175107 302.1694085680285 0.0022069879729636256 - 1338.83 0.0038708283306014488 301.8344123325218 0.0022146370732863225 - 1348.83 0.0039372279156476885 301.5011475160159 0.002221768676368706 - 1358.83 0.004003899075054721 301.17004609354814 0.0022282257576576223 - 1368.83 0.004070819946621033 300.8415382694564 0.0022338519356922236 - 1378.83 0.004137968668145115 300.51605248171364 0.0022384914705286607 - 1388.83 0.0042053233774254585 300.1940154062528 0.0022419892621675275 - 1398.83 0.0042728622122605526 299.87585196128305 0.002244190848984104 - 1408.83 0.0043405633104488875 299.5619853116003 0.0022449424061613942 - 1418.83 0.00440840480978895 299.25283687289226 0.0022440907441259985 - 1428.83 0.004476584787496588 298.94960522359656 0.0022415411383429865 - 1438.83 0.004545743925064259 298.654667462105 0.0022374489395541705 - 1448.83 0.004615833771618547 298.3675328532664 0.002231935452821312 - 1458.83 0.004686752415764344 298.08750925340956 0.0022251125798335098 - 1468.83 0.004758397946106542 297.81390727555464 0.002217091775270786 - 1478.83 0.004830668451250038 297.54604034654 0.002207984048365181 - 1488.83 0.004903462019799722 297.2830567478767 0.0021978987222577347 - 1498.83 0.004976676740360491 297.02461422171876 0.002186948427702232 - 1508.83 0.0050502107015372374 296.7698633880743 0.0021752415735137145 - 1518.83 0.005123961991934854 296.5181286335465 0.002162887396164625 - 1528.83 0.0051978287001582385 296.26873706982 0.002149994691672361 - 1538.83 0.00527170891481228 296.02101853265 0.0021366718167150013 - 1548.83 0.005345500724501871 295.7743055752035 0.0021230266897032586 - 1558.83 0.005419102217831911 295.5279334614146 0.0021091667918504945 - 1568.83 0.005492411483407291 295.28124015935026 0.002095199168240771 - 1578.83 0.005565326609832902 295.0335663345848 0.002081230428894922 - 1588.83 0.005637745685713641 294.78425534359485 0.002067366749834716 - 1598.83 0.0057095667996544 294.5326532271571 0.002053713874144982 - 1608.83 0.005780688040260075 294.2781087037653 0.0020403771130338135 - 1618.83 0.0058510074961355555 294.01997316305767 0.0020274613468907665 - 1628.83 0.005920423255885739 293.75760065925334 0.002015071026343061 - 1638.83 0.0059888334081155195 293.49034790460905 0.0020033101733098243 - 1648.83 0.006056136041429785 293.21757426287667 0.001992282382054267 - 1658.83 0.006122245317323344 292.93874332287595 0.001982077884322789 - 1668.83 0.006187776420339676 292.65777395170625 0.0019722137183994077 - 1678.83 0.006253068661125427 292.3769069044552 0.0019624041070787036 - 1688.83 0.006318096491643228 292.0960884894162 0.0019526526046658194 - 1698.83 0.00638283436385573 291.81526523342455 0.0019429627506506576 - 1708.83 0.006447256729725567 291.53438388131394 0.0019333380697444552 - 1718.83 0.006511338041215387 291.2533913953771 0.0019237820719163014 - 1728.83 0.00657505275028783 290.9722349548265 0.001914298252429593 - 1738.83 0.006638375308905536 290.6908619552548 0.001904890091878383 - 1748.83 0.0067012801690311515 290.40922000809866 0.0018955610562237028 - 1758.83 0.006763741782627313 290.12725694010214 0.001886314596829774 - 1768.83 0.006825734601656668 289.8449207927813 0.0018771541505001727 - 1778.83 0.006887233078081855 289.56215982189127 0.0018680831395139108 - 1788.83 0.006948211663865519 289.278922496892 0.0018591049716614417 - 1798.83 0.0070086448109703 288.99515750041616 0.0018502230402805925 - 1808.83 0.007068506971358839 288.7108137277406 0.0018414407242924422 - 1818.83 0.007127772596993781 288.4258402862623 0.0018327613882371462 - 1828.83 0.007186416139837767 288.14018649497916 0.0018241883823097052 - 1838.83 0.007244412051853437 287.85380188392287 0.001815725042395357 - 1848.83 0.007301734785003436 287.5666361936599 0.0018073746901053184 - 1858.83 0.007358358791250404 287.2786393747706 0.0017991406328122966 - 1868.83 0.0074142585225569855 286.9897615873234 0.0017910261636858971 - 1878.83 0.007469408430885814 286.69995320034957 0.001783034561727948 - 1888.83 0.007523782968199549 286.40916479132756 0.0017751690918078001 - 1898.83 0.007577374678365931 286.1173537948827 0.0017674333357137486 - 1908.83 0.007632262296830932 285.82528277485557 0.001759866681244201 - 1918.83 0.007689591847420521 285.53349753971224 0.0017524837189873818 - 1928.83 0.007748953620969539 285.2419978278231 0.001745269051698854 - 1938.83 0.007809937908312836 284.9507833768337 0.0017382073438477151 - 1948.83 0.007872135000285265 284.659853923662 0.0017312833214663222 - 1958.83 0.00793513518772167 284.3692092044935 0.0017244817720003006 - 1968.83 0.0079985287614569 284.0788489547803 0.0017177875441588926 - 1978.83 0.008061906012325804 283.78877290923657 0.0017111855477655708 - 1988.83 0.008124857231163232 283.49898080183846 0.0017046607536089994 - 1998.83 0.008186972708804028 283.20947236581793 0.0016981981932942564 - 2008.83 0.008247842736083049 282.92024733368964 0.0016917829590945646 - 2018.83 0.008307057603835134 282.6313054372371 0.0016854002038030832 - 2028.83 0.008364207602895139 282.3426464074557 0.0016790351405847575 - 2038.83 0.008418883024097906 282.05426997459807 0.001672673042829087 - 2048.83 0.008470674158278289 281.7661758681725 0.0016662992440029257 - 2058.83 0.00851917129627113 281.47836381694185 0.0016598991375035965 - 2068.83 0.008563964728911286 281.19083354891836 0.001653458176512302 - 2078.83 0.008604644747033598 280.90358479136336 0.001646961873847871 - 2088.83 0.00864080164147292 280.6166172707841 0.0016403958018208062 - 2098.83 0.008672025703064096 280.329930712932 0.0016337455920876656 - 2108.83 0.00869790722264198 280.0435248428005 0.0016269969355057496 - 2118.83 0.008718036491041416 279.7573993846216 0.00162013558198811 - 2128.83 0.00873200379909725 279.4715540618642 0.0016131473403588822 - 2138.83 0.008739399437644334 279.18598859723414 0.0016060180782089576 - 2148.83 0.008740471334007635 278.9010565248372 0.0015989073931928612 - 2158.83 0.008740037524596594 278.6197148823876 0.001592931287941157 - 2168.83 0.008739187938544784 278.3431657761335 0.0015877860488162168 - 2178.83 0.008737971924822244 278.072070687628 0.0015828577314195105 - 2188.83 0.008736438832399017 277.8070883627079 0.0015775348958474247 - 2198.83 0.008734638010245141 277.54887481819367 0.0015712086005762382 - 2208.83 0.008732618807330658 277.29808334857665 0.0015632723963607382 - 2218.83 0.008730430572625611 277.05536453275084 0.0015531223201468562 - 2228.83 0.008728122655100042 276.82136624052004 0.0015401568889968568 - 2238.83 0.008725325324200145 276.6670088971749 0.0014938983441706334 - 2248.83 0.00872051447723068 276.99479609276045 0.0012405840099828308 - 2258.83 0.008720482006922867 277.2619599936721 0.001002867594275896 - 2268.83 0.008731497088353309 277.4303609805497 0.0007944186132731928 - 2278.83 0.008735706713304384 277.34713399949754 0.0007173682222443124 - 2288.83 0.008735611423788215 277.16461666917985 0.0006925545230948834 - 2298.83 0.008735406227039628 276.9761156598087 0.0006690341505257404 - 2308.83 0.008735096561412635 276.7819003599647 0.0006467647990123891 - 2318.83 0.008734687865261258 276.5822390948044 0.0006257043277341191 - 2328.83 0.008734185576939505 276.37739912862605 0.0006058107601767843 - 2338.83 0.00873359513480139 276.16764666743666 0.0005870422837364519 - 2348.83 0.008732921977200938 275.95324686150724 0.0005693572493238883 - 2358.83 0.008732171542492152 275.7344638079244 0.0005527141709699054 - 2368.83 0.008731349269029057 275.51156055313936 0.0005370717254315719 - 2378.83 0.00873046059516566 275.28479909550657 0.0005223887517992777 - 2388.83 0.008729510959255986 275.05444038781934 0.0005086242511046699 - 2398.83 0.008728505799654042 274.82074433984036 0.0004957373859294542 - 2408.83 0.008727450554713844 274.5839698208245 0.00048368748001507 - 2418.83 0.00872635066278941 274.34437466203735 0.00047243401787323873 - 2428.83 0.008725211562234752 274.1022156592818 0.00046193664439741485 - 2438.83 0.008724038691403884 273.85774857551024 0.0004521551644752667 - 2448.83 0.008722837488650825 273.6112281431095 0.00044304954260150094 - 2458.83 0.008721613392329589 273.3629080664783 0.00043457990249209266 - 2468.83 0.008720371840794192 273.1130410245542 0.0004267065266993172 - 2478.83 0.008719118272398645 272.86187867329176 0.00041938985622760796 - 2488.83 0.008717858125496967 272.60967164814303 0.0004125904901503223 - 2498.83 0.008716596838443169 272.356669566529 0.00040626918522740493 - 2508.83 0.008715339849591273 272.1031210303046 0.00040038685552395574 - 2518.83 0.00871409259729529 271.84927362821765 0.00039490457202970443 - 2528.83 0.008712860519909233 271.59537393836376 0.0003897835622793993 - 2538.83 0.008711649055787116 271.3416675306338 0.0003849852099741078 - 2548.83 0.008710463643282962 271.08839896915646 0.00038047105460343593 - 2558.83 0.00870930972075078 270.8358118147322 0.0003762027910686656 - 2568.83 0.008708192726544583 270.58414862726573 0.00037214226930681996 - 2578.83 0.008707118099018396 270.3336509681858 0.0003682514939156495 - 2588.83 0.008706091276526221 270.08455940286757 0.00036449262377955726 - 2598.83 0.00870511769742208 269.8371135030409 0.00036082797169644816 - 2608.83 0.008704202800059986 269.59155184919695 0.0003572200040055213 - 2618.83 0.00870335202279396 269.3481120329874 0.0003536313402159986 - 2628.83 0.008702570803978012 269.10703065961724 0.0003500247526367978 - 2638.83 0.008701864581966158 268.86854335023315 0.0003463631660071528 - 2648.83 0.008701238795112408 268.63288474430243 0.0003426096571281797 - 2658.83 0.008700698881770785 268.40028850200747 0.00033872745449542235 - 2668.8450000000003 0.008700219002462472 268.1691414749626 0.00033479726900601496 - 2678.91 0.00869975990768105 267.9368077349054 0.0003309490049139973 - 2689.075 0.008699318690597087 267.70214029350814 0.00032716373826547935 - 2699.395 0.00869889277582794 267.46388416751927 0.0003234220596800806 - 2709.915 0.00869848036054807 267.221016361235 0.0003197100313616346 - 2720.685 0.008698079730972683 266.9724003959461 0.0003160135627052084 - 2731.75 0.008697689616697021 266.7170180422872 0.00031232188504977523 - 2743.1549999999997 0.008697308939248536 266.453854830659 0.00030862566332549667 - 2754.9449999999997 0.008696936767094753 266.1819011229348 0.0003049169413413 - 2767.16 0.008696572408439634 265.9002685916029 0.00030119058035255 - 2779.8450000000003 0.008696215035638128 265.60796091622166 0.0002974410368059388 - 2793.04 0.008695863913449956 265.30410588134066 0.0002936653185071391 - 2806.79 0.008695518032659827 264.9877267380884 0.00028985990918091903 - 2821.13 0.008695176392780961 264.65808938787114 0.0002860247958138688 - 2836.095 0.00869483760303617 264.3144739518743 0.0002821602865442487 - 2851.725 0.008694499648715652 263.9560625468504 0.00027826557097864184 - 2868.05 0.008694160067137562 263.58228602819963 0.00027434222041856644 - 2885.1099999999997 0.008693815339356783 263.192368420428 0.0002703888934986016 - 2902.9449999999997 0.008693460910480812 262.78556029542483 0.00026640359006112715 - 2921.58 0.008693091243175181 262.3614837874171 0.00026238638699233675 - 2941.04 0.00869269926494849 261.9197924458573 0.00025833531705752216 - 2961.365 0.008692275784817004 261.4598362378217 0.0002542428908588362 - 2982.58 0.008691809776932893 260.9813472470083 0.00025010173755263027 - 3004.71 0.008691287747271492 260.4841026713124 0.00024590066886861177 - 3027.79 0.008690693089605815 259.967706765055 0.00024162213173425782 - 3051.8450000000003 0.00869000611886979 259.43204626609804 0.00023724517950008536 - 3076.895 0.008689203563856508 258.87718104204566 0.00023274351102733445 - 3102.96 0.008688257978465634 258.3032375279255 0.00022808361621618096 - 3130.0699999999997 0.008687136781488162 257.71019713850404 0.00022322201339170848 - 3158.25 0.008685802127820065 257.09823589459796 0.00021810681215730422 - 3187.51 0.008684210960606521 256.46794318216655 0.00021267842471413853 - 3217.87 0.008677694834982817 255.82003906425567 0.00020687964137542535 - 3249.3599999999997 0.008621723699496221 255.1570373920644 0.00020080910133719244 - 3281.99 0.008504906032832714 254.47950016931108 0.0001945197380926647 - 3315.77 0.008327852968293446 253.7871897982238 0.00018803836122217944 - 3350.72 0.008092281781492702 253.07950801654414 0.00018139555575209953 - 3386.8549999999996 0.007801229417748655 252.35578855202596 0.00017462910696311898 - 3424.1899999999996 0.007459204780139134 251.61517383793222 0.00016778358454968032 - 3462.7349999999997 0.00707241828009648 250.85677137125214 0.00016091183818328278 - 3502.5 0.006648929471242567 250.0791979839971 0.0001540743528071706 - 3543.495 0.006198835014109467 249.2811044572207 0.00014734013942477498 - 3585.7250000000004 0.005734521697541734 248.46086031638063 0.0001407877724523672 - 3629.2 0.005270759411679333 247.61644709528767 0.00013450434010732205 - 3673.9300000000003 0.004824972374729601 246.74553664386664 0.00012858687338857571 - 3719.915 0.004417551681712786 245.84566755728815 0.00012314400982634793 - 3767.16 0.004071913558510835 244.9139369197189 0.00011829430519133672 - 3815.675 0.003803535866713628 243.9488896055676 0.00011407731938430107 - 3865.455 0.0035708602813748123 242.95832904886058 0.00011011496950673853 - 3916.5 0.0033625360503933776 241.94341050513486 0.0001063434206328568 - 3968.8100000000004 0.003173182404879927 240.90399835887675 0.00010275617806668274 - 4022.385 0.0029963361986903303 239.83993344616374 9.934365867690981e-5 - 4077.225 0.0028243822151999827 238.75103227615318 9.609307035391325e-5 - 4133.33 0.002648481788703748 237.63708631684136 9.298829844026875e-5 - 4190.6900000000005 0.0024585343490284755 236.49805995167546 9.001030352939265e-5 - 4249.295 0.0022430865762322946 235.33381966890892 8.713638868607657e-5 - 4309.145 0.001989230713877442 234.14421464689227 8.433981432280302e-5 - 4370.23 0.0016826148161914406 232.9290686973363 8.15905857992635e-5 - 4432.545 0.0013041965750993723 231.68804385989884 7.885906950634664e-5 - 4496.075000000001 0.0007745090574093201 230.41932700901617 7.621157740203683e-5 - 4560.8099999999995 7.546095827403658e-5 229.12351210172926 7.367390853816816e-5 - 4626.74 -0.0007767757565831984 227.80241459384467 7.123315535710575e-5 - 4693.85 -0.001763261742331813 226.45809574917268 6.88747854037773e-5 - 4762.13 -0.002862336716346668 225.09265980550614 6.658229454801531e-5 -] - -# pchip_smooth_w -a_pchip = [ - 6.25 -0.0 344.5726759079331 0.003622583654954105 - 24.48 -0.0 343.83788070682715 0.003561342988890416 - 47.875 -0.0 342.90329351546205 0.003483122571131849 - 70.11 -0.0 342.01715233411124 0.003409096709105384 - 91.135 -0.0 341.18111837181493 0.00333938183561283 - 110.92500000000001 0.0 340.3958633655331 0.003274012272282246 - 129.47 0.0 339.8235231019965 0.0032136331863819945 - 146.775 0.0 339.31445799184155 0.0031575459404652837 - 162.875 0.0 338.85356560863056 0.003105640724996747 - 177.825 0.0 338.42020741248996 0.0030575290578638606 - 191.69 0.0 337.9521504842157 0.0030124365776040218 - 204.565 0.0 337.57074450542115 0.002971147521730923 - 216.57 0.0 337.2154573578035 0.0029327406099777997 - 227.835 0.0 336.88237449203496 0.0028967818593268442 - 238.51 0.0 336.5670084261369 0.002862778443831147 - 248.775 0.0 336.2640042125891 0.0028301470046177583 - 258.83 0.0 335.9674359734023 0.0027982457722790584 - 268.83 0.0 335.6727227931577 0.0027665804337840207 - 278.83 0.0 335.37824173866716 0.002734976237945195 - 288.83 0.0 335.0842104297892 0.0027034348557095425 - 298.83 0.0 334.79022740408277 0.0026719529415005884 - 308.83 0.0 334.49647765888784 0.0026405319189527487 - 318.83 0.0 334.2029610842402 0.0026091717022533266 - 328.83 0.0 333.86641982533143 0.0026103602174730807 - 338.83 0.0 333.5176630016966 0.002620958617858943 - 348.83 0.0 333.1692520099049 0.002631532704611388 - 358.83 0.0 332.82118657249447 0.002642082514476489 - 368.83 0.0 332.4734664108339 0.0026526080841514556 - 378.83 0.0 332.1260912453956 0.00266310945028658 - 388.83 0.0 331.77906079600916 0.0026735866494871003 - 398.83 0.0 331.4323747821006 0.0026840397183149995 - 408.83 0.0 331.086032922903 0.002694468693290634 - 418.83 0.0 330.74003493765525 0.002704873610894312 - 428.83 0.0 330.3943805457698 0.002715254507567672 - 438.83 0.0 330.0490694669768 0.0027256114197148967 - 448.83 0.0 329.7041014214407 0.0027359443837037412 - 458.83 0.0 329.3594761299436 0.0027462534358671407 - 468.83 0.0 329.0151933139151 0.002756538612503577 - 478.83 0.0 328.67125269550223 0.002766799949877794 - 488.83 0.0 328.32765399762275 0.002777037484221381 - 498.83 0.0 327.98439694400844 0.0027872512517332945 - 508.83000000000004 0.0 327.6414812592272 0.0027974412885801957 - 518.83 0.0 327.29890666869966 0.0028076076308967634 - 528.83 0.0 326.9566728986944 0.00281775031478581 - 538.83 0.0 326.62981935896914 0.0028204582768689337 - 548.83 0.0 326.31107146273257 0.002819316114847624 - 558.83 0.0 325.99261726521803 0.0028181732204950686 - 568.83 0.0 325.67445656288703 0.0028170295967807307 - 578.83 0.0 325.35658915285035 0.0028158852466749398 - 588.83 0.0 325.0390148328214 0.0028147401731485003 - 598.83 0.0 324.7217334010665 0.0028135943791722834 - 608.83 0.0 324.40474465629666 0.0028124478677162947 - 618.83 0.0 324.0880483976675 0.002811300641749694 - 628.83 0.0 323.77164442472997 0.0028101527042403724 - 638.83 0.0 323.455532537348 0.0028090040581542535 - 648.83 0.0 323.1397125356406 0.0028078547064547955 - 658.83 0.0 322.8241842199248 0.0028067046521025015 - 668.83 0.0 322.5089473906601 0.0028055538980544465 - 678.83 0.0 322.194001848395 0.00280440244726381 - 688.83 0.0 321.87934739371116 0.0028032503026794004 - 698.83 0.0 321.5649838271754 0.002802097467245233 - 708.83 0.0 321.2509109492897 0.0028009439439000933 - 718.83 0.0 320.93712856044596 0.0027997897355771487 - 728.83 0.0 320.62363646088073 0.0027986348452035442 - 738.83 0.0 320.3104344506362 0.0027974792757000646 - 748.83 0.0 319.9972852522195 0.002794301652304971 - 758.83 0.0 319.682785862424 0.0027771413469767354 - 768.83 0.0 319.36857977450995 0.002760012890377515 - 778.83 0.0 319.0546667818306 0.0027429162381512654 - 788.83 0.0 318.7410466773804 0.002725851345981782 - 798.83 0.0 318.42771925377656 0.0027088181695926047 - 808.83 0.0 318.11468430323464 0.002691816664746894 - 818.83 0.0 317.8019416175547 0.0026748467872473956 - 828.83 0.0 317.48949098810044 0.0026579084929363576 - 838.83 0.0 317.1773322057902 0.002641001737695539 - 848.83 0.0 316.8654650610844 0.0026241264774462037 - 858.83 0.0 316.55388934397564 0.0026072826681491344 - 868.83 0.0 316.24260484398417 0.002590470265804695 - 878.83 0.0 315.93161135015214 0.002573689226452876 - 888.83 0.0 315.62090865103795 0.0025569395061733617 - 898.83 0.0 315.3104965347141 0.0025402210610856 - 908.83 0.0 315.00037477506004 0.0025235338472391097 - 918.83 0.0 314.69064204275395 0.002506878608558256 - 928.83 0.0 314.3810789462991 0.0024902535517853574 - 938.83 0.0 314.07180879834505 0.0024736596223617247 - 948.83 0.0 313.7628311648407 0.002457096774451791 - 958.83 0.0 313.4541455841644 0.0024405649620891233 - 968.83 0.0 313.1481368744625 0.0024245329901064782 - 978.83 0.0 312.8563252061238 0.0024112652953038813 - 988.83 0.0 312.56477103731913 0.002398021984814805 - 998.83 0.0 312.2734739420615 0.002384803022489697 - 1008.83 0.0 311.982433492304 0.0023716083722344697 - 1018.83 0.0 311.69315774968766 0.0023584494121256143 - 1028.83 0.0 311.40119742418494 0.002345292440874166 - 1038.83 0.0 311.1098214735451 0.0023321622408839318 - 1048.83 0.0 310.8208290869466 0.0023190721687951603 - 1058.83 0.0 310.53106537199494 0.0023059985394585673 - 1068.83 0.0 310.24155575709995 0.0022929490072992787 - 1078.83 0.0 309.95229977649717 0.002279923536442439 - 1088.83 0.0 309.66329700326486 0.0022669220913740227 - 1098.83 0.0 309.37454701246594 0.002253944636665445 - 1108.83 0.0 309.0860493814815 0.0022409911369756113 - 1118.83 0.0 308.79780369032073 0.0022280615570527094 - 1128.83 0.0 308.50980952192504 0.0022151558617359035 - 1138.83 0.0 308.2220664624515 0.0022022740159568168 - 1148.83 0.0 307.93457410150575 0.002189415984740596 - 1158.83 0.0 307.6473320323855 0.002176581733206992 - 1168.83 0.0 307.3603398523032 0.0021637712265712566 - 1178.83 0.0 307.07359716259504 0.002150984430144895 - 1188.83 0.0 306.78710356891344 0.0021382213093362463 - 1198.83 0.0 306.46960991796146 0.0021375879338118085 - 1208.83 0.0 306.13817059789227 0.0021424770546932463 - 1218.83 0.0 305.8070716814573 0.0021473538878615476 - 1228.83 0.0 305.476512302684 0.0021522198575346743 - 1238.83 0.0 305.14613046794346 0.002157072440077767 - 1248.83 0.0 304.8160917380353 0.002161912819476801 - 1258.83 0.0 304.4863958281436 0.0021667410151411477 - 1268.83 0.0 304.1570424325075 0.0021715570463092743 - 1278.83 0.0 303.82803123370786 0.0021763609321127884 - 1288.83 0.0 303.4993619091982 0.0021811526916219975 - 1298.83 0.0 303.1710341416253 0.0021859323439197085 - 1308.83 0.0 302.8430476151386 0.002190699908075137 - 1318.83 0.0 302.5154020121663 0.0021954554031206777 - 1328.83 0.0 302.18809701476954 0.002200198848061553 - 1338.83 0.0 301.86113230463747 0.0022049302618757298 - 1348.83 0.0 301.53450756308536 0.0022096496635138486 - 1358.83 0.0 301.2082224710498 0.002214357071899139 - 1368.83 0.0 300.88227670908583 0.002219052505927351 - 1378.83 0.0 300.5566699573657 0.0022237359844666815 - 1388.83 0.0 300.2314018956744 0.002228407526357698 - 1398.83 0.0 299.90647220340617 0.0022330671504132544 - 1408.83 0.0 299.58188055956066 0.002237714875418413 - 1418.83 0.0 299.2576266427433 0.0022423507201303873 - 1428.83 0.0 298.9770809772997 0.0022352928336579537 - 1438.83 0.0 298.7124432396562 0.0022240291216213876 - 1448.83 0.0 298.44802210022397 0.0022127859509001187 - 1458.83 0.0 298.18381741240364 0.0022015632926219372 - 1468.83 0.0 297.9198290146524 0.00219036111783786 - 1478.83 0.0 297.6560567943727 0.002179179397992159 - 1488.83 0.0 297.39233267375965 0.002168016880076439 - 1498.83 0.0 297.12899547311986 0.002156876011563444 - 1508.83 0.0 296.8658739549265 0.002145755511170298 - 1518.83 0.0 296.60296797345995 0.002134655350232767 - 1528.83 0.0 296.3402773767356 0.0021235755000745624 - 1538.83 0.0 296.0778020121606 0.0021125159320486563 - 1548.83 0.0 295.8155417265301 0.002101476617537326 - 1558.83 0.0 295.55349636602494 0.002090457527952207 - 1568.83 0.0 295.2916657762081 0.0020794586347343443 - 1578.83 0.0 295.03004980201695 0.0020684799093542107 - 1588.83 0.0 294.7686482877643 0.0020575213233117824 - 1598.83 0.0 294.50746107712956 0.002046582848136563 - 1608.83 0.0 294.2464880131572 0.002035664455387637 - 1618.83 0.0 293.98572893825303 0.0020247661166537248 - 1628.83 0.0 293.72518369417685 0.0020138878035532094 - 1638.83 0.0 293.4648521220433 0.002003029487734218 - 1648.83 0.0 293.2047340623116 0.0019921911408746266 - 1658.83 0.0 292.9383779679217 0.0019817618765605787 - 1668.83 0.0 292.65116621035077 0.0019726233790889423 - 1678.83 0.0 292.36422362348117 0.0019635013794234374 - 1688.83 0.0 292.07754996261565 0.0019543958543386053 - 1698.83 0.0 291.7911449824936 0.001945306780632695 - 1708.83 0.0 291.50500843728616 0.001936234135127693 - 1718.83 0.0 291.2191400805921 0.0019271778946693624 - 1728.83 0.0 290.9335396654361 0.0019181380361272952 - 1738.83 0.0 290.6482069442613 0.0019091145363949273 - 1748.83 0.0 290.3631416689284 0.001900107372389602 - 1758.83 0.0 290.0783435907103 0.001891116521052599 - 1768.83 0.0 289.7938124602886 0.0018821419593491782 - 1778.83 0.0 289.5095480277507 0.0018731836642686274 - 1788.83 0.0 289.2255500425848 0.0018642416128242995 - 1798.83 0.0 288.9418182536758 0.0018553157820536553 - 1808.83 0.0 288.65835240930403 0.0018464061490183182 - 1818.83 0.0 288.37515225714696 0.001837512690804161 - 1828.83 0.0 288.0922175442846 0.0018286353845214035 - 1838.83 0.0 287.80954801715666 0.0018197742073044123 - 1848.83 0.0 287.52714342158646 0.0018109291363119224 - 1858.83 0.0 287.2450035027805 0.0018021001487271073 - 1868.83 0.0 286.96312800532456 0.0017932872217576207 - 1878.83 0.0 286.681516673177 0.0017844903326356294 - 1888.83 0.0 286.40016924967085 0.0017757094586178968 - 1898.83 0.0 286.1173537383611 0.001767232253740821 - 1908.83 0.0 285.82528161518724 0.001760352483196975 - 1918.83 0.0 285.5334956016088 0.0017534848431040562 - 1928.83 0.0 285.24199540464963 0.001746629316425514 - 1938.83 0.0 284.95078073073415 0.0017397858861419502 - 1948.83 0.0 284.65985128568497 0.001732954535251156 - 1958.83 0.0 284.36920677471755 0.0017261352467681345 - 1968.83 0.0 284.07884690243924 0.0017193280037251458 - 1978.83 0.0 283.78877137284366 0.001712532789171733 - 1988.83 0.0 283.498979889311 0.0017057495861747716 - 1998.83 0.0 283.2094721546013 0.001698978377818489 - 2008.83 0.0 282.920247870881 0.0016922191472046751 - 2018.83 0.0 282.63130673970903 0.0016854718774526537 - 2028.83 0.0 282.3426484619793 0.001678736551698994 - 2038.83 0.0 282.05427273796596 0.0016720131530978367 - 2048.83 0.0 281.7661792673212 0.0016653016648209393 - 2058.83 0.0 281.47836774907375 0.0016586020700577195 - 2068.83 0.0 281.1908378816243 0.0016519143520152839 - 2078.83 0.0 280.9035893627442 0.0016452384939184784 - 2088.83 0.0 280.6166218895714 0.0016385744790099177 - 2098.83 0.0 280.32993515860994 0.001631922290550041 - 2108.83 0.0 280.04352886572605 0.0016252819118171417 - 2118.83 0.0 279.7574027061456 0.0016186533261074148 - 2128.83 0.0 279.4715563744512 0.0016120365167349919 - 2138.83 0.0 279.18598956458203 0.0016054314670320023 - 2148.83 -0.0 278.91299686293365 0.0015981777927892848 - 2158.83 -0.0 278.65331523129095 0.0015902358781187456 - 2168.83 -0.0 278.39386042001973 0.001582308454329848 - 2178.83 -0.0 278.134632196375 0.0015743955007495364 - 2188.83 -0.0 277.8756303268398 0.0015664969967289942 - 2198.83 -0.0 277.61685457712895 0.0015586129216437394 - 2208.83 -0.0 277.3583047121941 0.0015507432548937299 - 2218.83 -0.0 277.0999804962883 0.0015428879759037978 - 2228.83 -0.0 276.8418816928227 0.001535047064122921 - 2238.83 -0.0 276.8174568661556 0.0014287716690216555 - 2248.83 -0.0 277.0715686775177 0.0012051424185277964 - 2258.83 0.0 277.2606415628407 0.0010031046002354806 - 2268.83 0.0 277.3665097422118 0.0008286368772392309 - 2278.83 -0.0 277.330835068376 0.0007216421518183574 - 2288.83 -0.0 277.09256115467815 0.0007111789125504795 - 2298.83 -0.0 276.8544712448103 0.0007007362826229436 - 2308.83 -0.0 276.61656515467183 0.0006903142321037609 - 2318.83 -0.0 276.3788426992859 0.0006799127311041853 - 2328.83 -0.0 276.1413036927955 0.000669531749778821 - 2338.83 -0.0 275.90394794846475 0.0006591712583257446 - 2348.83 -0.0 275.6667752786754 0.0006488312269866149 - 2358.83 -0.0 275.4297854949244 0.0006385116260467878 - 2368.83 -0.0 275.192978407824 0.0006282124258354349 - 2378.83 -0.0 274.95635382709963 0.0006179335967256578 - 2388.83 -0.0 274.7199115615876 0.0006076751091346035 - 2398.83 -0.0 274.48365141923523 0.0005974369335235835 - 2408.83 -0.0 274.24757320709847 0.0005872190403981894 - 2418.83 -0.0 274.01167673134097 0.0005770214003084096 - 2428.83 -0.0 273.77596179724725 0.0005668439838487778 - 2438.83 -0.0 273.54042820932693 0.0005566867616587019 - 2448.83 -0.0 273.30507577109785 0.0005465497044221301 - 2458.83 -0.0 273.06990428516843 0.0005364327828678493 - 2468.83 -0.0 272.83491355327277 0.0005263359677696753 - 2478.83 -0.0 272.60010337626636 0.0005162592299465619 - 2488.83 -0.0 272.36547355412745 0.0005062025402627189 - 2498.83 -0.0 272.131023885956 0.000496165869627728 - 2508.83 -0.0 271.8967541699728 0.00048614918899665764 - 2518.83 -0.0 271.66266420351815 0.0004761524693701766 - 2528.83 -0.0 271.4287537830524 0.00046617568179467246 - 2538.83 -0.0 271.1950227041551 0.0004562187973623663 - 2548.83 -0.0 270.96147076152505 0.00044628178721142976 - 2558.83 -0.0 270.7280977489789 0.000436364622526099 - 2568.83 -0.0 270.4949034594528 0.0004264672745367943 - 2578.83 -0.0 270.26188768499924 0.0004165897145202309 - 2588.83 -0.0 270.029050216791 0.0004067319137995416 - 2598.83 -0.0 269.79639084511774 0.00039689384374438826 - 2608.83 -0.0 269.5639093593882 0.00038707547577108054 - 2618.83 -0.0 269.3316055481293 0.00037727678134269086 - 2628.83 -0.0 269.09947919898616 0.00036749773196917055 - 2638.83 -0.0 268.86753009872444 0.00035773829920746796 - 2648.83 -0.0 268.6357580332281 0.00034799845466164175 - 2658.83 -0.0 268.4041979828298 0.00033844313405744734 - 2668.8450000000003 -0.0 268.17397337808615 0.00033595082302481617 - 2678.91 -0.0 267.9427744314085 0.000333450842828394 - 2689.075 -0.0 267.709456322259 0.0003309308744055996 - 2699.395 -0.0 267.47276314000703 0.0003283774593404216 - 2709.915 -0.0 267.23167205885693 0.00032577971510337446 - 2720.685 -0.0 266.9850492223517 0.00032312562133688635 - 2731.75 -0.0 266.7318790865574 0.0003204044937589016 - 2743.1549999999997 -0.0 266.4711498955205 0.0003176057511510233 - 2754.9449999999997 -0.0 266.2018539109293 0.0003147189215701552 - 2767.16 -0.0 265.92310172413966 0.00031173486948310084 - 2779.8450000000003 -0.0 265.63389412416603 0.0003086433547653599 - 2793.04 -0.0 265.33335060165257 0.0003054354837438475 - 2806.79 -0.0 265.0204816908401 0.000302101281097326 - 2821.13 -0.0 264.69453068213596 0.0002986333380444916 - 2836.095 -0.0 264.3547458320207 0.00029502438066253406 - 2851.725 -0.0 264.00026735827623 0.0002912660782606801 - 2868.05 -0.0 263.63046804896186 0.00028735266156905447 - 2885.1099999999997 -0.0 263.2445000426994 0.00028327612365018677 - 2902.9449999999997 -0.0 262.8415224365277 0.0002790286465999648 - 2921.58 -0.0 262.42103995931274 0.0002746061671442548 - 2941.04 -0.0 261.98256324961994 0.0002700047826650741 - 2961.365 -0.0 261.525271899304 0.0002652172324061497 - 2982.58 -0.0 261.0486907769389 0.0002602400009399265 - 3004.71 -0.0 260.55235161198914 0.000255069759811069 - 3027.79 -0.0 260.0355695567649 0.0002497010544796127 - 3051.8450000000003 -0.0 259.49789209109974 0.00024413098645838086 - 3076.895 -0.0 258.9389859371834 0.00023835801994738452 - 3102.96 -0.0 258.35852502737936 0.00023238081718315108 - 3130.0699999999997 -0.0 257.75596865621014 0.0002261959689801103 - 3158.25 -0.0 257.13089633202185 0.0002198014571784731 - 3187.51 -0.0 256.4832280443057 0.0002131988826189025 - 3217.87 -0.0 255.83588175027643 0.00020709348875087792 - 3249.3599999999997 -0.0 255.19964330883812 0.00020182612727616482 - 3281.99 -0.0 254.54164607206658 0.00019640156224556038 - 3315.77 -0.0 253.8618174159068 0.0001908215535613851 - 3350.72 -0.0 253.15988884466148 0.00018508636108294612 - 3386.8549999999996 -0.0 252.43569838883678 0.00017919723809355667 - 3424.1899999999996 -0.0 251.68908967024706 0.0001731555994258938 - 3462.7349999999997 -0.0 250.9200893817243 0.0001669638752849161 - 3502.5 -0.0 250.1284712878834 0.00016062446370606015 - 3543.495 -0.0 249.3142998774209 0.00015414009701953684 - 3585.7250000000004 -0.0 248.4776361401757 0.00014751435569759807 - 3629.2 -0.0 247.61844557185518 0.00014075015925435843 - 3673.9300000000003 -0.0 246.73669767930963 0.00013385056615865994 - 3719.915 -0.0 245.8325621824419 0.0001268202953715263 - 3767.16 -0.0 244.9061124719276 0.0001196633936015751 - 3815.675 -0.0 243.93917816588527 0.00011467825616883388 - 3865.455 -0.0 242.9340075550911 0.00011162091929331613 - 3916.5 0.0 241.9064458549572 0.00010851500747621877 - 3968.8100000000004 0.0 240.85669479320958 0.00010536249730248193 - 4022.385 0.0 239.78495669810397 0.00010216539025281861 - 4077.225 0.0 238.69143421152936 9.892571137828071e-5 - 4133.33 0.0 237.57633000765716 9.564550799380334e-5 - 4190.6900000000005 0.0 236.4400442851121 9.232742374611894e-5 - 4249.295 0.0 235.28290207757698 8.89740694936877e-5 - 4309.145 0.0 234.10523590260988 8.558756526352608e-5 - 4370.23 0.0 232.90737521220953 8.217052693534798e-5 - 4432.545 0.0 231.67880240976976 7.899430518019319e-5 - 4496.075000000001 0.0 230.3946787391585 7.669199996537603e-5 - 4560.8099999999995 0.0 229.09126349131424 7.437320838759246e-5 - 4626.74 0.0 227.76896931455786 7.203957368418927e-5 - 4693.85 0.0 226.42830360420388 6.969290118469227e-5 - 4762.13 0.0 225.06966783836282 6.733480334122536e-5 -] -# pchip in time broke things -a_pchip = [ - 6.25 -3.223895474387931e-14 344.57256713833937 0.0036245245415076383 - 24.48 -1.2064227053063234e-13 343.83788070682715 0.003561342988890416 - 47.875 -1.949998050173671e-13 342.90329351546205 0.003483122571131849 - 70.11 -2.305917833776293e-13 342.01715233411124 0.003409096709105384 - 91.135 -1.5352730903730964e-13 341.18111837181493 0.00333938183561283 - 110.92500000000001 5.868930770823464e-14 340.3958633655331 0.003274012272282246 - 129.47 3.025498634107228e-13 339.8235231019965 0.0032136331863819945 - 146.775 5.566116643692316e-13 339.31445799184155 0.0031575459404652837 - 162.875 8.32656877311734e-13 338.85356560863056 0.003105640724996747 - 177.825 1.1277299449135518e-12 338.42020741248996 0.0030575290578638606 - 191.69 1.4316255771335907e-12 337.9521504842157 0.0030124365776040218 - 204.565 1.7324080551116312e-12 337.57074450542115 0.002971147521730923 - 216.57 2.019233278942031e-12 337.2154573578035 0.0029327406099777997 - 227.835 2.2705924436206677e-12 336.88237449203496 0.0028967818593268442 - 238.51 2.4808632462804352e-12 336.5670084261369 0.002862778443831147 - 248.775 2.670803889845742e-12 336.2640042125891 0.0028301470046177583 - 258.83 2.858331293789672e-12 335.9674359734023 0.0027982457722790584 - 268.83 3.059589876186771e-12 335.6727227931577 0.0027665804337840207 - 278.83 3.2894174952411485e-12 335.37824173866716 0.002734976237945195 - 288.83 3.562329101944685e-12 335.0842104297892 0.0027034348557095425 - 298.83 3.893526434632925e-12 334.79022740408277 0.0026719529415005884 - 308.83 4.298898018956103e-12 334.49647765888784 0.0026405319189527487 - 318.83 4.795019168110603e-12 334.2029610842402 0.0026091717022533266 - 328.83 5.379444372513588e-12 333.86641982533143 0.0026103602174730807 - 338.83 6.010948310618802e-12 333.5176630016966 0.002620958617858943 - 348.83 6.6788654911351385e-12 333.1692520099049 0.002631532704611388 - 358.83 7.375671586451137e-12 332.82118657249447 0.002642082514476489 - 368.83 8.095577885455733e-12 332.4734664108339 0.0026526080841514556 - 378.83 8.83453129394927e-12 332.1260912453956 0.00266310945028658 - 388.83 9.590214334154808e-12 331.77906079600916 0.0026735866494871003 - 398.83 1.0361985019949492e-11 331.4323747821006 0.0026840397183149995 - 408.83 1.115101810781599e-11 331.086032922903 0.002694468693290634 - 418.83 1.1960241965443374e-11 330.74003493765525 0.002704873610894312 - 428.83 1.2782398395271278e-11 330.3943805457698 0.002715254507567672 - 438.83 1.3284336289570384e-11 330.0490694669768 0.0027256114197148967 - 448.83 1.330941754073174e-11 329.7041014214407 0.0027359443837037412 - 458.83 1.2875898357856121e-11 329.3594761299436 0.0027462534358671407 - 468.83 1.2029549047135709e-11 329.0151933139151 0.002756538612503577 - 478.83 1.0843654354045426e-11 328.67125269550223 0.002766799949877794 - 488.83 9.41901364791284e-12 328.32765399762275 0.002777037484221381 - 498.83 7.883941024522509e-12 327.98439694400844 0.0027872512517332945 - 508.83000000000004 6.394265365441273e-12 327.6414812592272 0.0027974412885801957 - 518.83 5.133330378641609e-12 327.29890666869966 0.0028076076308967634 - 528.83 4.311994648246338e-12 326.9566728986944 0.00281775031478581 - 538.83 3.986116262746866e-12 326.62981935896914 0.0028204582768689337 - 548.83 3.693318500050489e-12 326.31107146273257 0.002819316114847624 - 558.83 3.397707040297862e-12 325.99261726521803 0.0028181732204950686 - 568.83 3.106836016590991e-12 325.67445656288703 0.0028170295967807307 - 578.83 2.8288802747282256e-12 325.35658915285035 0.0028158852466749398 - 588.83 2.5726353727330186e-12 325.0390148328214 0.0028147401731485003 - 598.83 2.347517579318245e-12 324.7217334010665 0.0028135943791722834 - 608.83 2.163563871954122e-12 324.40474465629666 0.0028124478677162947 - 618.83 2.031431935510126e-12 324.0880483976675 0.002811300641749694 - 628.83 1.962400164344847e-12 323.77164442472997 0.0028101527042403724 - 638.83 1.9683676710936645e-12 323.455532537348 0.0028090040581542535 - 648.83 2.059812550006131e-12 323.1397125356406 0.0028078547064547955 - 658.83 2.2418205927107707e-12 322.8241842199248 0.0028067046521025015 - 668.83 2.519116924070881e-12 322.5089473906601 0.0028055538980544465 - 678.83 2.8961948576768476e-12 322.194001848395 0.00280440244726381 - 688.83 3.377303139798866e-12 321.87934739371116 0.0028032503026794004 - 698.83 3.966445946540885e-12 321.5649838271754 0.002802097467245233 - 708.83 4.667382885406145e-12 321.2509109492897 0.0028009439439000933 - 718.83 5.48362899867341e-12 320.93712856044596 0.0027997897355771487 - 728.83 6.418454766610168e-12 320.62363646088073 0.0027986348452035442 - 738.83 7.474886109602905e-12 320.3104344506362 0.0027974792757000646 - 748.83 8.694709419321928e-12 319.9972852522195 0.002794301652304971 - 758.83 1.2698675992835876e-11 319.682785862424 0.0027771413469767354 - 768.83 2.0695906253827866e-11 319.36857977450995 0.002760012890377515 - 778.83 3.208778020199613e-11 319.0546667818306 0.0027429162381512654 - 788.83 4.618739793508024e-11 318.7410466773804 0.002725851345981782 - 798.83 6.221957944322084e-11 318.42771925377656 0.0027088181695926047 - 808.83 7.932086437995837e-11 318.11468430323464 0.002691816664746894 - 818.83 9.65395118273387e-11 317.8019416175547 0.0026748467872473956 - 828.83 1.1283550007239457e-10 317.48949098810044 0.0026579084929363576 - 838.83 1.2708052639679156e-10 317.1773322057902 0.002641001737695539 - 848.83 1.3805800688053814e-10 316.8654650610844 0.0026241264774462037 - 858.83 1.4452097780383015e-10 316.55388934397564 0.0026072826681491344 - 868.83 1.4884090998022834e-10 316.24260484398417 0.002590470265804695 - 878.83 1.529021876460501e-10 315.93161135015214 0.002573689226452876 - 888.83 1.5675680817351168e-10 315.62090865103795 0.0025569395061733617 - 898.83 1.604618807389866e-10 315.3104965347141 0.0025402210610856 - 908.83 1.6407962635534701e-10 315.00037477506004 0.0025235338472391097 - 918.83 1.6767737790457968e-10 314.69064204275395 0.002506878608558256 - 928.83 1.713275801694661e-10 314.3810789462991 0.0024902535517853574 - 938.83 1.7510778986599127e-10 314.07180879834505 0.0024736596223617247 - 948.83 1.7910067567491578e-10 313.7628311648407 0.002457096774451791 - 958.83 1.8339401827397396e-10 313.4541455841644 0.0024405649620891233 - 968.83 1.8810572528587265e-10 313.1481368744625 0.0024245329901064782 - 978.83 1.9453158925803434e-10 312.8563252061238 0.0024112652953038813 - 988.83 2.0314373112903676e-10 312.56477103731913 0.002398021984814805 - 998.83 2.1360790039923836e-10 312.2734739420615 0.002384803022489697 - 1008.83 2.2554570073827536e-10 311.982433492304 0.0023716083722344697 - 1018.83 2.3853458984891384e-10 311.69315774968766 0.0023584494121256143 - 1028.83 2.521078793344155e-10 311.40119742418494 0.002345292440874166 - 1038.83 2.657546574346837e-10 311.1098214735451 0.0023321622408839318 - 1048.83 2.7891969986783165e-10 310.8208290869466 0.0023190721687951603 - 1058.83 2.910041679138473e-10 310.53106537199494 0.0023059985394585673 - 1068.83 3.0136479609639387e-10 310.24155575709995 0.0022929490072992787 - 1078.83 3.093141755834317e-10 309.95229977649717 0.002279923536442439 - 1088.83 3.15374476677436e-10 309.66329700326486 0.0022669220913740227 - 1098.83 3.209523086840557e-10 309.37454701246594 0.002253944636665445 - 1108.83 3.2613206828771644e-10 309.0860493814815 0.0022409911369756113 - 1118.83 3.309880691254269e-10 308.79780369032073 0.0022280615570527094 - 1128.83 3.3559120871365804e-10 308.50980952192504 0.0022151558617359035 - 1138.83 3.4000896844882517e-10 308.2220664624515 0.0022022740159568168 - 1148.83 3.4430541360719604e-10 307.93457410150575 0.002189415984740596 - 1158.83 3.485411933443783e-10 307.6473320323855 0.002176581733206992 - 1168.83 3.5277354069592144e-10 307.3603398523032 0.0021637712265712566 - 1178.83 3.5705627257743584e-10 307.07359716259504 0.002150984430144895 - 1188.83 3.6143978978368926e-10 306.78710356891344 0.0021382213093362463 - 1198.83 3.660385313975417e-10 306.46960991796146 0.0021375879338118085 - 1208.83 3.710095036413386e-10 306.13817059789227 0.0021424770546932463 - 1218.83 3.762449435316373e-10 305.8070716814573 0.0021473538878615476 - 1228.83 3.816284351347675e-10 305.476512302684 0.0021522198575346743 - 1238.83 3.870497664357774e-10 305.14613046794346 0.002157072440077767 - 1248.83 3.9240492933834536e-10 304.8160917380353 0.002161912819476801 - 1258.83 3.9759611966487257e-10 304.4863958281436 0.0021667410151411477 - 1268.83 4.0253173715645436e-10 304.1570424325075 0.0021715570463092743 - 1278.83 4.071263854728541e-10 303.82803123370786 0.0021763609321127884 - 1288.83 4.113008721927154e-10 303.4993619091982 0.0021811526916219975 - 1298.83 4.149822088129328e-10 303.1710341416253 0.0021859323439197085 - 1308.83 4.1811241343797045e-10 302.8430476151386 0.002190699908075137 - 1318.83 4.2089388596064343e-10 302.5154020121663 0.0021954554031206777 - 1328.83 4.234794867170036e-10 302.18809701476954 0.002200198848061553 - 1338.83 4.2592860106680146e-10 301.86113230463747 0.0022049302618757298 - 1348.83 4.282985647450371e-10 301.53450756308536 0.0022096496635138486 - 1358.83 4.306446638620506e-10 301.2082224710498 0.002214357071899139 - 1368.83 4.33020134903792e-10 300.88227670908583 0.002219052505927351 - 1378.83 4.3547616473176074e-10 300.5566699573657 0.0022237359844666815 - 1388.83 4.3806189058321597e-10 300.2314018956744 0.002228407526357698 - 1398.83 4.408244000699107e-10 299.90647220340617 0.0022330671504132544 - 1408.83 4.4380873118034984e-10 299.58188055956066 0.002237714875418413 - 1418.83 4.47057872278224e-10 299.2576266427433 0.0022423507201303873 - 1428.83 4.507856897069939e-10 298.9770809772997 0.0022352928336579537 - 1438.83 4.553200672416332e-10 298.7124432396562 0.0022240291216213876 - 1448.83 4.604614491512504e-10 298.44802210022397 0.0022127859509001187 - 1458.83 4.659924727812858e-10 298.18381741240364 0.0022015632926219372 - 1468.83 4.717000145822842e-10 297.9198290146524 0.00219036111783786 - 1478.83 4.77375190111222e-10 297.6560567943727 0.002179179397992159 - 1488.83 4.828133540310258e-10 297.39233267375965 0.002168016880076439 - 1498.83 4.878141001114755e-10 297.12899547311986 0.002156876011563444 - 1508.83 4.921812612270392e-10 296.8658739549265 0.002145755511170298 - 1518.83 4.957229093598236e-10 296.60296797345995 0.002134655350232767 - 1528.83 4.982513555968652e-10 296.3402773767356 0.0021235755000745624 - 1538.83 4.995831422561765e-10 296.0778020121606 0.0021125159320486563 - 1548.83 4.993827740541129e-10 295.8155417265301 0.002101476617537326 - 1558.83 4.976686391282577e-10 295.55349636602494 0.002090457527952207 - 1568.83 4.947841861677401e-10 295.2916657762081 0.0020794586347343443 - 1578.83 4.910630313480969e-10 295.03004980201695 0.0020684799093542107 - 1588.83 4.868289486571149e-10 294.7686482877643 0.0020575213233117824 - 1598.83 4.823958698956119e-10 294.50746107712956 0.002046582848136563 - 1608.83 4.780678846775547e-10 294.2464880131572 0.002035664455387637 - 1618.83 4.74139240428734e-10 293.98572893825303 0.0020247661166537248 - 1628.83 4.70894342388146e-10 293.72518369417685 0.0020138878035532094 - 1638.83 4.686077536072081e-10 293.4648521220433 0.002003029487734218 - 1648.83 4.675441949500592e-10 293.2047340623116 0.0019921911408746266 - 1658.83 4.679277842654832e-10 292.9383779679217 0.0019817618765605787 - 1668.83 4.692537248273421e-10 292.65116621035077 0.0019726233790889423 - 1678.83 4.712264940834364e-10 292.36422362348117 0.0019635013794234374 - 1688.83 4.737929367485363e-10 292.07754996261565 0.0019543958543386053 - 1698.83 4.768915534919004e-10 291.7911449824936 0.001945306780632695 - 1708.83 4.804525009393226e-10 291.50500843728616 0.001936234135127693 - 1718.83 4.84397591672591e-10 291.2191400805921 0.0019271778946693624 - 1728.83 4.886402942281011e-10 290.9335396654361 0.0019181380361272952 - 1738.83 4.930857330989663e-10 290.6482069442613 0.0019091145363949273 - 1748.83 4.976306887336912e-10 290.3631416689284 0.001900107372389602 - 1758.83 5.021635975364126e-10 290.0783435907103 0.001891116521052599 - 1768.83 5.065645518676236e-10 289.7938124602886 0.0018821419593491782 - 1778.83 5.106824697757992e-10 289.5095480277507 0.0018731836642686274 - 1788.83 5.137362372644704e-10 289.2255500425848 0.0018642416128242995 - 1798.83 5.154054859282424e-10 288.9418182536758 0.0018553157820536553 - 1808.83 5.157524473727393e-10 288.65835240930403 0.0018464061490183182 - 1818.83 5.148987395089615e-10 288.37515225714696 0.001837512690804161 - 1828.83 5.130253665553314e-10 288.0922175442846 0.0018286353845214035 - 1838.83 5.103727190357687e-10 287.80954801715666 0.0018197742073044123 - 1848.83 5.07240573779989e-10 287.52714342158646 0.0018109291363119224 - 1858.83 5.039880939250725e-10 287.2450035027805 0.0018021001487271073 - 1868.83 5.010338289137148e-10 286.96312800532456 0.0017932872217576207 - 1878.83 4.988557144947102e-10 286.681516673177 0.0017844903326356294 - 1888.83 4.979910727231328e-10 286.40016924967085 0.0017757094586178968 - 1898.83 4.990241175253719e-10 286.1173537383611 0.001767232253740821 - 1908.83 5.018255512057957e-10 285.82528161518724 0.001760352483196975 - 1918.83 5.058176017487573e-10 285.5334956016088 0.0017534848431040562 - 1928.83 5.10601968311474e-10 285.24199540464963 0.001746629316425514 - 1938.83 5.158089723311226e-10 284.95078073073415 0.0017397858861419502 - 1948.83 5.210975575247177e-10 284.65985128568497 0.001732954535251156 - 1958.83 5.261552898894739e-10 284.36920677471755 0.0017261352467681345 - 1968.83 5.306983577031664e-10 284.07884690243924 0.0017193280037251458 - 1978.83 5.344715715230469e-10 283.78877137284366 0.001712532789171733 - 1988.83 5.372483641860854e-10 283.498979889311 0.0017057495861747716 - 1998.83 5.38830790811378e-10 283.2094721546013 0.001698978377818489 - 2008.83 5.390495287961123e-10 282.920247870881 0.0016922191472046751 - 2018.83 5.377638778180365e-10 282.63130673970903 0.0016854718774526537 - 2028.83 5.287201693762967e-10 282.3426484619793 0.001678736551698994 - 2038.83 5.026889674542279e-10 282.05427273796596 0.0016720131530978367 - 2048.83 4.627386285536808e-10 281.7661792673212 0.0016653016648209393 - 2058.83 4.12141584301754e-10 281.47836774907375 0.0016586020700577195 - 2068.83 3.541332591572164e-10 281.1908378816243 0.0016519143520152839 - 2078.83 2.919120704088207e-10 280.9035893627442 0.0016452384939184784 - 2088.83 2.286394281766276e-10 280.6166218895714 0.0016385744790099177 - 2098.83 1.6743973541055918e-10 280.32993515860994 0.001631922290550041 - 2108.83 1.114003878919626e-10 280.04352886572605 0.0016252819118171417 - 2118.83 6.357177423203259e-11 279.7574027061456 0.0016186533261074148 - 2128.83 2.6967275873312878e-11 279.4715563744512 0.0016120365167349919 - 2138.83 4.563267087321911e-12 279.18598956458203 0.0016054314670320023 - 2148.83 -2.9496547182291155e-12 278.91299686293365 0.0015981777927892848 - 2158.83 -7.123725119971491e-12 278.65331523129095 0.0015902358781187456 - 2168.83 -1.0255357292544316e-11 278.39386042001973 0.001582308454329848 - 2178.83 -1.2586980650208028e-11 278.134632196375 0.0015743955007495364 - 2188.83 -1.4356075705923057e-11 277.8756303268398 0.0015664969967289942 - 2198.83 -1.5411940771691693e-11 277.61685457712895 0.0015586129216437394 - 2208.83 -1.5876724217773078e-11 277.3583047121941 0.0015507432548937299 - 2218.83 -1.6399847753102322e-11 277.0999804962883 0.0015428879759037978 - 2228.83 -1.7593788411737738e-11 276.8418816928227 0.001535047064122921 - 2238.83 -2.8095516723827004e-11 276.8174568661556 0.0014287716690216555 - 2248.83 -2.7985992429210072e-11 277.0715686775177 0.0012051424185277964 - 2258.83 4.649172857578549e-11 277.2606415628407 0.0010031046002354806 - 2268.83 5.864474605101974e-11 277.3665097422118 0.0008286368772392309 - 2278.83 -1.646062986855645e-12 277.330835068376 0.0007216421518183574 - 2288.83 -3.083007577223467e-12 277.09256115467815 0.0007111789125504795 - 2298.83 -4.418914169671072e-12 276.8544712448103 0.0007007362826229436 - 2308.83 -5.654803175160622e-12 276.61656515467183 0.0006903142321037609 - 2318.83 -6.792170239967255e-12 276.3788426992859 0.0006799127311041853 - 2328.83 -7.832986239123898e-12 276.1413036927955 0.000669531749778821 - 2338.83 -8.779697285038685e-12 275.90394794846475 0.0006591712583257446 - 2348.83 -9.635224722813463e-12 275.6667752786754 0.0006488312269866149 - 2358.83 -1.0402965129646085e-11 275.4297854949244 0.0006385116260467878 - 2368.83 -1.1086790317603256e-11 275.192978407824 0.0006282124258354349 - 2378.83 -1.1691047331813905e-11 274.95635382709963 0.0006179335967256578 - 2388.83 -1.2220558451071532e-11 274.7199115615876 0.0006076751091346035 - 2398.83 -1.2680621188075338e-11 274.48365141923523 0.0005974369335235835 - 2408.83 -1.3077008288465887e-11 274.24757320709847 0.0005872190403981894 - 2418.83 -1.3415967730704656e-11 274.01167673134097 0.0005770214003084096 - 2428.83 -1.3704222728844583e-11 273.77596179724725 0.0005668439838487778 - 2438.83 -1.3948971728794964e-11 273.54042820932693 0.0005566867616587019 - 2448.83 -1.415788841073105e-11 273.30507577109785 0.0005465497044221301 - 2458.83 -1.4339121688250076e-11 273.06990428516843 0.0005364327828678493 - 2468.83 -1.4498380815602197e-11 272.83491355327277 0.0005263359677696753 - 2478.83 -1.457586625853977e-11 272.60010337626636 0.0005162592299465619 - 2488.83 -1.4549360100351566e-11 272.36547355412745 0.0005062025402627189 - 2498.83 -1.4425550085672404e-11 272.131023885956 0.000496165869627728 - 2508.83 -1.4211744708096682e-11 271.8967541699728 0.00048614918899665764 - 2518.83 -1.3915873212707573e-11 271.66266420351815 0.0004761524693701766 - 2528.83 -1.3546485596196968e-11 271.4287537830524 0.00046617568179467246 - 2538.83 -1.311275260481745e-11 271.1950227041551 0.0004562187973623663 - 2548.83 -1.2624465735827275e-11 270.96147076152505 0.00044628178721142976 - 2558.83 -1.2092037238694761e-11 270.7280977489789 0.000436364622526099 - 2568.83 -1.1526500111604645e-11 270.4949034594528 0.0004264672745367943 - 2578.83 -1.0939508105433052e-11 270.26188768499924 0.0004165897145202309 - 2588.83 -1.0343335720615447e-11 270.029050216791 0.0004067319137995416 - 2598.83 -9.750878209676257e-12 269.79639084511774 0.00039689384374438826 - 2608.83 -9.175651573615662e-12 269.5639093593882 0.00038707547577108054 - 2618.83 -8.631792567089228e-12 269.3316055481293 0.00037727678134269086 - 2628.83 -8.134058692988588e-12 269.09947919898616 0.00036749773196917055 - 2638.83 -7.697828208224264e-12 268.86753009872444 0.00035773829920746796 - 2648.83 -7.339100116619705e-12 268.6357580332281 0.00034799845466164175 - 2658.83 -7.074319966024282e-12 268.4041979828298 0.00033844313405744734 - 2668.8450000000003 -6.8568597455589305e-12 268.17397337808615 0.00033595082302481617 - 2678.91 -6.639918073771856e-12 267.9427744314085 0.000333450842828394 - 2689.075 -6.423057688692167e-12 267.709456322259 0.0003309308744055996 - 2699.395 -6.205800470187678e-12 267.47276314000703 0.0003283774593404216 - 2709.915 -5.987974892600442e-12 267.23167205885693 0.00032577971510337446 - 2720.685 -5.769427859013487e-12 266.9850492223517 0.00032312562133688635 - 2731.75 -5.5502636252668585e-12 266.7318790865574 0.0003204044937589016 - 2743.1549999999997 -5.330770897643212e-12 266.4711498955205 0.0003176057511510233 - 2754.9449999999997 -5.111458893083204e-12 266.2018539109293 0.0003147189215701552 - 2767.16 -4.893184085968664e-12 265.92310172413966 0.00031173486948310084 - 2779.8450000000003 -4.6770053006968635e-12 265.63389412416603 0.0003086433547653599 - 2793.04 -4.464405864417709e-12 265.33335060165257 0.0003054354837438475 - 2806.79 -4.2571711044667256e-12 265.0204816908401 0.000302101281097326 - 2821.13 -4.057665818655125e-12 264.69453068213596 0.0002986333380444916 - 2836.095 -3.868703581680005e-12 264.3547458320207 0.00029502438066253406 - 2851.725 -3.693539242642133e-12 264.00026735827623 0.0002912660782606801 - 2868.05 -3.5360865703336227e-12 263.63046804896186 0.00028735266156905447 - 2885.1099999999997 -3.40073859977591e-12 263.2445000426994 0.00028327612365018677 - 2902.9449999999997 -3.2925474790792827e-12 262.8415224365277 0.0002790286465999648 - 2921.58 -3.2173108682220524e-12 262.42103995931274 0.0002746061671442548 - 2941.04 -3.182050649699705e-12 261.98256324961994 0.0002700047826650741 - 2961.365 -3.1969977585214855e-12 261.525271899304 0.0002652172324061497 - 2982.58 -3.267878341799429e-12 261.0486907769389 0.0002602400009399265 - 3004.71 -3.399526151037443e-12 260.55235161198914 0.000255069759811069 - 3027.79 -3.5967621244516384e-12 260.0355695567649 0.0002497010544796127 - 3051.8450000000003 -3.864180899266805e-12 259.49789209109974 0.00024413098645838086 - 3076.895 -4.205985919074902e-12 258.9389859371834 0.00023835801994738452 - 3102.96 -4.625886860965262e-12 258.35852502737936 0.00023238081718315108 - 3130.0699999999997 -5.127152712747204e-12 257.75596865621014 0.0002261959689801103 - 3158.25 -5.712231841579551e-12 257.13089633202185 0.0002198014571784731 - 3187.51 -6.382262483154324e-12 256.4832280443057 0.0002131988826189025 - 3217.87 -1.272808954985126e-11 255.83588175027643 0.00020709348875087792 - 3249.3599999999997 -6.701469040973507e-11 255.19964330883812 0.00020182612727616482 - 3281.99 -1.6437618182676539e-10 254.54164607206658 0.00019640156224556038 - 3315.77 -2.8668728428766863e-10 253.8618174159068 0.0001908215535613851 - 3350.72 -4.148333288748001e-10 253.15988884466148 0.00018508636108294612 - 3386.8549999999996 -5.293967495758919e-10 252.43569838883678 0.00017919723809355667 - 3424.1899999999996 -6.116046266143228e-10 251.68908967024706 0.0001731555994258938 - 3462.7349999999997 -6.444863645832589e-10 250.9200893817243 0.0001669638752849161 - 3502.5 -6.146720923823026e-10 250.1284712878834 0.00016062446370606015 - 3543.495 -5.427006021877186e-10 249.3142998774209 0.00015414009701953684 - 3585.7250000000004 -4.5387836143507887e-10 248.4776361401757 0.00014751435569759807 - 3629.2 -3.594476022417955e-10 247.61844557185518 0.00014075015925435843 - 3673.9300000000003 -2.6934736457441077e-10 246.73669767930963 0.00013385056615865994 - 3719.915 -1.9139664504212443e-10 245.8325621824419 0.0001268202953715263 - 3767.16 -1.3028455981664796e-10 244.9061124719276 0.0001196633936015751 - 3815.675 -7.830108157850404e-11 243.93917816588527 0.00011467825616883388 - 3865.455 -4.637518500042518e-12 242.9340075550911 0.00011162091929331613 - 3916.5 3.5287264104133626e-15 241.9064458549572 0.00010851500747621877 - 3968.8100000000004 1.2120895994986193e-11 240.85669479320958 0.00010536249730248193 - 4022.385 3.414867274116824e-11 239.78495669810397 0.00010216539025281861 - 4077.225 5.4524808853220665e-11 238.69143421152936 9.892571137828071e-5 - 4133.33 7.787272995998543e-11 237.57633000765716 9.564550799380334e-5 - 4190.6900000000005 1.1099212418753257e-10 236.4400442851121 9.232742374611894e-5 - 4249.295 1.5901017464191776e-10 235.28290207757698 8.89740694936877e-5 - 4309.145 2.2549721286241418e-10 234.10523590260988 8.558756526352608e-5 - 4370.23 3.1224552899727457e-10 232.90737521220953 8.217052693534798e-5 - 4432.545 4.21185648094344e-10 231.67880240976976 7.899430518019319e-5 - 4496.075000000001 6.103646527006787e-10 230.3946787391585 7.669199996537603e-5 - 4560.8099999999995 8.957434480296952e-10 229.09126349131424 7.437320838759246e-5 - 4626.74 1.2426056804539144e-9 227.76896931455786 7.203957368418927e-5 - 4693.85 1.585944523460796e-9 226.42830360420388 6.969290118469227e-5 - 4762.13 1.8261915630158955e-9 225.06966783836282 6.733480334122536e-5 -] -a_pchip = [ - 6.25 -6.1259903217166774e-12 344.5529112026114 0.003898678362546869 - 24.48 -2.2924235200082323e-11 343.8388735517545 0.0035787161744950183 - 47.875 -3.70535250342284e-11 342.9040308880771 0.0034875830022687905 - 70.11 -4.381665106522664e-11 342.01763054944763 0.003410599923191483 - 91.135 -2.9172993201867454e-11 341.1813610564126 0.003339919115728686 - 110.92500000000001 1.1152040525423038e-11 340.3959780776131 0.0032742015520312545 - 129.47 5.746860827349501e-11 339.82356403323195 0.0032136971514966917 - 146.775 1.0558024245642785e-10 339.31446867161884 0.0031575664226471244 - 162.875 1.5765829334433266e-10 338.8535681281892 0.0031056468527597366 - 177.825 2.131544941477726e-10 338.4202079300924 0.0030575307745459987 - 191.69 2.7018390314533323e-10 337.95215054929486 0.003012437021620099 - 204.565 3.2654580772275603e-10 337.5707444774635 0.002971147620487301 - 216.57 3.8024404050757403e-10 337.215457316803 0.002932740620656614 - 227.835 4.2726046264434997e-10 336.88237445696643 0.0028967818479856307 - 238.51 4.666365199731872e-10 336.5670083986975 0.002862778426605224 - 248.775 5.023982985070414e-10 336.2640041888455 0.002830146985357917 - 258.83 5.380054520487945e-10 335.96743594939176 0.0027982457515722883 - 268.83 5.765749796383921e-10 335.6727227648533 0.0027665804116694804 - 278.83 6.209688820090947e-10 335.3782417017184 0.00273497621442576 - 288.83 6.739719888198907e-10 335.08421037982055 0.00270343483078807 - 298.83 7.384831978366217e-10 334.7902273365504 0.0026719529151799605 - 308.83 8.17516158530861e-10 334.4964775690763 0.002640531891235827 - 318.83 9.142000378309009e-10 334.2029609702272 0.00260917167314297 - 328.83 1.0280326603947418e-9 333.86641963207296 0.002610360234572592 - 338.83 1.1511150317237723e-9 333.5176627928185 0.002620958639442493 - 348.83 1.2813564643176243e-9 333.1692517881479 0.0026315327306698634 - 358.83 1.4172785317205857e-9 332.82118633989677 0.002642082545000795 - 368.83 1.5577477640783655e-9 332.4734661688918 0.0026526081191325097 - 378.83 1.7019754712002823e-9 332.12609099507716 0.002663109489715308 - 388.83 1.849517643814811e-9 331.77906053885187 0.002673586693354446 - 398.83 1.998142842215273e-9 331.4323745187325 0.002684039766611917 - 408.83 2.148841474974841e-9 331.0860326516264 0.0026944687460080936 - 418.83 2.3035867946091503e-9 330.7400346584332 0.0027048736680232942 - 428.83 2.4609322973873906e-9 330.3943803085272 0.0027152545690991734 - 438.83 2.556755280014169e-9 330.04906934323907 0.002725611485639923 - 448.83 2.560965398536085e-9 329.70410143104044 0.002735944454013313 - 458.83 2.477100483846368e-9 329.359476263097 0.0027462535105522907 - 468.83 2.31396464223694e-9 329.0151935528734 0.002756538691555354 - 478.83 2.0856404055373554e-9 328.67125301458367 0.002766800033287256 - 488.83 1.8114953057336872e-9 328.32765436324877 0.0027770375719796 - 498.83 1.5161855343449772e-9 327.9843973147426 0.0027872513438313594 - 508.83000000000004 1.2296580606987953e-9 327.64148158581486 0.0027974413850092015 - 518.83 9.87152088950439e-10 327.2989068941075 0.0028076077316478223 - 528.83 8.292008405181067e-10 326.9566729845799 0.0028177504198500453 - 538.83 7.665348125337186e-10 326.62981955696023 0.0028204582913614047 - 548.83 7.102301502710433e-10 326.31107166017665 0.0028193161298832887 - 558.83 6.533837161007791e-10 325.9926174662329 0.0028181732360728073 - 568.83 5.974482402704805e-10 325.6744567651907 0.0028170296128994304 - 578.83 5.439959252921049e-10 325.3565893539948 0.0028158852633334845 - 588.83 4.947184254175393e-10 325.03901503018943 0.0028147401903457748 - 598.83 4.5142679565140655e-10 324.72173359187184 0.002813594396907177 - 608.83 4.160514194143112e-10 324.40474483758646 0.002812447885987697 - 618.83 3.9064196144686835e-10 324.0880485663214 0.002811300660556497 - 628.83 3.7736744496011387e-10 323.77164457746204 0.002810152723581467 - 638.83 3.7851655850422195e-10 323.4555326709988 0.002809004078028538 - 648.83 3.961054669326532e-10 323.13971264803916 0.002807854726861164 - 658.83 4.311142207230892e-10 322.8241843097305 0.002806704673039853 - 668.83 4.844541655648464e-10 322.50894745662197 0.0028055539195216803 - 678.83 5.569922769446719e-10 322.194001889335 0.002804402469259827 - 688.83 6.495483640639268e-10 321.8793474085265 0.0028032503252031046 - 698.83 7.628949611445743e-10 321.56498381483766 0.002802097490295526 - 708.83 8.977573885387708e-10 321.25091090884325 0.002800943967475883 - 718.83 1.0548138731877761e-9 320.9371284910101 0.0027997897596773414 - 728.83 1.2346956598154233e-9 320.62363636164736 0.00279863486982705 - 738.83 1.437987091172518e-9 320.3104343153308 0.0027974793008457947 - 748.83 1.6727294576914e-9 319.9972846745562 0.0027943014339853346 - 758.83 2.4432310289288167e-9 319.68278432875485 0.0027771411241279674 - 768.83 3.982324577350306e-9 319.36857720101955 0.0027600126630090496 - 778.83 6.174997640143525e-9 319.0546633533087 0.0027429160062725296 - 788.83 8.889208764492407e-9 318.74104260289226 0.0027258511096021863 - 798.83 1.1975880225467136e-8 318.42771476655435 0.0027088179287215455 - 808.83 1.526888990549061e-8 318.1146796605619 0.002691816419393755 - 818.83 1.8585062977992368e-8 317.80193710065515 0.0026748465374215485 - 828.83 2.1724163984115475e-8 317.48948690202536 0.0026579082386471524 - 838.83 2.4468889401839167e-8 317.1773288793048 0.002641001478952321 - 848.83 2.6584860695231218e-8 316.8654628384163 0.002624126214258301 - 858.83 2.7831767531505444e-8 316.5538880641052 0.0026072824005258623 - 868.83 2.866617174830754e-8 316.2426039070984 0.0025904699937553516 - 878.83 2.9450964455871202e-8 315.93161048384445 0.0025736889499867474 - 888.83 3.019613981753268e-8 315.6209078398446 0.002556939225299725 - 898.83 3.0912682262098085e-8 315.31049576179515 0.0025402207758137116 - 908.83 3.16125676255895e-8 315.00037402220136 0.0025235335575782163 - 918.83 3.230876429567534e-8 314.6906412903793 0.0025068783145174986 - 928.83 3.301523434940246e-8 314.381078173499 0.0024902532533740635 - 938.83 3.3746934682230236e-8 314.071807982813 0.0024736593195890974 - 948.83 3.4519818131773686e-8 313.7628302829471 0.0024570964673270197 - 958.83 3.53508346057149e-8 313.45414460732275 0.0024405646506213833 - 968.83 3.6262754228837934e-8 313.14813597261104 0.0024245327465873662 - 978.83 3.75054685380676e-8 312.8563237703543 0.0024112650488273173 - 988.83 3.917016566776386e-8 312.56476905210894 0.002398021735387068 - 998.83 4.119255604873281e-8 312.2734715072447 0.0023848027701170536 - 1008.83 4.349979778661058e-8 311.98243071990754 0.002371608116923177 - 1018.83 4.6010491860630785e-8 311.6931547637272 0.002358449153880674 - 1028.83 4.863467745005571e-8 311.40119436240195 0.002345292179704252 - 1038.83 5.1271092102327317e-8 311.1098184880447 0.002332161976795027 - 1048.83 5.38040101408818e-8 310.8208263361309 0.0023190719017916763 - 1058.83 5.6127997416003034e-8 310.53106302227746 0.0023059982695475922 - 1068.83 5.8119105743912175e-8 310.24155399024323 0.0022929487344870146 - 1078.83 5.964492254879005e-8 309.95229861354323 0.0022799232607350803 - 1088.83 6.080626304319141e-8 309.66329617723846 0.002266921812777756 - 1098.83 6.187439559157866e-8 309.37454631756884 0.0022539443551864474 - 1108.83 6.28656279859526e-8 309.0860487955451 0.002240990852620049 - 1118.83 6.379431437955283e-8 308.7978031931179 0.0022280612698267446 - 1128.83 6.467414094718925e-8 308.5098090942489 0.0022151555716456847 - 1138.83 6.551812588026386e-8 308.22206608610986 0.002202273723008485 - 1148.83 6.633861938157733e-8 307.9345737593172 0.002189415688940282 - 1158.83 6.714730365997275e-8 307.64733170817453 0.0021765814345608226 - 1168.83 6.79551929250876e-8 307.36033953089543 0.002163770925085344 - 1178.83 6.877263338189626e-8 307.0735968298134 0.002150984125825393 - 1188.83 6.960930322488707e-8 306.7871032057392 0.0021382210021943042 - 1198.83 7.048719913404798e-8 306.4696081614425 0.002137588140256758 - 1208.83 7.143648384272758e-8 306.1381687298073 0.0021424772697718353 - 1218.83 7.243633046268491e-8 305.8070694140606 0.002147354201654036 - 1228.83 7.346426808897064e-8 305.4765088822958 0.0021522204940797826 - 1238.83 7.44990436015647e-8 305.14612468400827 0.002157073752696759 - 1248.83 7.552062167929863e-8 304.8160823158028 0.002161915178726274 - 1258.83 7.651018481487972e-8 304.4863819451006 0.0021667446617174542 - 1268.83 7.745013333103714e-8 304.157024083004 0.0021715619874569745 - 1278.83 7.832408539781649e-8 303.82800935094394 0.0021763669073676193 - 1288.83 7.911687705090059e-8 303.49933830998657 0.002181159189040668 - 1298.83 7.981456221048589e-8 303.1710113713101 0.002185938644320787 - 1308.83 8.040610468141861e-8 302.8430287432796 0.002190705133814584 - 1318.83 8.093052763431084e-8 302.5153904789621 0.0021954585645466694 - 1328.83 8.141726938156754e-8 302.1880960736467 0.0022001990078997767 - 1338.83 8.187777706204994e-8 301.8611336426212 0.0022049295673418523 - 1348.83 8.232309669547228e-8 301.53451188943984 0.002209647838972374 - 1358.83 8.276387317836385e-8 301.20823053370765 0.0022143538273783603 - 1368.83 8.321035027995098e-8 300.88228928384166 0.002219047541178915 - 1378.83 8.367237063792558e-8 300.55668896958525 0.0022237285600041567 - 1388.83 8.415937575423002e-8 300.2314313425312 0.002228396112872605 - 1398.83 8.468040599054647e-8 299.9065984335459 0.0022330188076200505 - 1408.83 8.524410056450771e-8 299.58217181889273 0.0022376035966240196 - 1418.83 8.585869754519959e-8 299.25808132397185 0.00224217714037602 - 1428.83 8.656523604341075e-8 298.9775719801818 0.0022351055985201118 - 1438.83 8.742663392227853e-8 298.7129223824971 0.0022238464006321987 - 1448.83 8.840451955217264e-8 298.44848930124886 0.0022126077943398796 - 1458.83 8.945711649914266e-8 298.18427259047206 0.0022013897493948185 - 1468.83 9.054347875469432e-8 297.9202720933061 0.0021901922349106435 - 1478.83 9.162349074204507e-8 297.6564877027095 0.002179015219681606 - 1488.83 9.265786732216436e-8 297.39275134020414 0.002167857450415375 - 1498.83 9.36081538002248e-8 297.1294018534373 0.0021567213636192505 - 1508.83 9.44367259315737e-8 296.8662680091755 0.002145605675945021 - 1518.83 9.510678992878862e-8 296.6033496766416 0.0021345103525182577 - 1528.83 9.558238246782297e-8 296.3406467206649 0.0021234353577995187 - 1538.83 9.582836919521777e-8 296.07815902699485 0.002112380655887611 - 1548.83 9.578048368889855e-8 295.81588643521843 0.0021013462108048567 - 1558.83 9.544237892290833e-8 295.5538287216144 0.002090331986778847 - 1568.83 9.488005262159029e-8 295.29198570870085 0.0020793379484933473 - 1578.83 9.415758790071772e-8 295.0303572607302 0.0020683640612610766 - 1588.83 9.333715138887301e-8 294.76894323949335 0.002057410291125406 - 1598.83 9.247899321490653e-8 294.5077435041704 0.0020464766049111526 - 1608.83 9.164144699490592e-8 294.24675791129584 0.002035562970235039 - 1618.83 9.088092981880152e-8 293.9859863147884 0.002024669355489984 - 1628.83 9.025194223770188e-8 293.72542856601694 0.0020137957298125312 - 1638.83 8.980706825134803e-8 293.46508451390633 0.002002942063036949 - 1648.83 8.959697529673579e-8 293.20495400993843 0.0019921083256354117 - 1658.83 8.966452285781114e-8 292.938593663441 0.0019816803249343208 - 1668.83 8.991291496043059e-8 292.65140761212723 0.0019725320797180463 - 1678.83 9.028549414406978e-8 292.3644904579898 0.0019634004570382975 - 1688.83 9.077205784061904e-8 292.07784193775245 0.0019542854327549335 - 1698.83 9.136080861323226e-8 291.79146181015386 0.0019451869822743142 - 1708.83 9.203835415758702e-8 291.505349836365 0.0019361050804504278 - 1718.83 9.278970730259704e-8 291.21950577863464 0.001927039701547256 - 1728.83 9.359828601082563e-8 290.9339294002029 0.0019179908192703218 - 1738.83 9.44459133795609e-8 290.64862046505135 0.0019089584068598922 - 1748.83 9.531281764111748e-8 290.36357873754855 0.0018999424372229427 - 1758.83 9.617763216342146e-8 290.0788039820689 0.001890942883073686 - 1768.83 9.701739545063289e-8 289.79429596558475 0.0018819597170565093 - 1778.83 9.780318103707486e-8 289.5100545340192 0.001872992911843777 - 1788.83 9.838540199502798e-8 289.22607946931686 0.0018640424401737766 - 1798.83 9.870268085168395e-8 288.94237042323925 0.001855108274867877 - 1808.83 9.876691697697205e-8 288.658927098465 0.001846190388855136 - 1818.83 9.860137981045707e-8 288.37574923835973 0.001837288755165155 - 1828.83 9.824070886234229e-8 288.09283658561304 0.0018284033469132843 - 1838.83 9.773091371367177e-8 287.81018888222025 0.001819534137290028 - 1848.83 9.712937401679319e-8 287.5278058695205 0.0018106810995543927 - 1858.83 9.65048394960147e-8 287.24568728818815 0.0018018442070346131 - 1868.83 9.593742994751898e-8 286.9638328781832 0.001793023433140682 - 1878.83 9.551863523968508e-8 286.6822423786625 0.001784218751390377 - 1888.83 9.535131531335053e-8 286.40091552970785 0.0017754301354410734 - 1898.83 9.554730993246399e-8 286.1181237941162 0.001766943882295185 - 1908.83 9.608187818192752e-8 285.8260968750253 0.0017600471789888188 - 1918.83 9.684441271678799e-8 285.53435587949264 0.0017531627333564359 - 1928.83 9.775866784004452e-8 285.24290048010465 0.0017462905328423932 - 1938.83 9.875387625099607e-8 284.9517303587258 0.0017394305662911844 - 1948.83 9.976474904457428e-8 284.6608451921283 0.00173258282448274 - 1958.83 1.0073147571088171e-7 284.37024464925514 0.0017257473008771653 - 1968.83 1.015997241348259e-7 284.07992838869785 0.001718923992538668 - 1978.83 1.0232064059560086e-7 283.789896056106 0.0017121129010833163 - 1988.83 1.0285084976651972e-7 283.500147282279 0.0017053140333758694 - 1998.83 1.0315245471530912e-7 283.21068168276514 0.0016985274016716593 - 2008.83 1.0319303690324043e-7 282.9214988595253 0.0016917530230123818 - 2018.83 1.0294565618552468e-7 282.6325991712213 0.0016849909179890736 - 2028.83 1.0121339543676649e-7 282.3439833421706 0.001678241108932615 - 2038.83 9.622946274515496e-8 282.0556497966918 0.0016715036178180651 - 2048.83 8.858125790128157e-8 281.76759657288255 0.00166477846498547 - 2058.83 7.889525491021572e-8 281.47982325684774 0.0016580656684286462 - 2068.83 6.779081967414167e-8 281.1923294717596 0.0016513652433556073 - 2078.83 5.5880209990255126e-8 280.9051148470264 0.0016446772024544076 - 2088.83 4.376857554781635e-8 280.61817901653137 0.0016380015565449343 - 2098.83 3.2053957920829985e-8 280.33152161630204 0.00163133831544215 - 2108.83 2.1327290548560513e-8 280.0451422819522 0.0016246874889051697 - 2118.83 1.2172398660178059e-8 279.75904064604106 0.0016180490876183846 - 2128.83 5.165998828156573e-9 279.4732163352845 0.0016114231242314095 - 2138.83 8.776908927420187e-10 279.18766924454627 0.001604809614600812 - 2148.83 -5.602545871921578e-10 278.9146811702831 0.001597553883460298 - 2158.83 -1.358923292888843e-9 278.6549870216127 0.0015896166080633589 - 2168.83 -1.9579062496490032e-9 278.395518742627 0.0015816942883850726 - 2178.83 -2.4036565390422533e-9 278.1362757689246 0.0015737869324603596 - 2188.83 -2.7416616150707133e-9 277.8772577110734 0.001565894559544682 - 2198.83 -2.943163721418783e-9 277.6184641643274 0.0015580172070936162 - 2208.83 -3.031569104601539e-9 277.3598947483826 0.0015501549448757887 - 2218.83 -3.1310828838976857e-9 277.10154886667254 0.0015423079080889271 - 2228.83 -3.3587718615106473e-9 276.8434263941531 0.0015344763976797937 - 2238.83 -5.364974579967607e-9 276.8180439443292 0.0014285544398218019 - 2248.83 -5.343819019905984e-9 277.0715757963272 0.0012051357001056783 - 2258.83 8.886796776535882e-9 277.26064300292234 0.0010030992310352828 - 2268.83 1.1215684248821834e-8 277.3665284589378 0.0008286311650475241 - 2278.83 -3.1160878666513333e-10 277.3308441914104 0.0007216418169504396 - 2288.83 -5.865894549971108e-10 277.09256308714555 0.0007111785704620144 - 2298.83 -8.424328396344343e-10 276.8544731858216 0.0007007359333290642 - 2308.83 -1.0793086486728905e-9 276.6165671045048 0.0006903138756195785 - 2318.83 -1.297476075914047e-9 276.37884465833395 0.0006799123674447881 - 2328.83 -1.4972867811126837e-9 276.141305661568 0.0006695313789592753 - 2338.83 -1.6791853380501736e-9 275.90394992758746 0.0006591708803610953 - 2348.83 -1.843709344963132e-9 275.66677726888946 0.000648830841891884 - 2358.83 -1.9914894595827513e-9 275.429787497085 0.0006385112338369754 - 2368.83 -2.123249411874698e-9 275.1929804229014 0.0006282120265255195 - 2378.83 -2.239806007607546e-9 274.9563558561778 0.0006179331903305951 - 2388.83 -2.342069129064774e-9 274.71991360586406 0.0006076746956693274 - 2398.83 -2.431041734274062e-9 274.48365348002 0.0005974365130030065 - 2408.83 -2.5078198553632642e-9 274.24757528581443 0.0005872186128372021 - 2418.83 -2.573592596855139e-9 274.01167882952274 0.0005770209657218804 - 2428.83 -2.6296421344417955e-9 273.77596391654055 0.0005668435422515532 - 2438.83 -2.6773437125053472e-9 273.5404303514888 0.0005566863130656072 - 2448.83 -2.7181656429151528e-9 273.3050779379956 0.0005465492488479686 - 2458.83 -2.75366930324083e-9 273.0699064784269 0.0005364323203274023 - 2468.83 -2.7849487219540435e-9 272.83491576629143 0.0005263354982777028 - 2478.83 -2.8004948900280817e-9 272.6001055990871 0.000516258753517802 - 2488.83 -2.79601712163958e-9 272.3654757848507 0.0005062020569118879 - 2498.83 -2.772786292149335e-9 272.1310261262528 0.0004961653793695216 - 2508.83 -2.7321951231962924e-9 271.8967564216603 0.0004861486918457491 - 2518.83 -2.675758180059834e-9 271.66266646855826 0.00047615196534121833 - 2528.83 -2.6051118687884887e-9 271.4287560635524 0.0004661751709022946 - 2538.83 -2.522014433151899e-9 271.19502500236575 0.0004562182796211784 - 2548.83 -2.4283459524757844e-9 270.9614730798405 0.00044628126263602 - 2558.83 -2.3261083397037663e-9 270.7281000899359 0.0004363640911310338 - 2568.83 -2.2174253388900508e-9 270.49490582573077 0.0004264667363366192 - 2578.83 -2.1045425245695115e-9 270.2618900794183 0.0004165891695294695 - 2588.83 -1.9898273004305292e-9 270.0290526423123 0.0004067313620326969 - 2598.83 -1.8757689000218894e-9 269.79639330484315 0.0003968932852159421 - 2608.83 -1.7649783876672786e-9 269.56391185655855 0.0003870749104954936 - 2618.83 -1.660188662832444e-9 269.3316080861247 0.0003772762093344026 - 2628.83 -1.5642544646230023e-9 269.09948178132487 0.00036749715324259905 - 2638.83 -1.48015238019816e-9 268.86753272906225 0.00035773771377701087 - 2648.83 -1.410980850941255e-9 268.6357607153364 0.00034799786254167557 - 2658.83 -1.3599265139253918e-9 268.4042008073005 0.00033844299715046793 - 2668.8450000000003 -1.3179976320953101e-9 268.1739761911295 0.0003359506869430297 - 2678.91 -1.2761615409972416e-9 267.94277722753003 0.0003334507075743674 - 2689.075 -1.2343344583099915e-9 267.7094591015041 0.0003309307399859793 - 2699.395 -1.1924245924064707e-9 267.4727659022921 0.00032837732576631196 - 2709.915 -1.1503991924658399e-9 267.2316748039932 0.0003257795823894843 - 2720.685 -1.1082289912480648e-9 266.98505195016867 0.00032312548950190646 - 2731.75 -1.0659343214147318e-9 266.73188179669563 0.0003204043628250645 - 2743.1549999999997 -1.0235710733040915e-9 266.47115258768866 0.0003176056211440674 - 2754.9449999999997 -9.812376699908693e-10 266.20185658466306 0.0003147187925192907 - 2767.16 -9.390995494048045e-10 265.9231043790041 0.0003117347414205676 - 2779.8450000000003 -8.9736120446335e-10 265.6338967596328 0.0003086432277267934 - 2793.04 -8.563090779957608e-10 265.33335321715003 0.0003054353577678351 - 2806.79 -8.162879155749886e-10 265.0204842857781 0.00030210115622576354 - 2821.13 -7.777543474925264e-10 264.6945332558255 0.0002986332143217366 - 2836.095 -7.412516500943721e-10 264.354748383804 0.00029502425813536027 - 2851.725 -7.07408274382031e-10 264.000269887414 0.0002912659569786291 - 2868.05 -6.769798649998274e-10 263.6304705546943 0.00028735254158358743 - 2885.1099999999997 -6.508145042642245e-10 263.244502524242 0.00028327600501542807 - 2902.9449999999997 -6.298873886193068e-10 262.84152489303506 0.0002790285293726397 - 2921.58 -6.153174596662574e-10 262.4210423899563 0.0002746060513824457 - 2941.04 -6.084596151637519e-10 261.9825656537339 0.0002700046684281693 - 2961.365 -6.112874583465952e-10 261.52527427599074 0.0002652171197559579 - 2982.58 -6.249048609268393e-10 261.0486931249124 0.0002602398899394354 - 3004.71 -6.502430954504185e-10 260.5523539298452 0.0002550696505243849 - 3027.79 -6.882304712670306e-10 260.03557184303907 0.00024970094697266787 - 3051.8450000000003 -7.397511296482627e-10 259.4978943442545 0.00024413088079808576 - 3076.895 -8.056131484940505e-10 258.93898815564467 0.0002383579162011786 - 3102.96 -8.865286574448858e-10 258.3585272094971 0.00023238071541893774 - 3130.0699999999997 -9.83123928403811e-10 257.75597080025904 0.00022619586926694526 - 3158.25 -1.0958659847824267e-9 257.1308984361954 0.00021980135958610516 - 3187.51 -1.2249680670122317e-9 256.48323032029964 0.00021319878721657394 - 3217.87 -2.4483723800934397e-9 255.83588675265125 0.00020709342208705738 - 3249.3599999999997 -1.291211458195166e-8 255.1996512911387 0.00020182606403611148 - 3281.99 -3.167016003759804e-8 254.54165600690436 0.0001964015025306407 - 3315.77 -5.5221072743989826e-8 253.86182791293695 0.00019082149747173718 - 3350.72 -7.987535460528337e-8 253.15989862011907 0.00018508630871845146 - 3386.8549999999996 -1.018890944485715e-7 252.43570630943051 0.00017919718955318958 - 3424.1899999999996 -1.1764819265906663e-7 251.6890947965046 0.00017315555480761245 - 3462.7349999999997 -1.2389340196392432e-7 250.92009103338117 0.00016696383468502087 - 3502.5 -1.180689269774097e-7 250.12846988940842 0.00016062442721914052 - 3543.495 -1.041421285189992e-7 249.31429684138277 0.00015414006473832842 - 3585.7250000000004 -8.698869477244301e-8 248.47763250399808 0.00014751432771239963 - 3629.2 -6.877717030929521e-8 247.6184418908949 0.00014075013565345695 - 3673.9300000000003 -5.142081601026229e-8 246.73669437226496 0.000133850547028237 - 3719.915 -3.6418902942581816e-8 245.8325595023783 0.0001268202807945782 - 3767.16 -2.4660561756585092e-8 244.9061103013293 0.00011966338365834539 - 3815.675 -1.4710945951862424e-8 243.93917560583367 0.00011467825429489001 - 3865.455 -8.712815024977767e-10 242.93400590464944 0.00011162091918658735 - 3916.5 1.3080646983187112e-10 241.90644532591816 0.00010851500916277713 - 3968.8100000000004 2.502875975697813e-9 240.85669375314754 0.00010536250080711701 - 4022.385 6.683086582577602e-9 239.78495533713414 0.00010216539559902081 - 4077.225 1.0568203068570372e-8 238.69143266046467 9.89257185882252e-5 - 4133.33 1.503862331892752e-8 237.57632805448324 9.564551708833496e-5 - 4190.6900000000005 2.1396710681053314e-8 236.44004172554074 9.232743474440798e-5 - 4249.295 3.062384025291715e-8 235.28289878182107 8.897408241322871e-5 - 4309.145 4.34039518708285e-8 234.1052318084964 8.558758012047449e-5 - 4370.23 6.008037794286728e-8 232.90737029067014 8.217054374418121e-5 - 4432.545 8.102394196495548e-8 231.67879601666522 7.899431652737028e-5 - 4496.075000000001 1.1739931273144347e-7 230.39466950584827 7.669201260505208e-5 - 4560.8099999999995 1.722735106843547e-7 229.09125185326798 7.43732223260257e-5 - 4626.74 2.3896907125122515e-7 227.76895690037279 7.203958892656594e-5 - 4693.85 3.0498584764271574e-7 226.42829288493243 6.969291773503679e-5 - 4762.13 3.5117852238980756e-7 225.06965693368878 6.733482120250924e-5 -] -# pchip in vertical not in time -a_pchip = [ - 6.25 9.606946574196332e-6 344.5726759079331 0.003622583654954105 - 24.48 4.170153541165986e-5 343.83788070682715 0.003561342988890416 - 47.875 8.9660462794051e-5 342.90329351546205 0.003483122571131849 - 70.11 0.00013785620450788074 342.01715233411124 0.003409096709105384 - 91.135 0.00018225985843190877 341.18111837181493 0.00333938183561283 - 110.92500000000001 0.00022248103407824436 340.3958633655331 0.003274012272282246 - 129.47 0.0002597277625922707 339.8235231019965 0.0032136331863819945 - 146.775 0.0002946083545126916 339.31445799184155 0.0031575459404652837 - 162.875 0.0003272527093542365 338.85356560863056 0.003105640724996747 - 177.825 0.00035775906164403073 338.42020741248996 0.0030575290578638606 - 191.69 0.0003862105780829498 337.9521504842157 0.0030124365776040218 - 204.565 0.00041273972312789846 337.57074450542115 0.002971147521730923 - 216.57 0.0004375318745889267 337.2154573578035 0.0029327406099777997 - 227.835 0.00046076510357297276 336.88237449203496 0.0028967818593268442 - 238.51 0.000482530061555519 336.5670084261369 0.002862778443831147 - 248.775 0.0005030305687002388 336.2640042125891 0.0028301470046177583 - 258.83 0.0005225732399157731 335.9674359734023 0.0027982457722790584 - 268.83 0.0005414010033344634 335.6727227931577 0.0027665804337840207 - 278.83 0.0005595889459326096 335.37824173866716 0.002734976237945195 - 288.83 0.0005771483855673149 335.0842104297892 0.0027034348557095425 - 298.83 0.0005941353124937221 334.79022740408277 0.0026719529415005884 - 308.83 0.0006106503893650134 334.49647765888784 0.0026405319189527487 - 318.83 0.0006268389512324109 334.2029610842402 0.0026091717022533266 - 328.83 0.0006428748804669561 333.86641982533143 0.0026103602174730807 - 338.83 0.0006588360555503558 333.5176630016966 0.002620958617858943 - 348.83 0.0006747410748316479 333.1692520099049 0.002631532704611388 - 358.83 0.0006906034707591283 332.82118657249447 0.002642082514476489 - 368.83 0.0007064320801611507 332.4734664108339 0.0026526080841514556 - 378.83 0.0007222310442461263 332.1260912453956 0.00266310945028658 - 388.83 0.0007379998086025249 331.77906079600916 0.0026735866494871003 - 398.83 0.0007537331231988735 331.4323747821006 0.0026840397183149995 - 408.83 0.0007694210423837573 331.086032922903 0.002694468693290634 - 418.83 0.0007850489248858192 330.74003493765525 0.002704873610894312 - 428.83 0.0008005964889198483 330.3943805457698 0.002715254507567672 - 438.83 0.000815883826547799 330.0490694669768 0.0027256114197148967 - 448.83 0.0008304467390413915 329.7041014214407 0.0027359443837037412 - 458.83 0.0008438817777367577 329.3594761299436 0.0027462534358671407 - 468.83 0.0008558930728927526 329.0151933139151 0.002756538612503577 - 478.83 0.0008662923336909551 328.67125269550223 0.002766799949877794 - 488.83 0.0008749988482356681 328.32765399762275 0.002777037484221381 - 498.83 0.000882039483553918 327.98439694400844 0.0027872512517332945 - 508.83000000000004 0.000887548685595455 327.6414812592272 0.0027974412885801957 - 518.83 0.0008917684792327531 327.29890666869966 0.0028076076308967634 - 528.83 0.0008950484682610099 326.9566728986944 0.00281775031478581 - 538.83 0.0008978197350194966 326.62981935896914 0.0028204582768689337 - 548.83 0.000900288213013848 326.31107146273257 0.002819316114847624 - 558.83 0.0009024763790838056 325.99261726521803 0.0028181732204950686 - 568.83 0.0009044055721405366 325.67445656288703 0.0028170295967807307 - 578.83 0.0009060994646247153 325.35658915285035 0.0028158852466749398 - 588.83 0.0009075840625065233 325.0390148328214 0.0028147401731485003 - 598.83 0.0009088877052856489 324.7217334010665 0.0028135943791722834 - 608.83 0.000910041065991288 324.40474465629666 0.0028124478677162947 - 618.83 0.0009110771511821428 324.0880483976675 0.002811300641749694 - 628.83 0.0009120313009464232 323.77164442472997 0.0028101527042403724 - 638.83 0.0009129411889018457 323.455532537348 0.0028090040581542535 - 648.83 0.0009138465819298161 323.1397125356406 0.0028078547064547955 - 658.83 0.0009147872621115542 322.8241842199248 0.0028067046521025015 - 668.83 0.0009158017839528957 322.5089473906601 0.0028055538980544465 - 678.83 0.0009169275366145625 322.194001848395 0.00280440244726381 - 688.83 0.0009182007441527596 321.87934739371116 0.0028032503026794004 - 698.83 0.0009196564655191752 321.5649838271754 0.002802097467245233 - 708.83 0.0009213285945609805 321.2509109492897 0.0028009439439000933 - 718.83 0.00092324986002083 320.93712856044596 0.0027997897355771487 - 728.83 0.0009254518255368609 320.62363646088073 0.0027986348452035442 - 738.83 0.0009279648896426939 320.3104344506362 0.0027974792757000646 - 748.83 0.0009308188093066674 319.9972852522195 0.002794301652304971 - 758.83 0.0009343952088309012 319.682785862424 0.0027771413469767354 - 768.83 0.0009399311790845871 319.36857977450995 0.002760012890377515 - 778.83 0.0009485553852975535 319.0546667818306 0.0027429162381512654 - 788.83 0.0009611060760638331 318.7410466773804 0.002725851345981782 - 798.83 0.000978131083341662 318.42771925377656 0.0027088181695926047 - 808.83 0.0009998878224534806 318.11468430323464 0.002691816664746894 - 818.83 0.0010263432920859328 317.8019416175547 0.0026748467872473956 - 828.83 0.0010571740742898658 317.48949098810044 0.0026579084929363576 - 838.83 0.0010917663344803318 317.1773322057902 0.002641001737695539 - 848.83 0.0011292158214365859 316.8654650610844 0.0026241264774462037 - 858.83 0.0011683284991896147 316.55388934397564 0.0026072826681491344 - 868.83 0.0012080030236689824 316.24260484398417 0.002590470265804695 - 878.83 0.0012479969882099227 315.93161135015214 0.002573689226452876 - 888.83 0.0012882386541366872 315.62090865103795 0.0025569395061733617 - 898.83 0.0013286740542017394 315.3104965347141 0.0025402210610856 - 908.83 0.0013692669925857526 315.00037477506004 0.0025235338472391097 - 918.83 0.001409999044897611 314.69064204275395 0.002506878608558256 - 928.83 0.0014508695581744095 314.3810789462991 0.0024902535517853574 - 938.83 0.001491895650881454 314.07180879834505 0.0024736596223617247 - 948.83 0.0015331122129122608 313.7628311648407 0.002457096774451791 - 958.83 0.0015745719055885571 313.4541455841644 0.0024405649620891233 - 968.83 0.001616345397749727 313.1481368744625 0.0024245329901064782 - 978.83 0.0016586265162383583 312.8563252061238 0.0024112652953038813 - 988.83 0.0017018527590705623 312.56477103731913 0.002398021984814805 - 998.83 0.0017464123714366312 312.2734739420615 0.002384803022489697 - 1008.83 0.0017925943401491057 311.982433492304 0.0023716083722344697 - 1018.83 0.0018405883936427757 311.69315774968766 0.0023584494121256143 - 1028.83 0.0018904850019746792 311.40119742418494 0.002345292440874166 - 1038.83 0.0019422753768241045 311.1098214735451 0.0023321622408839318 - 1048.83 0.001995851471492587 310.8208290869466 0.0023190721687951603 - 1058.83 0.0020510059809039113 310.53106537199494 0.0023059985394585673 - 1068.83 0.0021074323416041107 310.24155575709995 0.0022929490072992787 - 1078.83 0.002164724731761468 309.95229977649717 0.002279923536442439 - 1088.83 0.002222445218730781 309.66329700326486 0.0022669220913740227 - 1098.83 0.002280434367241987 309.37454701246594 0.002253944636665445 - 1108.83 0.002338642528365203 309.0860493814815 0.0022409911369756113 - 1118.83 0.002397030686220194 308.79780369032073 0.0022280615570527094 - 1128.83 0.0024555704095916902 308.50980952192504 0.0022151558617359035 - 1138.83 0.0025142438519293823 308.2220664624515 0.0022022740159568168 - 1148.83 0.0025730437513479245 307.93457410150575 0.002189415984740596 - 1158.83 0.0026319734306269335 307.6473320323855 0.002176581733206992 - 1168.83 0.002691046797210989 307.3603398523032 0.0021637712265712566 - 1178.83 0.0027502883432096326 307.07359716259504 0.002150984430144895 - 1188.83 0.002809733145397369 306.78710356891344 0.0021382213093362463 - 1198.83 0.002869429380182476 306.46960991796146 0.0021375879338118085 - 1208.83 0.0029294574065295968 306.13817059789227 0.0021424770546932463 - 1218.83 0.002989901821767439 305.8070716814573 0.0021473538878615476 - 1228.83 0.0030508298984106767 305.476512302684 0.0021522198575346743 - 1238.83 0.0031122913083588837 305.14613046794346 0.002157072440077767 - 1248.83 0.003174318122896533 304.8160917380353 0.002161912819476801 - 1258.83 0.003236924812692997 304.4863958281436 0.0021667410151411477 - 1268.83 0.0033001082478025475 304.1570424325075 0.0021715570463092743 - 1278.83 0.0033638476976643548 303.82803123370786 0.0021763609321127884 - 1288.83 0.0034281048311024893 303.4993619091982 0.0021811526916219975 - 1298.83 0.0034928237163259213 303.1710341416253 0.0021859323439197085 - 1308.83 0.0035579309055488793 302.8430476151386 0.002190699908075137 - 1318.83 0.0036233529642897286 302.5154020121663 0.0021954554031206777 - 1328.83 0.003689048202187828 302.18809701476954 0.002200198848061553 - 1338.83 0.00375498644395565 301.86113230463747 0.0022049302618757298 - 1348.83 0.0038211450807716023 301.53450756308536 0.0022096496635138486 - 1358.83 0.003887509070280025 301.2082224710498 0.002214357071899139 - 1368.83 0.003954070936591191 300.88227670908583 0.002219052505927351 - 1378.83 0.004020830770281309 300.5566699573657 0.0022237359844666815 - 1388.83 0.004087796228392516 300.2314018956744 0.002228407526357698 - 1398.83 0.004154982534432888 299.90647220340617 0.0022330671504132544 - 1408.83 0.0042224124783764305 299.58188055956066 0.002237714875418413 - 1418.83 0.004290116416663083 299.2576266427433 0.0022423507201303873 - 1428.83 0.004358138656707799 298.9770809772997 0.0022352928336579537 - 1438.83 0.004426581495598367 298.7124432396562 0.0022240291216213876 - 1448.83 0.004495555123389772 298.44802210022397 0.0022127859509001187 - 1458.83 0.004565140327767898 298.18381741240364 0.0022015632926219372 - 1468.83 0.004635388163551553 297.9198290146524 0.00219036111783786 - 1478.83 0.004706319952692462 297.6560567943727 0.002179179397992159 - 1488.83 0.004777927284275275 297.39233267375965 0.002168016880076439 - 1498.83 0.004850172014517561 297.12899547311986 0.002156876011563444 - 1508.83 0.004922986266769813 296.8658739549265 0.002145755511170298 - 1518.83 0.004996272431515441 296.60296797345995 0.002134655350232767 - 1528.83 0.005069903166370782 296.3402773767356 0.0021235755000745624 - 1538.83 0.0051437213960850905 296.0778020121606 0.0021125159320486563 - 1548.83 0.0052175315703356295 295.8155417265301 0.002101476617537326 - 1558.83 0.005291094374051246 295.55349636602494 0.002090457527952207 - 1568.83 0.00536419457110258 295.2916657762081 0.0020794586347343443 - 1578.83 0.0054366566750974074 295.03004980201695 0.0020684799093542107 - 1588.83 0.005508344949427074 294.7686482877643 0.0020575213233117824 - 1598.83 0.005579163407266498 294.50746107712956 0.002046582848136563 - 1608.83 0.005649055811574167 294.2464880131572 0.002035664455387637 - 1618.83 0.005718005675092142 293.98572893825303 0.0020247661166537248 - 1628.83 0.005786036260346051 293.72518369417685 0.0020138878035532094 - 1638.83 0.005853210579645098 293.4648521220433 0.002003029487734218 - 1648.83 0.005919631395082053 293.2047340623116 0.0019921911408746266 - 1658.83 0.005985440919815178 292.9383779679217 0.0019817618765605787 - 1668.83 0.006050774726708625 292.65116621035077 0.0019726233790889423 - 1678.83 0.006115691634976708 292.36422362348117 0.0019635013794234374 - 1688.83 0.006180231711993674 292.07754996261565 0.0019543958543386053 - 1698.83 0.0062444258128834555 291.7911449824936 0.001945306780632695 - 1708.83 0.006308295580519674 291.50500843728616 0.001936234135127693 - 1718.83 0.006371853445525634 291.2191400805921 0.0019271778946693624 - 1728.83 0.006435102626274328 290.9335396654361 0.0019181380361272952 - 1738.83 0.006498037128888437 290.6482069442613 0.0019091145363949273 - 1748.83 0.006560641747240324 290.3631416689284 0.001900107372389602 - 1758.83 0.006622892062952041 290.0783435907103 0.001891116521052599 - 1768.83 0.006684754445395327 289.7938124602886 0.0018821419593491782 - 1778.83 0.006746185905589962 289.5095480277507 0.0018731836642686274 - 1788.83 0.006807103935681096 289.2255500425848 0.0018642416128242995 - 1798.83 0.006867367697971522 288.9418182536758 0.0018553157820536553 - 1808.83 0.006926860823342636 288.65835240930403 0.0018464061490183182 - 1818.83 0.006985502888703895 288.37515225714696 0.001837512690804161 - 1828.83 0.007043249416992811 288.0922175442846 0.0018286353845214035 - 1838.83 0.00710009187717495 287.80954801715666 0.0018197742073044123 - 1848.83 0.00715605768424394 287.52714342158646 0.0018109291363119224 - 1858.83 0.00721121019922146 287.2450035027805 0.0018021001487271073 - 1868.83 0.007265648729157248 286.96312800532456 0.0017932872217576207 - 1878.83 0.0073195085271291005 286.681516673177 0.0017844903326356294 - 1888.83 0.007372960792242868 286.40016924967085 0.0017757094586178968 - 1898.83 0.007426212621152002 286.1173537383611 0.001767232253740821 - 1908.83 0.007479482610084638 285.82528161518724 0.001760352483196975 - 1918.83 0.007532936306535805 285.5334956016088 0.0017534848431040562 - 1928.83 0.007586703950831198 285.24199540464963 0.001746629316425514 - 1938.83 0.007640886927744569 284.95078073073415 0.0017397858861419502 - 1948.83 0.007695557766497727 284.65985128568497 0.001732954535251156 - 1958.83 0.007750760140760537 284.36920677471755 0.0017261352467681345 - 1968.83 0.007806508868650919 284.07884690243924 0.0017193280037251458 - 1978.83 0.007862789912734851 283.78877137284366 0.001712532789171733 - 1988.83 0.007919560380026369 283.498979889311 0.0017057495861747716 - 1998.83 0.00797674852198756 283.2094721546013 0.001698978377818489 - 2008.83 0.008034253734528572 282.920247870881 0.0016922191472046751 - 2018.83 0.008091946558007605 282.63130673970903 0.0016854718774526537 - 2028.83 0.00814949249277905 282.3426484619793 0.001678736551698994 - 2038.83 0.008205397289412485 282.05427273796596 0.0016720131530978367 - 2048.83 0.008257940731652357 281.7661792673212 0.0016653016648209393 - 2058.83 0.00830574555961734 281.47836774907375 0.0016586020700577195 - 2068.83 0.008347779455193846 281.1908378816243 0.0016519143520152839 - 2078.83 0.008383355042036023 280.9035893627442 0.0016452384939184784 - 2088.83 0.008412129885565748 280.6166218895714 0.0016385744790099177 - 2098.83 0.008434106492972644 280.32993515860994 0.001631922290550041 - 2108.83 0.008449632313214061 280.04352886572605 0.0016252819118171417 - 2118.83 0.008459399737015087 279.7574027061456 0.0016186533261074148 - 2128.83 0.008464446096868548 279.4715563744512 0.0016120365167349919 - 2138.83 0.008466153667035004 279.18598956458203 0.0016054314670320023 - 2148.83 0.008466212081208525 278.91299686293365 0.0015981777927892848 - 2158.83 0.008465675839044643 278.65331523129095 0.0015902358781187456 - 2168.83 0.008464706437146178 278.39386042001973 0.001582308454329848 - 2178.83 0.008463398396389014 278.134632196375 0.0015743955007495364 - 2188.83 0.008461822313508845 277.8756303268398 0.0015664969967289942 - 2198.83 0.008460040128875353 277.61685457712895 0.0015586129216437394 - 2208.83 0.00845813906483152 277.3583047121941 0.0015507432548937299 - 2218.83 0.008456150475706135 277.0999804962883 0.0015428879759037978 - 2228.83 0.008454026552685468 276.8418816928227 0.001535047064122921 - 2238.83 0.008451470304362042 276.8174568661556 0.0014287716690216555 - 2248.83 0.008446921237812585 277.0715686775177 0.0012051424185277964 - 2258.83 0.008446957794584405 277.2606415628407 0.0010031046002354806 - 2268.83 0.008457171216922164 277.3665097422118 0.0008286368772392309 - 2278.83 0.008458911249522676 277.330835068376 0.0007216421518183574 - 2288.83 0.008458751975919464 277.09256115467815 0.0007111789125504795 - 2298.83 0.008458433333875784 276.8544712448103 0.0007007362826229436 - 2308.83 0.008457971639827876 276.61656515467183 0.0006903142321037609 - 2318.83 0.008457382333285697 276.3788426992859 0.0006799127311041853 - 2328.83 0.008456679976832908 276.1413036927955 0.000669531749778821 - 2338.83 0.008455878256126894 275.90394794846475 0.0006591712583257446 - 2348.83 0.00845498997989875 275.6667752786754 0.0006488312269866149 - 2358.83 0.008454027079953283 275.4297854949244 0.0006385116260467878 - 2368.83 0.008453000611169019 275.192978407824 0.0006282124258354349 - 2378.83 0.008451920751498195 274.95635382709963 0.0006179335967256578 - 2388.83 0.008450796801966762 274.7199115615876 0.0006076751091346035 - 2398.83 0.008449637186674389 274.48365141923523 0.0005974369335235835 - 2408.83 0.008448449452794453 274.24757320709847 0.0005872190403981894 - 2418.83 0.00844724027057405 274.01167673134097 0.0005770214003084096 - 2428.83 0.008446015433333988 273.77596179724725 0.0005668439838487778 - 2438.83 0.00844477985746879 273.54042820932693 0.0005566867616587019 - 2448.83 0.008443537582446694 273.30507577109785 0.0005465497044221301 - 2458.83 0.008442291770809652 273.06990428516843 0.0005364327828678493 - 2468.83 0.008441044724081581 272.83491355327277 0.0005263359677696753 - 2478.83 0.008439800611218665 272.60010337626636 0.0005162592299465619 - 2488.83 0.00843856851120161 272.36547355412745 0.0005062025402627189 - 2498.83 0.008437357251271451 272.131023885956 0.000496165869627728 - 2508.83 0.008436174652198475 271.8967541699728 0.00048614918899665764 - 2518.83 0.008435027528282223 271.66266420351815 0.0004761524693701766 - 2528.83 0.008433921687351485 271.4287537830524 0.00046617568179467246 - 2538.83 0.008432861930764302 271.1950227041551 0.0004562187973623663 - 2548.83 0.00843185205340797 270.96147076152505 0.00044628178721142976 - 2558.83 0.008430894843699037 270.7280977489789 0.000436364622526099 - 2568.83 0.008429992083583299 270.4949034594528 0.0004264672745367943 - 2578.83 0.008429144548535807 270.26188768499924 0.0004165897145202309 - 2588.83 0.008428352007560862 270.029050216791 0.0004067319137995416 - 2598.83 0.00842761322319202 269.79639084511774 0.00039689384374438826 - 2608.83 0.008426925951492081 269.5639093593882 0.00038707547577108054 - 2618.83 0.00842628694205311 269.3316055481293 0.00037727678134269086 - 2628.83 0.00842569193799641 269.09947919898616 0.00036749773196917055 - 2638.83 0.008425135675972547 268.86753009872444 0.00035773829920746796 - 2648.83 0.00842461188616133 268.6357580332281 0.00034799845466164175 - 2658.83 0.008424113292288846 268.4041979828298 0.00033844313405744734 - 2668.8450000000003 0.00842363247465228 268.17397337808615 0.00033595082302481617 - 2678.91 0.008423166401278145 267.9427744314085 0.000333450842828394 - 2689.075 0.00842271287798512 267.709456322259 0.0003309308744055996 - 2699.395 0.008422269794184268 267.47276314000703 0.0003283774593404216 - 2709.915 0.00842183576177864 267.23167205885693 0.00032577971510337446 - 2720.685 0.008421409439854166 266.9850492223517 0.00032312562133688635 - 2731.75 0.008420989934777683 266.7318790865574 0.0003204044937589016 - 2743.1549999999997 0.00842057656497165 266.4711498955205 0.0003176057511510233 - 2754.9449999999997 0.008420168838904526 266.2018539109293 0.0003147189215701552 - 2767.16 0.008419766585874835 265.92310172413966 0.00031173486948310084 - 2779.8450000000003 0.008419369570371621 265.63389412416603 0.0003086433547653599 - 2793.04 0.008418977768851357 265.33335060165257 0.0003054354837438475 - 2806.79 0.008418590987355281 265.0204816908401 0.000302101281097326 - 2821.13 0.008418209198373489 264.69453068213596 0.0002986333380444916 - 2836.095 0.008417832109117812 264.3547458320207 0.00029502438066253406 - 2851.725 0.008417458906607831 264.00026735827623 0.0002912660782606801 - 2868.05 0.008417088445376551 263.63046804896186 0.00028735266156905447 - 2885.1099999999997 0.008416718554615227 263.2445000426994 0.00028327612365018677 - 2902.9449999999997 0.008416346026411002 262.8415224365277 0.0002790286465999648 - 2921.58 0.008415966585971756 262.42103995931274 0.0002746061671442548 - 2941.04 0.008415574164496432 261.98256324961994 0.0002700047826650741 - 2961.365 0.008415159759450402 261.525271899304 0.0002652172324061497 - 2982.58 0.00841471169033219 261.0486907769389 0.0002602400009399265 - 3004.71 0.008414215442875631 260.55235161198914 0.000255069759811069 - 3027.79 0.008413653025905988 260.0355695567649 0.0002497010544796127 - 3051.8450000000003 0.008413002936618305 259.49789209109974 0.00024413098645838086 - 3076.895 0.008412239611602564 258.9389859371834 0.00023835801994738452 - 3102.96 0.008411332810557578 258.35852502737936 0.00023238081718315108 - 3130.0699999999997 0.008410246639659608 257.75596865621014 0.0002261959689801103 - 3158.25 0.008408939370292998 257.13089633202185 0.0002198014571784731 - 3187.51 0.008407363474598847 256.4832280443057 0.0002131988826189025 - 3217.87 0.008405218890420356 255.83588175027643 0.00020709348875087792 - 3249.3599999999997 0.008393271134003458 255.19964330883812 0.00020182612727616482 - 3281.99 0.008351412743288482 254.54164607206658 0.00019640156224556038 - 3315.77 0.008260476495526045 253.8618174159068 0.0001908215535613851 - 3350.72 0.008104623999478046 253.15988884466148 0.00018508636108294612 - 3386.8549999999996 0.00787344063905583 252.43569838883678 0.00017919723809355667 - 3424.1899999999996 0.0075644369243139525 251.68908967024706 0.0001731555994258938 - 3462.7349999999997 0.007186086619568106 250.9200893817243 0.0001669638752849161 - 3502.5 0.006761299010052584 250.1284712878834 0.00016062446370606015 - 3543.495 0.0063229503394740955 249.3142998774209 0.00015414009701953684 - 3585.7250000000004 0.005892523133045965 248.4776361401757 0.00014751435569759807 - 3629.2 0.005486081860045299 247.61844557185518 0.00014075015925435843 - 3673.9300000000003 0.005115471098356842 246.73669767930963 0.00013385056615865994 - 3719.915 0.0047865937975407405 245.8325621824419 0.0001268202953715263 - 3767.16 0.004497207916834608 244.9061124719276 0.0001196633936015751 - 3815.675 0.004235343561188026 243.93917816588527 0.00011467825616883388 - 3865.455 0.003992799049897532 242.9340075550911 0.00011162091929331613 - 3916.5 0.0037701773785292275 241.9064458549572 0.00010851500747621877 - 3968.8100000000004 0.003566706102255662 240.85669479320958 0.00010536249730248193 - 4022.385 0.0033793631035100562 239.78495669810397 0.00010216539025281861 - 4077.225 0.0032023886817871793 238.69143421152936 9.892571137828071e-5 - 4133.33 0.003026657687444747 237.57633000765716 9.564550799380334e-5 - 4190.6900000000005 0.0028381775313199797 236.4400442851121 9.232742374611894e-5 - 4249.295 0.002621172533961453 235.28290207757698 8.89740694936877e-5 - 4309.145 0.0023615094882103926 234.10523590260988 8.558756526352608e-5 - 4370.23 0.0020475770133657643 232.90737521220953 8.217052693534798e-5 - 4432.545 0.0016708338495675502 231.67880240976976 7.899430518019319e-5 - 4496.075000000001 0.0012024566425684656 230.3946787391585 7.669199996537603e-5 - 4560.8099999999995 0.0005801758690602509 229.09126349131424 7.437320838759246e-5 - 4626.74 -0.00023039587268771028 227.76896931455786 7.203957368418927e-5 - 4693.85 -0.0012211235795694937 226.42830360420388 6.969290118469227e-5 - 4762.13 -0.0023333882072868813 225.06966783836282 6.733480334122536e-5 -] -# pchip in vertical, not in time, + add q -a_pchip = [ - 6.25 9.606946574196332e-6 344.5726759079332 0.0 - 24.48 4.170153541165986e-5 343.83788070682715 0.0 - 47.875 8.9660462794051e-5 342.90329351546205 0.0 - 70.11 0.00013785620450788074 342.0171523341112 0.0 - 91.135 0.00018225985843190877 341.18111837181493 0.0 - 110.92500000000001 0.00022248103407824436 340.39586336553316 0.0 - 129.47 0.0002597277625922707 339.82352310199656 0.0 - 146.775 0.0002946083545126916 339.3144579918416 0.0 - 162.875 0.0003272527093542365 338.85356560863056 0.0 - 177.825 0.00035775906164403073 338.42020741248996 0.0 - 191.69 0.0003862105780829498 337.9521504842157 0.0 - 204.565 0.00041273972312789846 337.57074450542115 0.0 - 216.57 0.0004375318745889267 337.2154573578035 0.0 - 227.835 0.00046076510357297276 336.88237449203496 0.0 - 238.51 0.000482530061555519 336.5670084261369 0.0 - 248.775 0.0005030305687002388 336.2640042125891 0.0 - 258.83 0.0005225732399157731 335.9674359734023 0.0 - 268.83 0.0005414010033344634 335.6727227931577 0.0 - 278.83 0.0005595889459326096 335.37824173866716 0.0 - 288.83 0.0005771483855673149 335.0842104297892 0.0 - 298.83 0.0005941353124937221 334.79022740408277 0.0 - 308.83 0.0006106503893650134 334.4964776588879 0.0 - 318.83 0.0006268389512324109 334.2029610842402 0.0 - 328.83 0.0006428748804669561 333.8664198253314 0.0 - 338.83 0.0006588360555503558 333.5176630016966 0.0 - 348.83 0.0006747410748316479 333.1692520099049 0.0 - 358.83 0.0006906034707591283 332.82118657249447 0.0 - 368.83 0.0007064320801611507 332.4734664108339 0.0 - 378.83 0.0007222310442461263 332.12609124539557 0.0 - 388.83 0.0007379998086025249 331.77906079600916 0.0 - 398.83 0.0007537331231988735 331.4323747821006 0.0 - 408.83 0.0007694210423837573 331.086032922903 0.0 - 418.83 0.0007850489248858192 330.74003493765525 0.0 - 428.83 0.0008005964889198483 330.3943805457699 0.0 - 438.83 0.000815883826547799 330.0490694669768 0.0 - 448.83 0.0008304467390413915 329.7041014214407 0.0 - 458.83 0.0008438817777367577 329.3594761299436 0.0 - 468.83 0.0008558930728927526 329.0151933139152 0.0 - 478.83 0.0008662923336909551 328.67125269550223 0.0 - 488.83 0.0008749988482356681 328.32765399762275 0.0 - 498.83 0.000882039483553918 327.98439694400844 0.0 - 508.83000000000004 0.000887548685595455 327.6414812592272 0.0 - 518.83 0.0008917684792327531 327.2989066686997 0.0 - 528.83 0.0008950484682610099 326.9566728986944 0.0 - 538.83 0.0008978197350194966 326.62981935896914 0.0 - 548.83 0.000900288213013848 326.31107146273257 0.0 - 558.83 0.0009024763790838056 325.99261726521803 0.0 - 568.83 0.0009044055721405366 325.67445656288703 0.0 - 578.83 0.0009060994646247153 325.35658915285035 0.0 - 588.83 0.0009075840625065233 325.0390148328214 0.0 - 598.83 0.0009088877052856489 324.7217334010665 0.0 - 608.83 0.000910041065991288 324.40474465629666 0.0 - 618.83 0.0009110771511821428 324.0880483976675 0.0 - 628.83 0.0009120313009464232 323.77164442472997 0.0 - 638.83 0.0009129411889018457 323.455532537348 0.0 - 648.83 0.0009138465819298161 323.1397125356406 0.0 - 658.83 0.0009147872621115542 322.82418421992486 0.0 - 668.83 0.0009158017839528957 322.5089473906601 0.0 - 678.83 0.0009169275366145625 322.194001848395 0.0 - 688.83 0.0009182007441527596 321.87934739371116 0.0 - 698.83 0.0009196564655191752 321.5649838271754 0.0 - 708.83 0.0009213285945609805 321.2509109492897 0.0 - 718.83 0.00092324986002083 320.93712856044596 0.0 - 728.83 0.0009254518255368609 320.6236364608807 0.0 - 738.83 0.0009279648896426939 320.31043445063625 0.0 - 748.83 0.0009308188093066674 319.9972852522195 0.0 - 758.83 0.0009343952088309012 319.68278586242394 0.0 - 768.83 0.0009399311790845871 319.36857977451 0.0 - 778.83 0.0009485553852975535 319.0546667818306 0.0 - 788.83 0.0009611060760638331 318.7410466773804 0.0 - 798.83 0.000978131083341662 318.42771925377656 0.0 - 808.83 0.0009998878224534806 318.11468430323464 0.0 - 818.83 0.0010263432920859328 317.8019416175547 0.0 - 828.83 0.0010571740742898658 317.48949098810044 0.0 - 838.83 0.0010917663344803318 317.17733220579026 0.0 - 848.83 0.0011292158214365859 316.8654650610844 0.0 - 858.83 0.0011683284991896147 316.55388934397564 0.0 - 868.83 0.0012080030236689824 316.24260484398417 0.0 - 878.83 0.0012479969882099227 315.93161135015214 0.0 - 888.83 0.0012882386541366872 315.62090865103795 0.0 - 898.83 0.0013286740542017394 315.3104965347141 0.0 - 908.83 0.0013692669925857526 315.00037477506 0.0 - 918.83 0.001409999044897611 314.69064204275395 0.0 - 928.83 0.0014508695581744095 314.38107894629906 0.0 - 938.83 0.001491895650881454 314.07180879834505 0.0 - 948.83 0.0015331122129122608 313.76283116484063 0.0 - 958.83 0.0015745719055885571 313.4541455841644 0.0 - 968.83 0.001616345397749727 313.1481368744626 0.0 - 978.83 0.0016586265162383583 312.8563252061238 0.0 - 988.83 0.0017018527590705623 312.56477103731913 0.0 - 998.83 0.0017464123714366312 312.2734739420615 0.0 - 1008.83 0.0017925943401491057 311.9824334923039 0.0 - 1018.83 0.0018405883936427757 311.69315774968766 0.0 - 1028.83 0.0018904850019746792 311.40119742418494 0.0 - 1038.83 0.0019422753768241045 311.1098214735451 0.0 - 1048.83 0.001995851471492587 310.8208290869466 0.0 - 1058.83 0.0020510059809039113 310.5310653719949 0.0 - 1068.83 0.0021074323416041107 310.24155575709995 0.0 - 1078.83 0.002164724731761468 309.95229977649717 0.0 - 1088.83 0.002222445218730781 309.66329700326486 0.0 - 1098.83 0.002280434367241987 309.37454701246594 0.0 - 1108.83 0.002338642528365203 309.0860493814815 0.0 - 1118.83 0.002397030686220194 308.79780369032073 0.0 - 1128.83 0.0024555704095916902 308.50980952192504 0.0 - 1138.83 0.0025142438519293823 308.2220664624515 0.0 - 1148.83 0.0025730437513479245 307.9345741015058 0.0 - 1158.83 0.0026319734306269335 307.64733203238563 0.0 - 1168.83 0.002691046797210989 307.3603398523031 0.0 - 1178.83 0.0027502883432096326 307.07359716259504 0.0 - 1188.83 0.002809733145397369 306.78710356891344 0.0 - 1198.83 0.002869429380182476 306.46960991796135 0.0 - 1208.83 0.0029294574065295968 306.13817059789227 0.0 - 1218.83 0.002989901821767439 305.8070716814573 0.0 - 1228.83 0.0030508298984106767 305.476512302684 0.0 - 1238.83 0.0031122913083588837 305.14613046794346 0.0 - 1248.83 0.003174318122896533 304.81609173803525 0.0 - 1258.83 0.003236924812692997 304.48639582814354 0.0 - 1268.83 0.0033001082478025475 304.1570424325075 0.0 - 1278.83 0.0033638476976643548 303.82803123370786 0.0 - 1288.83 0.0034281048311024893 303.4993619091982 0.0 - 1298.83 0.0034928237163259213 303.1710341416253 0.0 - 1308.83 0.0035579309055488793 302.8430476151386 0.0 - 1318.83 0.0036233529642897286 302.5154020121663 0.0 - 1328.83 0.003689048202187828 302.18809701476954 0.0 - 1338.83 0.00375498644395565 301.86113230463747 0.0 - 1348.83 0.0038211450807716023 301.53450756308536 0.0 - 1358.83 0.003887509070280025 301.2082224710497 0.0 - 1368.83 0.003954070936591191 300.88227670908583 0.0 - 1378.83 0.004020830770281309 300.5566699573657 0.0 - 1388.83 0.004087796228392516 300.2314018956744 0.0 - 1398.83 0.004154982534432888 299.90647220340617 0.0 - 1408.83 0.0042224124783764305 299.58188055956066 0.0 - 1418.83 0.004290116416663083 299.2576266427433 0.0 - 1428.83 0.004358138656707799 298.97708097729964 0.0 - 1438.83 0.004426581495598367 298.71244323965607 0.0 - 1448.83 0.004495555123389772 298.44802210022397 0.0 - 1458.83 0.004565140327767898 298.18381741240364 0.0 - 1468.83 0.004635388163551553 297.9198290146524 0.0 - 1478.83 0.004706319952692462 297.6560567943727 0.0 - 1488.83 0.004777927284275275 297.3923326737596 0.0 - 1498.83 0.004850172014517561 297.12899547311986 0.0 - 1508.83 0.004922986266769813 296.86587395492637 0.0 - 1518.83 0.004996272431515441 296.60296797345995 0.0 - 1528.83 0.005069903166370782 296.3402773767356 0.0 - 1538.83 0.0051437213960850905 296.0778020121606 0.0 - 1548.83 0.0052175315703356295 295.8155417265301 0.0 - 1558.83 0.005291094374051246 295.55349636602494 0.0 - 1568.83 0.00536419457110258 295.2916657762081 0.0 - 1578.83 0.0054366566750974074 295.03004980201695 0.0 - 1588.83 0.005508344949427074 294.7686482877642 0.0 - 1598.83 0.005579163407266498 294.50746107712945 0.0 - 1608.83 0.005649055811574167 294.2464880131572 0.0 - 1618.83 0.005718005675092142 293.98572893825303 0.0 - 1628.83 0.005786036260346051 293.72518369417685 0.0 - 1638.83 0.005853210579645098 293.4648521220433 0.0 - 1648.83 0.005919631395082053 293.2047340623116 0.0 - 1658.83 0.005985440919815178 292.9383779679218 0.0 - 1668.83 0.006050774726708625 292.65116621035077 0.0 - 1678.83 0.006115691634976708 292.36422362348117 0.0 - 1688.83 0.006180231711993674 292.0775499626157 0.0 - 1698.83 0.0062444258128834555 291.7911449824936 0.0 - 1708.83 0.006308295580519674 291.5050084372861 0.0 - 1718.83 0.006371853445525634 291.2191400805921 0.0 - 1728.83 0.006435102626274328 290.9335396654361 0.0 - 1738.83 0.006498037128888437 290.6482069442613 0.0 - 1748.83 0.006560641747240324 290.3631416689284 0.0 - 1758.83 0.006622892062952041 290.0783435907103 0.0 - 1768.83 0.006684754445395327 289.7938124602886 0.0 - 1778.83 0.006746185905589962 289.5095480277507 0.0 - 1788.83 0.006807103935681096 289.2255500425848 0.0 - 1798.83 0.006867367697971522 288.9418182536758 0.0 - 1808.83 0.006926860823342636 288.6583524093041 0.0 - 1818.83 0.006985502888703895 288.37515225714696 0.0 - 1828.83 0.007043249416992811 288.09221754428455 0.0 - 1838.83 0.00710009187717495 287.80954801715666 0.0 - 1848.83 0.00715605768424394 287.52714342158646 0.0 - 1858.83 0.00721121019922146 287.2450035027805 0.0 - 1868.83 0.007265648729157248 286.96312800532456 0.0 - 1878.83 0.0073195085271291005 286.681516673177 0.0 - 1888.83 0.007372960792242868 286.40016924967085 0.0 - 1898.83 0.007426212621152002 286.1173537383611 0.0 - 1908.83 0.007479482610084638 285.8252816151872 0.0 - 1918.83 0.007532936306535805 285.5334956016088 0.0 - 1928.83 0.007586703950831198 285.24199540464963 0.0 - 1938.83 0.007640886927744569 284.9507807307342 0.0 - 1948.83 0.007695557766497727 284.659851285685 0.0 - 1958.83 0.007750760140760537 284.3692067747176 0.0 - 1968.83 0.007806508868650919 284.07884690243924 0.0 - 1978.83 0.007862789912734851 283.78877137284366 0.0 - 1988.83 0.007919560380026369 283.498979889311 0.0 - 1998.83 0.00797674852198756 283.2094721546013 0.0 - 2008.83 0.008034253734528572 282.92024787088104 0.0 - 2018.83 0.008091946558007605 282.6313067397091 0.0 - 2028.83 0.00814949249277905 282.3426484619793 0.0 - 2038.83 0.008205397289412485 282.05427273796596 0.0 - 2048.83 0.008257940731652357 281.7661792673212 0.0 - 2058.83 0.00830574555961734 281.47836774907375 0.0 - 2068.83 0.008347779455193846 281.1908378816243 0.0 - 2078.83 0.008383355042036023 280.9035893627442 0.0 - 2088.83 0.008412129885565748 280.6166218895713 0.0 - 2098.83 0.008434106492972644 280.32993515860994 0.0 - 2108.83 0.008449632313214061 280.043528865726 0.0 - 2118.83 0.008459399737015087 279.7574027061457 0.0 - 2128.83 0.008464446096868548 279.4715563744512 0.0 - 2138.83 0.008466153667035004 279.18598956458203 0.0 - 2148.83 0.008466212081208525 278.91299686293365 0.0 - 2158.83 0.008465675839044643 278.6533152312909 0.0 - 2168.83 0.008464706437146178 278.39386042001973 0.0 - 2178.83 0.008463398396389014 278.134632196375 0.0 - 2188.83 0.008461822313508845 277.8756303268399 0.0 - 2198.83 0.008460040128875353 277.61685457712895 0.0 - 2208.83 0.00845813906483152 277.3583047121941 0.0 - 2218.83 0.008456150475706135 277.0999804962883 0.0 - 2228.83 0.008454026552685468 276.84188169282277 0.0 - 2238.83 0.008451470304362042 276.8174568661556 0.0 - 2248.83 0.008446921237812585 277.0715686775177 0.0 - 2258.83 0.008446957794584405 277.2606415628407 0.0 - 2268.83 0.008457171216922164 277.3665097422118 0.0 - 2278.83 0.008458911249522676 277.33083506837596 0.0 - 2288.83 0.008458751975919464 277.09256115467815 0.0 - 2298.83 0.008458433333875784 276.8544712448103 0.0 - 2308.83 0.008457971639827876 276.6165651546719 0.0 - 2318.83 0.008457382333285697 276.3788426992859 0.0 - 2328.83 0.008456679976832908 276.1413036927954 0.0 - 2338.83 0.008455878256126894 275.9039479484648 0.0 - 2348.83 0.00845498997989875 275.66677527867546 0.0 - 2358.83 0.008454027079953283 275.4297854949244 0.0 - 2368.83 0.008453000611169019 275.192978407824 0.0 - 2378.83 0.008451920751498195 274.95635382709963 0.0 - 2388.83 0.008450796801966762 274.71991156158754 0.0 - 2398.83 0.008449637186674389 274.48365141923523 0.0 - 2408.83 0.008448449452794453 274.24757320709847 0.0 - 2418.83 0.00844724027057405 274.01167673134097 0.0 - 2428.83 0.008446015433333988 273.77596179724725 0.0 - 2438.83 0.00844477985746879 273.54042820932693 0.0 - 2448.83 0.008443537582446694 273.30507577109785 0.0 - 2458.83 0.008442291770809652 273.06990428516843 0.0 - 2468.83 0.008441044724081581 272.83491355327277 0.0 - 2478.83 0.008439800611218665 272.6001033762664 0.0 - 2488.83 0.00843856851120161 272.36547355412745 0.0 - 2498.83 0.008437357251271451 272.131023885956 0.0 - 2508.83 0.008436174652198475 271.8967541699728 0.0 - 2518.83 0.008435027528282223 271.66266420351815 0.0 - 2528.83 0.008433921687351485 271.4287537830524 0.0 - 2538.83 0.008432861930764302 271.1950227041551 0.0 - 2548.83 0.00843185205340797 270.96147076152505 0.0 - 2558.83 0.008430894843699037 270.7280977489789 0.0 - 2568.83 0.008429992083583299 270.4949034594528 0.0 - 2578.83 0.008429144548535807 270.26188768499924 0.0 - 2588.83 0.008428352007560862 270.029050216791 0.0 - 2598.83 0.00842761322319202 269.79639084511774 0.0 - 2608.83 0.008426925951492081 269.5639093593882 0.0 - 2618.83 0.00842628694205311 269.3316055481293 0.0 - 2628.83 0.00842569193799641 269.09947919898616 0.0 - 2638.83 0.008425135675972547 268.86753009872444 0.0 - 2648.83 0.00842461188616133 268.6357580332281 0.0 - 2658.83 0.008424113292288846 268.40419798282977 0.0 - 2668.8450000000003 0.00842363247465228 268.17397337808615 0.0 - 2678.91 0.008423166401278145 267.9427744314085 0.0 - 2689.075 0.00842271287798512 267.70945632225903 0.0 - 2699.395 0.008422269794184268 267.47276314000703 0.0 - 2709.915 0.00842183576177864 267.23167205885693 0.0 - 2720.685 0.008421409439854166 266.9850492223517 0.0 - 2731.75 0.008420989934777683 266.73187908655734 0.0 - 2743.1549999999997 0.00842057656497165 266.4711498955205 0.0 - 2754.9449999999997 0.008420168838904526 266.2018539109293 0.0 - 2767.16 0.008419766585874835 265.9231017241396 0.0 - 2779.8450000000003 0.008419369570371621 265.63389412416603 0.0 - 2793.04 0.008418977768851357 265.33335060165257 0.0 - 2806.79 0.008418590987355281 265.0204816908401 0.0 - 2821.13 0.008418209198373489 264.69453068213596 0.0 - 2836.095 0.008417832109117812 264.3547458320207 0.0 - 2851.725 0.008417458906607831 264.00026735827623 0.0 - 2868.05 0.008417088445376551 263.63046804896186 0.0 - 2885.1099999999997 0.008416718554615227 263.2445000426994 0.0 - 2902.9449999999997 0.008416346026411002 262.8415224365277 0.0 - 2921.58 0.008415966585971756 262.42103995931274 0.0 - 2941.04 0.008415574164496432 261.98256324961994 0.0 - 2961.365 0.008415159759450402 261.525271899304 0.0 - 2982.58 0.00841471169033219 261.0486907769388 0.0 - 3004.71 0.008414215442875631 260.5523516119891 0.0 - 3027.79 0.008413653025905988 260.0355695567649 0.0 - 3051.8450000000003 0.008413002936618305 259.49789209109974 0.0 - 3076.895 0.008412239611602564 258.9389859371834 0.0 - 3102.96 0.008411332810557578 258.35852502737936 0.0 - 3130.0699999999997 0.008410246639659608 257.75596865621014 0.0 - 3158.25 0.008408939370292998 257.13089633202185 0.0 - 3187.51 0.008407363474598847 256.48322804430575 0.0 - 3217.87 0.008405218890420356 255.83588175027643 0.0 - 3249.3599999999997 0.008393271134003458 255.19964330883812 0.0 - 3281.99 0.008351412743288482 254.54164607206658 0.0 - 3315.77 0.008260476495526045 253.8618174159068 0.0 - 3350.72 0.008104623999478046 253.15988884466148 0.0 - 3386.8549999999996 0.00787344063905583 252.43569838883678 0.0 - 3424.1899999999996 0.0075644369243139525 251.68908967024706 0.0 - 3462.7349999999997 0.007186086619568106 250.92008938172435 0.0 - 3502.5 0.006761299010052584 250.12847128788346 0.0 - 3543.495 0.0063229503394740955 249.3142998774209 0.0 - 3585.7250000000004 0.005892523133045965 248.4776361401757 0.0 - 3629.2 0.005486081860045299 247.61844557185518 0.0 - 3673.9300000000003 0.005115471098356842 246.73669767930966 0.0 - 3719.915 0.0047865937975407405 245.8325621824419 0.0 - 3767.16 0.004497207916834608 244.9061124719276 0.0 - 3815.675 0.004235343561188026 243.93917816588527 0.0 - 3865.455 0.003992799049897532 242.9340075550911 0.0 - 3916.5 0.0037701773785292275 241.9064458549572 0.0 - 3968.8100000000004 0.003566706102255662 240.85669479320958 0.0 - 4022.385 0.0033793631035100562 239.78495669810403 0.0 - 4077.225 0.0032023886817871793 238.69143421152936 0.0 - 4133.33 0.003026657687444747 237.57633000765716 0.0 - 4190.6900000000005 0.0028381775313199797 236.4400442851121 0.0 - 4249.295 0.002621172533961453 235.28290207757698 0.0 - 4309.145 0.0023615094882103926 234.10523590260988 0.0 - 4370.23 0.0020475770133657643 232.90737521220953 0.0 - 4432.545 0.0016708338495675502 231.67880240976976 0.0 - 4496.075000000001 0.0012024566425684656 230.3946787391585 0.0 - 4560.8099999999995 0.0005801758690602509 229.09126349131424 0.0 - 4626.74 -0.00023039587268771028 227.7689693145578 0.0 - 4693.85 -0.0012211235795694937 226.42830360420388 0.0 - 4762.13 -0.0023333882072868813 225.06966783836282 0.0 -] -# pchip vertical, not in time, w, θ, q -a_pchip = [ - 6.25 9.606946574196332e-6 344.5726759079331 0.003622583654954105 - 24.48 4.170153541165986e-5 343.83788070682715 0.003561342988890416 - 47.875 8.9660462794051e-5 342.903293515462 0.003483122571131849 - 70.11 0.00013785620450788074 342.0171523341112 0.0034090967091053833 - 91.135 0.00018225985843190877 341.1800967199703 0.0033393784501856406 - 110.92500000000001 0.00022248103407824436 340.3950883828092 0.003274005609795846 - 129.47 0.0002597277625922707 339.8044371033823 0.0032134951490935966 - 146.775 0.0002946083545126916 339.3104050667722 0.0031574807711422753 - 162.875 0.0003272527093542365 338.857004731135 0.0031056131538170387 - 177.825 0.00035775906164403073 338.4236823850689 0.0030575017326776627 - 191.69 0.0003862105780829498 337.9556199940157 0.003012409295373976 - 204.565 0.00041273972312789846 337.5742094907327 0.002971120275078853 - 216.57 0.0004375318745889267 337.21891812934354 0.0029327133964604057 - 227.835 0.00046076510357297276 336.8858313139194 0.0028967546768672706 - 238.51 0.000482530061555519 336.5704615091353 0.002862751290772024 - 248.775 0.0005030305687002388 336.267453703888 0.0028301198798016945 - 258.83 0.0005225732399157731 335.97088194988754 0.002798218675101468 - 268.83 0.0005414010033344634 335.67616527739875 0.00276655336406743 - 278.83 0.0005595889459326096 335.3828785501504 0.002734194637377087 - 288.83 0.0005771483855673149 335.09553359871654 0.0026984390508334945 - 298.83 0.0005941353124937221 334.8122251016907 0.0026602106840358996 - 308.83 0.0006106503893650134 334.5158968948328 0.002629719508030036 - 318.83 0.0006268389512324109 334.19136960344053 0.002616673035880807 - 328.83 0.0006428748804669561 333.85057856384094 0.0026164063910006975 - 338.83 0.0006588360555503558 333.5034268781419 0.002624425749305381 - 348.83 0.0006747410748316479 333.15296268199506 0.002637551810146624 - 358.83 0.0006906034707591283 332.8027651599671 0.0026508560404847345 - 368.83 0.0007064320801611507 332.4542091664991 0.002662470588993206 - 378.83 0.0007222310442461263 332.10681085364945 0.002673016781595284 - 388.83 0.0007379998086025249 331.75979995446886 0.002683483934819064 - 398.83 0.0007537331231988735 331.41313347197877 0.0026939269673242434 - 408.83 0.0007694210423837573 331.0668111254268 0.0027043459156236974 - 418.83 0.0007850489248858192 330.7208326340663 0.002714740816190254 - 428.83 0.0008005964889198483 330.37519771732445 0.002725111705458075 - 438.83 0.000815883826547799 330.02990609494566 0.0027354586198238716 - 448.83 0.0008304467390413915 329.68495748710916 0.0027457815956479456 - 458.83 0.0008438817777367577 329.34035161461134 0.0027560806692557903 - 468.83 0.0008558930728927526 328.99608819889653 0.0027663558769384687 - 478.83 0.0008662923336909551 328.6521669621258 0.002776607254953324 - 488.83 0.0008749988482356681 328.308340710016 0.0027870775754105775 - 498.83 0.000882039483553918 327.96367428799016 0.002798685921469863 - 508.83000000000004 0.000887548685595455 327.6183847539862 0.002811206077142545 - 518.83 0.0008917684792327531 327.2753449191808 0.002821134060304376 - 528.83 0.0008950484682610099 326.93815412969843 0.0028248588787145343 - 538.83 0.0008978197350194966 326.6074131214987 0.0028249360743800005 - 548.83 0.000900288213013848 326.28420999397605 0.002824063989840669 - 558.83 0.0009024763790838056 325.9675201940916 0.0028226829417590006 - 568.83 0.0009044055721405366 325.65223565167844 0.0028212380583732496 - 578.83 0.0009060994646247153 325.33577341578865 0.002819945543036499 - 588.83 0.0009075840625065233 325.01836430618783 0.0028187813531036885 - 598.83 0.0009088877052856489 324.7011038367112 0.002817631456939668 - 608.83 0.000910041065991288 324.3841360339908 0.0028164808472545097 - 618.83 0.0009110771511821428 324.06746069719753 0.0028153295270144153 - 628.83 0.0009120313009464232 323.7510776258974 0.0028141774991843195 - 638.83 0.0009129411889018457 323.4349866199693 0.0028130247667271964 - 648.83 0.0009138465819298161 323.1191874795477 0.0028118713326035576 - 658.83 0.0009147872621115542 322.8036800049641 0.002810717199770962 - 668.83 0.0009158017839528957 322.4884639966935 0.0028095623711835442 - 678.83 0.0009169275366145625 322.1735392552991 0.0028084068497915434 - 688.83 0.0009182007441527596 321.8589055813778 0.00280725063854083 - 698.83 0.0009196564655191752 321.54456697567815 0.0028061007298804067 - 708.83 0.0009213285945609805 321.2305974621503 0.002805080642140766 - 718.83 0.00092324986002083 320.9170446880218 0.0028042700002623 - 728.83 0.0009254518255368609 320.60376779338435 0.002803470366900525 - 738.83 0.0009279648896426939 320.2903598345196 0.0028021478925663356 - 748.83 0.0009308188093066674 319.9766509348125 0.0027997787277189907 - 758.83 0.0009343952088309012 319.662732543017 0.0027937818809107935 - 768.83 0.0009399311790845871 319.3486172828161 0.002779306294227017 - 778.83 0.0009485553852975535 319.03453020941873 0.002759110749044846 - 788.83 0.0009611060760638331 318.7207695306959 0.0027393642415638195 - 798.83 0.000978131083341662 318.40740907922117 0.002721429721915634 - 808.83 0.0009998878224534806 318.0943934320513 0.0027043933167314634 - 818.83 0.0010263432920859328 317.78167136552855 0.002687410659102278 - 828.83 0.0010571740742898658 317.4692413352392 0.0026704595970532 - 838.83 0.0010917663344803318 317.1571031321168 0.002653540086456491 - 848.83 0.0011292158214365859 316.8452565466371 0.002636652083223905 - 858.83 0.0011683284991896147 316.533701368808 0.0026197955433066938 - 868.83 0.0012080030236689824 316.2224373881655 0.002602970422695674 - 878.83 0.0012479969882099227 315.91146439376655 0.0025861766774212713 - 888.83 0.0012882386541366872 315.60078217418567 0.0025694142635535886 - 898.83 0.0013286740542017394 315.29039051751045 0.002552683137202473 - 908.83 0.0013692669925857526 314.9802891976369 0.0025359832544072807 - 918.83 0.001409999044897611 314.6705416888045 0.0025193013763618803 - 928.83 0.0014508695581744095 314.3605661704588 0.0025024916450161476 - 938.83 0.001491895650881454 314.0503414354313 0.0024854975731580286 - 948.83 0.0015331122129122608 313.74050479106626 0.0024686031913501187 - 958.83 0.0015745719055885571 313.4326204489411 0.002452524357617001 - 968.83 0.001616345397749727 313.127744326622 0.002437502409729551 - 978.83 0.0016586265162383583 312.82744097564574 0.0024233306224669244 - 988.83 0.0017018527590705623 312.5341246445097 0.0024099595365989954 - 998.83 0.0017464123714366312 312.24538753068583 0.002397039631562542 - 1008.83 0.0017925943401491057 311.9566404986224 0.0023841022381942256 - 1018.83 0.0018405883936427757 311.6682248034998 0.0023710299376344056 - 1028.83 0.0018904850019746792 311.37632497070564 0.0023578642824045168 - 1038.83 0.0019422753768241045 311.0849744081079 0.002344721249967217 - 1048.83 0.001995851471492587 310.79600721488083 0.002331618443828187 - 1058.83 0.0020510059809039113 310.506268750605 0.0023185320514767047 - 1068.83 0.0021074323416041107 310.2167843617996 0.0023054697687296395 - 1078.83 0.002164724731761468 309.9275535827437 0.002292431559690167 - 1088.83 0.002222445218730781 309.6385759865562 0.002279417388823869 - 1098.83 0.002280434367241987 309.34985114833984 0.0022664272206818544 - 1108.83 0.002338642528365203 309.0613786455157 0.0022534610199028225 - 1118.83 0.002397030686220194 308.77315805813294 0.0022405187512148693 - 1128.83 0.0024555704095916902 308.4851889691724 0.002227600379437191 - 1138.83 0.0025142438519293823 308.1974925097359 0.0022146971342440723 - 1148.83 0.0025730437513479245 307.9114100257227 0.0022012649745685375 - 1158.83 0.0026319734306269335 307.6287549931192 0.0021865684389582966 - 1168.83 0.002691046797210989 307.3478837015598 0.0021712768633160495 - 1178.83 0.0027502883432096326 307.0602187287012 0.0021589177658186964 - 1188.83 0.002809733145397369 306.75841788715513 0.0021524522463277538 - 1198.83 0.002869429380182476 306.44420171486854 0.002150984242959869 - 1208.83 0.0029294574065295968 306.11929417401967 0.0021535596390476735 - 1218.83 0.002989901821767439 305.78592123495895 0.002159279936156068 - 1228.83 0.0030508298984106767 305.4508180912914 0.002165792354902737 - 1238.83 0.0031122913083588837 305.11775488017537 0.0021716147109846415 - 1248.83 0.003174318122896533 304.78718648190073 0.002176643197265022 - 1258.83 0.003236924812692997 304.4575199220575 0.0021814564242300535 - 1268.83 0.0033001082478025475 304.12819592743136 0.0021862574723916562 - 1278.83 0.0033638476976643548 303.7992141009226 0.002191046389824113 - 1288.83 0.0034281048311024893 303.4705741200099 0.0021958231955849315 - 1298.83 0.0034928237163259213 303.1422756673648 0.0022005879087443653 - 1308.83 0.0035579309055488793 302.814318427161 0.0022053405483591472 - 1318.83 0.0036233529642897286 302.48670208185155 0.0022100811334491016 - 1328.83 0.003689048202187828 302.1594263135222 0.002214809683006862 - 1338.83 0.00375498644395565 301.83249080388686 0.002219526215997781 - 1348.83 0.0038211450807716023 301.5058952342855 0.002224230751359868 - 1358.83 0.003887509070280025 301.1796392856797 0.0022289233080036983 - 1368.83 0.003954070936591191 300.8536663781208 0.0022336243430949487 - 1378.83 0.004020830770281309 300.52676703855263 0.0022387731357751913 - 1388.83 0.004087796228392516 300.1979170833545 0.002244741653210686 - 1398.83 0.004154982534432888 299.86861582466537 0.002250970541650158 - 1408.83 0.0042224124783764305 299.5444629121805 0.0022552807405463644 - 1418.83 0.004290116416663083 299.2305711880554 0.0022558932676868706 - 1428.83 0.004358138656707799 298.9294090047341 0.002252632164752587 - 1438.83 0.004426581495598367 298.6485086377886 0.002244675258806802 - 1448.83 0.004495555123389772 298.3876850147497 0.002232499654164577 - 1458.83 0.004565140327767898 298.13297584714866 0.0022191360887782747 - 1468.83 0.004635388163551553 297.87485903377114 0.0022066081718771164 - 1478.83 0.004706319952692462 297.6125091285651 0.0021951005673801495 - 1488.83 0.004777927284275275 297.34883253706334 0.00218392111294502 - 1498.83 0.004850172014517561 297.0855396686846 0.0021727640359633644 - 1508.83 0.004922986266769813 296.8224624393541 0.0021616273429684594 - 1518.83 0.004996272431515441 296.55960070339125 0.0021505110052819167 - 1528.83 0.005069903166370782 296.29695430885096 0.002139414994212965 - 1538.83 0.0051437213960850905 296.03452310317977 0.002128339281100069 - 1548.83 0.0052175315703356295 295.7723069332129 0.002117283837310974 - 1558.83 0.005291094374051246 295.51030564517094 0.0021062486342427592 - 1568.83 0.00536419457110258 295.24851908465666 0.0020952336433218855 - 1578.83 0.0054366566750974074 294.98694709664744 0.0020842388360042172 - 1588.83 0.005508344949427074 294.7255895254961 0.0020732641837751 - 1598.83 0.005579163407266498 294.4644470065182 0.002062309624056358 - 1608.83 0.005649055811574167 294.20420155263963 0.002051345748216049 - 1618.83 0.005718005675092142 293.9465170155292 0.002040300861094403 - 1628.83 0.005786036260346051 293.69102231850826 0.002029190815699502 - 1638.83 0.005853210579645098 293.4326114429421 0.002018213985172143 - 1648.83 0.005919631395082053 293.16351776715845 0.0020076818185699057 - 1658.83 0.005985440919815178 292.8843324204125 0.001997650609140482 - 1668.83 0.006050774726708625 292.60063290168796 0.001988034539277163 - 1678.83 0.006115691634976708 292.3140100270162 0.0019788236339915895 - 1688.83 0.006180231711993674 292.02599818350564 0.0019698611143794155 - 1698.83 0.0062444258128834555 291.7383238729108 0.0019609126043107295 - 1708.83 0.006308295580519674 291.45161918561575 0.0019518976048947102 - 1718.83 0.006371853445525634 291.1657321079326 0.0019428340419137748 - 1728.83 0.006435102626274328 290.8801861726597 0.0019337782130019526 - 1738.83 0.006498037128888437 290.59490787798507 0.0019247387585486146 - 1748.83 0.006560641747240324 290.30989697582135 0.0019157156554559162 - 1758.83 0.006622892062952041 290.02515321749325 0.0019067088806499195 - 1768.83 0.006684754445395327 289.7406763537345 0.0018977184110806373 - 1778.83 0.006746185905589962 289.4564661346846 0.001888744223722082 - 1788.83 0.006807103935681096 289.1725223098837 0.0018797862955722993 - 1798.83 0.006867367697971522 288.88884462826945 0.001870844603653414 - 1808.83 0.006926860823342636 288.6054328381742 0.0018619191250116834 - 1818.83 0.006985502888703895 288.3222866873281 0.001853009836717584 - 1828.83 0.007043249416992811 288.03940592286375 0.00184411671586591 - 1838.83 0.00710009187717495 287.75679188629147 0.001835239586993212 - 1848.83 0.00715605768424394 287.4748462702955 0.0018263399762629016 - 1858.83 0.00721121019922146 287.1944015482113 0.00181733820052492 - 1868.83 0.007265648729157248 286.9152386312056 0.0018082549956954536 - 1878.83 0.0073195085271291005 286.6345247438257 0.001799315319767074 - 1888.83 0.007372960792242868 286.3479276646666 0.0017908787263603673 - 1898.83 0.007426212621152002 286.0564431960861 0.001783013782394039 - 1908.83 0.007479482610084638 285.7644339528667 0.0017755927671213676 - 1918.83 0.007532936306535805 285.4727100936127 0.0017685933971778884 - 1928.83 0.007586703950831198 285.181271671882 0.0017618743693732185 - 1938.83 0.007640886927744569 284.89011870200926 0.0017551919808315474 - 1948.83 0.007695557766497727 284.5992510334359 0.0017484410036237245 - 1958.83 0.007750760140760537 284.3086683672646 0.0017416239507097974 - 1968.83 0.007806508868650919 284.01837030900106 0.0017348008926508856 - 1978.83 0.007862789912734851 283.72835653288706 0.0017279898785177155 - 1988.83 0.007919560380026369 283.43862674236584 0.0017211908914122435 - 1998.83 0.00797674852198756 283.1491806402607 0.0017144039144025075 - 2008.83 0.008034253734528572 282.8600179288014 0.0017076289305740745 - 2018.83 0.008091946558007605 282.57113830961055 0.0017008659230300126 - 2028.83 0.00814949249277905 282.2825414836457 0.0016941148748906003 - 2038.83 0.008205397289412485 281.99422715124473 0.001687375769293653 - 2048.83 0.008257940731652357 281.70619501212366 0.0016806485893945682 - 2058.83 0.00830574555961734 281.4184447653755 0.0016739333183663707 - 2068.83 0.008347779455193846 281.1309761094652 0.00166722993939974 - 2078.83 0.008383355042036023 280.8437887422282 0.0016605384357030598 - 2088.83 0.008412129885565748 280.5568823495209 0.0016538634101193148 - 2098.83 0.008434106492972644 280.2702565109926 0.0016472524496862308 - 2108.83 0.008449632313214061 279.983910855686 0.0016407327712159262 - 2118.83 0.008459399737015087 279.6978451882753 0.001634255779045688 - 2128.83 0.008464446096868548 279.41205949432026 0.0016276542166947534 - 2138.83 0.008466153667035004 279.12655392902667 0.0016207487423838941 - 2148.83 0.008466212081208525 278.84355439313197 0.0016134083841332543 - 2158.83 0.008465675839044643 278.585344113778 0.0016053947565520187 - 2168.83 0.008464706437146178 278.3274655629836 0.001597412766500666 - 2178.83 0.008463398396389014 278.06830519460004 0.001589484376377622 - 2188.83 0.008461822313508845 277.8093711140139 0.0015815704508998498 - 2198.83 0.008460040128875353 277.55066308701385 0.0015736709694260452 - 2208.83 0.00845813906483152 277.29218087862563 0.0015657859113393084 - 2218.83 0.008456150475706135 277.0322504060462 0.0015583517510629856 - 2228.83 0.008454026552685468 276.7676101718959 0.0015522274881782574 - 2238.83 0.008451470304362042 276.7213737397973 0.0014568941465730948 - 2248.83 0.008446921237812585 276.9757835225271 0.001233149601795231 - 2258.83 0.008446957794584405 277.16356330275426 0.0010314290500292752 - 2268.83 0.008457171216922164 277.26946150446093 0.0008569561373275139 - 2278.83 0.008458911249522676 277.23776969730545 0.0007538191087573929 - 2288.83 0.008458751975919464 277.02745563205735 0.0007363527843395269 - 2298.83 0.008458433333875784 276.79348926704057 0.00072494228176087 - 2308.83 0.008457971639827876 276.54681318535637 0.0007167817157903954 - 2318.83 0.008457382333285697 276.29502939930154 0.0007099411951337624 - 2328.83 0.008456679976832908 276.0425261585074 0.000703332493606345 - 2338.83 0.008455878256126894 275.7922371247358 0.0006962306864425156 - 2348.83 0.00845498997989875 275.54625383641115 0.00068810771284654 - 2358.83 0.008454027079953283 275.30503649635153 0.0006788472204736663 - 2368.83 0.008453000611169019 275.0673983866492 0.0006687489683215286 - 2378.83 0.008451920751498195 274.830898090635 0.0006584297278015913 - 2388.83 0.008450796801966762 274.59458416652257 0.0006481298126099716 - 2398.83 0.008449637186674389 274.35845224061086 0.0006378502497341276 - 2408.83 0.008448449452794453 274.12250212010514 0.0006275910096315031 - 2418.83 0.00844724027057405 273.88673361131845 0.00061735206280384 - 2428.83 0.008446015433333988 273.651146519685 0.0006071333797973269 - 2438.83 0.00844477985746879 273.4157406498646 0.0005969349312029448 - 2448.83 0.008443537582446694 273.1805158055254 0.0005867566876560998 - 2458.83 0.008442291770809652 272.94547178942645 0.0005765986198369356 - 2468.83 0.008441044724081581 272.71060840345285 0.0005664606984705265 - 2478.83 0.008439800611218665 272.47592544861163 0.0005563428943269886 - 2488.83 0.00843856851120161 272.24142272503224 0.0005462451782215966 - 2498.83 0.008437357251271451 272.00710003196684 0.0005361675210148998 - 2508.83 0.008436174652198475 271.77295716778843 0.0005261098936128371 - 2518.83 0.008435027528282223 271.5389939299896 0.0005160722669668497 - 2528.83 0.008433921687351485 271.30521011518374 0.0005060546120740011 - 2538.83 0.008432861930764302 271.0716055191033 0.0004960568999770909 - 2548.83 0.00843185205340797 270.83817993660057 0.0004860791017647721 - 2558.83 0.008430894843699037 270.6049331616459 0.0004761211885716648 - 2568.83 0.008429992083583299 270.3718632501625 0.00046616912081659436 - 2578.83 0.008429144548535807 270.1389476757542 0.00045604286363750394 - 2588.83 0.008428352007560862 269.9061618360312 0.0004455456458136112 - 2598.83 0.00842761322319202 269.6735002342191 0.0004346347956905971 - 2608.83 0.008426925951492081 269.44097682572857 0.00042342453635000905 - 2618.83 0.00842628694205311 269.2086342597657 0.00041229002706118256 - 2628.83 0.00842569193799641 268.9765805907083 0.0004022797218707614 - 2638.83 0.008425135675972547 268.74490736762044 0.00039419632669112064 - 2648.83 0.00842461188616133 268.51365288219984 0.00038818460951786996 - 2658.83 0.008424113292288846 268.282802327813 0.0003837334960570591 - 2668.8450000000003 0.00842363247465228 268.0519668348617 0.00037995848013433616 - 2678.91 0.008423166401278145 267.8203498966708 0.0003766047346167834 - 2689.075 0.00842271287798512 267.5868168961303 0.00037360782085753047 - 2699.395 0.008422269794184268 267.3501078612768 0.0003708978168642997 - 2709.915 0.00842183576177864 267.10917904576263 0.00036839901066326443 - 2720.685 0.008421409439854166 266.8628538233897 0.00036602019208222734 - 2731.75 0.008420989934777683 266.61004594955716 0.0003636513835706316 - 2743.1549999999997 0.00842057656497165 266.3496772657916 0.00036119111053661325 - 2754.9449999999997 0.008420168838904526 266.0807096273862 0.0003585754542614263 - 2767.16 0.008419766585874835 265.8022344683764 0.0003557600771253701 - 2779.8450000000003 0.008419369570371621 265.51324704130707 0.0003527237059706849 - 2793.04 0.008418977768851357 265.21288090039957 0.0003494815152728756 - 2806.79 0.008418590987355281 264.9001818553346 0.0003460853084470474 - 2821.13 0.008418209198373489 264.5744077125561 0.00034255269967227756 - 2836.095 0.008417832109117812 264.2348071772109 0.00033887635312181163 - 2851.725 0.008417458906607831 263.8805209259848 0.00033504777032043856 - 2868.05 0.008417088445376551 263.5109220788324 0.0003310610606506432 - 2885.1099999999997 0.008416718554615227 263.12516322497277 0.00032690805242768854 - 2902.9449999999997 0.008416346026411002 262.72240390719213 0.0003225807647732286 - 2921.58 0.008415966585971756 262.3021491118373 0.00031807504027295177 - 2941.04 0.008415574164496432 261.86390973083536 0.0003133868836748967 - 2961.365 0.008415159759450402 261.4068657875018 0.00030850887647202547 - 2982.58 0.00841471169033219 260.93054239384895 0.00030343741423077077 - 3004.71 0.008414215442875631 260.4344715179935 0.000298169081239976 - 3027.79 0.008413653025905988 259.9179686667514 0.0002926982933451207 - 3051.8450000000003 0.008413002936618305 259.3805815476117 0.0002870220688236047 - 3076.895 0.008412239611602564 258.821955263487 0.0002811378747466814 - 3102.96 0.008411332810557578 258.24059963055265 0.0002749941841609984 - 3130.0699999999997 0.008410246639659608 257.6344378706531 0.0002685213360413485 - 3158.25 0.008408939370292998 257.00550425023556 0.000261830095691364 - 3187.51 0.008407363474598847 256.36357417007963 0.00025538033528252444 - 3217.87 0.008405218890420356 255.71484602305944 0.0002493606313795902 - 3249.3599999999997 0.008393271134003458 255.0642767336829 0.00024367843460528776 - 3281.99 0.008351412743288482 254.41186509651277 0.00023823590716824745 - 3315.77 0.008260476495526045 253.7396502811269 0.00023266646154395922 - 3350.72 0.008104623999478046 253.0398821379219 0.00022681832714901962 - 3386.8549999999996 0.00787344063905583 252.3161377532282 0.00022077408863962588 - 3424.1899999999996 0.0075644369243139525 251.5699883310919 0.00021457273101507576 - 3462.7349999999997 0.007186086619568106 250.80146051729776 0.00020821670521181866 - 3502.5 0.006761299010052584 250.0103281345518 0.00020170838906413227 - 3543.495 0.0063229503394740955 249.19665558949455 0.00019505054343704804 - 3585.7250000000004 0.005892523133045965 248.36050377525567 0.00018824678243315883 - 3629.2 0.005486081860045299 247.50183814743556 0.00018130003951364836 - 3673.9300000000003 0.005115471098356842 246.62101660639516 0.00017414528174511092 - 3719.915 0.0047865937975407405 245.72072581255748 0.000166346024237525 - 3767.16 0.004497207916834608 244.7934914745884 0.00015935392331034343 - 3815.675 0.004235343561188026 243.8270777125604 0.00015494132412218023 - 3865.455 0.003992799049897532 242.82304619023446 0.0001516829739711167 - 3916.5 0.0037701773785292275 241.79294722747585 0.00014859100743205785 - 3968.8100000000004 0.003566706102255662 240.74351903083704 0.00014524260088811768 - 4022.385 0.0033793631035100562 239.67240883324266 0.0001418242395940265 - 4077.225 0.0032023886817871793 238.57952598581696 0.00013835916903683957 - 4133.33 0.003026657687444747 237.4650729782608 0.00013484950153396611 - 4190.6900000000005 0.0028381775313199797 236.32944970868166 0.00013129798662632854 - 4249.295 0.002621172533961453 235.17298094556014 0.00012770732862254784 - 4309.145 0.0023615094882103926 233.99727341728564 0.00012404320308549835 - 4370.23 0.0020475770133657643 232.80446442503433 0.00012025903849508776 - 4432.545 0.0016708338495675502 231.57040495650938 0.00011706131890037611 - 4496.075000000001 0.0012024566425684656 230.2907749101704 0.0001144379659749745 - 4560.8099999999995 0.0005801758690602509 228.98407044402916 0.00011194586325552476 - 4626.74 -0.00023039587268771028 227.6623211959436 0.00010935711652662116 - 4693.85 -0.0012211235795694937 226.32240509155994 0.00010674814729582555 - 4762.13 -0.0023333882072868813 224.96452770973593 0.00010412468117006716 -] - - -use_pchip_interpolant = true -if use_pchip_interpolant - a = a_pchip - suffix = "_pchip" -else - suffix = "" -end -z = a[:, 1] -w = a[:, 2] -θ = a[:, 3] -q = a[:, 4] - - -outpath = expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/test/") - -if !isdir(joinpath(outpath, "random_test")) - mkdir(joinpath(outpath, "random_test")) -end - -using Plots -dpi = 600 - -#plot w/ x minor lines every 250m -plot( - w, - z, - label = "w", - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "w (K)", - ylabel = "Height (m)", - title = "w (m/s?)", - # ylim = (ymin, ymax), - minorgrid = true, -) -# vertical line at 0 -vline!([0], label = "w = 0", color = "black", linestyle = :dash) - -savefig(joinpath(outpath, "random_test", "w$(suffix).png")) - -dz = z[2:end] .- z[1:(end - 1)] -z_mid = z[1:(end - 1)] .+ dz ./ 2 -plot( - dz, - z_mid, - label = "dz", - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "dz (m)", - ylabel = "Height (m)", - title = "dz (m)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "dz$(suffix).png")) - -dw = w[2:end] .- w[1:(end - 1)] -dwdz = dw ./ dz -plot( - -dwdz, - z_mid, - label = "-dw/dz", - legend = :bottomright, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "-dw/dz (m/s/m)", - ylabel = "Height (m)", - title = "-dw/dz (m/s/m)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "minus_dwdz$(suffix).png")) - -dwdz_times_dz = dwdz .* dz -plot( - -dwdz_times_dz, - z_mid, - label = "-dw/dz * dz", - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "-dw/dz * dz (m/s)", - ylabel = "Height (m)", - title = "-dw/dz * dz (m/s)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "minus_dwdz_times_dz$(suffix).png")) - - -plot( - θ, - z, - label = "θ", - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "θ (K)", - ylabel = "Height (m)", - title = "θ (K)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "θ$(suffix).png")) - - -plot( - q, - z, - label = "q", - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "q (kg/kg)", - ylabel = "Height (m)", - title = "q (kg/kg)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "q$(suffix).png")) - - - -wq = w .* q -plot( - wq, - z, - label = "wq", - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "wq (K kg/kg)", - ylabel = "Height (m)", - title = "wq (K kg/kg)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "wq$(suffix).png")) - -dwq_dz = (wq[2:end] .- wq[1:(end - 1)]) ./ dz -plot( - -dwq_dz, - z_mid, - label = "-dwq/dz", - legend = :bottomright, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "-dwq/dz (K kg/kg/m)", - ylabel = "Height (m)", - title = "-dwq/dz (K kg/kg/m)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "minus_dwq_dz$(suffix).png")) - -wθ = w .* θ -plot( - wθ, - z, - label = "wθ", - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "wθ (K K)", - ylabel = "Height (m)", - title = "wθ (K K)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "wθ$(suffix).png")) - -dwθ_dz = (wθ[2:end] .- wθ[1:(end - 1)]) ./ dz -plot( - -dwθ_dz, - z_mid, - label = "-dwθ/dz", - legend = :bottomright, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "-dwθ/dz (K K/m)", - ylabel = "Height (m)", - title = "-dwθ/dz (K K/m)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "minus_dwθ_dz$(suffix).png")) - - -qq = [ - -2.9979330907619352e-5, - -8.744371239134406e-5, - -0.00014219796236102016, - -0.00019409818002829167, - -0.00024308219979767535, - -0.000288861847461048, - -0.00033125305317208457, - -0.0003706457048556218, - -0.00040730303412492416, - -0.00044131957294253637, - -0.0004728540154600449, - -0.0005021900298260329, - -0.0005296112841890838, - -0.0005554487247225446, - -0.0005800805756245263, - -0.000603979617142668, - -0.0006276186295246081, - -0.0006513316919204688, - -0.0006768378673606527, - -0.0007053778607142773, - -0.0007330012298589076, - -0.000748936349182333, - -0.0007513512332947344, - -0.0007457915752194443, - -0.0007343598832315661, - -0.0007208240516952194, - -0.0007082486066765216, - -0.0006969890306966035, - -0.0006860499481911994, - -0.0006751108656978971, - -0.0006641717832045949, - -0.0006532327007112927, - -0.0006422936182179904, - -0.0006313545357246881, - -0.0006204154532313859, - -0.0006094763707380835, - -0.0005985372882447812, - -0.000587598205751479, - -0.0005766355011368853, - -0.0005650664572503475, - -0.0005524320106579707, - -0.0005400133753262573, - -0.0005318276383787232, - -0.0005283266271378967, - -0.0005263051988530485, - -0.0005248851550340805, - -0.0005236982556398046, - -0.0005224406962134288, - -0.0005210430939544448, - -0.0005195921722967367, - -0.0005181408597213284, - -0.00051668954714592, - -0.0005152382345705117, - -0.0005137869219951032, - -0.0005123356094196948, - -0.0005108842968442862, - -0.0005094329842688775, - -0.0005079816716934691, - -0.0005065303591180604, - -0.0005050790462186687, - -0.0005035850482563225, - -0.0005019195272217325, - -0.0005001222979890301, - -0.0004985260145605078, - -0.0004976215995073142, - -0.0004981792182707884, - -0.0005044303607970497, - -0.0005177563550178741, - -0.000532943908711212, - -0.0005468084778655228, - -0.0005593715768017326, - -0.0005717154910128935, - -0.0005840594052240545, - -0.0005964033194352156, - -0.0006087472336463764, - -0.0006210911478575375, - -0.0006334350620686984, - -0.0006457789762798593, - -0.0006581228904910205, - -0.0006704668047021814, - -0.0006828107189133423, - -0.0006951548164432362, - -0.000707562212638698, - -0.0007201617006266602, - -0.0007328811599009545, - -0.0007452200268315465, - -0.0007566781871648277, - -0.0007673277600589896, - -0.0007772674639892987, - -0.0007866375088209503, - -0.0007958707262860449, - -0.0008052290885586161, - -0.0008147215944529405, - -0.0008242424720362612, - -0.0008337633496195822, - -0.000843284227202903, - -0.0008528051047862239, - -0.0008623259823695448, - -0.0008718468599528658, - -0.0008813677375361867, - -0.0008908886151195077, - -0.0009004094927028286, - -0.0009099303702861498, - -0.0009194512478694708, - -0.0009291126158860481, - -0.0009397174608591142, - -0.0009513764965697307, - -0.00096230306750364, - -0.000968809813644458, - -0.0009701048241811372, - -0.0009675613593008357, - -0.0009615967379107715, - -0.0009537945329814584, - -0.0009461727613704285, - -0.0009393123971007126, - -0.0009329115524565859, - -0.0009265377443845213, - -0.0009201639363124569, - -0.0009137901282403923, - -0.0009074163201683279, - -0.0009010425120962635, - -0.000894668704024199, - -0.0008882948959521345, - -0.0008819210878800701, - -0.0008755472798080057, - -0.0008691734717359413, - -0.0008627996636637048, - -0.0008562710316216527, - -0.0008490573944904935, - -0.0008412031528990782, - -0.0008339698682774569, - -0.0008295467468051531, - -0.0008286987284087938, - -0.0008317153180082116, - -0.0008391881334033032, - -0.0008493046616206679, - -0.0008592627420157379, - -0.0008682552451188118, - -0.0008766066846372588, - -0.0008849057109155019, - -0.000893204737193745, - -0.0009015037634719881, - -0.0009098027897502313, - -0.0009181018160284746, - -0.0009264008423067176, - -0.0009346998685849608, - -0.000942998894863204, - -0.000951297921141447, - -0.0009595969474196903, - -0.0009678959736979335, - -0.000976200472313673, - -0.0009845716933766673, - -0.0009930432976473127, - -0.0010015312998756325, - -0.0010097448795447427, - -0.0010174953720654295, - -0.001024842244362718, - -0.0010318115405876663, - -0.0010384689996729797, - -0.0010450312545731114, - -0.0010516516100566734, - -0.0010583512277249551, - -0.0010650814938809362, - -0.0010718121232176669, - -0.0010785427525543973, - -0.0010852733818911284, - -0.0010920040112278589, - -0.0010987346405645895, - -0.00110546526990132, - -0.0011121958992380506, - -0.0011189265285747813, - -0.001125657157911512, - -0.0011323877872482426, - -0.0011391184165849733, - -0.001145857589485452, - -0.0011526803922950477, - -0.0011596216365788127, - -0.0011665820533487141, - -0.001173219255134947, - -0.0011793082985289594, - -0.0011849276938755465, - -0.0011901407756695855, - -0.0011950079093162654, - -0.0011997410081097627, - -0.0012045229582814878, - -0.001209391759365993, - -0.0012143070485705798, - -0.001219224566129913, - -0.0012241420836892462, - -0.0012290596012485794, - -0.0012339771188079128, - -0.001238894636367246, - -0.001243812153926579, - -0.0012487296714859125, - -0.0012536471890452457, - -0.0012585647066045793, - -0.0012634822241639125, - -0.0012683997417232457, - -0.0012733171648958315, - -0.0012782107917916688, - -0.0012830302986500245, - -0.0012877850287713846, - -0.0012925806923103052, - -0.0012976126847603288, - -0.0013030186589439393, - -0.0013090409594254545, - -0.0013154187569689945, - -0.001321688978166138, - -0.0013279573287315691, - -0.001334225679297, - -0.0013404940298624313, - -0.0013467428377397874, - -0.0013515388823509226, - -0.0013589566351906667, - -0.0015630225990613039, - -0.0017858459966459766, - -0.001962244723175439, - -0.0021369760175720945, - -0.0021589982402316866, - -0.002172265616774848, - -0.002181027320006569, - -0.0021876463951390904, - -0.002193610952266047, - -0.0021997388842821975, - -0.00220670876166807, - -0.002214844412839924, - -0.002224046805931156, - -0.0022338007559707003, - -0.002243600884582116, - -0.002253401013193531, - -0.0022632011418049457, - -0.002273001270416361, - -0.002282801399027776, - -0.002292601527639191, - -0.002302401656250606, - -0.0023122017848620216, - -0.002322001913473436, - -0.0023318020420848512, - -0.002341602170696266, - -0.0023514022993076813, - -0.002361202427919096, - -0.0023710025565305114, - -0.0023808026851419267, - -0.002390602813753341, - -0.0024004029423647564, - -0.0024102030709761716, - -0.0024200034385597102, - -0.002429890947320584, - -0.0024401074882628403, - -0.0024507753003777935, - -0.002461853192523694, - -0.0024731268828756424, - -0.002483813639918251, - -0.002492816252489583, - -0.002499656662384614, - -0.0025045437257438232, - -0.0025083267671965424, - -0.0025116253370591523, - -0.0025145204657499864, - -0.002517081445466183, - -0.002519381137403379, - -0.0025215027190615405, - -0.002523552158027414, - -0.0025256441707118193, - -0.0025278631326103636, - -0.0025302621861442195, - -0.002532877433227971, - -0.002535712207629795, - -0.00253872576181861, - -0.0025418743959836954, - -0.0025451575871643832, - -0.002548586548445306, - -0.0025521680076772443, - -0.002555908692710979, - -0.002559819816631142, - -0.002563908107288514, - -0.00256817804991695, - -0.002572636372367228, - -0.0025772942877239817, - -0.0025821517959872123, - -0.0025872201102415523, - -0.0025925037157208553, - -0.0025980093402759017, - -0.0026037549000087774, - -0.002609836567273308, - -0.0026162652721160853, - -0.0026227113055602843, - -0.00262871209838103, - -0.0026343126384142045, - -0.002639560537882105, - -0.002644743590921885, - -0.002650209103971785, - -0.0026559678176568163, - -0.0026619260831940933, - -0.0026680806324585714, - -0.0026744314654502505, - -0.002680981826528259, - -0.002687731715692595, - -0.002694682755122824, - -0.0027018381865532375, - -0.0027095336044658295, - -0.0027177162723542063, - -0.0027233201006597197, - -0.0027267829197218244, - -0.0027294558555150967, - -0.0027323607659227485, - -0.0027354678318175845, - -0.0027386495284904035, - -0.0027419051771611514, - -0.0027452353647504477, - -0.002748638330496436, - -0.0027521175938509715, - -0.002755804088711958, - -0.0027593042876840612, - -0.0027619409180269466, - -0.0027641181825309308, - -0.002766388390618102, - -0.0027687434019555853, - -0.002771140188900077, - -0.0027735780433904423, -] -plot( - qq, - z, - label = "q", - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "q (kg/kg)", - ylabel = "Height (m)", - title = "q (kg/kg)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "broqen_q.png")) - - -# w_times_dqdz -dqdz = (qq[2:end] .- qq[1:(end - 1)]) ./ dz -w_mid = (w[1:(end - 1)] .+ w[2:end]) ./ 2 -plot( - dqdz .* w_mid, - z_mid, - label = "dqdz * w", - legend = :bottomright, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "dqdz * w (kg/kg m/s)", - ylabel = "Height (m)", - title = "dqdz * w (kg/kg m/s)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "w_times_dqdz$(suffix).png")) - -# w_times_dθdz -dθdz = (θ[2:end] .- θ[1:(end - 1)]) ./ dz -w_mid = (w[1:(end - 1)] .+ w[2:end]) ./ 2 -plot( - dθdz .* w_mid, - z_mid, - label = "dθdz * w", - legend = :bottomright, - dpi = dpi, - marker = :circle, - markersize = 1.0, - markerstrokewidth = 0.2, - xlabel = "dθdz * w (K m/s)", - ylabel = "Height (m)", - title = "dθdz * w (K m/s)", - # ylim = (ymin, ymax), - minorgrid = true, -) -savefig(joinpath(outpath, "random_test", "w_times_dθdz$(suffix).png")) diff --git a/test/runtests.jl b/test/runtests.jl index c9b6bfe..bdcb92b 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -28,6 +28,50 @@ import Thermodynamics.Parameters as TDP # T_new_z_init = SSCF.get_data_new_z_t("T", new_z,"lev","time"; data, thermo_params, initial_condition=true) # these no longer work w/o output_data downloaded + + new_zs = (nothing, collect(1:100:4000)) + + initial_conditions = (false, true) + surfaces = (nothing, "reference_state", "surface_conditions") + use_LES_output_for_zs = (false, true) + return_old_zs = (false, true) + + setups = Iterators.product( + SSCF.flight_numbers, + SSCF.forcing_types, + new_zs, + initial_conditions, + surfaces, + use_LES_output_for_zs, + return_old_zs, + ) + + n_setups = length(setups) + for (i, setup) in enumerate(setups) + @info "Testing combination $i/$n_setups" + flight_number, forcing_type, new_z, initial_condition, surface, use_LES_output_for_z, return_old_z = setup + data = SSCF.open_atlas_les_input(flight_number, forcing_type; open_files = false) + # check files all exist + # if isfile(data[forcing_type]) && isfile(data[:grid_data]) + if (!isnothing(data[forcing_type]) && isfile(data[forcing_type])) && + (!isnothing(data[:grid_data]) && isfile(data[:grid_data])) + SSCF.process_case( + flight_number; + forcing_type = forcing_type, + thermo_params = thermo_params, + new_z = new_z, + initial_condition = initial_condition, + surface = surface, + use_LES_output_for_z = use_LES_output_for_z, + return_old_z = return_old_z, + fail_on_missing_data = false, + ) + @test true # if no error, test passes + else + @warn "Files for flight $flight_number do not exist" + end + end + data = SSCF.process_case(9; thermo_params = thermo_params, use_LES_output_for_z = false) @show(data) diff --git a/test/test_run.jl b/test/test_run.jl deleted file mode 100644 index 641552b..0000000 --- a/test/test_run.jl +++ /dev/null @@ -1,1286 +0,0 @@ -## Run test on cases and plot relative to LES - -FT = Float64 -forcing_type = :obs_data - -# flight_numbers = 9 -flight_numbers = [1, 9, 10, 12, 13] -# flight_numbers = 1 - - -# convert flight_number to array if it's not already -if isa(flight_numbers, Int) - flight_numbers = [flight_numbers] -end - - - - -if forcing_type == :obs_data - forcing_str = "Obs" -elseif forcing_type == :ERA5_data - forcing_str = "ERA5" -else - error("forcing_type must be :obs_data or :ERA5_data") -end - - -reload_environment = true -if reload_environment | !isdefined(Main, :TurbulenceConvection) - using Pkg - # Pkg.activate(expanduser("~/Research_Schneider/CliMa/TurbulenceConvection.jl/integration_tests/")) # this break precomilation of TC.jl for some reason... - # Pkg.develop(path = expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl")) - # Pkg.activate(expanduser("~/Research_Schneider/CliMa/TurbulenceConvection.jl/")) - # Pkg.activate(expanduser("~/Research_Schneider/CliMa/TurbulenceConvection.jl/integration_tests/")) - # Pkg.develop(path = expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl")) - - - # using Revise - # Pkg.resolve() - # Pkg.instantiate() - - using Revise - Pkg.activate(expanduser("~/Research_Schneider/CliMa/TurbulenceConvection.jl/")) - using Revise - # Pkg.develop(path = expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl")) - Pkg.resolve() - Pkg.instantiate() - - Pkg.activate(expanduser("~/Research_Schneider/CliMa/TurbulenceConvection.jl/integration_tests")) - using Revise - # Pkg.develop(path = expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl")) - Pkg.resolve() - Pkg.instantiate() - using Revise - using TurbulenceConvection - tc = pkgdir(TurbulenceConvection) - include(joinpath(tc, "driver", "main.jl")) - include(joinpath(tc, "driver", "generate_namelist.jl")) - # includet(joinpath(tc, "driver", "main.jl")) - # includet(joinpath(tc, "driver", "generate_namelist.jl")) -end - -# ------------------ # -reload_SSCF = false -if reload_SSCF | !isdefined(Main, :SOCRATESSingleColumnForcings) - using Pkg - using Revise - Pkg.activate(expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/test")) - import CLIMAParameters as CP # use CLIMAParameters = "0.7, 0.8, 0.9, 0.10" - # import ClimaParams as CPP # would using this trouble w/ TC.jl? it's a different uuid technically..., use ClimaParams = "0.10" - import Thermodynamics as TD - import Thermodynamics.Parameters as TDP - # FT = Float64 - - toml_dict = CP.create_toml_dict(FT; dict_type = "alias") # CP 0.7 and below, Thermodynamics 0.11 and above - aliases = string.(fieldnames(TDP.ThermodynamicsParameters)) - param_pairs = CP.get_parameter_values!(toml_dict, aliases, "Thermodynamics") - thermo_params = TDP.ThermodynamicsParameters{FT}(; param_pairs...) - Pkg.activate(expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/")) - include( - "/home/jbenjami/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/src/SOCRATESSingleColumnForcings.jl", - ) -end -# ------------------ # - -for flight_number in flight_numbers - - setup_environment = true # leave true - if setup_environment - case_name = "SOCRATES_RF" * string(flight_number, pad = 2) * "_" * forcing_str * "_data" - - if !@isdefined(NameList) # For if we didn't use reload_enviornment (I'm not sure tbf if this also checks for modules lol, I guess we'll find out) - @info("NameList not defined by module, defining now as simple Dict()") # This allows plotting even if you haven't gone through the environment loading by allowing you to get the simname/uuid etc in namelist - namelist = Dict{String, Union{Dict, NamedTuple}}( - "time_stepping" => Dict(), - "stats_io" => Dict(), - "microphysics" => Dict(), - "user_args" => Dict(), - "user_aux" => Dict(), - "turbulence" => Dict("EDMF_PrognosticTKE" => Dict()), - "thermodynamics" => Dict(), - "output" => Dict(), - "meta" => Dict("simname" => case_name, "uuid" => ""), - ) - else - @info("NameList defined by module, using NameList.default_namelist()") - namelist = NameList.default_namelist( - case_name, - root = "./", # controls where the namelist gets written if write=true - # write = parsed_args["write_namelist"], # controls if the namelist gets written (I'm not sure if this is repetitive -- does it get written again after the namelist overwrite? I think this is the wrong namelist that kept getting written when I ran things earlier separate from the results...) - write = false, # don't write the namelist because we only care to write the later one once we've done our overwrites since that's the one that actually runs, though idk where that one gets written tbh... - ) - end - - namelist["time_stepping"]["dt_min"] = 0.5 - namelist["time_stepping"]["dt_max"] = 2.0 - namelist["time_stepping"]["t_max"] = 3600.0 * 4.0 - # namelist["stats_io"]["frequency"] = 600.0 - namelist["stats_io"]["frequency"] = 300.0 - - supersat_type = :Base - namelist["microphysics"]["τ_sub_dep"] = 100000.0 - namelist["microphysics"]["τ_cond_evap"] = 1.0 - namelist["user_args"] = (; use_supersat = supersat_type, τ_use = :morrison_milbrandt_2015_style) - # namelist["user_args"] = (;use_supersat=supersat_type, τ_use=:morrison_milbrandt_2015_style_exponential_part_only) - # namelist["user_args"] = (;use_supersat=supersat_type, τ_use=:standard) - - - namelist["user_aux"] = Dict() - # namelist["user_aux"]["initial_profile_updraft_area"] = 0.33 # i think either dict or named tuple is fine, we dispatch depending... # doesn't seem to work anyway... - - - # namelist["turbulence"]["EDMF_PrognosticTKE"]["updraft_mixing_frac"] = 0.6 - # ("turbulence", "EDMF_PrognosticTKE", "max_area", FT(.3)), # stability limiting... - # namelist["turbulence"]["EDMF_PrognosticTKE"]["surface_area_bc"] = "Prognostic" # unstable w/o setting other params (didn't help lol, was 0 at sfc) - # - - # surface area - namelist["turbulence"]["EDMF_PrognosticTKE"]["max_area"] = FT(0.5) # stability (maybe we need to use the limiter instead tho to not get flat cloud tops?) - namelist["turbulence"]["EDMF_PrognosticTKE"]["min_area"] = FT(1e-10) # stability (maybe we need to use the limiter instead tho to not get flat cloud tops?) - - # namelist["turbulence"]["EDMF_PrognosticTKE"]["min_area"] = FT(0.3) # testing - # namelist["turbulence"]["EDMF_PrognosticTKE"]["surface_area"] = 0.3 - - namelist["turbulence"]["EDMF_PrognosticTKE"]["updraft_number"] = 2 # testing lol - namelist["turbulence"]["EDMF_PrognosticTKE"]["surface_area"] = [0.25, 0.1] # testing lol, maybe they'll combine nicely - - - # namelist["turbulence"]["EDMF_PrognosticTKE"]["limit_min_area"] = true # testing - # namelist["turbulence"]["EDMF_PrognosticTKE"]["min_area_limiter_scale"] = 5 # testing strong detrainment... - # namelist["turbulence"]["EDMF_PrognosticTKE"]["min_area_limiter_power"] = 2000 # testing strong detrainment... - - - # # testing broad strong detrainment throughout (kills updraft) - # namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_scale"] = 5 # testing strong detrainment... - # namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_power"] = 4 # too - - # # testing broad weak detrainment throughout (still killed very low) - # namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_scale"] = 1 # testing strong detrainment... - # namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_power"] = 3 # too - - # # testing broad very weak detrainment throughout (leads to instability no matter what updraft area is seemingly) - # namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_scale"] = .1 # testing strong detrainment... - # namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_power"] = 10 # too - - # # testing weak detrainment until just before limit (kills updraft very low) - # namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_scale"] = 20 # testing strong detrainment... - # namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_power"] = 30 # too - - # testing mild detrainment until through limit then strong (runs slower bc updraft?) (big spike at top but at least makes it there -- runs super slow in adaptive mode)... - namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_scale"] = 1 # testing strong detrainment... - namelist["turbulence"]["EDMF_PrognosticTKE"]["area_limiter_power"] = 10 # too - - - # careful, we're getting qt + precip right but not qt, probably bc we're raining/snowing out our cloud lol... (the snow timescale is fast) - namelist["microphysics"]["τ_acnv_rai"] = 25000.0 - namelist["microphysics"]["τ_acnv_sno"] = 10000.0 - namelist["microphysics"]["q_liq_threshold"] = 1e-4 - namelist["microphysics"]["q_ice_threshold"] = 1e-5 - - - - - # namelist["thermodynamics"]["potential_temperature_reference_pressure"] = 985. * 100 # try changing this... - - namelist["thermodynamics"]["moisture_model"] = "nonequilibrium" - namelist["thermodynamics"]["sgs"] = "mean" - - namelist["output"]["output_root"] = - expanduser("~/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/test") - namelist["meta"]["uuid"] = "" # no uuid - uuid = string(namelist["meta"]["uuid"]) - simname = namelist["meta"]["simname"] - @info("simname", simname) - outpath = joinpath(namelist["output"]["output_root"], "Output.$simname.$uuid") # no uuid - @info("outpath", outpath) - simulation_outpath = joinpath(outpath, "stats/Stats." * case_name * ".nc") - # simulation_outpath = joinpath(outpath, "stats/Stats."*case_name*"_alt.nc") # testing an old one before any recent changes - - - # output_relpath = "Output."*case_name*".out/stats/Stats."*case_name*".nc" # could try Glob.jl, see https://discourse.julialang.org/t/rdir-search-recursive-for-files-with-a-given-name-pattern/75605/20 - # simulation_outpath = joinpath(namelist["output"]["output_root"], output_relpath), - - # @info(namelist) - - end - - - run_simulation = true - if run_simulation - main1d(namelist) - end - - - - SOCRATES_truth_path = "/home/jbenjami/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/Data/Atlas_LES_Profiles/Output_Data/" - truth_file = joinpath( - SOCRATES_truth_path, - "RF" * string(flight_number, pad = 2) * "_" * forcing_str * "_SOCRATES_128x128_100m_10s_rad10_vg_M2005_aj.nc", - ) - - SOCRATES_input_path = "/home/jbenjami/Research_Schneider/CliMa/SOCRATESSingleColumnForcings.jl/Data/Atlas_LES_Profiles/Input_Data/" - - LES_forcing_str = forcing_str == "Obs" ? "obs" : "ERA5" - LES_forcing_suffix = forcing_str == "Obs" ? ".nc" : "_mar18_2022.nc" - LES_input_file = - "RF" * string(flight_number, pad = 2) * "_" * LES_forcing_str * "-based_SAM_input" * LES_forcing_suffix - - - # ------------------ # - initial_condition = true - SSCFout = Main.SOCRATESSingleColumnForcings.process_case( - flight_number; - thermo_params = thermo_params, - initial_condition = initial_condition, - ) - z_SSCF = Main.SOCRATESSingleColumnForcings.open_atlas_les_input(flight_number)[:grid_data] - - # ------------------ # - - make_plots = true - # ============================================================================================================================================================= # - # create figure - simul_ind = 100 # time index to plot - # ============================================================================================================================================================= # - - if make_plots - # Read output file from SCM run and plot - - - using Dierckx - function pyinterp(x, xp, fp; bc = "error") - spl = Dierckx.Spline1D(xp, fp; k = 1, bc = bc) - return spl(vec(x)) - end - - using Plots - using NCDatasets - # create directory if doesn't exist - if !isdir(joinpath(outpath, "Figures")) - mkdir(joinpath(outpath, "Figures")) - end - - truth_data = NCDatasets.Dataset(truth_file, "r") - simul_data = NCDatasets.Dataset(simulation_outpath, "r") - z_simul = simul_data.group["profiles"]["zc"][:] # should be same for both but the truth one doesn't match the file atlas gave... - z_simul_f = simul_data.group["profiles"]["zf"][:] # should be same for both but the truth one doesn't match the file atlas gave... - - z_truth = truth_data["z"][:] # should be same for both but the truth one doesn't match the file atlas gave... - z = z_truth - - lt = length(simul_data.group["timeseries"]["t"]) - if lt < simul_ind - @warn( - "Simulation index $simul_ind is out of bounds for simulation data of time index length $lt, reverting to $lt" - ) - simul_ind = lt - end - - - t_simul = simul_data.group["timeseries"]["t"][:] - t_simul_ind = t_simul[simul_ind] - - t_truth = truth_data["time"][:] - t_truth = (t_truth .- t_truth[1]) .* (24 * 3600) # make it relative to start time - truth_ind = argmin(abs.(t_truth .- t_simul_ind)) - t_truth_ind = t_truth[truth_ind] - - - LES_in_data = NCDatasets.Dataset(joinpath(SOCRATES_input_path, LES_input_file), "r") # technically there's some time editing we should do for this but we can put it off for obs - - - # ============================================================================================================================================================= # - # test box - # import CLIMAParameters as CP - # # import Thermodynamics as TD - # TD = TC.TD - # TDP = TC.TD.Parameters - - # FT = Float64 - # toml_dict = CP.create_toml_dict(FT; dict_type = "alias") - # aliases = string.(fieldnames(TDP.ThermodynamicsParameters)) - # param_pairs = CP.get_parameter_values!(toml_dict, aliases, "Thermodynamics") - # thermo_params = TDP.ThermodynamicsParameters{FT}(; param_pairs...) - - # Tg_simul_start = simul_data.group["timeseries"]["Tsurface"][1] - # Tg_simul_start = simul_data.group["profiles"]["temperature_mean"][:,1][1] - # pg = simul_data.group["reference"]["p_f"][:][1] # no timeseries - # ρg = TD.air_density(thermo_params,Tg_simul_start,pg) - # q_sfc = TD.q_vap_saturation_generic(thermo_params, Tg_simul_start, ρg, TD.Liquid()) # surface specific humidity - # q_sfc = TD.q_vap_saturation_from_pressure(thermo_params,0. , pg, Tg_simul_start, TD.PhaseEquil) # surface specific humidity - - # ============================================================================================================================================================= # - - - # figure out simulation time we're plotting and what time that is in the truth_data (start should be same...) - - ### temperature ### - data_simul = simul_data.group["profiles"]["temperature_mean"][:, simul_ind] - data_truth = truth_data["TABS"][:, truth_ind] - - ymax = 4000.0 - # ymax = nothing - ymax = 4800 - ymin = -100.0 - ymaxs = Dict(1 => 4800, 9 => 4800, 10 => 4800, 12 => 3000, 13 => 3000) - dpi = 600 - minorgrid = true - - # --------------------------------------------------------------------------------------------- # - - # temperature - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :topright, - dpi = dpi, - marker = :circle, - markersize = 0.5, - markerstrokewidth = 0.2, - xlabel = "T (K)", - ylabel = "Height (m)", - title = "Temperature (K)", - ylim = (ymin, ymaxs[flight_number]), - minorgrid = minorgrid, - ) - p_s = plot!( - data_simul, - z_simul, - label = "Simulation", - marker = :circle, - markersize = 0.5, - markerstrokewidth = 0.2, - ) # add simulation data to same plot - # vertical line at 5.22 + 273.15 degrees - # surface temp dot - plot!( - simul_data.group["timeseries"]["Tsurface"][[simul_ind]], - [0], - label = "Surface Temp", - seriestype = :scatter, - markersize = 5, - markercolor = :red, - ) - plot!( - truth_data["SST"][[truth_ind]], - [0], - label = "SST", - seriestype = :scatter, - markersize = 5, - markercolor = :blue, - ) - - - - savefig(joinpath(outpath, "Figures", "temperature.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - # temperature diff - p_t = plot( - data_simul .- pyinterp(z_simul, z_truth, data_truth, bc = "extrapolate"), - z_simul, - label = "Truth", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "T diff (K)", - ylabel = "Height (m)", - title = "Temperature (K) diff", - minorgrid = minorgrid, - ) - savefig(joinpath(outpath, "Figures", "temperature_diff.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - # temperature on pressure grid - data_simul = simul_data.group["profiles"]["temperature_mean"][:, simul_ind] - data_truth = truth_data["TABS"][:, truth_ind] - - p_truth = truth_data["PRES"][:, truth_ind] - p_truth_alt = truth_data["p"][:] - - p_t = plot( - data_truth, - p_truth, - label = "Truth", - legend = :topright, - dpi = dpi, - marker = :circle, - markersize = 0.4, - markerstrokewidth = 0.05, - xlabel = "T (K)", - ylabel = "Pressure (Pa)", - title = "Temperature (K)", - yflip = true, - ylim = (500, 1020), - minorgrid = minorgrid, - ) - p_s = plot!( - data_simul, - simul_data.group["reference"]["p_c"] / 100.0, - label = "Simulation", - marker = :circle, - markersize = 0.4, - markerstrokewidth = 0.05, - ) # add simulation data to same plot - - p_s = plot!( - data_truth, - p_truth_alt, - label = "Truth alt", - dpi = dpi, - marker = :circle, - markersize = 0.25, - markerstrokewidth = 0.05, - linewidth = 0.1, - color = :blue, - ) - - - input_T_L = LES_in_data["T"][1, 1, :, 1][:] - input_p_L = LES_in_data["lev"][:] / 100 - - input_T_L = input_T_L[input_p_L .> minimum(p_truth)] - input_p_L = input_p_L[input_p_L .> minimum(p_truth)] - - p_s = plot!( - input_T_L, - input_p_L, - label = "Input", - dpi = dpi, - marker = :circle, - markersize = 0.75, - markerstrokewidth = 0.05, - linewidth = 0.1, - color = :red, - ) - - savefig(joinpath(outpath, "Figures", "temperature_p.png")) # save to file - - - # --------------------------------------------------------------------------------------------- # - - ### qt_mean ### - data_simul = simul_data.group["profiles"]["qt_mean"][:, simul_ind] - data_truth = truth_data["QT"][:, truth_ind] ./ 1000 # probably is mixing ratio - data_truth = data_truth ./ (1 .+ data_truth) # convert to specific humidity - - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :bottomleft, - marker = :circle, - markersize = 0.5, - markerstrokewidth = 0.05, - linewidth = 0.25, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "qt (kg/kg)", - ylabel = "Height (m)", - title = "QT (kg/kg)", - minorgrid = minorgrid, - ) - - if initial_condition - SSCFout_q = SSCFout.qt_nudge - else - SSCFout_q = (x -> x([0])[1]).(SSCFout.qt_nudge) - end - - p_s = plot!( - data_simul, - z_simul, - label = "Simulation", - marker = :square, - markersize = 0.5, - markerstrokewidth = 0.05, - linewidth = 0.25, - color = :orange, - ) # add simulation data to same plot - p_s = plot!( - SSCFout_q, - z_SSCF, - label = "Nudging", - marker = :circle, - markersize = 0.5, - markerstrokewidth = 0.05, - linewidth = 0.25, - color = :green, - ) # add simulation data to same plot - - savefig(joinpath(outpath, "Figures", "qt.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - # qt diff - p_t = plot( - data_simul .- pyinterp(z_simul, z_truth, data_truth, bc = "extrapolate"), - z_simul, - label = "diff", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "qt diff (K)", - ylabel = "Height (m)", - title = "qt_diff", - minorgrid = minorgrid, - ) - savefig(joinpath(outpath, "Figures", "qt_diff.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - # qt on pressure grid - data_simul = simul_data.group["profiles"]["qt_mean"][:, simul_ind] - data_truth = truth_data["QT"][:, truth_ind] / 1000.0 - - p_truth = truth_data["PRES"][:, truth_ind] - p_truth_alt = truth_data["p"][:] - - p_t = plot( - data_truth, - p_truth, - label = "Truth", - legend = :topright, - dpi = dpi, - marker = :circle, - markersize = 0.4, - markerstrokewidth = 0.05, - xlabel = "qt (kg/kg)", - ylabel = "Pressure (Pa)", - title = "Temperature (K)", - yflip = true, - ylim = (500, 1020), - minorgrid = minorgrid, - ) - p_s = plot!( - data_simul, - simul_data.group["reference"]["p_c"] / 100.0, - label = "Simulation", - marker = :circle, - markersize = 0.4, - markerstrokewidth = 0.05, - ) # add simulation data to same plot - - p_s = plot!( - data_truth, - p_truth_alt, - label = "Truth alt", - dpi = dpi, - marker = :circle, - markersize = 0.25, - markerstrokewidth = 0.05, - linewidth = 0.1, - color = :blue, - ) - - - input_q_L = LES_in_data["q"][1, 1, :, 1][:] - input_p_L = LES_in_data["lev"][:] / 100 - - input_q_L = input_q_L[input_p_L .> minimum(p_truth) - 50] - input_p_L = input_p_L[input_p_L .> minimum(p_truth) - 50] - - p_s = plot!( - input_q_L, - input_p_L, - label = "Input", - dpi = dpi, - marker = :circle, - markersize = 0.75, - markerstrokewidth = 0.05, - linewidth = 0.1, - color = :red, - ) - - - # --------------------------------------------------------------------------------------------- # - - - ### ql_mean ### (need to figure out indexing here in particular..., interpolate in t) - ql_simul_ind = simul_ind - ql_truth_ind = truth_ind - # ql_ind = 1 - data_simul = simul_data.group["profiles"]["ql_mean"][:, ql_simul_ind] - data_truth = truth_data["QCL"][:, ql_truth_ind] ./ 1000 - - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "ql (kg/kg)", - ylabel = "Height (m)", - title = "QL (kg/kg)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul, z_simul, label = "Simulation") # add simulation data to same plot - savefig(joinpath(outpath, "Figures", "ql.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - p_t = plot( - data_simul .- pyinterp(z_simul, z_truth, data_truth, bc = "extrapolate"), - z_simul, - label = "diff", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "ql diff (K)", - ylabel = "Height (m)", - title = "ql_diff", - minorgrid = minorgrid, - ) - savefig(joinpath(outpath, "Figures", "ql_diff.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - ### qi_mean ### (need to figure out indexing here in particular..., interpolate in t) - qi_simul_ind = simul_ind - qi_truth_ind = truth_ind - # ql_ind = 1 - data_simul = simul_data.group["profiles"]["qi_mean"][:, qi_simul_ind] - data_truth = truth_data["QCI"][:, qi_truth_ind] ./ 1000 - - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "qi (kg/kg)", - ylabel = "Height (m)", - title = "QI (kg/kg)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul, z_simul, label = "Simulation") # add simulation data to same plot - savefig(joinpath(outpath, "Figures", "qi.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - p_t = plot( - data_simul .- pyinterp(z_simul, z_truth, data_truth; bc = "extrapolate"), - z_simul, - label = "diff", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "qi diff (K)", - ylabel = "Height (m)", - title = "qi_diff", - minorgrid = minorgrid, - ) - savefig(joinpath(outpath, "Figures", "qi_diff.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - ### qc_mean ### (need to figure out indexing here in particular..., interpolate in t) - qc_simul_ind = simul_ind - qc_truth_ind = truth_ind - # ql_ind = 1 - data_simul = - simul_data.group["profiles"]["ql_mean"][:, qc_simul_ind] + - simul_data.group["profiles"]["qi_mean"][:, qc_simul_ind] - data_truth = truth_data["QCL"][:, qc_truth_ind] ./ 1000 + truth_data["QCI"][:, qc_truth_ind] ./ 1000 - - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "qc (kg/kg)", - ylabel = "Height (m)", - title = "QC (kg/kg)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul, z_simul, label = "Simulation") # add simulation data to same plot - savefig(joinpath(outpath, "Figures", "qc.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - p_t = plot( - data_simul .- pyinterp(z_simul, z_truth, data_truth; bc = "extrapolate"), - z_simul, - label = "diff", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "qc diff (K)", - ylabel = "Height (m)", - title = "qc_diff", - minorgrid = minorgrid, - ) - savefig(joinpath(outpath, "Figures", "qc_diff.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - # liquid potential Temp - data_simul = simul_data.group["profiles"]["thetal_mean"][:, simul_ind] - data_truth = truth_data["THETAL"][:, truth_ind] - - - - - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :bottomright, - dpi = dpi * 4, - marker = :circle, - markersize = 0.5, - markerstrokewidth = 0.2, - linewidth = 0.25, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "theta_l (K)", - ylabel = "Height (m)", - title = "theta_l (K)", - minorgrid = minorgrid, - ) - p_s = plot!( - data_simul, - z_simul, - label = "Simulation", - marker = :square, - markersize = 0.5, - markerstrokewidth = 0.2, - linewidth = 0.25, - color = :orange, - ) # add simulation data to same plot - - if initial_condition - SSCFout_θ = SSCFout.H_nudge - else - SSCFout_θ = (x -> x([0])[1]).(SSCFout.H_nudge) - end - - # @info("z_SSCF", length(z_SSCF)) - # @info("z_simul", length(z_simul)) - # @info("SSCFout_θ", length(SSCFout_θ)) - plot!( - SSCFout_θ, - z_SSCF, - label = "Nudging", - marker = :circle, - markersize = 0.5, - markerstrokewidth = 0.05, - linewidth = 0.25, - color = :green, - ) # add simulation data to same plot - - # data_simul_θ_offset = (data_simul[1:end-1] + data_simul[2:end])/2 - # plot!(data_simul_θ_offset, z_simul[2:end], label = "simulation offset", marker = :cross, markersize = .5, markerstrokewidth = 0.05, linewidth=0.05, color=:purple) # add simulation data to same plot - - # SSCFout_θ_offset = (SSCFout_θ[1:end-1] + SSCFout_θ[2:end])/2 - # z_offset = (z_simul[1:end-1] + z_simul[2:end])/2 - - # @info("length sscfoffest", length(SSCFout_θ_offset)) - # @info("length zoffset", length(z_offset)) - # plot!(SSCFout_θ_offset[2:end], z_offset[2:end], label = "SSCFout_θ offset", marker = :cross, markersize = .5, markerstrokewidth = 0.05, linewidth=0.05, color=:red) # add simulation data to same plot - - # plot!(SSCFout_θ, z_simul_f[2:end], label = "SSFc offset on simulf", marker = :square, markersize = .5, markerstrokewidth = 0.05, linewidth=0.05, color=:brown) # add simulation data to same plot - - savefig(joinpath(outpath, "Figures", "theta_l.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - p_t = plot( - data_simul .- pyinterp(z_simul, z_truth, data_truth; bc = "extrapolate"), - z_simul, - label = "diff", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "theta_l diff (K)", - ylabel = "Height (m)", - title = "thetal_diff", - minorgrid = minorgrid, - ) - savefig(joinpath(outpath, "Figures", "theta_l_diff.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - # ql and qi combined on separate axes - data_simul_ql = simul_data.group["profiles"]["ql_mean"][:, simul_ind] - data_truth_ql = truth_data["QCL"][:, truth_ind] ./ 1000 - - data_simul_qi = simul_data.group["profiles"]["qi_mean"][:, simul_ind] - data_truth_qi = truth_data["QCI"][:, truth_ind] ./ 1000 - - p_t = plot( - data_truth_ql, - z_truth, - label = "Truth liq", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - color = :green, - xlabel = "q (kg/kg)", - ylabel = "Height (m)", - title = "QL and QI (kg/kg)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul_ql, z_simul, label = "Simulation liq", color = :lime) # add simulation data to same plot - - # add ice data on same plot with twin x axis - xaxis2 = Plots.twiny() - p_s = plot!( - xaxis2, - data_truth_qi, - z_truth, - label = "Truth ice", - ylim = (ymin, ymaxs[flight_number]), - legend = :bottom, - color = :blue, - minorgrid = minorgrid, - ) - p_s = plot!(xaxis2, data_simul_qi, z_simul, label = "Simulation ice", color = :cyan) # add simulation data to same plot - savefig(joinpath(outpath, "Figures", "ql_qi.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - # ql, qi updraft/env - data_simul_ql_up = simul_data.group["profiles"]["updraft_ql"][:, simul_ind] - data_simul_qi_up = simul_data.group["profiles"]["updraft_qi"][:, simul_ind] - data_simul_ql_env = simul_data.group["profiles"]["env_ql"][:, simul_ind] - data_simul_qi_env = simul_data.group["profiles"]["env_qi"][:, simul_ind] - - plot( - data_simul_ql_up, - z_simul, - label = "Updraft liq", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - color = :green, - xlabel = "q (kg/kg)", - ylabel = "Height (m)", - title = "QL and QI (kg/kg)", - minorgrid = minorgrid, - ) - plot!(data_simul_ql_env, z_simul, label = "Environment liq", color = :green, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_qi_up, z_simul, label = "Updraft ice", color = :blue) # add simulation data to same plot - plot!(data_simul_qi_env, z_simul, label = "Environment ice", color = :blue, linestyle = :dash) # add simulation data to same plot - savefig(joinpath(outpath, "Figures", "ql_qi_updraft_env.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - # updraft and environmental temperature - data_simul_up = simul_data.group["profiles"]["updraft_temperature"][:, simul_ind] - data_simul_env = simul_data.group["profiles"]["env_temperature"][:, simul_ind] - data_simul = simul_data.group["profiles"]["temperature_mean"][:, simul_ind] - - data_truth = truth_data["TABS"][:, truth_ind] - - p_t = plot( - data_simul_up, - z_simul, - label = "Updraft", - legend = :topright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - color = :red, - xlabel = "T (K)", - ylabel = "Height (m)", - title = "Updraft and Environmental Temperature (K)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul_env, z_simul, label = "Environment", color = :blue) # add simulation data to same plot - p_s = plot!(data_simul, z_simul, label = "Simulation", color = :brown, xlim = (250, 280)) # add simulation data to same plot - - plot!( - simul_data.group["timeseries"]["Tsurface"][[simul_ind]], - [0], - label = "Surface Temp", - seriestype = :scatter, - markersize = 5, - markercolor = :red, - ) - plot!( - truth_data["SST"][[truth_ind]], - [0], - label = "SST", - seriestype = :scatter, - markersize = 2, - markercolor = :blue, - ) - plot!(data_truth, z_truth, label = "Truth mean", color = :green) # add simulation data to same plot - savefig(joinpath(outpath, "Figures", "updraft_env_temp.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - # updraft and environmental temperature start and now - data_simul_up = simul_data.group["profiles"]["updraft_temperature"][:, simul_ind] - data_simul_env = simul_data.group["profiles"]["env_temperature"][:, simul_ind] - data_truth = truth_data["TABS"][:, truth_ind] - - data_simul_up_start = simul_data.group["profiles"]["updraft_temperature"][:, 1] - data_simul_env_start = simul_data.group["profiles"]["env_temperature"][:, 1] - data_truth_start = truth_data["TABS"][:, 1] - - - - p_t = plot( - data_simul_up, - z_simul, - label = "Updraft", - legend = :topright, - ylim = (ymin, ymaxs[flight_number]), - color = :red, - dpi = dpi, - xlabel = "T (K)", - ylabel = "Height (m)", - title = "Updraft and Environmental Temperature (K)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul_env, z_simul, label = "Environment", color = :blue) # add simulation data to same plot - - plot!( - simul_data.group["timeseries"]["Tsurface"][[simul_ind]], - [0], - label = "Surface Temp", - seriestype = :scatter, - markersize = 5, - markercolor = :red, - ) - plot!( - truth_data["SST"][[truth_ind]], - [0], - label = "SST", - seriestype = :scatter, - markersize = 2, - markercolor = :blue, - ) - plot!(data_truth, z_truth, label = "Truth mean", color = :green) # add simulation data to same plot - - plot!(data_simul_up_start, z_simul, label = "Updraft start", color = :pink, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_env_start, z_simul, label = "Environment start", color = :cyan, linestyle = :dash) # add simulation data to same plot - plot!(data_truth_start, z_truth, label = "Truth start", color = :lime, linestyle = :dash, xlim = (250, 280)) # add simulation data to same plot - - savefig(joinpath(outpath, "Figures", "updraft_env_temp_start_now.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - # qt start vs now - data_simul = simul_data.group["profiles"]["qt_mean"][:, simul_ind] - data_simul_plus_precip = - simul_data.group["profiles"]["qt_mean"][:, simul_ind] + - simul_data.group["profiles"]["qs_mean"][:, simul_ind] + - simul_data.group["profiles"]["qr_mean"][:, simul_ind] - - - data_simul_up = simul_data.group["profiles"]["updraft_qt"][:, simul_ind] - data_simul_env = simul_data.group["profiles"]["env_qt"][:, simul_ind] - data_truth = truth_data["QT"][:, truth_ind] ./ 1000 # + - # truth_data["QS"][:, truth_ind] ./ 1000 + - # truth_data["QR"][:, truth_ind] ./ 1000 - - data_simul_start = simul_data.group["profiles"]["qt_mean"][:, 1] - data_simul_up_start = simul_data.group["profiles"]["updraft_qt"][:, 1] - data_simul_env_start = simul_data.group["profiles"]["env_qt"][:, 1] - data_truth_start = truth_data["QT"][:, 1] ./ 1000 - - - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :topright, - ylim = (ymin, ymaxs[flight_number]), - dpi = dpi, - marker = :circle, - markersize = 1.5, - xlabel = "qt (kg/kg)", - ylabel = "Height (m)", - title = "QT (kg/kg)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul, z_simul, label = "Simulation", marker = :circle, markersize = 1.5) # add simulation data to same plot - plot!(data_simul_up, z_simul, label = "Updraft", color = :red) # add simulation data to same plot - plot!(data_simul_env, z_simul, label = "Environment", color = :blue) # add simulation data to same plot - plot!(data_simul_plus_precip, z_simul, label = "simul+Precip", color = :black) # add simulation data to same plot - - plot!(data_truth_start, z_truth, label = "Truth start", color = :green, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_start, z_simul, label = "Simulation start", color = :pink, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_up_start, z_simul, label = "Updraft start", color = :red, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_env_start, z_simul, label = "Environment start", color = :blue, linestyle = :dash) # add simulation data to same plot - - - data_simul_minus_cloud = - simul_data.group["profiles"]["qt_mean"][:, simul_ind] - - simul_data.group["profiles"]["qi_mean"][:, simul_ind] #- simul_data.group["profiles"]["qi_mean"][:, simul_ind] - plot!(data_simul_minus_cloud, z_simul, label = "simul - cloud", color = :brown, linestyle = :dash) # add simulation data to same plot - - savefig(joinpath(outpath, "Figures", "qt_start_now.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - # qt start vs now vs pressure - # data_simul = simul_data.group["profiles"]["qt_mean"][:,simul_ind] - # data_simul_plus_precip = simul_data.group["profiles"]["qt_mean"][:,simul_ind] + simul_data.group["profiles"]["qs_mean"][:,simul_ind] + simul_data.group["profiles"]["qr_mean"][:,simul_ind] - - # data_simul_up = simul_data.group["profiles"]["updraft_qt"][:,simul_ind] - # data_simul_env = simul_data.group["profiles"]["env_qt"][:,simul_ind] - data_truth = truth_data["QT"][:, truth_ind] ./ 1000 - - # data_simul_start = simul_data.group["profiles"]["qt_mean"][:,1] - # data_simul_up_start = simul_data.group["profiles"]["updraft_qt"][:,1] - # data_simul_env_start = simul_data.group["profiles"]["env_qt"][:,1] - data_truth_start = truth_data["QT"][:, 1] ./ 1000 - - p_truth_start = truth_data["PRES"][:, 1] - - p_t = plot( - data_truth_start, - p_truth_start, - label = "Truth", - legend = :bottomleft, - dpi = dpi, - marker = :circle, - markersize = 1.5, - yflip = true, - xlabel = "qt (kg/kg)", - ylabel = "Height (m)", - title = "QT (kg/kg)", - minorgrid = minorgrid, - ) - p_s = plot!(data_truth, p_truth_start, label = "Truth now", marker = :circle, markersize = 1.5) - - - - savefig(joinpath(outpath, "Figures", "qt_start_now_vs_p.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - # ql start vs now - data_simul = simul_data.group["profiles"]["ql_mean"][:, simul_ind] - data_simul_plus_precip = simul_data.group["profiles"]["ql_mean"][:, simul_ind] - # simul_data.group["profies"]["qr_mean"][:, simul_ind] - - data_simul_up = simul_data.group["profiles"]["updraft_ql"][:, simul_ind] - data_simul_env = simul_data.group["profiles"]["env_ql"][:, simul_ind] - data_truth = truth_data["QCL"][:, truth_ind] ./ 1000 - # truth_data["QS"][:, truth_ind] ./ 1000 + - - data_simul_start = simul_data.group["profiles"]["ql_mean"][:, 1] - data_simul_up_start = simul_data.group["profiles"]["updraft_ql"][:, 1] - data_simul_env_start = simul_data.group["profiles"]["env_ql"][:, 1] - data_truth_start = truth_data["QCL"][:, 1] ./ 1000 - - - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :bottomright, - ylim = (ymin, ymaxs[flight_number]), - dpi = dpi, - marker = :circle, - markersize = 1.5, - xlabel = "qt (kg/kg)", - ylabel = "Height (m)", - title = "QL (kg/kg)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul, z_simul, label = "Simulation", marker = :circle, markersize = 1.5) # add simulation data to same plot - plot!(data_simul_up, z_simul, label = "Updraft", color = :red) # add simulation data to same plot - plot!(data_simul_env, z_simul, label = "Environment", color = :blue) # add simulation data to same plot - plot!(data_simul_plus_precip, z_simul, label = "simul+Precip", color = :black) # add simulation data to same plot - - plot!(data_truth_start, z_truth, label = "Truth start", color = :green, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_start, z_simul, label = "Simulation start", color = :pink, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_up_start, z_simul, label = "Updraft start", color = :red, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_env_start, z_simul, label = "Environment start", color = :blue, linestyle = :dash) # add simulation data to same plot - - savefig(joinpath(outpath, "Figures", "ql_start_now.png")) # save to file - - - # --------------------------------------------------------------------------------------------- # - # liquid potential Temp start vs now - data_simul = simul_data.group["profiles"]["thetal_mean"][:, simul_ind] - - data_simul_up = simul_data.group["profiles"]["updraft_thetal"][:, simul_ind] - data_simul_env = simul_data.group["profiles"]["env_thetal"][:, simul_ind] - data_truth = truth_data["THETAL"][:, truth_ind] - - data_simul_start = simul_data.group["profiles"]["thetal_mean"][:, 1] - data_simul_up_start = simul_data.group["profiles"]["updraft_thetal"][:, 1] - data_simul_env_start = simul_data.group["profiles"]["env_thetal"][:, 1] - data_truth_start = truth_data["THETAL"][:, 1] - - - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :bottomright, - ylim = (ymin, ymaxs[flight_number]), - dpi = dpi, - marker = :circle, - markersize = 1.5, - xlabel = "T (K)", - ylabel = "Height (m)", - title = "THETAL (kg/kg)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul, z_simul, label = "Simulation", marker = :circle, markersize = 1.5) # add simulation data to same plot - plot!(data_simul_up, z_simul, label = "Updraft", color = :red) # add simulation data to same plot - plot!(data_simul_env, z_simul, label = "Environment", color = :blue) # add simulation data to same plot - - plot!(data_truth_start, z_truth, label = "Truth start", color = :green, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_start, z_simul, label = "Simulation start", color = :pink, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_up_start, z_simul, label = "Updraft start", color = :red, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_env_start, z_simul, label = "Environment start", color = :blue, linestyle = :dash) # add simulation data to same plot - - savefig(joinpath(outpath, "Figures", "thetal_start_now.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - # temp start vs now - data_simul = simul_data.group["profiles"]["temperature_mean"][:, simul_ind] - - data_simul_up = simul_data.group["profiles"]["updraft_temperature"][:, simul_ind] - data_simul_env = simul_data.group["profiles"]["env_temperature"][:, simul_ind] - data_truth = truth_data["TABS"][:, truth_ind] - - data_simul_start = simul_data.group["profiles"]["temperature_mean"][:, 1] - data_simul_up_start = simul_data.group["profiles"]["updraft_temperature"][:, 1] - data_simul_env_start = simul_data.group["profiles"]["env_temperature"][:, 1] - data_truth_start = truth_data["TABS"][:, 1] - - p_t = plot( - data_truth, - z_truth, - label = "Truth", - legend = :topright, - ylim = (ymin, ymaxs[flight_number]), - dpi = dpi, - marker = :circle, - markersize = 1.5, - xlabel = "T (k)", - ylabel = "Height (m)", - title = "Temperature (K)", - minorgrid = minorgrid, - ) - p_s = plot!(data_simul, z_simul, label = "Simulation", marker = :circle, markersize = 1.5) # add simulation data to same plot - plot!(data_simul_up, z_simul, label = "Updraft", color = :red) # add simulation data to same plot - plot!(data_simul_env, z_simul, label = "Environment", color = :blue) # add simulation data to same plot - - plot!(data_truth_start, z_truth, label = "Truth start", color = :green, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_start, z_simul, label = "Simulation start", color = :pink, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_up_start, z_simul, label = "Updraft start", color = :red, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_env_start, z_simul, label = "Environment start", color = :blue, linestyle = :dash) # add simulation data to same plot - - savefig(joinpath(outpath, "Figures", "temp_start_now.png")) # save to file - - - # --------------------------------------------------------------------------------------------- # - - # updraft area - data_simul = simul_data.group["profiles"]["updraft_area"][:, simul_ind] - - plot( - data_simul, - z_simul, - label = "Updraft Area", - legend = :topright, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "Area", - ylabel = "Height (m)", - title = "Updraft Area", - ) - savefig(joinpath(outpath, "Figures", "updraft_area.png")) # save to file - - # --------------------------------------------------------------------------------------------- # - - - # rain snow (as a qt check) - data_simul_rain = simul_data.group["profiles"]["qr_mean"][:, simul_ind] - data_simul_snow = simul_data.group["profiles"]["qs_mean"][:, simul_ind] - data_truth_rain = truth_data["QR"][:, truth_ind] ./ 1000 - data_truth_snow = truth_data["QS"][:, truth_ind] ./ 1000 - - p_t = plot( - data_truth_rain, - z_truth, - label = "Truth Rain", - legend = :bottomright, - dpi = dpi, - ylim = (ymin, ymaxs[flight_number]), - xlabel = "qr (kg/kg)", - ylabel = "Height (m)", - title = "QR (kg/kg)", - color = :green, - linestyle = :dash, - minorgrid = minorgrid, - ) - plot!(data_simul_rain, z_simul, label = "Simulation Rain", color = :lime) - plot!(data_truth_snow, z_truth, label = "Truth Snow", color = :blue, linestyle = :dash) # add simulation data to same plot - plot!(data_simul_snow, z_simul, label = "Simulation Snow", color = :cyan) # add simulation data to same plot - savefig(joinpath(outpath, "Figures", "qr_qs.png")) # save to file - - - # reference states p - - p_truth = truth_data["PRES"][:, truth_ind] - p_truth_ref = truth_data["p"][:] - - p_ref_simul = simul_data.group["reference"]["p_c"] / 100.0 - p_ref_simul_f = simul_data.group["reference"]["p_f"] / 100.0 - - - p = plot( - p_truth, - z_truth, - label = "Truth", - legend = :topright, - dpi = dpi * 4, - marker = :circle, - markersize = 0.5, - markerstrokewidth = 0.05, - xlabel = "Pressure (Pa)", - ylabel = "Height (m)", - title = "Pressure (Pa)", - minorgrid = minorgrid, - ) - plot!( - p_truth_ref, - z_truth, - label = "Truth ref", - dpi = dpi, - marker = :circle, - markersize = 0.25, - markerstrokewidth = 0.05, - linewidth = 0.1, - color = :blue, - ) # add simulation data to same plot - plot!( - p_ref_simul, - z_simul, - label = "Simulation ref", - dpi = dpi, - marker = :circle, - markersize = 0.25, - markerstrokewidth = 0.05, - linewidth = 0.1, - color = :red, - ) # add simulation data to same plot - plot!( - p_ref_simul_f, - z_simul_f, - label = "Simulation ref f", - dpi = dpi, - marker = :circle, - markersize = 0.25, - markerstrokewidth = 0.05, - linewidth = 0.1, - color = :green, - ) # add simulation data to same plot - savefig(joinpath(outpath, "Figures", "p.png")) # save to file - - end -end