From 92e5a6dfd00b5a235357d5ea1d74ee176250952e Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 17:19:21 +0200 Subject: [PATCH 01/11] add NLsolve as dependency --- Project.toml | 6 ++++-- test/Project.toml | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index aebfcaf..351b1de 100644 --- a/Project.toml +++ b/Project.toml @@ -6,20 +6,22 @@ version = "0.1.0-DEV" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" MuladdMacro = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" +NLsolve = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" Reexport = "189a3867-3050-52da-a836-e630ba90ab69" Static = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" StaticArrayInterface = "0d7ed370-da01-4f52-bd93-41d350b8b718" +StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" StrideArrays = "d1fa6d79-ef01-42a6-86c9-f7c551f8593b" Trixi = "a7f1ee26-1774-49b1-8366-f1abc58fbfcb" [compat] LinearAlgebra = "1" MuladdMacro = "0.2.2" +NLsolve = "4.5.1" Reexport = "1.0" Static = "0.8, 1" -StaticArrays = "1" StaticArrayInterface = "1.5.1" +StaticArrays = "1" StrideArrays = "0.1.28" Trixi = "0.7, 0.8" julia = "1.9" diff --git a/test/Project.toml b/test/Project.toml index 70152e3..c037ade 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -5,6 +5,7 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" Trixi = "a7f1ee26-1774-49b1-8366-f1abc58fbfcb" [compat] +NLsolve = "4.5.1" OrdinaryDiffEq = "6.53.2" Test = "1" Trixi = "0.7, 0.8" From 6ca2cda6d419a92ddea19f05eda44945cadcf8dc Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 17:30:42 +0200 Subject: [PATCH 02/11] removed redundant code --- src/TrixiAtmo.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/TrixiAtmo.jl b/src/TrixiAtmo.jl index 3da6d63..e6c4608 100644 --- a/src/TrixiAtmo.jl +++ b/src/TrixiAtmo.jl @@ -10,7 +10,6 @@ module TrixiAtmo using Trixi using MuladdMacro: @muladd -using StaticArrays: SVector using Static: True, False using StrideArrays: PtrArray using StaticArrayInterface: static_size From ac667a0fe44e8b292ac5d563a4721eb59aac47d9 Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 17:42:54 +0200 Subject: [PATCH 03/11] fix spelling --- examples/elixir_moist_euler_EC_bubble.jl | 22 ++++++++++----------- examples/elixir_moist_euler_moist_bubble.jl | 22 ++++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/examples/elixir_moist_euler_EC_bubble.jl b/examples/elixir_moist_euler_EC_bubble.jl index 0c5b435..c7947cc 100644 --- a/examples/elixir_moist_euler_EC_bubble.jl +++ b/examples/elixir_moist_euler_EC_bubble.jl @@ -47,7 +47,7 @@ function generate_function_of_y(dz, y0, r_t0, theta_e0, end end #Create Initial atmosphere by generating a layer data set -struct AtmossphereLayers{RealT <: Real} +struct atmosphereLayers{RealT <: Real} equations::CompressibleMoistEulerEquations2D # structure: 1--> i-layer (z = total_height/precision *(i-1)), 2--> rho, rho_theta, rho_qv, rho_ql LayerData::Matrix{RealT} # Contains the layer data for each height @@ -59,10 +59,10 @@ struct AtmossphereLayers{RealT <: Real} mixing_ratios::NTuple{2, RealT} # Constant mixing ratio. Also defines initial guess for rho_qv0 = r_v0 * rho_0. end -function AtmossphereLayers(equations; total_height = 10010.0, preciseness = 10, - ground_state = (1.4, 100000.0), - equivalentpotential_temperature = 320, - mixing_ratios = (0.02, 0.02), RealT = Float64) +function atmosphereLayers(equations; total_height = 10010.0, preciseness = 10, + ground_state = (1.4, 100000.0), + equivalentpotential_temperature = 320, + mixing_ratios = (0.02, 0.02), RealT = Float64) @unpack kappa, p_0, c_pd, c_vd, c_pv, c_vv, R_d, R_v, c_pl = equations rho0, p0 = ground_state r_t0, r_v0 = mixing_ratios @@ -102,18 +102,18 @@ function AtmossphereLayers(equations; total_height = 10010.0, preciseness = 10, LayerData[i + 1, :] = [rho, rho_theta, rho_qv, rho_ql] end - return AtmossphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, - theta_e0, mixing_ratios) + return atmosphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, + theta_e0, mixing_ratios) end # Generate background state from the Layer data set by linearely interpolating the layers function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerEquations2D, - AtmosphereLayers::AtmossphereLayers) + AtmosphereLayers::atmosphereLayers) @unpack LayerData, preciseness, total_height = AtmosphereLayers dz = preciseness z = x[2] if (z > total_height && !(isapprox(z, total_height))) - error("The atmossphere does not match the simulation domain") + error("The atmosphere does not match the simulation domain") end n = convert(Int, floor(z / dz)) + 1 z_l = (n - 1) * dz @@ -200,10 +200,10 @@ function PerturbMoistProfile(x, rho, rho_theta, rho_qv, rho_ql, return SVector(rho, rho_e, rho_qv, rho_ql) end -AtmossphereData = AtmossphereLayers(equations) +atmosphereData = atmosphereLayers(equations) function initial_condition_moist(x, t, equations) - return initial_condition_moist_bubble(x, t, equations, AtmossphereData) + return initial_condition_moist_bubble(x, t, equations, atmosphereData) end initial_condition = initial_condition_moist diff --git a/examples/elixir_moist_euler_moist_bubble.jl b/examples/elixir_moist_euler_moist_bubble.jl index 4a34160..3858642 100644 --- a/examples/elixir_moist_euler_moist_bubble.jl +++ b/examples/elixir_moist_euler_moist_bubble.jl @@ -46,7 +46,7 @@ function generate_function_of_y(dz, y0, r_t0, theta_e0, end end -struct AtmossphereLayers{RealT <: Real} +struct atmosphereLayers{RealT <: Real} equations::CompressibleMoistEulerEquations2D # structure: 1--> i-layer (z = total_height/precision *(i-1)), 2--> rho, rho_theta, rho_qv, rho_ql LayerData::Matrix{RealT} @@ -58,10 +58,10 @@ struct AtmossphereLayers{RealT <: Real} mixing_ratios::NTuple{2, RealT} end -function AtmossphereLayers(equations; total_height = 10010.0, preciseness = 10, - ground_state = (1.4, 100000.0), - equivalentpotential_temperature = 320, - mixing_ratios = (0.02, 0.02), RealT = Float64) +function atmosphereLayers(equations; total_height = 10010.0, preciseness = 10, + ground_state = (1.4, 100000.0), + equivalentpotential_temperature = 320, + mixing_ratios = (0.02, 0.02), RealT = Float64) @unpack kappa, p_0, c_pd, c_vd, c_pv, c_vv, R_d, R_v, c_pl = equations rho0, p0 = ground_state r_t0, r_v0 = mixing_ratios @@ -101,8 +101,8 @@ function AtmossphereLayers(equations; total_height = 10010.0, preciseness = 10, LayerData[i + 1, :] = [rho, rho_theta, rho_qv, rho_ql] end - return AtmossphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, - theta_e0, mixing_ratios) + return atmosphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, + theta_e0, mixing_ratios) end # Moist bubble test case from paper: @@ -110,12 +110,12 @@ end # Models, MonthlyWeather Review Vol.130, 2917–2928, 2002, # https://journals.ametsoc.org/view/journals/mwre/130/12/1520-0493_2002_130_2917_absfmn_2.0.co_2.xml. function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerEquations2D, - AtmosphereLayers::AtmossphereLayers) + AtmosphereLayers::atmosphereLayers) @unpack LayerData, preciseness, total_height = AtmosphereLayers dz = preciseness z = x[2] if (z > total_height && !(isapprox(z, total_height))) - error("The atmossphere does not match the simulation domain") + error("The atmosphere does not match the simulation domain") end n = convert(Int, floor((z + eps()) / dz)) + 1 z_l = (n - 1) * dz @@ -220,11 +220,11 @@ function PerturbMoistProfile(x, rho, rho_theta, rho_qv, rho_ql, end # Create background atmosphere data set -AtmossphereData = AtmossphereLayers(equations) +atmosphereData = atmosphereLayers(equations) # Create the initial condition with the initial data set function initial_condition_moist(x, t, equations) - return initial_condition_moist_bubble(x, t, equations, AtmossphereData) + return initial_condition_moist_bubble(x, t, equations, atmosphereData) end initial_condition = initial_condition_moist From 3554ab9da690ff449607179fc1b92995cd989d64 Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 17:57:54 +0200 Subject: [PATCH 04/11] fix format and capitalization --- examples/elixir_moist_euler_EC_bubble.jl | 12 ++++++------ examples/elixir_moist_euler_moist_bubble.jl | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/elixir_moist_euler_EC_bubble.jl b/examples/elixir_moist_euler_EC_bubble.jl index c7947cc..dba7c2a 100644 --- a/examples/elixir_moist_euler_EC_bubble.jl +++ b/examples/elixir_moist_euler_EC_bubble.jl @@ -47,7 +47,7 @@ function generate_function_of_y(dz, y0, r_t0, theta_e0, end end #Create Initial atmosphere by generating a layer data set -struct atmosphereLayers{RealT <: Real} +struct AtmosphereLayers{RealT <: Real} equations::CompressibleMoistEulerEquations2D # structure: 1--> i-layer (z = total_height/precision *(i-1)), 2--> rho, rho_theta, rho_qv, rho_ql LayerData::Matrix{RealT} # Contains the layer data for each height @@ -59,7 +59,7 @@ struct atmosphereLayers{RealT <: Real} mixing_ratios::NTuple{2, RealT} # Constant mixing ratio. Also defines initial guess for rho_qv0 = r_v0 * rho_0. end -function atmosphereLayers(equations; total_height = 10010.0, preciseness = 10, +function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, ground_state = (1.4, 100000.0), equivalentpotential_temperature = 320, mixing_ratios = (0.02, 0.02), RealT = Float64) @@ -102,13 +102,13 @@ function atmosphereLayers(equations; total_height = 10010.0, preciseness = 10, LayerData[i + 1, :] = [rho, rho_theta, rho_qv, rho_ql] end - return atmosphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, + return AtmosphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, theta_e0, mixing_ratios) end # Generate background state from the Layer data set by linearely interpolating the layers function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerEquations2D, - AtmosphereLayers::atmosphereLayers) + AtmosphereLayers::AtmosphereLayers) @unpack LayerData, preciseness, total_height = AtmosphereLayers dz = preciseness z = x[2] @@ -200,10 +200,10 @@ function PerturbMoistProfile(x, rho, rho_theta, rho_qv, rho_ql, return SVector(rho, rho_e, rho_qv, rho_ql) end -atmosphereData = atmosphereLayers(equations) +atmosphere_data = AtmosphereLayers(equations) function initial_condition_moist(x, t, equations) - return initial_condition_moist_bubble(x, t, equations, atmosphereData) + return initial_condition_moist_bubble(x, t, equations, atmosphere_data) end initial_condition = initial_condition_moist diff --git a/examples/elixir_moist_euler_moist_bubble.jl b/examples/elixir_moist_euler_moist_bubble.jl index 3858642..4bc295b 100644 --- a/examples/elixir_moist_euler_moist_bubble.jl +++ b/examples/elixir_moist_euler_moist_bubble.jl @@ -46,7 +46,7 @@ function generate_function_of_y(dz, y0, r_t0, theta_e0, end end -struct atmosphereLayers{RealT <: Real} +struct AtmosphereLayers{RealT <: Real} equations::CompressibleMoistEulerEquations2D # structure: 1--> i-layer (z = total_height/precision *(i-1)), 2--> rho, rho_theta, rho_qv, rho_ql LayerData::Matrix{RealT} @@ -58,7 +58,7 @@ struct atmosphereLayers{RealT <: Real} mixing_ratios::NTuple{2, RealT} end -function atmosphereLayers(equations; total_height = 10010.0, preciseness = 10, +function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, ground_state = (1.4, 100000.0), equivalentpotential_temperature = 320, mixing_ratios = (0.02, 0.02), RealT = Float64) @@ -101,7 +101,7 @@ function atmosphereLayers(equations; total_height = 10010.0, preciseness = 10, LayerData[i + 1, :] = [rho, rho_theta, rho_qv, rho_ql] end - return atmosphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, + return AtmosphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, theta_e0, mixing_ratios) end @@ -110,7 +110,7 @@ end # Models, MonthlyWeather Review Vol.130, 2917–2928, 2002, # https://journals.ametsoc.org/view/journals/mwre/130/12/1520-0493_2002_130_2917_absfmn_2.0.co_2.xml. function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerEquations2D, - AtmosphereLayers::atmosphereLayers) + AtmosphereLayers::AtmosphereLayers) @unpack LayerData, preciseness, total_height = AtmosphereLayers dz = preciseness z = x[2] @@ -220,11 +220,11 @@ function PerturbMoistProfile(x, rho, rho_theta, rho_qv, rho_ql, end # Create background atmosphere data set -atmosphereData = atmosphereLayers(equations) +atmosphere_data = AtmosphereLayers(equations) # Create the initial condition with the initial data set function initial_condition_moist(x, t, equations) - return initial_condition_moist_bubble(x, t, equations, atmosphereData) + return initial_condition_moist_bubble(x, t, equations, atmosphere_data) end initial_condition = initial_condition_moist From 4123dd78324eb52008dc6f36fcf2fa1849d2b7ac Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 18:07:59 +0200 Subject: [PATCH 05/11] make only module and type names CamelCase --- examples/elixir_moist_euler_EC_bubble.jl | 9 ++++----- examples/elixir_moist_euler_dry_bubble.jl | 2 +- examples/elixir_moist_euler_moist_bubble.jl | 4 ++-- examples/elixir_moist_euler_source_terms_dry.jl | 3 --- examples/elixir_moist_euler_source_terms_moist.jl | 3 --- examples/elixir_moist_euler_source_terms_split_moist.jl | 3 --- 6 files changed, 7 insertions(+), 17 deletions(-) diff --git a/examples/elixir_moist_euler_EC_bubble.jl b/examples/elixir_moist_euler_EC_bubble.jl index dba7c2a..2b2b469 100644 --- a/examples/elixir_moist_euler_EC_bubble.jl +++ b/examples/elixir_moist_euler_EC_bubble.jl @@ -9,7 +9,6 @@ using NLsolve: nlsolve equations = CompressibleMoistEulerEquations2D() -# TODO - Should the IC functions and struct be in the equation file? function moist_state(y, dz, y0, r_t0, theta_e0, equations::CompressibleMoistEulerEquations2D) @unpack p_0, g, c_pd, c_pv, c_vd, c_vv, R_d, R_v, c_pl, L_00 = equations @@ -108,8 +107,8 @@ end # Generate background state from the Layer data set by linearely interpolating the layers function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerEquations2D, - AtmosphereLayers::AtmosphereLayers) - @unpack LayerData, preciseness, total_height = AtmosphereLayers + atmosphere_layers::AtmosphereLayers) + @unpack LayerData, preciseness, total_height = atmosphere_layers dz = preciseness z = x[2] if (z > total_height && !(isapprox(z, total_height))) @@ -130,7 +129,7 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE rho_qv = rho * (rho_qv_r / rho_r * (z - z_l) + rho_qv_l / rho_l * (z_r - z)) / dz rho_ql = rho * (rho_ql_r / rho_r * (z - z_l) + rho_ql_l / rho_l * (z_r - z)) / dz - rho, rho_e, rho_qv, rho_ql = PerturbMoistProfile(x, rho, rho_theta, rho_qv, rho_ql, + rho, rho_e, rho_qv, rho_ql = perturb_moist_profile(x, rho, rho_theta, rho_qv, rho_ql, equations::CompressibleMoistEulerEquations2D) v1 = 60.0 @@ -143,7 +142,7 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE end # Add perturbation to the profile -function PerturbMoistProfile(x, rho, rho_theta, rho_qv, rho_ql, +function perturb_moist_profile(x, rho, rho_theta, rho_qv, rho_ql, equations::CompressibleMoistEulerEquations2D) @unpack kappa, p_0, c_pd, c_vd, c_pv, c_vv, R_d, R_v, c_pl, L_00 = equations xc = 2000 diff --git a/examples/elixir_moist_euler_dry_bubble.jl b/examples/elixir_moist_euler_dry_bubble.jl index ab522a0..d34c63d 100644 --- a/examples/elixir_moist_euler_dry_bubble.jl +++ b/examples/elixir_moist_euler_dry_bubble.jl @@ -1,5 +1,5 @@ using OrdinaryDiffEq -using Trixi # TODO - Decide. This structure requires Trixi.jl to be in Project.toml of `Test` +using Trixi using TrixiAtmo using TrixiAtmo: flux_LMARS, source_terms_geopotential, cons2drypot diff --git a/examples/elixir_moist_euler_moist_bubble.jl b/examples/elixir_moist_euler_moist_bubble.jl index 4bc295b..c268e2c 100644 --- a/examples/elixir_moist_euler_moist_bubble.jl +++ b/examples/elixir_moist_euler_moist_bubble.jl @@ -132,7 +132,7 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE rho_qv = rho * (rho_qv_r / rho_r * (z - z_l) + rho_qv_l / rho_l * (z_r - z)) / dz rho_ql = rho * (rho_ql_r / rho_r * (z - z_l) + rho_ql_l / rho_l * (z_r - z)) / dz - rho, rho_e, rho_qv, rho_ql = PerturbMoistProfile(x, rho, rho_theta, rho_qv, rho_ql, + rho, rho_e, rho_qv, rho_ql = perturb_moist_profile(x, rho, rho_theta, rho_qv, rho_ql, equations::CompressibleMoistEulerEquations2D) v1 = 0.0 @@ -144,7 +144,7 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE return SVector(rho, rho_v1, rho_v2, rho_E, rho_qv, rho_ql) end -function PerturbMoistProfile(x, rho, rho_theta, rho_qv, rho_ql, +function perturb_moist_profile(x, rho, rho_theta, rho_qv, rho_ql, equations::CompressibleMoistEulerEquations2D) @unpack kappa, p_0, c_pd, c_vd, c_pv, c_vv, R_d, R_v, c_pl, L_00 = equations xc = 10000.0 diff --git a/examples/elixir_moist_euler_source_terms_dry.jl b/examples/elixir_moist_euler_source_terms_dry.jl index efe7a52..fc62f7b 100644 --- a/examples/elixir_moist_euler_source_terms_dry.jl +++ b/examples/elixir_moist_euler_source_terms_dry.jl @@ -1,6 +1,3 @@ -# The same setup as tree_2d_dgsem/elixir_euler_source_terms.jl -# to verify the StructuredMesh implementation against TreeMesh - using OrdinaryDiffEq using Trixi, TrixiAtmo using TrixiAtmo: source_terms_convergence_test_dry, initial_condition_convergence_test_dry diff --git a/examples/elixir_moist_euler_source_terms_moist.jl b/examples/elixir_moist_euler_source_terms_moist.jl index f5550d7..c3a06af 100644 --- a/examples/elixir_moist_euler_source_terms_moist.jl +++ b/examples/elixir_moist_euler_source_terms_moist.jl @@ -1,6 +1,3 @@ -# The same setup as tree_2d_dgsem/elixir_euler_source_terms.jl -# to verify the StructuredMesh implementation against TreeMesh - using OrdinaryDiffEq using Trixi, TrixiAtmo using TrixiAtmo: source_terms_convergence_test_moist, diff --git a/examples/elixir_moist_euler_source_terms_split_moist.jl b/examples/elixir_moist_euler_source_terms_split_moist.jl index f0e2415..d29a469 100644 --- a/examples/elixir_moist_euler_source_terms_split_moist.jl +++ b/examples/elixir_moist_euler_source_terms_split_moist.jl @@ -1,6 +1,3 @@ -# The same setup as tree_2d_dgsem/elixir_euler_source_terms.jl -# to verify the StructuredMesh implementation against TreeMesh - using OrdinaryDiffEq using Trixi, TrixiAtmo using TrixiAtmo: source_terms_convergence_test_moist, From eea0f959707a115f51fc0cc94639ae4f442c2560 Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 18:21:24 +0200 Subject: [PATCH 06/11] use ! to indicate that perturbation is mutating --- examples/elixir_moist_euler_EC_bubble.jl | 8 ++++---- examples/elixir_moist_euler_moist_bubble.jl | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/elixir_moist_euler_EC_bubble.jl b/examples/elixir_moist_euler_EC_bubble.jl index 2b2b469..012d0f4 100644 --- a/examples/elixir_moist_euler_EC_bubble.jl +++ b/examples/elixir_moist_euler_EC_bubble.jl @@ -129,8 +129,8 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE rho_qv = rho * (rho_qv_r / rho_r * (z - z_l) + rho_qv_l / rho_l * (z_r - z)) / dz rho_ql = rho * (rho_ql_r / rho_r * (z - z_l) + rho_ql_l / rho_l * (z_r - z)) / dz - rho, rho_e, rho_qv, rho_ql = perturb_moist_profile(x, rho, rho_theta, rho_qv, rho_ql, - equations::CompressibleMoistEulerEquations2D) + rho, rho_e, rho_qv, rho_ql = perturb_moist_profile!(x, rho, rho_theta, rho_qv, rho_ql, + equations::CompressibleMoistEulerEquations2D) v1 = 60.0 v2 = 60.0 @@ -142,8 +142,8 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE end # Add perturbation to the profile -function perturb_moist_profile(x, rho, rho_theta, rho_qv, rho_ql, - equations::CompressibleMoistEulerEquations2D) +function perturb_moist_profile!(x, rho, rho_theta, rho_qv, rho_ql, + equations::CompressibleMoistEulerEquations2D) @unpack kappa, p_0, c_pd, c_vd, c_pv, c_vv, R_d, R_v, c_pl, L_00 = equations xc = 2000 zc = 2000 diff --git a/examples/elixir_moist_euler_moist_bubble.jl b/examples/elixir_moist_euler_moist_bubble.jl index c268e2c..f082502 100644 --- a/examples/elixir_moist_euler_moist_bubble.jl +++ b/examples/elixir_moist_euler_moist_bubble.jl @@ -132,8 +132,8 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE rho_qv = rho * (rho_qv_r / rho_r * (z - z_l) + rho_qv_l / rho_l * (z_r - z)) / dz rho_ql = rho * (rho_ql_r / rho_r * (z - z_l) + rho_ql_l / rho_l * (z_r - z)) / dz - rho, rho_e, rho_qv, rho_ql = perturb_moist_profile(x, rho, rho_theta, rho_qv, rho_ql, - equations::CompressibleMoistEulerEquations2D) + rho, rho_e, rho_qv, rho_ql = perturb_moist_profile!(x, rho, rho_theta, rho_qv, rho_ql, + equations::CompressibleMoistEulerEquations2D) v1 = 0.0 v2 = 0.0 @@ -144,8 +144,8 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE return SVector(rho, rho_v1, rho_v2, rho_E, rho_qv, rho_ql) end -function perturb_moist_profile(x, rho, rho_theta, rho_qv, rho_ql, - equations::CompressibleMoistEulerEquations2D) +function perturb_moist_profile!(x, rho, rho_theta, rho_qv, rho_ql, + equations::CompressibleMoistEulerEquations2D) @unpack kappa, p_0, c_pd, c_vd, c_pv, c_vv, R_d, R_v, c_pl, L_00 = equations xc = 10000.0 zc = 2000.0 @@ -168,12 +168,12 @@ function perturb_moist_profile(x, rho, rho_theta, rho_qv, rho_ql, r_l = rho_ql / rho_d r_t = r_v + r_l - # equivalentpotential temperature + # equivalent potential temperature a = T_loc * (p_0 / p_d)^(R_d / (c_pd + r_t * c_pl)) b = H^(-r_v * R_v / c_pd) L_v = L_00 + (c_pv - c_pl) * T_loc c = exp(L_v * r_v / ((c_pd + r_t * c_pl) * T_loc)) - aeq_pot = (a * b * c) + aeq_pot = (a * b * c) # TODO: this is not used. remove? # Assume pressure stays constant if (r < rc && Δθ > 0) From 7e70aaf5a77ef0eb596c812520cc4f69fa3a6ec0 Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 18:22:53 +0200 Subject: [PATCH 07/11] format --- examples/elixir_moist_euler_EC_bubble.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/elixir_moist_euler_EC_bubble.jl b/examples/elixir_moist_euler_EC_bubble.jl index 012d0f4..745fa15 100644 --- a/examples/elixir_moist_euler_EC_bubble.jl +++ b/examples/elixir_moist_euler_EC_bubble.jl @@ -143,7 +143,7 @@ end # Add perturbation to the profile function perturb_moist_profile!(x, rho, rho_theta, rho_qv, rho_ql, - equations::CompressibleMoistEulerEquations2D) + equations::CompressibleMoistEulerEquations2D) @unpack kappa, p_0, c_pd, c_vd, c_pv, c_vv, R_d, R_v, c_pl, L_00 = equations xc = 2000 zc = 2000 From fa1172865d0068d67b22a432f8ba8527308cb9ba Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 18:44:07 +0200 Subject: [PATCH 08/11] more format fixes --- examples/elixir_moist_euler_EC_bubble.jl | 23 ++++++++++---------- examples/elixir_moist_euler_moist_bubble.jl | 24 ++++++++++----------- test/test_2d_moist_euler.jl | 2 +- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/examples/elixir_moist_euler_EC_bubble.jl b/examples/elixir_moist_euler_EC_bubble.jl index 745fa15..5b2f109 100644 --- a/examples/elixir_moist_euler_EC_bubble.jl +++ b/examples/elixir_moist_euler_EC_bubble.jl @@ -45,27 +45,28 @@ function generate_function_of_y(dz, y0, r_t0, theta_e0, return moist_state(y, dz, y0, r_t0, theta_e0, equations) end end + #Create Initial atmosphere by generating a layer data set struct AtmosphereLayers{RealT <: Real} equations::CompressibleMoistEulerEquations2D # structure: 1--> i-layer (z = total_height/precision *(i-1)), 2--> rho, rho_theta, rho_qv, rho_ql - LayerData::Matrix{RealT} # Contains the layer data for each height + layer_data::Matrix{RealT} # Contains the layer data for each height total_height::RealT # Total height of the atmosphere preciseness::Int # Space between each layer data (dz) layers::Int # Amount of layers (total height / dz) ground_state::NTuple{2, RealT} # (rho_0, p_tilde_0) to define the initial values at height z=0 - equivalentpotential_temperature::RealT # Value for theta_e since we have a constant temperature theta_e0=theta_e. + equivalent_potential_temperature::RealT # Value for theta_e since we have a constant temperature theta_e0=theta_e. mixing_ratios::NTuple{2, RealT} # Constant mixing ratio. Also defines initial guess for rho_qv0 = r_v0 * rho_0. end function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, ground_state = (1.4, 100000.0), - equivalentpotential_temperature = 320, + equivalent_potential_temperature = 320, mixing_ratios = (0.02, 0.02), RealT = Float64) @unpack kappa, p_0, c_pd, c_vd, c_pv, c_vv, R_d, R_v, c_pl = equations rho0, p0 = ground_state r_t0, r_v0 = mixing_ratios - theta_e0 = equivalentpotential_temperature + theta_e0 = equivalent_potential_temperature rho_qv0 = rho0 * r_v0 T0 = theta_e0 @@ -73,7 +74,7 @@ function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, n = convert(Int, total_height / preciseness) dz = 0.01 - LayerData = zeros(RealT, n + 1, 4) + layer_data = zeros(RealT, n + 1, 4) F = generate_function_of_y(dz, y0, r_t0, theta_e0, equations) sol = nlsolve(F, y0) @@ -84,7 +85,7 @@ function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, kappa_M = (R_d * rho_d + R_v * rho_qv) / (c_pd * rho_d + c_pv * rho_qv + c_pl * rho_ql) rho_theta = rho * (p0 / p)^kappa_M * T * (1 + (R_v / R_d) * r_v) / (1 + r_t) - LayerData[1, :] = [rho, rho_theta, rho_qv, rho_ql] + layer_data[1, :] = [rho, rho_theta, rho_qv, rho_ql] for i in (1:n) y0 = deepcopy(sol.zero) dz = preciseness @@ -98,17 +99,17 @@ function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, (c_pd * rho_d + c_pv * rho_qv + c_pl * rho_ql) rho_theta = rho * (p0 / p)^kappa_M * T * (1 + (R_v / R_d) * r_v) / (1 + r_t) - LayerData[i + 1, :] = [rho, rho_theta, rho_qv, rho_ql] + layer_data[i + 1, :] = [rho, rho_theta, rho_qv, rho_ql] end - return AtmosphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, + return AtmosphereLayers{RealT}(equations, layer_data, total_height, dz, n, ground_state, theta_e0, mixing_ratios) end # Generate background state from the Layer data set by linearely interpolating the layers function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerEquations2D, atmosphere_layers::AtmosphereLayers) - @unpack LayerData, preciseness, total_height = atmosphere_layers + @unpack layer_data, preciseness, total_height = atmosphere_layers dz = preciseness z = x[2] if (z > total_height && !(isapprox(z, total_height))) @@ -116,13 +117,13 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE end n = convert(Int, floor(z / dz)) + 1 z_l = (n - 1) * dz - (rho_l, rho_theta_l, rho_qv_l, rho_ql_l) = LayerData[n, :] + (rho_l, rho_theta_l, rho_qv_l, rho_ql_l) = layer_data[n, :] z_r = n * dz if (z_l == total_height) z_r = z_l + dz n = n - 1 end - (rho_r, rho_theta_r, rho_qv_r, rho_ql_r) = LayerData[n + 1, :] + (rho_r, rho_theta_r, rho_qv_r, rho_ql_r) = layer_data[n + 1, :] rho = (rho_r * (z - z_l) + rho_l * (z_r - z)) / dz rho_theta = rho * (rho_theta_r / rho_r * (z - z_l) + rho_theta_l / rho_l * (z_r - z)) / dz diff --git a/examples/elixir_moist_euler_moist_bubble.jl b/examples/elixir_moist_euler_moist_bubble.jl index f082502..bdf7b4e 100644 --- a/examples/elixir_moist_euler_moist_bubble.jl +++ b/examples/elixir_moist_euler_moist_bubble.jl @@ -49,23 +49,23 @@ end struct AtmosphereLayers{RealT <: Real} equations::CompressibleMoistEulerEquations2D # structure: 1--> i-layer (z = total_height/precision *(i-1)), 2--> rho, rho_theta, rho_qv, rho_ql - LayerData::Matrix{RealT} + layer_data::Matrix{RealT} total_height::RealT preciseness::Int layers::Int ground_state::NTuple{2, RealT} - equivalentpotential_temperature::RealT + equivalent_potential_temperature::RealT mixing_ratios::NTuple{2, RealT} end function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, ground_state = (1.4, 100000.0), - equivalentpotential_temperature = 320, + equivalent_potential_temperature = 320, mixing_ratios = (0.02, 0.02), RealT = Float64) @unpack kappa, p_0, c_pd, c_vd, c_pv, c_vv, R_d, R_v, c_pl = equations rho0, p0 = ground_state r_t0, r_v0 = mixing_ratios - theta_e0 = equivalentpotential_temperature + theta_e0 = equivalent_potential_temperature rho_qv0 = rho0 * r_v0 T0 = theta_e0 @@ -73,7 +73,7 @@ function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, n = convert(Int, total_height / preciseness) dz = 0.01 - LayerData = zeros(RealT, n + 1, 4) + layer_data = zeros(RealT, n + 1, 4) F = generate_function_of_y(dz, y0, r_t0, theta_e0, equations) sol = nlsolve(F, y0) @@ -84,7 +84,7 @@ function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, kappa_M = (R_d * rho_d + R_v * rho_qv) / (c_pd * rho_d + c_pv * rho_qv + c_pl * rho_ql) rho_theta = rho * (p0 / p)^kappa_M * T * (1 + (R_v / R_d) * r_v) / (1 + r_t) - LayerData[1, :] = [rho, rho_theta, rho_qv, rho_ql] + layer_data[1, :] = [rho, rho_theta, rho_qv, rho_ql] for i in (1:n) y0 = deepcopy(sol.zero) dz = preciseness @@ -98,10 +98,10 @@ function AtmosphereLayers(equations; total_height = 10010.0, preciseness = 10, (c_pd * rho_d + c_pv * rho_qv + c_pl * rho_ql) rho_theta = rho * (p0 / p)^kappa_M * T * (1 + (R_v / R_d) * r_v) / (1 + r_t) - LayerData[i + 1, :] = [rho, rho_theta, rho_qv, rho_ql] + layer_data[i + 1, :] = [rho, rho_theta, rho_qv, rho_ql] end - return AtmosphereLayers{RealT}(equations, LayerData, total_height, dz, n, ground_state, + return AtmosphereLayers{RealT}(equations, layer_data, total_height, dz, n, ground_state, theta_e0, mixing_ratios) end @@ -110,8 +110,8 @@ end # Models, MonthlyWeather Review Vol.130, 2917–2928, 2002, # https://journals.ametsoc.org/view/journals/mwre/130/12/1520-0493_2002_130_2917_absfmn_2.0.co_2.xml. function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerEquations2D, - AtmosphereLayers::AtmosphereLayers) - @unpack LayerData, preciseness, total_height = AtmosphereLayers + atmosphere_layers::AtmosphereLayers) + @unpack layer_data, preciseness, total_height = atmosphere_layers dz = preciseness z = x[2] if (z > total_height && !(isapprox(z, total_height))) @@ -119,13 +119,13 @@ function initial_condition_moist_bubble(x, t, equations::CompressibleMoistEulerE end n = convert(Int, floor((z + eps()) / dz)) + 1 z_l = (n - 1) * dz - (rho_l, rho_theta_l, rho_qv_l, rho_ql_l) = LayerData[n, :] + (rho_l, rho_theta_l, rho_qv_l, rho_ql_l) = layer_data[n, :] z_r = n * dz if (z_l == total_height) z_r = z_l + dz n = n - 1 end - (rho_r, rho_theta_r, rho_qv_r, rho_ql_r) = LayerData[n + 1, :] + (rho_r, rho_theta_r, rho_qv_r, rho_ql_r) = layer_data[n + 1, :] rho = (rho_r * (z - z_l) + rho_l * (z_r - z)) / dz rho_theta = rho * (rho_theta_r / rho_r * (z - z_l) + rho_theta_l / rho_l * (z_r - z)) / dz diff --git a/test/test_2d_moist_euler.jl b/test/test_2d_moist_euler.jl index 81c965e..d669e96 100644 --- a/test/test_2d_moist_euler.jl +++ b/test/test_2d_moist_euler.jl @@ -7,7 +7,7 @@ include("test_trixiatmo.jl") # TODO - This is a repetition from Trixi.jl EXAMPLES_DIR = pkgdir(TrixiAtmo, "examples") # TODO - Do we need a subdirectory for examples? -@trixiatmo_testset "elixir_moist_euler_dry_bubble.jl" begin +@trixiatmo_testset "elixir_moist_euler_dry_bubble" begin @test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_moist_euler_dry_bubble.jl"), l2=[ From ae538319de00c4cc16ae83e91fdd0fe6434da488 Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 19:15:09 +0200 Subject: [PATCH 09/11] add tests for spherical advection in Cartesian coords --- ...xir_euler_spherical_advection_cartesian.jl | 2 + examples/elixir_moist_euler_moist_bubble.jl | 1 + test/runtests.jl | 4 ++ test/test_spherical_advection.jl | 37 +++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 test/test_spherical_advection.jl diff --git a/examples/elixir_euler_spherical_advection_cartesian.jl b/examples/elixir_euler_spherical_advection_cartesian.jl index 4a3bb4c..9a0e7b5 100644 --- a/examples/elixir_euler_spherical_advection_cartesian.jl +++ b/examples/elixir_euler_spherical_advection_cartesian.jl @@ -6,6 +6,8 @@ using TrixiAtmo ############################################################################### # semidiscretization of the linear advection equation +# We use the Euler equations structure but modify the rhs! function to convert it to a +# variable-coefficient advection equation equations = CompressibleEulerEquations3D(1.4) # Create DG solver with polynomial degree = 3 and (local) Lax-Friedrichs/Rusanov flux as surface flux diff --git a/examples/elixir_moist_euler_moist_bubble.jl b/examples/elixir_moist_euler_moist_bubble.jl index bdf7b4e..ed633d5 100644 --- a/examples/elixir_moist_euler_moist_bubble.jl +++ b/examples/elixir_moist_euler_moist_bubble.jl @@ -284,6 +284,7 @@ analysis_callback = AnalysisCallback(semi, interval = analysis_interval, alive_callback = AliveCallback(analysis_interval = analysis_interval) save_solution = SaveSolutionCallback(interval = 1000, + output_directory = "moist_bubble", save_initial_solution = true, save_final_solution = true, solution_variables = solution_variables) diff --git a/test/runtests.jl b/test/runtests.jl index c59a4fa..541cfd8 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -16,4 +16,8 @@ const TRIXIATMO_NTHREADS = clamp(Sys.CPU_THREADS, 2, 3) @time if TRIXIATMO_TEST == "all" || TRIXIATMO_TEST == "moist_euler" include("test_2d_moist_euler.jl") end + + @time if TRIXIATMO_TEST == "all" || TRIXIATMO_TEST == "spherical_advection" + include("test_spherical_advection.jl") + end end diff --git a/test/test_spherical_advection.jl b/test/test_spherical_advection.jl new file mode 100644 index 0000000..31f7a29 --- /dev/null +++ b/test/test_spherical_advection.jl @@ -0,0 +1,37 @@ +module TestSphericalAdvection + +using Test +using TrixiAtmo + +include("test_trixiatmo.jl") + +EXAMPLES_DIR = pkgdir(TrixiAtmo, "examples") + +@trixiatmo_testset "elixir_euler_spherical_advection_cartesian" begin + @test_trixi_include(joinpath(EXAMPLES_DIR, + "elixir_euler_spherical_advection_cartesian.jl"), + l2=[ + 8.44505073e-03, + 8.23414117e-03, + 1.84210648e-03, + 0.00000000e+00, + 6.44302430e-02, + ], + linf=[ + 9.48950488e-02, + 9.64811952e-02, + 1.37453400e-02, + 0.00000000e+00, + 4.09322999e-01, + ]) + # Ensure that we do not have excessive memory allocations + # (e.g., from type instabilities) + let + t = sol.t[end] + u_ode = sol.u[end] + du_ode = similar(u_ode) + @test (@allocated TrixiAtmo.Trixi.rhs!(du_ode, u_ode, semi, t)) < 100 + end +end + +end # module From eb81ca5552050d9523c67f7a4ab52dac2fe97893 Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Sat, 17 Aug 2024 19:51:05 +0200 Subject: [PATCH 10/11] revert change to moist bubble case --- examples/elixir_moist_euler_moist_bubble.jl | 1 - test/moist_bubble/mesh.h5 | Bin 0 -> 1200 bytes test/moist_bubble/solution_000000000.h5 | Bin 0 -> 102400 bytes test/moist_bubble/solution_000000002.h5 | Bin 0 -> 102400 bytes 4 files changed, 1 deletion(-) create mode 100644 test/moist_bubble/mesh.h5 create mode 100644 test/moist_bubble/solution_000000000.h5 create mode 100644 test/moist_bubble/solution_000000002.h5 diff --git a/examples/elixir_moist_euler_moist_bubble.jl b/examples/elixir_moist_euler_moist_bubble.jl index ed633d5..bdf7b4e 100644 --- a/examples/elixir_moist_euler_moist_bubble.jl +++ b/examples/elixir_moist_euler_moist_bubble.jl @@ -284,7 +284,6 @@ analysis_callback = AnalysisCallback(semi, interval = analysis_interval, alive_callback = AliveCallback(analysis_interval = analysis_interval) save_solution = SaveSolutionCallback(interval = 1000, - output_directory = "moist_bubble", save_initial_solution = true, save_final_solution = true, solution_variables = solution_variables) diff --git a/test/moist_bubble/mesh.h5 b/test/moist_bubble/mesh.h5 new file mode 100644 index 0000000000000000000000000000000000000000..91fc5eba7bab11241cfefc35a116f2c237bb7b32 GIT binary patch literal 1200 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 Date: Sat, 17 Aug 2024 19:51:43 +0200 Subject: [PATCH 11/11] revert change to moist bubble case --- test/moist_bubble/mesh.h5 | Bin 1200 -> 0 bytes test/moist_bubble/solution_000000000.h5 | Bin 102400 -> 0 bytes test/moist_bubble/solution_000000002.h5 | Bin 102400 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test/moist_bubble/mesh.h5 delete mode 100644 test/moist_bubble/solution_000000000.h5 delete mode 100644 test/moist_bubble/solution_000000002.h5 diff --git a/test/moist_bubble/mesh.h5 b/test/moist_bubble/mesh.h5 deleted file mode 100644 index 91fc5eba7bab11241cfefc35a116f2c237bb7b32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1200 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