diff --git a/.buildkite/gpu_pipeline/pipeline.yml b/.buildkite/gpu_pipeline/pipeline.yml index 407698cf71f..ca0080f65d1 100644 --- a/.buildkite/gpu_pipeline/pipeline.yml +++ b/.buildkite/gpu_pipeline/pipeline.yml @@ -4,7 +4,6 @@ agents: modules: julia/1.10.0 cuda/julia-pref openmpi/4.1.5-mpitrampoline nsight-systems/2024.2.1 env: - JULIA_CUDA_MEMORY_POOL: none JULIA_MPI_HAS_CUDA: "true" JULIA_NVTX_CALLBACKS: gc JULIA_MAX_NUM_PRECOMPILE_FILES: 100 @@ -51,7 +50,7 @@ steps: # nsys profile --trace=nvtx,mpi,cuda,osrt --output=target_gpu_implicit_baroclinic_wave/report # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl # --config_file ${GPU_CONFIG_PATH}target_gpu_implicit_baroclinic_wave.yml - # artifact_paths: "target_gpu_implicit_baroclinic_wave/*" + # artifact_paths: "target_gpu_implicit_baroclinic_wave/output_active/*" # agents: # slurm_gpus: 1 # slurm_cpus_per_task: 4 @@ -65,7 +64,7 @@ steps: nsys profile --trace=nvtx,mpi,cuda,osrt --output=gpu_hs_rhoe_equil_55km_nz63_0M/report julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl --config_file ${GPU_CONFIG_PATH}gpu_hs_rhoe_equil_55km_nz63_0M.yml - artifact_paths: "gpu_hs_rhoe_equil_55km_nz63_0M/*" + artifact_paths: "gpu_hs_rhoe_equil_55km_nz63_0M/output_active/*" agents: slurm_gpus: 1 slurm_cpus_per_task: 4 @@ -80,7 +79,7 @@ steps: # nsys profile --trace=nvtx,mpi,cuda,osrt --output=gpu_hs_rhoe_equil_55km_nz63_0M_4process/report-%q{PMI_RANK} # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl # --config_file ${GPU_CONFIG_PATH}gpu_hs_rhoe_equil_55km_nz63_0M_4process.yml - # artifact_paths: "gpu_hs_rhoe_equil_55km_nz63_0M_4process/*" + # artifact_paths: "gpu_hs_rhoe_equil_55km_nz63_0M_4process/output_active/*" # agents: # slurm_gpus_per_task: 1 # slurm_cpus_per_task: 4 @@ -96,7 +95,7 @@ steps: # nsys profile --trace=osrt,nvtx,cuda,mpi,ucx --output=target_gpu_implicit_baroclinic_wave_4process/report-%q{PMI_RANK} # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl # --config_file ${GPU_CONFIG_PATH}target_gpu_implicit_baroclinic_wave_4process.yml - # artifact_paths: "target_gpu_implicit_baroclinic_wave_4process/*" + # artifact_paths: "target_gpu_implicit_baroclinic_wave_4process/output_active/*" # agents: # slurm_gpus_per_task: 1 # slurm_cpus_per_task: 4 @@ -113,7 +112,7 @@ steps: srun --cpu-bind=threads --cpus-per-task=4 julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ss_1process.yml - artifact_paths: "gpu_aquaplanet_dyamond_ss_1process/*" + artifact_paths: "gpu_aquaplanet_dyamond_ss_1process/output_active/*" agents: slurm_gpus_per_task: 1 slurm_cpus_per_task: 4 @@ -122,114 +121,114 @@ steps: slurm_time: 8:00:00 slurm_exclusive: - # - label: "gpu_aquaplanet_dyamond - strong scaling - 2 GPUs" - # command: - # - mkdir -p gpu_aquaplanet_dyamond_ss_2process - # - > - # srun --cpu-bind=threads --cpus-per-task=4 - # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl - # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ss_2process.yml - # artifact_paths: "gpu_aquaplanet_dyamond_ss_2process/*" - # agents: - # slurm_gpus_per_task: 1 - # slurm_cpus_per_task: 4 - # slurm_ntasks: 2 - # slurm_mem: 32G - # slurm_time: 8:00:00 - # slurm_exclusive: - - # - label: "gpu_aquaplanet_dyamond - strong scaling - 4 GPUs" - # command: - # - mkdir -p gpu_aquaplanet_dyamond_ss_4process - # - > - # srun --cpu-bind=threads --cpus-per-task=4 - # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl - # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ss_4process.yml - # artifact_paths: "gpu_aquaplanet_dyamond_ss_4process/*" - # agents: - # slurm_gpus_per_task: 1 - # slurm_cpus_per_task: 4 - # slurm_ntasks: 4 - # slurm_mem: 32G - # slurm_time: 8:00:00 - # slurm_exclusive: - - # - wait - - # - label: "gpu_aquaplanet_dyamond - strong scaling plots" - # command: - # - mkdir -p gpu_aquaplanet_dyamond_ss - # - > - # julia --color=yes --project=examples post_processing/plot_gpu_strong_scaling.jl gpu_aquaplanet_dyamond_ss - # artifact_paths: "gpu_aquaplanet_dyamond_ss/*" - # agents: - # slurm_cpus_per_task: 1 - # slurm_ntasks: 1 - # slurm_exclusive: + # - label: "gpu_aquaplanet_dyamond - strong scaling - 2 GPUs" + # command: + # - mkdir -p gpu_aquaplanet_dyamond_ss_2process + # - > + # srun --cpu-bind=threads --cpus-per-task=4 + # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl + # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ss_2process.yml + # artifact_paths: "gpu_aquaplanet_dyamond_ss_2process/output_active/*" + # agents: + # slurm_gpus_per_task: 1 + # slurm_cpus_per_task: 4 + # slurm_ntasks: 2 + # slurm_mem: 32G + # slurm_time: 8:00:00 + # slurm_exclusive: + + # - label: "gpu_aquaplanet_dyamond - strong scaling - 4 GPUs" + # command: + # - mkdir -p gpu_aquaplanet_dyamond_ss_4process + # - > + # srun --cpu-bind=threads --cpus-per-task=4 + # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl + # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ss_4process.yml + # artifact_paths: "gpu_aquaplanet_dyamond_ss_4process/output_active/*" + # agents: + # slurm_gpus_per_task: 1 + # slurm_cpus_per_task: 4 + # slurm_ntasks: 4 + # slurm_mem: 32G + # slurm_time: 8:00:00 + # slurm_exclusive: + + # - wait + + # - label: "gpu_aquaplanet_dyamond - strong scaling plots" + # command: + # - mkdir -p gpu_aquaplanet_dyamond_ss + # - > + # julia --color=yes --project=examples post_processing/plot_gpu_strong_scaling.jl gpu_aquaplanet_dyamond_ss + # artifact_paths: "gpu_aquaplanet_dyamond_ss/output_active/*" + # agents: + # slurm_cpus_per_task: 1 + # slurm_ntasks: 1 + # slurm_exclusive: # - group: "DYAMOND GPU weak scaling" # steps: - # - label: "gpu_aquaplanet_dyamond - weak scaling - 1 GPU" - # command: - # - mkdir -p gpu_aquaplanet_dyamond_ws_1process - # - > - # srun --cpu-bind=threads --cpus-per-task=4 - # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl - # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ws_1process.yml - # artifact_paths: "gpu_aquaplanet_dyamond_ws_1process/*" - # agents: - # slurm_gpus_per_task: 1 - # slurm_cpus_per_task: 4 - # slurm_ntasks: 1 - # slurm_mem: 32G - # slurm_time: 8:00:00 - # slurm_exclusive: - - # - label: "gpu_aquaplanet_dyamond - weak scaling - 2 GPUs" - # command: - # - mkdir -p gpu_aquaplanet_dyamond_ws_2process - # - > - # srun --cpu-bind=threads --cpus-per-task=4 - # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl - # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ws_2process.yml - # artifact_paths: "gpu_aquaplanet_dyamond_ws_2process/*" - # agents: - # slurm_gpus_per_task: 1 - # slurm_cpus_per_task: 4 - # slurm_ntasks: 2 - # slurm_mem: 32G - # slurm_time: 8:00:00 - # slurm_exclusive: - - # - label: "gpu_aquaplanet_dyamond - weak scaling - 4 GPUs" - # command: - # - mkdir -p gpu_aquaplanet_dyamond_ws_4process - # - > - # srun --cpu-bind=threads --cpus-per-task=4 - # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl - # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ws_4process.yml - # artifact_paths: "gpu_aquaplanet_dyamond_ws_4process/*" - # agents: - # slurm_gpus_per_task: 1 - # slurm_cpus_per_task: 4 - # slurm_ntasks: 4 - # slurm_mem: 32G - # slurm_time: 8:00:00 - # slurm_exclusive: - - # - wait - - # - label: "gpu_aquaplanet_dyamond - weak scaling plots" - # command: - # - mkdir -p gpu_aquaplanet_dyamond_ws - # - > - # julia --color=yes --project=examples post_processing/plot_gpu_weak_scaling.jl gpu_aquaplanet_dyamond_ws - # artifact_paths: "gpu_aquaplanet_dyamond_ws/*" - # agents: - # slurm_cpus_per_task: 1 - # slurm_ntasks: 1 - # slurm_exclusive: + # - label: "gpu_aquaplanet_dyamond - weak scaling - 1 GPU" + # command: + # - mkdir -p gpu_aquaplanet_dyamond_ws_1process + # - > + # srun --cpu-bind=threads --cpus-per-task=4 + # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl + # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ws_1process.yml + # artifact_paths: "gpu_aquaplanet_dyamond_ws_1process/output_active/*" + # agents: + # slurm_gpus_per_task: 1 + # slurm_cpus_per_task: 4 + # slurm_ntasks: 1 + # slurm_mem: 32G + # slurm_time: 8:00:00 + # slurm_exclusive: + + # - label: "gpu_aquaplanet_dyamond - weak scaling - 2 GPUs" + # command: + # - mkdir -p gpu_aquaplanet_dyamond_ws_2process + # - > + # srun --cpu-bind=threads --cpus-per-task=4 + # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl + # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ws_2process.yml + # artifact_paths: "gpu_aquaplanet_dyamond_ws_2process/output_active/*" + # agents: + # slurm_gpus_per_task: 1 + # slurm_cpus_per_task: 4 + # slurm_ntasks: 2 + # slurm_mem: 32G + # slurm_time: 8:00:00 + # slurm_exclusive: + + # - label: "gpu_aquaplanet_dyamond - weak scaling - 4 GPUs" + # command: + # - mkdir -p gpu_aquaplanet_dyamond_ws_4process + # - > + # srun --cpu-bind=threads --cpus-per-task=4 + # julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl + # --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond_ws_4process.yml + # artifact_paths: "gpu_aquaplanet_dyamond_ws_4process/output_active/*" + # agents: + # slurm_gpus_per_task: 1 + # slurm_cpus_per_task: 4 + # slurm_ntasks: 4 + # slurm_mem: 32G + # slurm_time: 8:00:00 + # slurm_exclusive: + + # - wait + + # - label: "gpu_aquaplanet_dyamond - weak scaling plots" + # command: + # - mkdir -p gpu_aquaplanet_dyamond_ws + # - > + # julia --color=yes --project=examples post_processing/plot_gpu_weak_scaling.jl gpu_aquaplanet_dyamond_ws + # artifact_paths: "gpu_aquaplanet_dyamond_ws/output_active/*" + # agents: + # slurm_cpus_per_task: 1 + # slurm_ntasks: 1 + # slurm_exclusive: @@ -243,7 +242,7 @@ steps: nsys profile --trace=nvtx,mpi,cuda,osrt --output=gpu_aquaplanet_diagedmf/report julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_diagedmf.yml - artifact_paths: "gpu_aquaplanet_diagedmf/*" + artifact_paths: "gpu_aquaplanet_diagedmf/output_active/*" agents: slurm_gpus_per_task: 1 slurm_cpus_per_task: 4 diff --git a/.buildkite/longruns/pipeline.yml b/.buildkite/longruns/pipeline.yml index 7ee9dcc178b..3cb87e39827 100644 --- a/.buildkite/longruns/pipeline.yml +++ b/.buildkite/longruns/pipeline.yml @@ -47,7 +47,7 @@ steps: # - label: ":computer: lim ARS zalesak baroclinic wave (ρe_tot) equilmoist high resolution" # command: # - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - # artifact_paths: "$$JOB_NAME/*" + # artifact_paths: "$$JOB_NAME/output_active/*" # agents: # slurm_ntasks: 32 # slurm_mem_per_cpu: 32GB @@ -58,12 +58,25 @@ steps: - label: ":computer: SSP baroclinic wave (ρe_tot) equilmoist high resolution centered diff" command: - "srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml" - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_ntasks: 32 + slurm_nodes: 2 slurm_time: 24:00:00 env: JOB_NAME: "longrun_ssp_bw_rhoe_equil_highres" + + - label: ":computer: aquaplanet equilmoist clearsky radiation + prognostic edmf diffusion only + 0M microphysics" + command: + - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml + artifact_paths: "$$JOB_NAME/*" + agents: + slurm_ntasks: 64 + slurm_nodes: 4 + slurm_mem_per_cpu: 16GB + slurm_time: 24:00:00 + env: + JOB_NAME: "longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_diffonly_0M" - group: "Low resolution long runs" @@ -72,7 +85,7 @@ steps: - label: ":computer: low resolution aquaplanet equilmoist clearsky radiation + time-varying insolation + slab ocean" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_ntasks: 8 slurm_mem_per_cpu: 16GB diff --git a/.buildkite/longruns_gpu/pipeline.yml b/.buildkite/longruns_gpu/pipeline.yml index b86356019a1..62839cec67b 100644 --- a/.buildkite/longruns_gpu/pipeline.yml +++ b/.buildkite/longruns_gpu/pipeline.yml @@ -45,7 +45,7 @@ steps: - label: ":computer: hydrostatic balance (ρe_tot)" command: - srun julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -55,7 +55,7 @@ steps: - label: ":computer: dry baroclinic wave" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -65,7 +65,7 @@ steps: - label: ":computer: baroclinic wave equilmoist" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -75,7 +75,7 @@ steps: - label: ":computer: dry held-suarez" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -85,7 +85,7 @@ steps: - label: ":computer: held-suarez, equilmoist" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -95,7 +95,7 @@ steps: - label: ":computer: aquaplanet equilmoist gray radiation + 0M microphysics" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" env: CLIMACORE_DISTRIBUTED: "MPI" JOB_NAME: "longrun_aquaplanet_rhoe_equil_55km_nz63_gray_0M" @@ -106,7 +106,7 @@ steps: - label: ":computer: aquaplanet equilmoist clearsky radiation + diagnostic edmf diffusion only + 0M microphysics" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -116,7 +116,7 @@ steps: - label: ":computer: aquaplanet equilmoist clearsky radiation + time-varying insolation + 0M microphysics + slab ocean" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -126,7 +126,7 @@ steps: - label: ":computer: held-suarez equilmoist + deep-atmosphere eqns" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" env: CLIMACORE_DISTRIBUTED: "MPI" JOB_NAME: "longrun_hs_rhoe_equil_55km_nz63_0M_deepatmos" @@ -137,7 +137,7 @@ steps: - label: ":computer: aquaplanet equilmoist clearsky radiation + 0M microphysics" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -147,7 +147,7 @@ steps: - label: ":computer: aquaplanet equilmoist clearsky radiation + diagnostic edmf + 0M microphysics" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -157,7 +157,7 @@ steps: - label: ":computer: aquaplanet equilmoist allsky radiation + diagnostic edmf + 0M microphysics" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -167,7 +167,7 @@ steps: - label: ":computer: aquaplanet equilmoist clearsky radiation + 0M microphysics + earth topography" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -177,7 +177,7 @@ steps: - label: ":computer: aquaplanet equilmoist clearsky radiation + 0M microphysics + earth topography (SLEVE)" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 6:00:00 @@ -187,7 +187,7 @@ steps: - label: ":umbrella: aquaplanet equilmoist clearsky radiation + 1M microphysics" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 6:00:00 @@ -201,7 +201,7 @@ steps: - label: ":computer: aquaplanet dyamond" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 @@ -215,7 +215,7 @@ steps: - label: ":computer: amip target diagnostic edmf" command: - srun julia --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/$$JOB_NAME.yml - artifact_paths: "$$JOB_NAME/*" + artifact_paths: "$$JOB_NAME/output_active/*" agents: slurm_gpus: 1 slurm_time: 12:00:00 diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 922c94801c4..6e0fc53b699 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -19,6 +19,8 @@ env: steps: - label: "init :computer:" key: "init_cpu_env" + concurrency: 1 + concurrency_group: 'depot/climaatmos-ci' command: - "echo $$JULIA_DEPOT_PATH" @@ -63,25 +65,25 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/single_column_radiative_equilibrium_gray.yml - artifact_paths: "single_column_radiative_equilibrium_gray/*" + artifact_paths: "single_column_radiative_equilibrium_gray/output_active/*" - label: ":computer: single column radiative equilibrium clearsky" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/single_column_radiative_equilibrium_clearsky.yml - artifact_paths: "single_column_radiative_equilibrium_clearsky/*" + artifact_paths: "single_column_radiative_equilibrium_clearsky/output_active/*" - label: ":computer: single column radiative equilibrium clearsky prognostic surface temperature" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/single_column_radiative_equilibrium_clearsky_prognostic_surface_temp.yml - artifact_paths: "single_column_radiative_equilibrium_clearsky_prognostic_surface_temp/*" + artifact_paths: "single_column_radiative_equilibrium_clearsky_prognostic_surface_temp/output_active/*" - label: ":computer: single column radiative equilibrium allsky idealized clouds varying insolation" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/single_column_radiative_equilibrium_allsky_idealized_clouds.yml - artifact_paths: "single_column_radiative_equilibrium_allsky_idealized_clouds/*" + artifact_paths: "single_column_radiative_equilibrium_allsky_idealized_clouds/output_active/*" - group: "Precipitation" steps: @@ -89,40 +91,40 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/single_column_precipitation_test.yml - artifact_paths: "single_column_precipitation_test/*" + artifact_paths: "single_column_precipitation_test/output_active/*" - group: "Gravity wave" steps: - label: ":computer: non-orographic gravity wave parameterization unit test 3d" command: "julia --color=yes --project=examples test/gravity_wave/non_orographic_gravity_wave/nogw_test_3d.jl" - artifact_paths: "nonorographic_gravity_wave_test_3d/*" + artifact_paths: "nonorographic_gravity_wave_test_3d/output_active/*" agents: slurm_mem: 20GB - label: ":computer: non-orographic gravity wave parameterization test with MiMA output" command: "julia --color=yes --project=examples test/gravity_wave/non_orographic_gravity_wave/nogw_test_mima.jl" - artifact_paths: "nonorographic_gravity_wave_test_mima/*" + artifact_paths: "nonorographic_gravity_wave_test_mima/output_active/*" agents: slurm_mem: 20GB - label: ":computer: non-orographic gravity wave parameterization unit test single column" command: "julia --color=yes --project=examples test/gravity_wave/non_orographic_gravity_wave/nogw_test_single_column.jl" - artifact_paths: "nonorographic_gravity_wave_test_single_column/*" + artifact_paths: "nonorographic_gravity_wave_test_single_column/output_active/*" - label: ":computer: orographic gravity wave parameterization unit test for base flux calculation" command: "julia --color=yes --project=examples test/gravity_wave/orographic_gravity_wave/ogwd_baseflux.jl" - artifact_paths: "orographic_gravity_wave_test_baseflux/*" + artifact_paths: "orographic_gravity_wave_test_baseflux/output_active/*" - label: ":computer: orographic gravity wave parameterization unit test for 3d calculation" command: "julia --color=yes --project=examples test/gravity_wave/orographic_gravity_wave/ogwd_3d.jl" - artifact_paths: "orographic_gravity_wave_test_3d/*" + artifact_paths: "orographic_gravity_wave_test_3d/output_active/*" - label: ":computer: single column non-orographic gravity wave parameterization" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/single_column_nonorographic_gravity_wave.yml - artifact_paths: "single_column_nonorographic_gravity_wave/*" + artifact_paths: "single_column_nonorographic_gravity_wave/output_active/*" - group: "Column Examples" steps: @@ -131,7 +133,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/single_column_hydrostatic_balance_ft64.yml - artifact_paths: "single_column_hydrostatic_balance_ft64/*" + artifact_paths: "single_column_hydrostatic_balance_ft64/output_active/*" - group: "Box Examples" steps: @@ -140,13 +142,13 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/box_hydrostatic_balance_rhoe.yml - artifact_paths: "box_hydrostatic_balance_rhoe/*" + artifact_paths: "box_hydrostatic_balance_rhoe/output_active/*" - label: ":computer: 3D density current" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/box_density_current_test.yml - artifact_paths: "box_density_current_test/*" + artifact_paths: "box_density_current_test/output_active/*" - group: "Plane Examples" steps: @@ -154,31 +156,31 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/plane_agnesi_mountain_test_uniform.yml - artifact_paths: "plane_agnesi_mountain_test_uniform/*" + artifact_paths: "plane_agnesi_mountain_test_uniform/output_active/*" - label: ":computer: Agnesi linear hydrostatic mountain experiment (stretched)" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/plane_agnesi_mountain_test_stretched.yml - artifact_paths: "plane_agnesi_mountain_test_stretched/*" + artifact_paths: "plane_agnesi_mountain_test_stretched/output_active/*" - label: ":computer: Schar mountain experiment (uniform grid)" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/plane_schar_mountain_test_uniform.yml - artifact_paths: "plane_schar_mountain_test_uniform/*" + artifact_paths: "plane_schar_mountain_test_uniform/output_active/*" - label: ":computer: Schar mountain experiment (stretched grid)" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/plane_schar_mountain_test_stretched.yml - artifact_paths: "plane_schar_mountain_test_stretched/*" + artifact_paths: "plane_schar_mountain_test_stretched/output_active/*" - label: ":computer: Density current experiment" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/plane_density_current_test.yml - artifact_paths: "plane_density_current_test/*" + artifact_paths: "plane_density_current_test/output_active/*" - group: "Sphere Examples (Dycore)" @@ -188,7 +190,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_hydrostatic_balance_rhoe_ft64.yml - artifact_paths: "sphere_hydrostatic_balance_rhoe_ft64/*" + artifact_paths: "sphere_hydrostatic_balance_rhoe_ft64/output_active/*" agents: slurm_mem: 20GB @@ -197,7 +199,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_baroclinic_wave_rhoe.yml - artifact_paths: "sphere_baroclinic_wave_rhoe/*" + artifact_paths: "sphere_baroclinic_wave_rhoe/output_active/*" - label: ":computer: no lim ARS baroclinic wave (ρe) equilmoist" command: > @@ -206,8 +208,8 @@ steps: julia --color=yes --project=examples regression_tests/test_mse.jl --job_id sphere_baroclinic_wave_rhoe_equilmoist - --out_dir sphere_baroclinic_wave_rhoe_equilmoist - artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist/*" + --out_dir sphere_baroclinic_wave_rhoe_equilmoist/output_active + artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist/output_active/*" agents: slurm_constraint: icelake|cascadelake|skylake|epyc @@ -218,8 +220,8 @@ steps: julia --color=yes --project=examples regression_tests/test_mse.jl --job_id deep_sphere_baroclinic_wave_rhoe_equilmoist - --out_dir deep_sphere_baroclinic_wave_rhoe_equilmoist - artifact_paths: "deep_sphere_baroclinic_wave_rhoe_equilmoist/*" + --out_dir deep_sphere_baroclinic_wave_rhoe_equilmoist/output_active + artifact_paths: "deep_sphere_baroclinic_wave_rhoe_equilmoist/output_active/*" agents: slurm_constraint: icelake|cascadelake|skylake|epyc @@ -227,26 +229,26 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_baroclinic_wave_rhoe_equilmoist_cldiag.yml - artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist_cldiag/*" + artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist_cldiag/output_active/*" - label: ":computer: no lim ARS baroclinic wave (ρe) equilmoist explicit vertdiff" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_baroclinic_wave_rhoe_equilmoist_expvdiff.yml - artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist_expvdiff/*" + artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist_expvdiff/output_active/*" - label: ":computer: no lim ARS baroclinic wave (ρe) equilmoist implicit vertdiff" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_baroclinic_wave_rhoe_equilmoist_impvdiff.yml - artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist_impvdiff/*" + artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist_impvdiff/output_active/*" # Add this back when we figure out what to do with SSP and zalesak # - label: ":computer: SSP zalesak tracer & energy upwind baroclinic wave (ρe_tot) equilmoist" # command: > # julia --color=yes --project=examples examples/hybrid/driver.jl # --config_file $CONFIG_PATH/$$JOB_NAME.yml - # artifact_paths: "$$JOB_NAME/*" + # artifact_paths: "$$JOB_NAME/output_active/*" # agents: # slurm_mem: 64GB # env: @@ -255,14 +257,14 @@ steps: - label: ":computer: no lim ARS baroclinic wave (ρe) equilmoist check conservation float64" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_baroclinic_wave_rhoe_equilmoist_conservation_ft64.yml - artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist_conservation_ft64/*" + artifact_paths: "sphere_baroclinic_wave_rhoe_equilmoist_conservation_ft64/output_active/*" - label: ":computer: held suarez (ρe) hightop" key: sphere_held_suarez_rhoe_hightop command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_held_suarez_rhoe_hightop.yml - artifact_paths: "sphere_held_suarez_rhoe_hightop/*" + artifact_paths: "sphere_held_suarez_rhoe_hightop/output_active/*" - label: ":computer: no lim ARS held suarez (ρe) equilmoist hightop sponge" command: > @@ -271,8 +273,8 @@ steps: julia --color=yes --project=examples regression_tests/test_mse.jl --job_id sphere_held_suarez_rhoe_equilmoist_hightop_sponge - --out_dir sphere_held_suarez_rhoe_equilmoist_hightop_sponge - artifact_paths: "sphere_held_suarez_rhoe_equilmoist_hightop_sponge/*" + --out_dir sphere_held_suarez_rhoe_equilmoist_hightop_sponge/output_active + artifact_paths: "sphere_held_suarez_rhoe_equilmoist_hightop_sponge/output_active/*" agents: slurm_constraint: icelake|cascadelake|skylake|epyc @@ -283,7 +285,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_aquaplanet_rhoe_equilmoist_allsky_gw_res.yml - artifact_paths: "sphere_aquaplanet_rhoe_equilmoist_allsky_gw_res/*" + artifact_paths: "sphere_aquaplanet_rhoe_equilmoist_allsky_gw_res/output_active/*" agents: slurm_mem: 20GB @@ -294,8 +296,8 @@ steps: julia --color=yes --project=examples regression_tests/test_mse.jl --job_id sphere_aquaplanet_rhoe_equilmoist_allsky_gw_raw_zonallyasymmetric - --out_dir sphere_aquaplanet_rhoe_equilmoist_allsky_gw_raw_zonallyasymmetric - artifact_paths: "sphere_aquaplanet_rhoe_equilmoist_allsky_gw_raw_zonallyasymmetric/*" + --out_dir sphere_aquaplanet_rhoe_equilmoist_allsky_gw_raw_zonallyasymmetric/output_active + artifact_paths: "sphere_aquaplanet_rhoe_equilmoist_allsky_gw_raw_zonallyasymmetric/output_active/*" agents: slurm_mem: 20GB slurm_constraint: icelake|cascadelake|skylake|epyc @@ -304,7 +306,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/aquaplanet_rhoe_equil_clearsky_tvinsol_0M_slabocean.yml - artifact_paths: "aquaplanet_rhoe_equil_clearsky_tvinsol_0M_slabocean/*" + artifact_paths: "aquaplanet_rhoe_equil_clearsky_tvinsol_0M_slabocean/output_active/*" agents: slurm_mem: 20GB @@ -315,19 +317,19 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_baroclinic_wave_rhoe_topography_dcmip_rs.yml - artifact_paths: "sphere_baroclinic_wave_rhoe_topography_dcmip_rs/*" + artifact_paths: "sphere_baroclinic_wave_rhoe_topography_dcmip_rs/output_active/*" - label: ":computer: held suarez (ρe) topography (dcmip)" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_held_suarez_rhoe_topography_dcmip.yml - artifact_paths: "sphere_held_suarez_rhoe_topography_dcmip/*" + artifact_paths: "sphere_held_suarez_rhoe_topography_dcmip/output_active/*" - label: ":computer: held suarez (ρe) equilmoist topography (dcmip)" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_held_suarez_rhoe_equilmoist_topography_dcmip.yml - artifact_paths: "sphere_held_suarez_rhoe_equilmoist_topography_dcmip/*" + artifact_paths: "sphere_held_suarez_rhoe_equilmoist_topography_dcmip/output_active/*" agents: slurm_mem: 20GB @@ -335,13 +337,13 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_ssp_baroclinic_wave_rhoe_equilmoist_dcmip200.yml - artifact_paths: "sphere_ssp_baroclinic_wave_rhoe_equilmoist_dcmip200/*" + artifact_paths: "sphere_ssp_baroclinic_wave_rhoe_equilmoist_dcmip200/output_active/*" - label: ":computer: Diagnostic Earth surface elevation spectra" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/sphere_ssp_baroclinic_wave_rhoe_equilmoist_earth.yml - artifact_paths: "sphere_ssp_baroclinic_wave_rhoe_equilmoist_earth/*" + artifact_paths: "sphere_ssp_baroclinic_wave_rhoe_equilmoist_earth/output_active/*" - group: "MPI Examples" steps: @@ -351,7 +353,7 @@ steps: command: > srun julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $MPI_CONFIG_PATH/mpi_make_restart.yml - artifact_paths: "mpi_make_restart/*" + artifact_paths: "mpi_make_restart/output_active/*" env: CLIMACORE_DISTRIBUTED: "MPI" agents: @@ -362,11 +364,11 @@ steps: key: "restart_mpi_baro_wave" depends_on: "mpi_baro_wave_make_restart" command: > - tar xvf mpi_make_restart/hdf5_files.tar -C mpi_make_restart + tar xvf mpi_make_restart/output_active/hdf5_files.tar -C mpi_make_restart/output_active srun julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $MPI_CONFIG_PATH/restart_mpi_baroclinic_wave_rhoe.yml - artifact_paths: "restart_mpi_baroclinic_wave_rhoe/*" + artifact_paths: "restart_mpi_baroclinic_wave_rhoe/output_active/*" env: CLIMACORE_DISTRIBUTED: "MPI" agents: @@ -381,7 +383,7 @@ steps: command: > srun julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $MPI_CONFIG_PATH/mpi_sphere_aquaplanet_rhoe_equilmoist_clearsky.yml - artifact_paths: "mpi_sphere_aquaplanet_rhoe_equilmoist_clearsky/*" + artifact_paths: "mpi_sphere_aquaplanet_rhoe_equilmoist_clearsky/output_active/*" env: CLIMACORE_DISTRIBUTED: "MPI" agents: @@ -393,7 +395,7 @@ steps: command: > srun julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $MPI_CONFIG_PATH/prep_remap.yml - artifact_paths: "prep_remap/*" + artifact_paths: "prep_remap/output_active/*" env: CLIMACORE_DISTRIBUTED: "MPI" agents: @@ -404,10 +406,10 @@ steps: key: "remap_pipeline" depends_on: "prep_remap" command: > - tar xvf prep_remap/hdf5_files.tar -C prep_remap + tar xvf prep_remap/output_active/hdf5_files.tar -C prep_remap/output_active julia --color=yes --project=examples post_processing/remap/remap_pipeline.jl - --data_dir prep_remap/ --out_dir remap_pipeline_output + --data_dir prep_remap/output_active --out_dir remap_pipeline_output artifact_paths: "remap_pipeline_output/*" - group: "Configs" @@ -417,7 +419,7 @@ steps: command: > julia --color=yes --project=examples --threads=8 examples/hybrid/driver.jl --config_file $CONFIG_PATH/test_io.yml - artifact_paths: "test_io/*" + artifact_paths: "test_io/output_active/*" agents: slurm_cpus_per_task: 8 @@ -425,7 +427,7 @@ steps: command: > srun julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/test_mpi_io.yml - artifact_paths: "test_mpi_io/*" + artifact_paths: "test_mpi_io/output_active/*" env: CLIMACORE_DISTRIBUTED: "MPI" agents: @@ -437,7 +439,7 @@ steps: command: > julia --color=yes --check-bounds=yes --project=perf perf/benchmark.jl $PERF_CONFIG_PATH/checkbounds.yml - artifact_paths: "checkbounds/*" + artifact_paths: "checkbounds/output_active/*" agents: slurm_mem: 20GB @@ -448,7 +450,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/diagnostic_edmfx_test_box.yml - artifact_paths: "diagnostic_edmfx_test_box/*" + artifact_paths: "diagnostic_edmfx_test_box/output_active/*" agents: slurm_mem: 20GB @@ -456,7 +458,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/diagnostic_edmfx_gabls_box.yml - artifact_paths: "diagnostic_edmfx_gabls_box/*" + artifact_paths: "diagnostic_edmfx_gabls_box/output_active/*" agents: slurm_mem: 20GB @@ -464,7 +466,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/diagnostic_edmfx_bomex_box.yml - artifact_paths: "diagnostic_edmfx_bomex_box/*" + artifact_paths: "diagnostic_edmfx_bomex_box/output_active/*" agents: slurm_mem: 20GB @@ -472,7 +474,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/diagnostic_edmfx_bomex_stretched_box.yml - artifact_paths: "diagnostic_edmfx_bomex_stretched_box/*" + artifact_paths: "diagnostic_edmfx_bomex_stretched_box/output_active/*" agents: slurm_mem: 20GB @@ -480,7 +482,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/diagnostic_edmfx_dycoms_rf01_explicit_box.yml - artifact_paths: "diagnostic_edmfx_dycoms_rf01_explicit_box/*" + artifact_paths: "diagnostic_edmfx_dycoms_rf01_explicit_box/output_active/*" agents: slurm_mem: 20GB @@ -488,7 +490,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/diagnostic_edmfx_dycoms_rf01_box.yml - artifact_paths: "diagnostic_edmfx_dycoms_rf01_box/*" + artifact_paths: "diagnostic_edmfx_dycoms_rf01_box/output_active/*" agents: slurm_mem: 20GB @@ -496,7 +498,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/diagnostic_edmfx_rico_box.yml - artifact_paths: "diagnostic_edmfx_rico_box/*" + artifact_paths: "diagnostic_edmfx_rico_box/output_active/*" agents: slurm_mem: 20GB @@ -504,7 +506,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/diagnostic_edmfx_trmm_box.yml - artifact_paths: "diagnostic_edmfx_trmm_box/*" + artifact_paths: "diagnostic_edmfx_trmm_box/output_active/*" agents: slurm_mem: 20GB @@ -512,7 +514,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/diagnostic_edmfx_trmm_stretched_box.yml - artifact_paths: "diagnostic_edmfx_trmm_stretched_box/*" + artifact_paths: "diagnostic_edmfx_trmm_stretched_box/output_active/*" agents: slurm_mem: 20GB @@ -523,8 +525,8 @@ steps: julia --color=yes --project=examples regression_tests/test_mse.jl --job_id diagnostic_edmfx_aquaplanet - --out_dir diagnostic_edmfx_aquaplanet - artifact_paths: "diagnostic_edmfx_aquaplanet/*" + --out_dir diagnostic_edmfx_aquaplanet/output_active + artifact_paths: "diagnostic_edmfx_aquaplanet/output_active/*" agents: slurm_mem: 20GB slurm_constraint: icelake|cascadelake|skylake|epyc @@ -532,11 +534,12 @@ steps: - group: "Prognostic EDMFX" steps: - - label: ":genie: Prognostic EDMFX advection test in a box" + - label: ":genie: Prognostic EDMFX advection test in a column" command: > julia --color=yes --project=examples examples/hybrid/driver.jl - --config_file $CONFIG_PATH/prognostic_edmfx_adv_test_box.yml - artifact_paths: "prognostic_edmfx_adv_test_box/*" + --config_file $CONFIG_PATH/prognostic_edmfx_adv_test_column.yml + artifact_paths: "prognostic_edmfx_adv_test_column/output_active/*" + agents: slurm_mem: 20GB @@ -544,63 +547,79 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/prognostic_edmfx_simpleplume_column.yml - artifact_paths: "prognostic_edmfx_simpleplume_column/*" + artifact_paths: "prognostic_edmfx_simpleplume_column/output_active/*" agents: slurm_mem: 20GB - - label: ":genie: Prognostic EDMFX GABLS in a box" + - label: ":genie: Prognostic EDMFX GABLS in a column" command: > julia --color=yes --project=examples examples/hybrid/driver.jl - --config_file $CONFIG_PATH/prognostic_edmfx_gabls_box.yml - artifact_paths: "prognostic_edmfx_gabls_box/*" + --config_file $CONFIG_PATH/prognostic_edmfx_gabls_column.yml + artifact_paths: "prognostic_edmfx_gabls_column/output_active/*" agents: slurm_mem: 20GB - - label: ":genie: Prognostic EDMFX Bomex with precribed TKE in a box" + - label: ":genie: Prognostic EDMFX Bomex with precribed TKE in a column" command: > julia --color=yes --project=examples examples/hybrid/driver.jl - --config_file $CONFIG_PATH/prognostic_edmfx_bomex_fixtke_box.yml - artifact_paths: "prognostic_edmfx_bomex_fixtke_box/*" + --config_file $CONFIG_PATH/prognostic_edmfx_bomex_fixtke_column.yml + artifact_paths: "prognostic_edmfx_bomex_fixtke_column/output_active/*" agents: slurm_mem: 20GB - - label: ":genie: Prognostic EDMFX Bomex in a box" + - label: ":genie: Prognostic EDMFX Bomex stretched grid in a column" command: > julia --color=yes --project=examples examples/hybrid/driver.jl - --config_file $CONFIG_PATH/prognostic_edmfx_bomex_box.yml - artifact_paths: "prognostic_edmfx_bomex_box/*" + --config_file $CONFIG_PATH/prognostic_edmfx_bomex_stretched_column.yml + artifact_paths: "prognostic_edmfx_bomex_stretched_column/output_active/*" agents: slurm_mem: 20GB - - label: ":genie: Prognostic EDMFX Bomex stretched grid in a box" + - label: ":genie: Prognostic EDMFX Bomex in a column" command: > julia --color=yes --project=examples examples/hybrid/driver.jl - --config_file $CONFIG_PATH/prognostic_edmfx_bomex_stretched_box.yml - artifact_paths: "prognostic_edmfx_bomex_stretched_box/*" + --config_file $CONFIG_PATH/prognostic_edmfx_bomex_column.yml + artifact_paths: "prognostic_edmfx_bomex_column/output_active/*" agents: slurm_mem: 20GB - - label: ":genie: Prognostic EDMFX Dycoms RF01 in a box" + - label: ":genie: Prognostic EDMFX Dycoms RF01 in a column" command: > julia --color=yes --project=examples examples/hybrid/driver.jl - --config_file $CONFIG_PATH/prognostic_edmfx_dycoms_rf01_box.yml - artifact_paths: "prognostic_edmfx_dycoms_rf01_box/*" + --config_file $CONFIG_PATH/prognostic_edmfx_dycoms_rf01_column.yml + artifact_paths: "prognostic_edmfx_dycoms_rf01_column/output_active/*" agents: slurm_mem: 20GB - - label: ":genie: Prognostic EDMFX Rico in a column" + - label: ":umbrella: Prognostic EDMFX Rico in a column" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/prognostic_edmfx_rico_column.yml - artifact_paths: "prognostic_edmfx_rico_column/*" + artifact_paths: "prognostic_edmfx_rico_column/output_active/*" agents: slurm_mem: 20GB - - label: ":genie: Prognostic EDMFX TRMM in a column" + - label: ":umbrella: Prognostic EDMFX TRMM in a column" command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/prognostic_edmfx_trmm_column.yml - artifact_paths: "prognostic_edmfx_trmm_column/*" + artifact_paths: "prognostic_edmfx_trmm_column/output_active/*" + agents: + slurm_mem: 20GB + + - label: ":genie: Prognostic EDMFX TRMM in a column" + command: > + julia --color=yes --project=examples examples/hybrid/driver.jl + --config_file $CONFIG_PATH/prognostic_edmfx_trmm_column_0M.yml + artifact_paths: "prognostic_edmfx_trmm_column_0M/*" + agents: + slurm_mem: 20GB + + - label: ":genie: Prognostic EDMFX Bomex in a box" + command: > + julia --color=yes --project=examples examples/hybrid/driver.jl + --config_file $CONFIG_PATH/prognostic_edmfx_bomex_box.yml + artifact_paths: "prognostic_edmfx_bomex_box/*" agents: slurm_mem: 20GB @@ -608,7 +627,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $CONFIG_PATH/prognostic_edmfx_aquaplanet.yml - artifact_paths: "prognostic_edmfx_aquaplanet/*" + artifact_paths: "prognostic_edmfx_aquaplanet/output_active/*" agents: slurm_mem: 20GB @@ -620,20 +639,20 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $PERF_CONFIG_PATH/gpu_baroclinic_wave_rhoe.yml - artifact_paths: "gpu_implicit_barowave_ref/*" + artifact_paths: "gpu_implicit_barowave_ref/output_active/*" agents: slurm_mem: 16G slurm_gpus: 1 - label: "GPU: compare BW with CPU" command: > - tar xvf sphere_baroclinic_wave_rhoe/hdf5_files.tar -C sphere_baroclinic_wave_rhoe + tar xvf sphere_baroclinic_wave_rhoe/output_active/hdf5_files.tar -C sphere_baroclinic_wave_rhoe - tar xvf gpu_baroclinic_wave_rhoe/hdf5_files.tar -C gpu_baroclinic_wave_rhoe + tar xvf gpu_baroclinic_wave_rhoe//output_active/hdf5_files.tar -C gpu_baroclinic_wave_rhoe julia --color=yes --project=examples post_processing/compare_outputs.jl - --output_folder_1 sphere_baroclinic_wave_rhoe/ - --output_folder_2 gpu_baroclinic_wave_rhoe/ --t_end 10days + --output_folder_1 sphere_baroclinic_wave_rhoe + --output_folder_2 gpu_baroclinic_wave_rhoe --t_end 10days --compare_state false depends_on: - "sphere_baroclinic_wave_rhoe" @@ -647,7 +666,7 @@ steps: nsys profile --trace=nvtx,cuda --output=target_gpu_implicit_baroclinic_wave/report julia --color=yes --project=examples examples/hybrid/driver.jl --config_file ${GPU_CONFIG_PATH}target_gpu_implicit_baroclinic_wave.yml - artifact_paths: "target_gpu_implicit_baroclinic_wave/*" + artifact_paths: "target_gpu_implicit_baroclinic_wave/output_active/*" agents: slurm_gpus: 1 slurm_mem: 32G @@ -661,7 +680,7 @@ steps: srun --cpu-bind=threads --cpus-per-task=4 julia --threads=3 --color=yes --project=examples examples/hybrid/driver.jl --config_file ${GPU_CONFIG_PATH}target_gpu_implicit_baroclinic_wave_4process.yml - artifact_paths: "target_gpu_implicit_baroclinic_wave_4process/*" + artifact_paths: "target_gpu_implicit_baroclinic_wave_4process/output_active/*" env: CLIMACORE_DISTRIBUTED: "MPI" agents: @@ -675,7 +694,7 @@ steps: - > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $GPU_CONFIG_PATH/central_gpu_hs_rhoe_equil_55km_nz63_0M.yml - artifact_paths: "central_gpu_hs_rhoe_equil_55km_nz63_0M/*" + artifact_paths: "central_gpu_hs_rhoe_equil_55km_nz63_0M/output_active/*" agents: slurm_gpus: 1 slurm_mem: 16G @@ -684,10 +703,9 @@ steps: command: - mkdir -p gpu_aquaplanet_dyamond - > - nsys profile --trace=nvtx,cuda --output=gpu_aquaplanet_dyamond/report julia --color=yes --project=examples examples/hybrid/driver.jl --config_file ${GPU_CONFIG_PATH}gpu_aquaplanet_dyamond.yml - artifact_paths: "gpu_aquaplanet_dyamond/*" + artifact_paths: "gpu_aquaplanet_dyamond/output_active/*" agents: slurm_gpus: 1 @@ -695,7 +713,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $GPU_CONFIG_PATH/gpu_diagnostic_edmfx_aquaplanet.yml - artifact_paths: "gpu_diagnostic_edmfx_aquaplanet/*" + artifact_paths: "gpu_diagnostic_edmfx_aquaplanet/output_active/*" agents: slurm_gpus: 1 slurm_mem: 20G @@ -704,7 +722,7 @@ steps: command: > julia --color=yes --project=examples examples/hybrid/driver.jl --config_file $GPU_CONFIG_PATH/gpu_prognostic_edmfx_aquaplanet.yml - artifact_paths: "gpu_prognostic_edmfx_aquaplanet/*" + artifact_paths: "gpu_prognostic_edmfx_aquaplanet/output_active/*" agents: slurm_gpus: 1 slurm_mem: 20G @@ -718,7 +736,7 @@ steps: julia --color=yes --project=examples perf/benchmark_dump.jl --config_file $PERF_CONFIG_PATH/gpu_implicit_barowave_wrt_h_elem.yml - artifact_paths: "gpu_implicit_barowave_wrt_h_elem/*" + artifact_paths: "gpu_implicit_barowave_wrt_h_elem/output_active/*" agents: slurm_gpus: 1 @@ -727,7 +745,7 @@ steps: julia --color=yes --project=examples perf/benchmark_step.jl --config_file $PERF_CONFIG_PATH/gpu_implicit_barowave.yml - artifact_paths: "gpu_implicit_barowave/*" + artifact_paths: "gpu_implicit_barowave/output_active/*" agents: slurm_gpus: 1 @@ -736,7 +754,7 @@ steps: julia --color=yes --project=examples perf/benchmark_step.jl --config_file $PERF_CONFIG_PATH/gpu_implicit_barowave_moist.yml - artifact_paths: "gpu_implicit_barowave_moist/*" + artifact_paths: "gpu_implicit_barowave_moist/output_active/*" agents: slurm_mem: 16G slurm_gpus: 1 @@ -745,7 +763,7 @@ steps: command: > julia --color=yes --project=examples perf/benchmark_step.jl --config_file $PERF_CONFIG_PATH/cpu_implicit_barowave.yml - artifact_paths: "cpu_implicit_barowave/*" + artifact_paths: "cpu_implicit_barowave/output_active/*" - group: "Performance" steps: diff --git a/Artifacts.toml b/Artifacts.toml new file mode 100644 index 00000000000..81a5be8599a --- /dev/null +++ b/Artifacts.toml @@ -0,0 +1,6 @@ +[aerosol2005] +git-tree-sha1 = "9da4af348af2606764e5e2c94d9439714221dff1" + + [[aerosol2005.download]] + sha256 = "952d723b8462439c266dc0df79d0d4e71f774559edb941e03b7979e8ad743f56" + url = "https://caltech.box.com/shared/static/chmel1vdthfvfac0yl61ayw2jqnjzr2c.gz" diff --git a/NEWS.md b/NEWS.md index 1078fc4305d..f3a77cba092 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,6 +4,21 @@ ClimaAtmos.jl Release Notes Main ------- +- ![][badge-✨feature/enhancement]![][badge-💥breaking]. Use + [ClimaUtilities](https://github.com/CliMA/ClimaUtilities.jl) for + `TimeVaryingInputs` to read in prescribed aerosol mass concentrations. This PR + is considered breaking because it changes `AtmosCache` adding a new field, + `tracers`. PR [#2815](https://github.com/CliMA/ClimaAtmos.jl/pull/2815). + +- ![][badge-✨feature/enhancement]![][badge-💥breaking]. Use + [ClimaUtilities](https://github.com/CliMA/ClimaUtilities.jl) for + `OutputPathGenerator` to handle where the output of a simulation should be + saved. Previously, the output was saved to a folder named `$job_id`. Now, it + is saved to `$job_id/output-active`, where `output-active` is a link that + points to `$job_id/output-XXXX`, with `XXXX` a counter that increases ever + time a simulation is run with this output directory. PR + [#2606](https://github.com/CliMA/ClimaAtmos.jl/pull/2606). + v0.22.1 ------- - ![][badge-🚀performance] Reduced the number of allocations in the NetCDF diff --git a/Project.toml b/Project.toml index 2590329ef0d..5d2e1fe1690 100644 --- a/Project.toml +++ b/Project.toml @@ -13,6 +13,7 @@ ClimaComms = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" ClimaCore = "d414da3d-4745-48bb-8d80-42e94e092884" ClimaParams = "5c42b081-d73a-476f-9059-fd94b934656c" ClimaTimeSteppers = "595c0a79-7f3d-439a-bc5a-b232dc3bde79" +ClimaUtilities = "b3f4f4ca-9299-4f7f-bd9b-81e1242a7513" CloudMicrophysics = "6a9e3e04-43cd-43ba-94b9-e8782df3c71b" Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" @@ -53,6 +54,7 @@ ClimaComms = "0.5" ClimaCore = "0.13" ClimaParams = "0.10.4" ClimaTimeSteppers = "0.7.18" +ClimaUtilities = "0.1.3" CloudMicrophysics = "0.18" Colors = "0.12" Dates = "1" diff --git a/README.md b/README.md index 82b87d8b02c..33bd8b686e9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@

- ClimaAtmos.jl +
+ClimaAtmos.jl

diff --git a/config/default_configs/default_config.yml b/config/default_configs/default_config.yml index bf75c88f376..b63e5a3fd73 100644 --- a/config/default_configs/default_config.yml +++ b/config/default_configs/default_config.yml @@ -141,7 +141,7 @@ bubble: value: true start_date: help: "Start date of the simulation" - value: "19790101" + value: "20050117" # Where the current aerosol data begins forcing: help: "Forcing [`nothing` (default), `held_suarez`]" value: ~ @@ -277,3 +277,6 @@ deep_atmosphere: restart_file: help: "Path to HDF5 file to use as simulation starting point" value: ~ +prescribed_aerosols: + help: "Which aerosols to add. List of keys from the data file (e.g., CB1, CB2)." + value: [] diff --git a/config/default_configs/default_edmf_config.yml b/config/default_configs/default_edmf_config.yml index 374d7cf2e23..2a1399fdf02 100644 --- a/config/default_configs/default_edmf_config.yml +++ b/config/default_configs/default_edmf_config.yml @@ -5,9 +5,12 @@ turbconv: advection_test: help: "Switches off all grid-scale and subgrid-scale momentum tendencies [`false` (default), `true`]" value: false -gs_tendency: - help: "Turns on all grid-scale tendencies [`true` (default), `false`]" - value: true +zero_tendency: + help: "Turns off tendencies [`nothing` (default), `grid_scale`, `subgrid_scale`]" + value: ~ +implicit_sgs_advection: + help: "Whether to treat the subgrid-scale vertical advection tendency implicitly [`false` (default), `true`]" + value: false edmf_coriolis: help: "EDMF coriolis [`nothing` (default), `Bomex`,`LifeCycleTan2018`,`Rico`,`ARM_SGP`,`DYCOMS_RF01`,`DYCOMS_RF02`,`GABLS`]" value: ~ diff --git a/config/gpu_configs/gpu_aquaplanet_dyamond.yml b/config/gpu_configs/gpu_aquaplanet_dyamond.yml index 45c0cb9d9e1..4cfbeecfe29 100644 --- a/config/gpu_configs/gpu_aquaplanet_dyamond.yml +++ b/config/gpu_configs/gpu_aquaplanet_dyamond.yml @@ -18,5 +18,6 @@ surface_setup: "DefaultMoninObukhov" rayleigh_sponge: true dt: "100secs" t_end: "12hours" +prescribed_aerosols: ["CB1", "CB2", "DST01", "DST02", "DST03", "DST04", "OC1", "OC2", "SO4", "SOA", "SSLT01", "SSLT02", "SSLT03", "SSLT04"] job_id: "gpu_aquaplanet_dyamond" toml: [toml/longrun_aquaplanet_dyamond.toml] diff --git a/config/gpu_configs/gpu_prognostic_edmfx_aquaplanet.yml b/config/gpu_configs/gpu_prognostic_edmfx_aquaplanet.yml index 43972f80998..53ed848b1a8 100644 --- a/config/gpu_configs/gpu_prognostic_edmfx_aquaplanet.yml +++ b/config/gpu_configs/gpu_prognostic_edmfx_aquaplanet.yml @@ -15,7 +15,7 @@ precip_model: 0M dt: 10secs t_end: 1hours dt_save_to_disk: 600secs -toml: [toml/prognostic_edmfx_box.toml] +toml: [toml/prognostic_edmfx.toml] output_default_diagnostics: false diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hfes, hur, hus, cl, clw, cli, evspsbl, rsd, rsu, rld, rlu] diff --git a/config/longrun_configs/longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_diffonly_0M.yml b/config/longrun_configs/longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_diffonly_0M.yml new file mode 100644 index 00000000000..90ed3254c31 --- /dev/null +++ b/config/longrun_configs/longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_diffonly_0M.yml @@ -0,0 +1,30 @@ +h_elem: 16 +z_max: 55000.0 +z_elem: 63 +dz_bottom: 30.0 +dz_top: 3000.0 +moist: "equil" +precip_model: "0M" +override_τ_precip: false +rad: "clearsky" +dt_rad: "6hours" +surface_setup: "DefaultMoninObukhov" +turbconv: "prognostic_edmfx" +implicit_diffusion: true +approximate_linear_solve_iters: 2 +max_newton_iters_ode: 3 +zero_tendency: "subgrid_scale" +prognostic_tke: true +edmfx_upwinding: "first_order" +edmfx_entr_model: "Generalized" +edmfx_detr_model: "Generalized" +edmfx_nh_pressure: false +edmfx_velocity_relaxation: true +edmfx_sgs_mass_flux: false +edmfx_sgs_diffusive_flux: true +rayleigh_sponge: true +dt_save_state_to_disk: "10days" +dt: "100secs" +t_end: "30days" +job_id: "longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_diffonly_0M" +toml: [toml/longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_0M.toml] diff --git a/config/model_configs/prognostic_edmfx_adv_test_box.yml b/config/model_configs/prognostic_edmfx_adv_test_column.yml similarity index 77% rename from config/model_configs/prognostic_edmfx_adv_test_box.yml rename to config/model_configs/prognostic_edmfx_adv_test_column.yml index 7191721684d..881f82cf398 100644 --- a/config/model_configs/prognostic_edmfx_adv_test_box.yml +++ b/config/model_configs/prognostic_edmfx_adv_test_column.yml @@ -1,14 +1,11 @@ -job_id: "prognostic_edmfx_adv_test_box" +job_id: "prognostic_edmfx_adv_test_column" initial_condition: "MoistAdiabaticProfileEDMFX" advection_test: true turbconv: "prognostic_edmfx" ode_algo: "SSP33ShuOsher" edmfx_upwinding: "first_order" -config: "box" +config: "column" moist: "equil" -hyperdiff: "true" -x_max: 1e8 -y_max: 1e8 z_max: 5.5e4 x_elem: 2 y_elem: 2 @@ -19,9 +16,9 @@ dt: "10secs" t_end: "3600secs" dt_save_state_to_disk: "100secs" FLOAT_TYPE: "Float64" -toml: [toml/prognostic_edmfx_box_advection.toml] +toml: [toml/prognostic_edmfx_advection.toml] netcdf_output_at_levels: true -netcdf_interpolation_num_points: [8, 8, 63] +netcdf_interpolation_num_points: [2, 2, 63] diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] period: 10mins diff --git a/config/model_configs/prognostic_edmfx_aquaplanet.yml b/config/model_configs/prognostic_edmfx_aquaplanet.yml index cb429c0a73c..b8a11ab16eb 100644 --- a/config/model_configs/prognostic_edmfx_aquaplanet.yml +++ b/config/model_configs/prognostic_edmfx_aquaplanet.yml @@ -15,7 +15,7 @@ precip_model: 0M dt: 10secs t_end: 1hours dt_save_state_to_disk: 600secs -toml: [toml/prognostic_edmfx_box.toml] +toml: [toml/prognostic_edmfx.toml] output_default_diagnostics: false diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hfes, hur, hus, cl, clw, cli, evspsbl, rsd, rsu, rld, rlu] diff --git a/config/model_configs/prognostic_edmfx_bomex_box.yml b/config/model_configs/prognostic_edmfx_bomex_box.yml index 6a9e419895b..6b55e27780e 100644 --- a/config/model_configs/prognostic_edmfx_bomex_box.yml +++ b/config/model_configs/prognostic_edmfx_bomex_box.yml @@ -6,6 +6,7 @@ ls_adv: "Bomex" surface_setup: "Bomex" turbconv: "prognostic_edmfx" implicit_diffusion: true +implicit_sgs_advection: true approximate_linear_solve_iters: 2 max_newton_iters_ode: 3 edmfx_upwinding: first_order @@ -30,11 +31,13 @@ perturb_initstate: false dt: "50secs" t_end: "6hours" dt_save_state_to_disk: "30mins" -toml: [toml/prognostic_edmfx_bomex_box.toml] +toml: [toml/prognostic_edmfx_bomex.toml] netcdf_output_at_levels: true netcdf_interpolation_num_points: [8, 8, 60] diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] period: 10mins - - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke, lmix] + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke] + period: 10mins + - short_name: [entr, detr, lmix, bgrad, strain, edt, evu] period: 10mins diff --git a/config/model_configs/prognostic_edmfx_bomex_column.yml b/config/model_configs/prognostic_edmfx_bomex_column.yml new file mode 100644 index 00000000000..3c842d8acdb --- /dev/null +++ b/config/model_configs/prognostic_edmfx_bomex_column.yml @@ -0,0 +1,38 @@ +job_id: "prognostic_edmfx_bomex_column" +initial_condition: "Bomex" +subsidence: "Bomex" +edmf_coriolis: "Bomex" +ls_adv: "Bomex" +surface_setup: "Bomex" +turbconv: "prognostic_edmfx" +implicit_diffusion: true +implicit_sgs_advection: true +approximate_linear_solve_iters: 2 +max_newton_iters_ode: 3 +edmfx_upwinding: first_order +edmfx_entr_model: "Generalized" +edmfx_detr_model: "Generalized" +edmfx_sgs_mass_flux: true +edmfx_sgs_diffusive_flux: true +edmfx_nh_pressure: true +edmfx_velocity_relaxation: true +prognostic_tke: true +moist: "equil" +config: "column" +z_max: 3e3 +z_elem: 60 +z_stretch: false +perturb_initstate: false +dt: "50secs" +t_end: "6hours" +dt_save_to_disk: "10mins" +toml: [toml/prognostic_edmfx_bomex.toml] +netcdf_output_at_levels: true +netcdf_interpolation_num_points: [2, 2, 60] +diagnostics: + - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] + period: 10mins + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke] + period: 10mins + - short_name: [entr, detr, lmix, bgrad, strain, edt, evu] + period: 10mins diff --git a/config/model_configs/prognostic_edmfx_bomex_fixtke_box.yml b/config/model_configs/prognostic_edmfx_bomex_fixtke_column.yml similarity index 77% rename from config/model_configs/prognostic_edmfx_bomex_fixtke_box.yml rename to config/model_configs/prognostic_edmfx_bomex_fixtke_column.yml index d146d6b9835..25e9b936404 100644 --- a/config/model_configs/prognostic_edmfx_bomex_fixtke_box.yml +++ b/config/model_configs/prognostic_edmfx_bomex_fixtke_column.yml @@ -1,4 +1,4 @@ -job_id: "prognostic_edmfx_bomex_fixtke_box" +job_id: "prognostic_edmfx_bomex_fixtke_column" initial_condition: "Bomex" subsidence: "Bomex" edmf_coriolis: "Bomex" @@ -14,10 +14,7 @@ edmfx_nh_pressure: true edmfx_velocity_relaxation: true prognostic_tke: false moist: "equil" -config: "box" -hyperdiff: "true" -x_max: 1e8 -y_max: 1e8 +config: "column" z_max: 3e3 x_elem: 2 y_elem: 2 @@ -27,11 +24,13 @@ perturb_initstate: false dt: "5secs" t_end: "6hours" dt_save_state_to_disk: "10mins" -toml: [toml/prognostic_edmfx_bomex_box.toml] +toml: [toml/prognostic_edmfx_bomex.toml] netcdf_output_at_levels: true -netcdf_interpolation_num_points: [8, 8, 60] +netcdf_interpolation_num_points: [2, 2, 60] diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] period: 10mins - - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke, lmix] + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke] + period: 10mins + - short_name: [entr, detr, lmix, bgrad, strain, edt, evu] period: 10mins diff --git a/config/model_configs/prognostic_edmfx_bomex_stretched_box.yml b/config/model_configs/prognostic_edmfx_bomex_stretched_column.yml similarity index 77% rename from config/model_configs/prognostic_edmfx_bomex_stretched_box.yml rename to config/model_configs/prognostic_edmfx_bomex_stretched_column.yml index b4df0106018..360f686dac5 100644 --- a/config/model_configs/prognostic_edmfx_bomex_stretched_box.yml +++ b/config/model_configs/prognostic_edmfx_bomex_stretched_column.yml @@ -1,4 +1,4 @@ -job_id: "prognostic_edmfx_bomex_stretched_box" +job_id: "prognostic_edmfx_bomex_stretched_column" initial_condition: "Bomex" subsidence: "Bomex" edmf_coriolis: "Bomex" @@ -6,6 +6,7 @@ ls_adv: "Bomex" surface_setup: "Bomex" turbconv: "prognostic_edmfx" implicit_diffusion: true +implicit_sgs_advection: true approximate_linear_solve_iters: 2 max_newton_iters_ode: 3 edmfx_upwinding: first_order @@ -17,10 +18,8 @@ edmfx_nh_pressure: true edmfx_velocity_relaxation: true prognostic_tke: true moist: "equil" -config: "box" +config: "column" hyperdiff: "true" -x_max: 1e8 -y_max: 1e8 z_max: 3e3 x_elem: 2 y_elem: 2 @@ -31,11 +30,13 @@ perturb_initstate: false dt: "50secs" t_end: "6hours" dt_save_state_to_disk: "10mins" -toml: [toml/prognostic_edmfx_bomex_box.toml] +toml: [toml/prognostic_edmfx_bomex.toml] netcdf_output_at_levels: true -netcdf_interpolation_num_points: [8, 8, 30] +netcdf_interpolation_num_points: [2, 2, 30] diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] period: 10mins - - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke, lmix] + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke] + period: 10mins + - short_name: [entr, detr, lmix, bgrad, strain, edt, evu] period: 10mins diff --git a/config/model_configs/prognostic_edmfx_dycoms_rf01_box.yml b/config/model_configs/prognostic_edmfx_dycoms_rf01_column.yml similarity index 77% rename from config/model_configs/prognostic_edmfx_dycoms_rf01_box.yml rename to config/model_configs/prognostic_edmfx_dycoms_rf01_column.yml index 57cdd14155f..c7a099625e4 100644 --- a/config/model_configs/prognostic_edmfx_dycoms_rf01_box.yml +++ b/config/model_configs/prognostic_edmfx_dycoms_rf01_column.yml @@ -1,4 +1,4 @@ -job_id: prognostic_edmfx_dycoms_rf01_box +job_id: prognostic_edmfx_dycoms_rf01_column initial_condition: DYCOMS_RF01 subsidence: DYCOMS edmf_coriolis: DYCOMS_RF01 @@ -6,6 +6,7 @@ rad: DYCOMS_RF01 surface_setup: DYCOMS_RF01 turbconv: prognostic_edmfx implicit_diffusion: true +implicit_sgs_advection: true approximate_linear_solve_iters: 2 max_newton_iters_ode: 3 edmfx_upwinding: first_order @@ -18,10 +19,8 @@ edmfx_nh_pressure: true edmfx_velocity_relaxation: true prognostic_tke: true moist: equil -config: box +config: column hyperdiff: "true" -x_max: 1e8 -y_max: 1e8 z_max: 1500 x_elem: 2 y_elem: 2 @@ -30,11 +29,13 @@ z_stretch: false dt: 40secs t_end: 4hours dt_save_state_to_disk: 10mins -toml: [toml/prognostic_edmfx_dycoms_rf01_box.toml] +toml: [toml/prognostic_edmfx_dycoms_rf01.toml] netcdf_output_at_levels: true -netcdf_interpolation_num_points: [8, 8, 30] +netcdf_interpolation_num_points: [2, 2, 30] diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] period: 10mins - - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke, lmix] + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke] + period: 10mins + - short_name: [entr, detr, lmix, bgrad, strain, edt, evu] period: 10mins diff --git a/config/model_configs/prognostic_edmfx_gabls_box.yml b/config/model_configs/prognostic_edmfx_gabls_column.yml similarity index 77% rename from config/model_configs/prognostic_edmfx_gabls_box.yml rename to config/model_configs/prognostic_edmfx_gabls_column.yml index db7891b0bc4..67b078e9256 100644 --- a/config/model_configs/prognostic_edmfx_gabls_box.yml +++ b/config/model_configs/prognostic_edmfx_gabls_column.yml @@ -1,9 +1,10 @@ -job_id: "prognostic_edmfx_gabls_box" +job_id: "prognostic_edmfx_gabls_column" initial_condition: GABLS edmf_coriolis: GABLS surface_setup: GABLS turbconv: "prognostic_edmfx" implicit_diffusion: true +implicit_sgs_advection: true approximate_linear_solve_iters: 2 max_newton_iters_ode: 3 edmfx_upwinding: "first_order" @@ -15,10 +16,8 @@ edmfx_nh_pressure: true edmfx_velocity_relaxation: true prognostic_tke: true moist: "equil" -config: "box" +config: "column" hyperdiff: "true" -x_max: 1e8 -y_max: 1e8 z_max: 400 x_elem: 2 y_elem: 2 @@ -28,11 +27,13 @@ dt: "60secs" t_end: "9hours" dt_save_state_to_disk: "30mins" perturb_initstate: false -toml: [toml/prognostic_edmfx_box.toml] +toml: [toml/prognostic_edmfx.toml] netcdf_output_at_levels: true -netcdf_interpolation_num_points: [8, 8, 8] +netcdf_interpolation_num_points: [2, 2, 8] diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] period: 10mins - - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke, lmix] + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke] + period: 10mins + - short_name: [entr, detr, lmix, bgrad, strain, edt, evu] period: 10mins diff --git a/config/model_configs/prognostic_edmfx_rico_column.yml b/config/model_configs/prognostic_edmfx_rico_column.yml index c4bd76f6286..24ce74c8f12 100644 --- a/config/model_configs/prognostic_edmfx_rico_column.yml +++ b/config/model_configs/prognostic_edmfx_rico_column.yml @@ -13,7 +13,7 @@ edmfx_nh_pressure: true edmfx_velocity_relaxation: true prognostic_tke: true moist: "equil" -precip_model: "0M" +precip_model: "1M" config: "column" z_max: 4e3 x_elem: 2 @@ -24,11 +24,15 @@ perturb_initstate: false dt: "5secs" t_end: "6hours" dt_save_state_to_disk: "10mins" -toml: [toml/prognostic_edmfx_box.toml] +toml: [toml/prognostic_edmfx.toml] netcdf_output_at_levels: true netcdf_interpolation_num_points: [8, 8, 100] diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] period: 10mins - - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke, lmix] + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke] + period: 10mins + - short_name: [entr, detr, lmix, bgrad, strain, edt, evu] + period: 10mins + - short_name: [husra, hussn] period: 10mins diff --git a/config/model_configs/prognostic_edmfx_simpleplume_column.yml b/config/model_configs/prognostic_edmfx_simpleplume_column.yml index 6d387684d03..23a76c3f7aa 100644 --- a/config/model_configs/prognostic_edmfx_simpleplume_column.yml +++ b/config/model_configs/prognostic_edmfx_simpleplume_column.yml @@ -3,9 +3,10 @@ initial_condition: "SimplePlume" surface_setup: "SimplePlume" turbconv: "prognostic_edmfx" implicit_diffusion: true +implicit_sgs_advection: true approximate_linear_solve_iters: 2 max_newton_iters_ode: 3 -gs_tendency: false +zero_tendency: "grid_scale" edmfx_upwinding: first_order edmfx_entr_model: "Generalized" edmfx_detr_model: "Generalized" @@ -29,5 +30,7 @@ netcdf_interpolation_num_points: [2, 2, 80] diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] period: 10mins - - short_name: [arup, waup, taup, rhoaup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke, lmix] + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke] + period: 10mins + - short_name: [entr, detr, lmix, bgrad, strain, edt, evu] period: 10mins diff --git a/config/model_configs/prognostic_edmfx_trmm_column.yml b/config/model_configs/prognostic_edmfx_trmm_column.yml index 7bb47d44fb5..63683c3de5a 100644 --- a/config/model_configs/prognostic_edmfx_trmm_column.yml +++ b/config/model_configs/prognostic_edmfx_trmm_column.yml @@ -13,7 +13,7 @@ edmfx_velocity_relaxation: true prognostic_tke: true moist: equil apply_limiter: false -precip_model: "0M" +precip_model: "1M" config: column z_max: 16400 x_elem: 2 @@ -24,11 +24,15 @@ dt: 5secs t_end: 6hours dt_save_state_to_disk: 10mins FLOAT_TYPE: "Float64" -toml: [toml/prognostic_edmfx_box.toml] +toml: [toml/prognostic_edmfx.toml] netcdf_output_at_levels: true netcdf_interpolation_num_points: [8, 8, 82] diagnostics: - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] period: 10mins - - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke, lmix] + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke] + period: 10mins + - short_name: [entr, detr, lmix, bgrad, strain, edt, evu] + period: 10mins + - short_name: [husra, hussn] period: 10mins diff --git a/config/model_configs/prognostic_edmfx_trmm_column_0M.yml b/config/model_configs/prognostic_edmfx_trmm_column_0M.yml new file mode 100644 index 00000000000..eb019a4e3cb --- /dev/null +++ b/config/model_configs/prognostic_edmfx_trmm_column_0M.yml @@ -0,0 +1,34 @@ +job_id: prognostic_edmfx_trmm_column_0M +initial_condition: TRMM_LBA +rad: TRMM_LBA +surface_setup: TRMM_LBA +turbconv: prognostic_edmfx +edmfx_upwinding: first_order +edmfx_entr_model: "Generalized" +edmfx_detr_model: "Generalized" +edmfx_sgs_mass_flux: true +edmfx_sgs_diffusive_flux: true +edmfx_nh_pressure: true +edmfx_velocity_relaxation: true +prognostic_tke: true +moist: equil +apply_limiter: false +precip_model: "0M" +config: column +z_max: 16400 +x_elem: 2 +y_elem: 2 +z_elem: 82 +z_stretch: false +dt: 5secs +t_end: 6hours +dt_save_state_to_disk: 10mins +FLOAT_TYPE: "Float64" +toml: [toml/prognostic_edmfx.toml] +netcdf_output_at_levels: true +netcdf_interpolation_num_points: [8, 8, 82] +diagnostics: + - short_name: [ts, ta, thetaa, ha, pfull, rhoa, ua, va, wa, hur, hus, cl, clw, cli, hussfc, evspsbl] + period: 10mins + - short_name: [arup, waup, taup, thetaaup, haup, husup, hurup, clwup, cliup, waen, taen, thetaaen, haen, husen, huren, clwen, clien, tke, lmix] + period: 10mins diff --git a/config/model_configs/sphere_aquaplanet_rhoe_equilmoist_allsky_gw_res.yml b/config/model_configs/sphere_aquaplanet_rhoe_equilmoist_allsky_gw_res.yml index 2b6ec404197..ad8a56093b4 100644 --- a/config/model_configs/sphere_aquaplanet_rhoe_equilmoist_allsky_gw_res.yml +++ b/config/model_configs/sphere_aquaplanet_rhoe_equilmoist_allsky_gw_res.yml @@ -15,5 +15,10 @@ rayleigh_sponge: true non_orographic_gravity_wave: true orographic_gravity_wave: "gfdl_restart" surface_setup: "DefaultMoninObukhov" +prescribed_aerosols: ["CB1", "CB2"] job_id: "sphere_aquaplanet_rhoe_equilmoist_allsky_gw_res" toml: [toml/sphere_aquaplanet_rhoe_equilmoist_allsky_gw_res.toml] +diagnostics: + - short_name: [edt, evu] + reduction_time: average + period: "1days" diff --git a/config/mpi_configs/restart_mpi_baroclinic_wave_rhoe.yml b/config/mpi_configs/restart_mpi_baroclinic_wave_rhoe.yml index 2d1c7373e4f..0e4abd2ca34 100644 --- a/config/mpi_configs/restart_mpi_baroclinic_wave_rhoe.yml +++ b/config/mpi_configs/restart_mpi_baroclinic_wave_rhoe.yml @@ -1,4 +1,4 @@ job_id: "restart_mpi_baroclinic_wave_rhoe" t_end: "20days" initial_condition: "DryBaroclinicWave" -restart_file: "mpi_make_restart/day5.0.hdf5" +restart_file: "mpi_make_restart/output_active/day5.0.hdf5" diff --git a/config/perf_configs/flame_perf_target_prognostic_edmfx_aquaplanet.yml b/config/perf_configs/flame_perf_target_prognostic_edmfx_aquaplanet.yml index 33c7648e68f..fead8459e77 100644 --- a/config/perf_configs/flame_perf_target_prognostic_edmfx_aquaplanet.yml +++ b/config/perf_configs/flame_perf_target_prognostic_edmfx_aquaplanet.yml @@ -3,6 +3,8 @@ surface_setup: DefaultExchangeCoefficients rad: gray vert_diff: "false" turbconv: prognostic_edmfx +implicit_diffusion: true +implicit_sgs_advection: true prognostic_tke: true edmfx_upwinding: first_order edmfx_entr_model: "Generalized" @@ -15,4 +17,4 @@ precip_model: 0M dt: 10secs t_end: 1hours dt_save_state_to_disk: 600secs -toml: [toml/prognostic_edmfx_box.toml] +toml: [toml/prognostic_edmfx.toml] diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 50373bc4163..f63eab364e9 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -41,6 +41,27 @@ git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" version = "0.4.5" +[[deps.Accessors]] +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Markdown", "Test"] +git-tree-sha1 = "c0d491ef0b135fd7d63cbc6404286bc633329425" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.36" + + [deps.Accessors.extensions] + AccessorsAxisKeysExt = "AxisKeys" + AccessorsIntervalSetsExt = "IntervalSets" + AccessorsStaticArraysExt = "StaticArrays" + AccessorsStructArraysExt = "StructArrays" + AccessorsUnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + Requires = "ae029012-a4dd-5104-9daa-d747884805df" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" @@ -186,9 +207,9 @@ version = "0.1.5" [[deps.BlockArrays]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] -git-tree-sha1 = "3c62e3006c23082d2ae524b468298d27788a8502" +git-tree-sha1 = "9a9610fbe5779636f75229e423e367124034af41" uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" -version = "0.16.40" +version = "0.16.43" [[deps.Blosc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Lz4_jll", "Zlib_jll", "Zstd_jll"] @@ -298,16 +319,16 @@ weakdeps = ["SparseArrays"] ChainRulesCoreSparseArraysExt = "SparseArrays" [[deps.ClimaAtmos]] -deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaParams", "ClimaTimeSteppers", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"] +deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaParams", "ClimaTimeSteppers", "ClimaUtilities", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"] path = ".." uuid = "b2c96348-7fb7-4fe0-8da9-78d88439e717" version = "0.22.1" [[deps.ClimaComms]] deps = ["CUDA", "MPI"] -git-tree-sha1 = "f0350e34c91c8f3b5a11b5e39990439303d727b1" +git-tree-sha1 = "ef5d206be51fdf62cd0cbd63058e237128652cf7" uuid = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" -version = "0.5.7" +version = "0.5.8" [[deps.ClimaCore]] deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "KrylovKit", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "Unrolled"] @@ -331,6 +352,30 @@ git-tree-sha1 = "9c203f39784c968700c55f555754a7771b3410df" uuid = "595c0a79-7f3d-439a-bc5a-b232dc3bde79" version = "0.7.19" +[[deps.ClimaUtilities]] +deps = ["Artifacts", "CFTime", "Dates"] +git-tree-sha1 = "d1b30a07829248b325ffffbb739d0f6fe79dfe7c" +uuid = "b3f4f4ca-9299-4f7f-bd9b-81e1242a7513" +version = "0.1.3" + + [deps.ClimaUtilities.extensions] + DataHandlingExt = ["ClimaCore", "NCDatasets"] + InterpolationsRegridderExt = ["Interpolations", "ClimaCore"] + MPIUtilsExt = "ClimaComms" + NCFileReaderExt = "NCDatasets" + SpaceVaryingInputsExt = ["ClimaCore", "NCDatasets"] + TempestRegridderExt = "ClimaCoreTempestRemap" + TimeVaryingInputs0DExt = "ClimaCore" + TimeVaryingInputsExt = ["ClimaCore", "NCDatasets"] + + [deps.ClimaUtilities.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + ClimaComms = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" + ClimaCore = "d414da3d-4745-48bb-8d80-42e94e092884" + ClimaCoreTempestRemap = "d934ef94-cdd4-4710-83d6-720549644b70" + Interpolations = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" + NCDatasets = "85f8d34a-cbdd-5861-8df4-14fed0d494ab" + [[deps.CloseOpenIntervals]] deps = ["Static", "StaticArrayInterface"] git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1" @@ -420,6 +465,20 @@ deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" version = "1.1.0+0" +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.ConcreteStructs]] +git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" +uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" +version = "0.2.3" + [[deps.ConstructionBase]] deps = ["LinearAlgebra"] git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" @@ -432,9 +491,9 @@ weakdeps = ["IntervalSets", "StaticArrays"] ConstructionBaseStaticArraysExt = "StaticArrays" [[deps.Contour]] -git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" -version = "0.6.2" +version = "0.6.3" [[deps.CpuId]] deps = ["Markdown"] @@ -504,10 +563,10 @@ uuid = "cd4c43a9-7502-52ba-aa6d-59fb2a88580b" version = "0.1.0+0" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] -git-tree-sha1 = "b19b2bb1ecd1271334e4b25d605e50f75e68fcae" +deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] +git-tree-sha1 = "4fa023dbb15b3485426bbc6c43e030c14250d664" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.148.0" +version = "6.149.0" [deps.DiffEqBase.extensions] DiffEqBaseChainRulesCoreExt = "ChainRulesCore" @@ -638,9 +697,9 @@ uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" version = "1.0.4" [[deps.EnzymeCore]] -git-tree-sha1 = "2c0192b96d5c45dbfb0f54e8cfb1256fece7b4ff" +git-tree-sha1 = "18394bc78ac2814ff38fe5e0c9dc2cd171e2810c" uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" -version = "0.7.1" +version = "0.7.2" weakdeps = ["Adapt"] [deps.EnzymeCore.extensions] @@ -736,10 +795,10 @@ version = "0.9.21" uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.FillArrays]] -deps = ["LinearAlgebra", "Random"] -git-tree-sha1 = "5b93957f6dcd33fc343044af3d48c215be2562f1" +deps = ["LinearAlgebra"] +git-tree-sha1 = "bfe82a708416cf00b73a3198db0859c82f741558" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.9.3" +version = "1.10.0" weakdeps = ["PDMats", "SparseArrays", "Statistics"] [deps.FillArrays.extensions] @@ -776,9 +835,9 @@ uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" version = "2.13.93+0" [[deps.Format]] -git-tree-sha1 = "f3cf88025f6d03c194d73f5d13fee9004a108329" +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" -version = "1.3.6" +version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] @@ -827,9 +886,9 @@ version = "0.1.3" [[deps.Functors]] deps = ["LinearAlgebra"] -git-tree-sha1 = "8ae30e786837ce0a24f5e2186938bf3251ab94b2" +git-tree-sha1 = "fa8d8fcfa6c38a9a7aa07233e35b3d9a39ec751a" uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" -version = "0.4.8" +version = "0.4.9" [[deps.Future]] deps = ["Random"] @@ -907,9 +966,9 @@ version = "2.80.0+0" [[deps.GnuTLS_jll]] deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Nettle_jll", "P11Kit_jll", "Zlib_jll"] -git-tree-sha1 = "f3c0936dd685d57fa0b1eee7dbebf382b969ea63" +git-tree-sha1 = "383db7d3f900f4c1f47a8a04115b053c095e48d3" uuid = "0951126a-58fd-58f1-b5b3-b08c7c4a876d" -version = "3.8.3+0" +version = "3.8.4+0" [[deps.Graphics]] deps = ["Colors", "LinearAlgebra", "NaNMath"] @@ -1085,6 +1144,16 @@ weakdeps = ["Random", "RecipesBase", "Statistics"] IntervalSetsRecipesBaseExt = "RecipesBase" IntervalSetsStatisticsExt = "Statistics" +[[deps.InverseFunctions]] +deps = ["Test"] +git-tree-sha1 = "896385798a8d49a255c398bd49162062e4a4c435" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.13" +weakdeps = ["Dates"] + + [deps.InverseFunctions.extensions] + DatesExt = "Dates" + [[deps.InvertedIndices]] git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" @@ -1621,9 +1690,9 @@ version = "4.1.6+0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "60e3045590bd104a16fefb12836c00c0ef8c7f8c" +git-tree-sha1 = "3da7367955dcc5c54c1ba4d402ccdc09a1a3e046" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.13+0" +version = "3.0.13+1" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1632,10 +1701,10 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.5+0" [[deps.Optim]] -deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "PackageExtensionCompat", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "d1223e69af90b6d26cea5b6f3b289b3148ba702c" +deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] +git-tree-sha1 = "d9b79c4eed437421ac4285148fcadf42e0700e89" uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.9.3" +version = "1.9.4" [deps.Optim.extensions] OptimMOIExt = "MathOptInterface" @@ -1677,12 +1746,6 @@ git-tree-sha1 = "67186a2bc9a90f9f85ff3cc8277868961fb57cbd" uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" version = "0.4.3" -[[deps.PackageExtensionCompat]] -git-tree-sha1 = "fb28e33b8a95c4cee25ce296c817d89cc2e53518" -uuid = "65ce6f38-6b18-4e1d-a461-8949797d7930" -version = "1.0.2" -weakdeps = ["Requires", "TOML"] - [[deps.Packing]] deps = ["GeometryBasics"] git-tree-sha1 = "ec3edfe723df33528e085e632414499f26650501" @@ -1750,9 +1813,9 @@ version = "1.4.1" [[deps.Polyester]] deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] -git-tree-sha1 = "8df43bbe60029526dd628af7e9951f5af680d4d7" +git-tree-sha1 = "09f59c6dda37c7f73efddc5bdf6f92bc940eb484" uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" -version = "0.7.10" +version = "0.7.12" [[deps.PolyesterWeave]] deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] @@ -1912,9 +1975,9 @@ version = "1.3.4" [[deps.RecursiveArrayTools]] deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "SparseArrays", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "a94d22ca9ad49a7a169ecbc5419c59b9793937cc" +git-tree-sha1 = "d8f131090f2e44b145084928856a561c83f43b27" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "3.12.0" +version = "3.13.0" [deps.RecursiveArrayTools.extensions] RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" @@ -2003,9 +2066,9 @@ version = "0.1.0" [[deps.SciMLBase]] deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "3daaea955c0905200943175637f184a968574a2d" +git-tree-sha1 = "d15c65e25615272e1b1c5edb1d307484c7942824" uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.30.3" +version = "2.31.0" [deps.SciMLBase.extensions] SciMLBaseChainRulesCoreExt = "ChainRulesCore" @@ -2203,24 +2266,21 @@ version = "1.7.0" [[deps.StatsBase]] deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "1d77abd07f617c4868c33d4f5b9e1dbb2643c9cf" +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.2" +version = "0.34.3" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" version = "1.3.1" +weakdeps = ["ChainRulesCore", "InverseFunctions"] [deps.StatsFuns.extensions] StatsFunsChainRulesCoreExt = "ChainRulesCore" StatsFunsInverseFunctionsExt = "InverseFunctions" - [deps.StatsFuns.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - [[deps.StrideArraysCore]] deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] git-tree-sha1 = "d6415f66f3d89c615929af907fdc6a3e17af0d8c" @@ -2278,10 +2338,10 @@ weakdeps = ["ClimaParams"] CreateParametersExt = "ClimaParams" [[deps.SymbolicIndexingInterface]] -deps = ["MacroTools", "RuntimeGeneratedFunctions"] -git-tree-sha1 = "f7b1fc9fc2bc938436b7684c243be7d317919056" +deps = ["Accessors", "ArrayInterface", "MacroTools", "RuntimeGeneratedFunctions", "StaticArraysCore"] +git-tree-sha1 = "4b7f4c80449d8baae8857d55535033981862619c" uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.11" +version = "0.3.15" [[deps.TOML]] deps = ["Dates"] @@ -2332,9 +2392,9 @@ version = "1.0.1" [[deps.Thermodynamics]] deps = ["DocStringExtensions", "KernelAbstractions", "Random", "RootSolvers"] -git-tree-sha1 = "6098c65a2ad62312ac74cb1627c8fb33efe33287" +git-tree-sha1 = "deac04ad36638b10fde82470d5f128419f627e9a" uuid = "b60c26fb-14c3-4610-9d3e-2d17fe7ff00c" -version = "0.12.5" +version = "0.12.6" weakdeps = ["ClimaParams"] [deps.Thermodynamics.extensions] @@ -2359,9 +2419,9 @@ uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" version = "0.5.23" [[deps.TranscodingStreams]] -git-tree-sha1 = "14389d51751169994b2e1317d5c72f7dc4f21045" +git-tree-sha1 = "71509f04d045ec714c4748c785a59045c3736349" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.10.6" +version = "0.10.7" weakdeps = ["Random", "Test"] [deps.TranscodingStreams.extensions] @@ -2436,9 +2496,9 @@ version = "1.0.0" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "07e470dabc5a6a4254ffebc29a1b3fc01464e105" +git-tree-sha1 = "532e22cf7be8462035d092ff21fada7527e2c488" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.12.5+0" +version = "2.12.6+0" [[deps.XSLT_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] @@ -2448,9 +2508,9 @@ version = "1.1.34+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "31c421e5516a6248dfb22c194519e37effbf1f30" +git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.6.1+0" +version = "5.4.6+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] @@ -2513,9 +2573,9 @@ version = "1.2.13+1" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" +git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.5+0" +version = "1.5.6+0" [[deps.isoband_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] diff --git a/docs/src/assets/logo.svg b/docs/src/assets/logo.svg new file mode 100644 index 00000000000..599e1454d71 --- /dev/null +++ b/docs/src/assets/logo.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + diff --git a/docs/src/config.md b/docs/src/config.md index de1812e6102..457f0bb57f0 100644 --- a/docs/src/config.md +++ b/docs/src/config.md @@ -40,7 +40,7 @@ perturb_initstate: false dt: "5secs" t_end: "6hours" dt_save_state_to_disk: "10mins" -toml: [toml/prognostic_edmfx_box.toml] +toml: [toml/prognostic_edmfx.toml] ``` To add a new configuration argument/key, open `.buildkite/default_config.yml`. diff --git a/examples/Manifest.toml b/examples/Manifest.toml index ea41b5e7d5f..b1fd50d7269 100644 --- a/examples/Manifest.toml +++ b/examples/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.10.2" manifest_format = "2.0" -project_hash = "f5b1fcb410aed0e48423c671cbcacf28aec0e1d1" +project_hash = "60f53d07d79df5008ec331956e3787f67e499da0" [[deps.ADTypes]] git-tree-sha1 = "016833eb52ba2d6bea9fcb50ca295980e728ee24" @@ -36,6 +36,27 @@ git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" version = "0.4.5" +[[deps.Accessors]] +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Markdown", "Test"] +git-tree-sha1 = "c0d491ef0b135fd7d63cbc6404286bc633329425" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.36" + + [deps.Accessors.extensions] + AccessorsAxisKeysExt = "AxisKeys" + AccessorsIntervalSetsExt = "IntervalSets" + AccessorsStaticArraysExt = "StaticArrays" + AccessorsStructArraysExt = "StructArrays" + AccessorsUnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + Requires = "ae029012-a4dd-5104-9daa-d747884805df" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" @@ -164,9 +185,9 @@ version = "0.1.5" [[deps.BlockArrays]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] -git-tree-sha1 = "3c62e3006c23082d2ae524b468298d27788a8502" +git-tree-sha1 = "9a9610fbe5779636f75229e423e367124034af41" uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" -version = "0.16.40" +version = "0.16.43" [[deps.Blosc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Lz4_jll", "Zlib_jll", "Zstd_jll"] @@ -286,16 +307,16 @@ weakdeps = ["CairoMakie"] CairoMakieExt = "CairoMakie" [[deps.ClimaAtmos]] -deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaParams", "ClimaTimeSteppers", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"] +deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaParams", "ClimaTimeSteppers", "ClimaUtilities", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"] path = ".." uuid = "b2c96348-7fb7-4fe0-8da9-78d88439e717" version = "0.22.1" [[deps.ClimaComms]] deps = ["CUDA", "MPI"] -git-tree-sha1 = "f0350e34c91c8f3b5a11b5e39990439303d727b1" +git-tree-sha1 = "ef5d206be51fdf62cd0cbd63058e237128652cf7" uuid = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" -version = "0.5.7" +version = "0.5.8" [[deps.ClimaCore]] deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "KrylovKit", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "Unrolled"] @@ -349,6 +370,23 @@ git-tree-sha1 = "9c203f39784c968700c55f555754a7771b3410df" uuid = "595c0a79-7f3d-439a-bc5a-b232dc3bde79" version = "0.7.19" +[[deps.ClimaUtilities]] +deps = ["Artifacts", "CFTime", "Dates"] +git-tree-sha1 = "d1b30a07829248b325ffffbb739d0f6fe79dfe7c" +uuid = "b3f4f4ca-9299-4f7f-bd9b-81e1242a7513" +version = "0.1.3" +weakdeps = ["Adapt", "ClimaComms", "ClimaCore", "ClimaCoreTempestRemap", "Interpolations", "NCDatasets"] + + [deps.ClimaUtilities.extensions] + DataHandlingExt = ["ClimaCore", "NCDatasets"] + InterpolationsRegridderExt = ["Interpolations", "ClimaCore"] + MPIUtilsExt = "ClimaComms" + NCFileReaderExt = "NCDatasets" + SpaceVaryingInputsExt = ["ClimaCore", "NCDatasets"] + TempestRegridderExt = "ClimaCoreTempestRemap" + TimeVaryingInputs0DExt = "ClimaCore" + TimeVaryingInputsExt = ["ClimaCore", "NCDatasets"] + [[deps.CloseOpenIntervals]] deps = ["Static", "StaticArrayInterface"] git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1" @@ -444,6 +482,20 @@ deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" version = "1.1.0+0" +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.ConcreteStructs]] +git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" +uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" +version = "0.2.3" + [[deps.ConstructionBase]] deps = ["LinearAlgebra"] git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" @@ -456,9 +508,9 @@ weakdeps = ["IntervalSets", "StaticArrays"] ConstructionBaseStaticArraysExt = "StaticArrays" [[deps.Contour]] -git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" -version = "0.6.2" +version = "0.6.3" [[deps.CpuId]] deps = ["Markdown"] @@ -528,10 +580,10 @@ uuid = "cd4c43a9-7502-52ba-aa6d-59fb2a88580b" version = "0.1.0+0" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] -git-tree-sha1 = "b19b2bb1ecd1271334e4b25d605e50f75e68fcae" +deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] +git-tree-sha1 = "4fa023dbb15b3485426bbc6c43e030c14250d664" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.148.0" +version = "6.149.0" [deps.DiffEqBase.extensions] DiffEqBaseChainRulesCoreExt = "ChainRulesCore" @@ -650,9 +702,9 @@ uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" version = "1.0.4" [[deps.EnzymeCore]] -git-tree-sha1 = "2c0192b96d5c45dbfb0f54e8cfb1256fece7b4ff" +git-tree-sha1 = "18394bc78ac2814ff38fe5e0c9dc2cd171e2810c" uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" -version = "0.7.1" +version = "0.7.2" weakdeps = ["Adapt"] [deps.EnzymeCore.extensions] @@ -748,10 +800,10 @@ version = "0.9.21" uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.FillArrays]] -deps = ["LinearAlgebra", "Random"] -git-tree-sha1 = "5b93957f6dcd33fc343044af3d48c215be2562f1" +deps = ["LinearAlgebra"] +git-tree-sha1 = "bfe82a708416cf00b73a3198db0859c82f741558" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.9.3" +version = "1.10.0" weakdeps = ["PDMats", "SparseArrays", "Statistics"] [deps.FillArrays.extensions] @@ -788,9 +840,9 @@ uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" version = "2.13.93+0" [[deps.Format]] -git-tree-sha1 = "f3cf88025f6d03c194d73f5d13fee9004a108329" +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" -version = "1.3.6" +version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] @@ -839,9 +891,9 @@ version = "0.1.3" [[deps.Functors]] deps = ["LinearAlgebra"] -git-tree-sha1 = "8ae30e786837ce0a24f5e2186938bf3251ab94b2" +git-tree-sha1 = "fa8d8fcfa6c38a9a7aa07233e35b3d9a39ec751a" uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" -version = "0.4.8" +version = "0.4.9" [[deps.Future]] deps = ["Random"] @@ -912,9 +964,9 @@ version = "1.3.1" [[deps.GnuTLS_jll]] deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Nettle_jll", "P11Kit_jll", "Zlib_jll"] -git-tree-sha1 = "f3c0936dd685d57fa0b1eee7dbebf382b969ea63" +git-tree-sha1 = "383db7d3f900f4c1f47a8a04115b053c095e48d3" uuid = "0951126a-58fd-58f1-b5b3-b08c7c4a876d" -version = "3.8.3+0" +version = "3.8.4+0" [[deps.Graphics]] deps = ["Colors", "LinearAlgebra", "NaNMath"] @@ -1084,6 +1136,16 @@ weakdeps = ["Random", "RecipesBase", "Statistics"] IntervalSetsRecipesBaseExt = "RecipesBase" IntervalSetsStatisticsExt = "Statistics" +[[deps.InverseFunctions]] +deps = ["Test"] +git-tree-sha1 = "896385798a8d49a255c398bd49162062e4a4c435" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.13" +weakdeps = ["Dates"] + + [deps.InverseFunctions.extensions] + DatesExt = "Dates" + [[deps.InvertedIndices]] git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" @@ -1148,9 +1210,9 @@ version = "3.0.2+0" [[deps.JuliaInterpreter]] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "0015726aa3eb28973fbbdbb7ca2ed6396ffe3a23" +git-tree-sha1 = "e9648d90370e2d0317f9518c9c6e0841db54a90b" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.9.30" +version = "0.9.31" [[deps.JuliaNVTXCallbacks_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1651,9 +1713,9 @@ version = "4.1.6+0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "60e3045590bd104a16fefb12836c00c0ef8c7f8c" +git-tree-sha1 = "3da7367955dcc5c54c1ba4d402ccdc09a1a3e046" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.13+0" +version = "3.0.13+1" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1662,10 +1724,10 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.5+0" [[deps.Optim]] -deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "PackageExtensionCompat", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "d1223e69af90b6d26cea5b6f3b289b3148ba702c" +deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] +git-tree-sha1 = "d9b79c4eed437421ac4285148fcadf42e0700e89" uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.9.3" +version = "1.9.4" [deps.Optim.extensions] OptimMOIExt = "MathOptInterface" @@ -1707,12 +1769,6 @@ git-tree-sha1 = "67186a2bc9a90f9f85ff3cc8277868961fb57cbd" uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" version = "0.4.3" -[[deps.PackageExtensionCompat]] -git-tree-sha1 = "fb28e33b8a95c4cee25ce296c817d89cc2e53518" -uuid = "65ce6f38-6b18-4e1d-a461-8949797d7930" -version = "1.0.2" -weakdeps = ["Requires", "TOML"] - [[deps.Packing]] deps = ["GeometryBasics"] git-tree-sha1 = "ec3edfe723df33528e085e632414499f26650501" @@ -1786,9 +1842,9 @@ version = "0.4.4" [[deps.Polyester]] deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] -git-tree-sha1 = "8df43bbe60029526dd628af7e9951f5af680d4d7" +git-tree-sha1 = "09f59c6dda37c7f73efddc5bdf6f92bc940eb484" uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" -version = "0.7.10" +version = "0.7.12" [[deps.PolyesterWeave]] deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] @@ -1964,9 +2020,9 @@ version = "1.3.4" [[deps.RecursiveArrayTools]] deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "SparseArrays", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "a94d22ca9ad49a7a169ecbc5419c59b9793937cc" +git-tree-sha1 = "d8f131090f2e44b145084928856a561c83f43b27" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "3.12.0" +version = "3.13.0" [deps.RecursiveArrayTools.extensions] RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" @@ -2055,9 +2111,9 @@ version = "0.1.0" [[deps.SciMLBase]] deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "3daaea955c0905200943175637f184a968574a2d" +git-tree-sha1 = "d15c65e25615272e1b1c5edb1d307484c7942824" uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.30.3" +version = "2.31.0" [deps.SciMLBase.extensions] SciMLBaseChainRulesCoreExt = "ChainRulesCore" @@ -2255,24 +2311,21 @@ version = "1.7.0" [[deps.StatsBase]] deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "1d77abd07f617c4868c33d4f5b9e1dbb2643c9cf" +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.2" +version = "0.34.3" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" version = "1.3.1" +weakdeps = ["ChainRulesCore", "InverseFunctions"] [deps.StatsFuns.extensions] StatsFunsChainRulesCoreExt = "ChainRulesCore" StatsFunsInverseFunctionsExt = "InverseFunctions" - [deps.StatsFuns.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - [[deps.StrideArraysCore]] deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] git-tree-sha1 = "d6415f66f3d89c615929af907fdc6a3e17af0d8c" @@ -2324,10 +2377,10 @@ weakdeps = ["ClimaParams"] CreateParametersExt = "ClimaParams" [[deps.SymbolicIndexingInterface]] -deps = ["MacroTools", "RuntimeGeneratedFunctions"] -git-tree-sha1 = "f7b1fc9fc2bc938436b7684c243be7d317919056" +deps = ["Accessors", "ArrayInterface", "MacroTools", "RuntimeGeneratedFunctions", "StaticArraysCore"] +git-tree-sha1 = "4b7f4c80449d8baae8857d55535033981862619c" uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.11" +version = "0.3.15" [[deps.TOML]] deps = ["Dates"] @@ -2384,9 +2437,9 @@ version = "1.0.1" [[deps.Thermodynamics]] deps = ["DocStringExtensions", "KernelAbstractions", "Random", "RootSolvers"] -git-tree-sha1 = "6098c65a2ad62312ac74cb1627c8fb33efe33287" +git-tree-sha1 = "deac04ad36638b10fde82470d5f128419f627e9a" uuid = "b60c26fb-14c3-4610-9d3e-2d17fe7ff00c" -version = "0.12.5" +version = "0.12.6" weakdeps = ["ClimaParams"] [deps.Thermodynamics.extensions] @@ -2411,9 +2464,9 @@ uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" version = "0.5.23" [[deps.TranscodingStreams]] -git-tree-sha1 = "14389d51751169994b2e1317d5c72f7dc4f21045" +git-tree-sha1 = "71509f04d045ec714c4748c785a59045c3736349" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.10.6" +version = "0.10.7" weakdeps = ["Random", "Test"] [deps.TranscodingStreams.extensions] @@ -2494,9 +2547,9 @@ version = "1.18.3" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "07e470dabc5a6a4254ffebc29a1b3fc01464e105" +git-tree-sha1 = "532e22cf7be8462035d092ff21fada7527e2c488" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.12.5+0" +version = "2.12.6+0" [[deps.XSLT_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] @@ -2506,9 +2559,9 @@ version = "1.1.34+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "31c421e5516a6248dfb22c194519e37effbf1f30" +git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.6.1+0" +version = "5.4.6+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] @@ -2571,9 +2624,9 @@ version = "1.2.13+1" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" +git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.5+0" +version = "1.5.6+0" [[deps.isoband_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] diff --git a/examples/Project.toml b/examples/Project.toml index 568bab88d09..5d1443c8896 100644 --- a/examples/Project.toml +++ b/examples/Project.toml @@ -17,6 +17,7 @@ ClimaCoreTempestRemap = "d934ef94-cdd4-4710-83d6-720549644b70" ClimaCoreVTK = "c8b6d40d-e815-466f-95ae-c48aefa668fa" ClimaParams = "5c42b081-d73a-476f-9059-fd94b934656c" ClimaTimeSteppers = "595c0a79-7f3d-439a-bc5a-b232dc3bde79" +ClimaUtilities = "b3f4f4ca-9299-4f7f-bd9b-81e1242a7513" CloudMicrophysics = "6a9e3e04-43cd-43ba-94b9-e8782df3c71b" Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" diff --git a/examples/hybrid/driver.jl b/examples/hybrid/driver.jl index aafad7a83e3..a895d11eb28 100644 --- a/examples/hybrid/driver.jl +++ b/examples/hybrid/driver.jl @@ -36,9 +36,6 @@ using Test import Tar import Base.Filesystem: rm import OrderedCollections -using ClimaCoreTempestRemap -using ClimaCorePlots -using ClimaCoreMakie, CairoMakie include(joinpath(pkgdir(CA), "post_processing", "ci_plots.jl")) ref_job_id = config.parsed_args["reference_job_id"] @@ -186,6 +183,7 @@ if config.parsed_args["check_precipitation"] sol.t[end], colidx, sol.prob.p.atmos.precip_model, + sol.prob.p.atmos.turbconv_model, ) @. Yₜ_ρqₚ[colidx] = -Yₜ.c.ρq_rai[colidx] - Yₜ.c.ρq_sno[colidx] @@ -260,12 +258,16 @@ if ClimaComms.iamroot(config.comms_ctx) paths = if isempty(readdir(nc_dir)) simulation.output_dir else - [nc_dir, simulation.output_dir] + [simulation.output_dir, nc_dir] end make_plots(Val(Symbol(reference_job_id)), paths) end @info "Plotting done" + function symlink_to_fullpath(path) + return joinpath(dirname(path), readlink(path)) + end + @info "Creating tarballs" # These NC files are used by our reproducibility tests, # and need to be found later when comparing against the @@ -274,12 +276,12 @@ if ClimaComms.iamroot(config.comms_ctx) # reproducibility test folder. Tar.create( f -> endswith(f, ".nc"), - simulation.output_dir, + symlink_to_fullpath(simulation.output_dir), joinpath(simulation.output_dir, "nc_files.tar"), ) Tar.create( f -> endswith(f, r"hdf5|h5"), - simulation.output_dir, + symlink_to_fullpath(simulation.output_dir), joinpath(simulation.output_dir, "hdf5_files.tar"), ) diff --git a/logo.svg b/logo.svg new file mode 100644 index 00000000000..599e1454d71 --- /dev/null +++ b/logo.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + diff --git a/perf/Manifest.toml b/perf/Manifest.toml index 1cc75317040..268030abd8b 100644 --- a/perf/Manifest.toml +++ b/perf/Manifest.toml @@ -36,6 +36,27 @@ git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" version = "0.4.5" +[[deps.Accessors]] +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Markdown", "Test"] +git-tree-sha1 = "c0d491ef0b135fd7d63cbc6404286bc633329425" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.36" + + [deps.Accessors.extensions] + AccessorsAxisKeysExt = "AxisKeys" + AccessorsIntervalSetsExt = "IntervalSets" + AccessorsStaticArraysExt = "StaticArrays" + AccessorsStructArraysExt = "StructArrays" + AccessorsUnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + Requires = "ae029012-a4dd-5104-9daa-d747884805df" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" @@ -170,9 +191,9 @@ version = "0.1.5" [[deps.BlockArrays]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] -git-tree-sha1 = "3c62e3006c23082d2ae524b468298d27788a8502" +git-tree-sha1 = "9a9610fbe5779636f75229e423e367124034af41" uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" -version = "0.16.40" +version = "0.16.43" [[deps.Blosc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Lz4_jll", "Zlib_jll", "Zstd_jll"] @@ -301,16 +322,16 @@ version = "0.5.0" GeoMakie = "db073c08-6b98-4ee5-b6a4-5efafb3259c6" [[deps.ClimaAtmos]] -deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaParams", "ClimaTimeSteppers", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"] +deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaParams", "ClimaTimeSteppers", "ClimaUtilities", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"] path = ".." uuid = "b2c96348-7fb7-4fe0-8da9-78d88439e717" version = "0.22.1" [[deps.ClimaComms]] deps = ["CUDA", "MPI"] -git-tree-sha1 = "f0350e34c91c8f3b5a11b5e39990439303d727b1" +git-tree-sha1 = "ef5d206be51fdf62cd0cbd63058e237128652cf7" uuid = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" -version = "0.5.7" +version = "0.5.8" [[deps.ClimaCore]] deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "KrylovKit", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "Unrolled"] @@ -364,6 +385,23 @@ git-tree-sha1 = "9c203f39784c968700c55f555754a7771b3410df" uuid = "595c0a79-7f3d-439a-bc5a-b232dc3bde79" version = "0.7.19" +[[deps.ClimaUtilities]] +deps = ["Artifacts", "CFTime", "Dates"] +git-tree-sha1 = "d1b30a07829248b325ffffbb739d0f6fe79dfe7c" +uuid = "b3f4f4ca-9299-4f7f-bd9b-81e1242a7513" +version = "0.1.3" +weakdeps = ["Adapt", "ClimaComms", "ClimaCore", "ClimaCoreTempestRemap", "Interpolations", "NCDatasets"] + + [deps.ClimaUtilities.extensions] + DataHandlingExt = ["ClimaCore", "NCDatasets"] + InterpolationsRegridderExt = ["Interpolations", "ClimaCore"] + MPIUtilsExt = "ClimaComms" + NCFileReaderExt = "NCDatasets" + SpaceVaryingInputsExt = ["ClimaCore", "NCDatasets"] + TempestRegridderExt = "ClimaCoreTempestRemap" + TimeVaryingInputs0DExt = "ClimaCore" + TimeVaryingInputsExt = ["ClimaCore", "NCDatasets"] + [[deps.CloseOpenIntervals]] deps = ["Static", "StaticArrayInterface"] git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1" @@ -459,6 +497,20 @@ deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" version = "1.1.0+0" +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.ConcreteStructs]] +git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" +uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" +version = "0.2.3" + [[deps.ConstructionBase]] deps = ["LinearAlgebra"] git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" @@ -471,9 +523,9 @@ weakdeps = ["IntervalSets", "StaticArrays"] ConstructionBaseStaticArraysExt = "StaticArrays" [[deps.Contour]] -git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" -version = "0.6.2" +version = "0.6.3" [[deps.CpuId]] deps = ["Markdown"] @@ -488,9 +540,9 @@ version = "4.1.1" [[deps.Cthulhu]] deps = ["CodeTracking", "FoldingTrees", "InteractiveUtils", "JuliaSyntax", "PrecompileTools", "Preferences", "REPL", "TypedSyntax", "UUIDs", "Unicode", "WidthLimitedIO"] -git-tree-sha1 = "f2149929cf1a400d4befc184685c221e2bc2516d" +git-tree-sha1 = "f56f917d4d89b131400cf87291b7c9f986321275" uuid = "f68482b8-f384-11e8-15f7-abe071a5a75f" -version = "2.12.0" +version = "2.12.2" [[deps.CubedSphere]] deps = ["Elliptic", "FFTW", "Printf", "ProgressBars", "SpecialFunctions", "TaylorSeries", "Test"] @@ -549,10 +601,10 @@ uuid = "cd4c43a9-7502-52ba-aa6d-59fb2a88580b" version = "0.1.0+0" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] -git-tree-sha1 = "b19b2bb1ecd1271334e4b25d605e50f75e68fcae" +deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] +git-tree-sha1 = "4fa023dbb15b3485426bbc6c43e030c14250d664" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.148.0" +version = "6.149.0" [deps.DiffEqBase.extensions] DiffEqBaseChainRulesCoreExt = "ChainRulesCore" @@ -683,9 +735,9 @@ uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" version = "1.0.4" [[deps.EnzymeCore]] -git-tree-sha1 = "2c0192b96d5c45dbfb0f54e8cfb1256fece7b4ff" +git-tree-sha1 = "18394bc78ac2814ff38fe5e0c9dc2cd171e2810c" uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" -version = "0.7.1" +version = "0.7.2" weakdeps = ["Adapt"] [deps.EnzymeCore.extensions] @@ -781,10 +833,10 @@ version = "0.9.21" uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.FillArrays]] -deps = ["LinearAlgebra", "Random"] -git-tree-sha1 = "5b93957f6dcd33fc343044af3d48c215be2562f1" +deps = ["LinearAlgebra"] +git-tree-sha1 = "bfe82a708416cf00b73a3198db0859c82f741558" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.9.3" +version = "1.10.0" weakdeps = ["PDMats", "SparseArrays", "Statistics"] [deps.FillArrays.extensions] @@ -833,9 +885,9 @@ uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" version = "2.13.93+0" [[deps.Format]] -git-tree-sha1 = "f3cf88025f6d03c194d73f5d13fee9004a108329" +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" -version = "1.3.6" +version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] @@ -884,9 +936,9 @@ version = "0.1.3" [[deps.Functors]] deps = ["LinearAlgebra"] -git-tree-sha1 = "8ae30e786837ce0a24f5e2186938bf3251ab94b2" +git-tree-sha1 = "fa8d8fcfa6c38a9a7aa07233e35b3d9a39ec751a" uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" -version = "0.4.8" +version = "0.4.9" [[deps.Future]] deps = ["Random"] @@ -957,9 +1009,9 @@ version = "1.3.1" [[deps.GnuTLS_jll]] deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Nettle_jll", "P11Kit_jll", "Zlib_jll"] -git-tree-sha1 = "f3c0936dd685d57fa0b1eee7dbebf382b969ea63" +git-tree-sha1 = "383db7d3f900f4c1f47a8a04115b053c095e48d3" uuid = "0951126a-58fd-58f1-b5b3-b08c7c4a876d" -version = "3.8.3+0" +version = "3.8.4+0" [[deps.Graphics]] deps = ["Colors", "LinearAlgebra", "NaNMath"] @@ -1135,6 +1187,16 @@ weakdeps = ["Random", "RecipesBase", "Statistics"] IntervalSetsRecipesBaseExt = "RecipesBase" IntervalSetsStatisticsExt = "Statistics" +[[deps.InverseFunctions]] +deps = ["Test"] +git-tree-sha1 = "896385798a8d49a255c398bd49162062e4a4c435" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.13" +weakdeps = ["Dates"] + + [deps.InverseFunctions.extensions] + DatesExt = "Dates" + [[deps.InvertedIndices]] git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" @@ -1199,9 +1261,9 @@ version = "3.0.2+0" [[deps.JuliaInterpreter]] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "0015726aa3eb28973fbbdbb7ca2ed6396ffe3a23" +git-tree-sha1 = "e9648d90370e2d0317f9518c9c6e0841db54a90b" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.9.30" +version = "0.9.31" [[deps.JuliaNVTXCallbacks_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1707,9 +1769,9 @@ version = "4.1.6+0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "60e3045590bd104a16fefb12836c00c0ef8c7f8c" +git-tree-sha1 = "3da7367955dcc5c54c1ba4d402ccdc09a1a3e046" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.13+0" +version = "3.0.13+1" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1718,10 +1780,10 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.5+0" [[deps.Optim]] -deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "PackageExtensionCompat", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "d1223e69af90b6d26cea5b6f3b289b3148ba702c" +deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] +git-tree-sha1 = "d9b79c4eed437421ac4285148fcadf42e0700e89" uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.9.3" +version = "1.9.4" [deps.Optim.extensions] OptimMOIExt = "MathOptInterface" @@ -1769,12 +1831,6 @@ git-tree-sha1 = "1c650abb80d2a417318a9d303443487b226901cd" uuid = "e4faabce-9ead-11e9-39d9-4379958e3056" version = "2.3.0" -[[deps.PackageExtensionCompat]] -git-tree-sha1 = "fb28e33b8a95c4cee25ce296c817d89cc2e53518" -uuid = "65ce6f38-6b18-4e1d-a461-8949797d7930" -version = "1.0.2" -weakdeps = ["Requires", "TOML"] - [[deps.Packing]] deps = ["GeometryBasics"] git-tree-sha1 = "ec3edfe723df33528e085e632414499f26650501" @@ -1848,9 +1904,9 @@ version = "0.4.4" [[deps.Polyester]] deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] -git-tree-sha1 = "8df43bbe60029526dd628af7e9951f5af680d4d7" +git-tree-sha1 = "09f59c6dda37c7f73efddc5bdf6f92bc940eb484" uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" -version = "0.7.10" +version = "0.7.12" [[deps.PolyesterWeave]] deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] @@ -2038,9 +2094,9 @@ version = "1.3.4" [[deps.RecursiveArrayTools]] deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "SparseArrays", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "a94d22ca9ad49a7a169ecbc5419c59b9793937cc" +git-tree-sha1 = "d8f131090f2e44b145084928856a561c83f43b27" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "3.12.0" +version = "3.13.0" [deps.RecursiveArrayTools.extensions] RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" @@ -2135,9 +2191,9 @@ version = "0.1.0" [[deps.SciMLBase]] deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "3daaea955c0905200943175637f184a968574a2d" +git-tree-sha1 = "d15c65e25615272e1b1c5edb1d307484c7942824" uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.30.3" +version = "2.31.0" [deps.SciMLBase.extensions] SciMLBaseChainRulesCoreExt = "ChainRulesCore" @@ -2347,24 +2403,21 @@ version = "1.7.0" [[deps.StatsBase]] deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "1d77abd07f617c4868c33d4f5b9e1dbb2643c9cf" +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.2" +version = "0.34.3" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" version = "1.3.1" +weakdeps = ["ChainRulesCore", "InverseFunctions"] [deps.StatsFuns.extensions] StatsFunsChainRulesCoreExt = "ChainRulesCore" StatsFunsInverseFunctionsExt = "InverseFunctions" - [deps.StatsFuns.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - [[deps.StrideArraysCore]] deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] git-tree-sha1 = "d6415f66f3d89c615929af907fdc6a3e17af0d8c" @@ -2416,10 +2469,10 @@ weakdeps = ["ClimaParams"] CreateParametersExt = "ClimaParams" [[deps.SymbolicIndexingInterface]] -deps = ["MacroTools", "RuntimeGeneratedFunctions"] -git-tree-sha1 = "f7b1fc9fc2bc938436b7684c243be7d317919056" +deps = ["Accessors", "ArrayInterface", "MacroTools", "RuntimeGeneratedFunctions", "StaticArraysCore"] +git-tree-sha1 = "4b7f4c80449d8baae8857d55535033981862619c" uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.11" +version = "0.3.15" [[deps.TOML]] deps = ["Dates"] @@ -2476,9 +2529,9 @@ version = "1.0.1" [[deps.Thermodynamics]] deps = ["DocStringExtensions", "KernelAbstractions", "Random", "RootSolvers"] -git-tree-sha1 = "6098c65a2ad62312ac74cb1627c8fb33efe33287" +git-tree-sha1 = "deac04ad36638b10fde82470d5f128419f627e9a" uuid = "b60c26fb-14c3-4610-9d3e-2d17fe7ff00c" -version = "0.12.5" +version = "0.12.6" weakdeps = ["ClimaParams"] [deps.Thermodynamics.extensions] @@ -2503,9 +2556,9 @@ uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" version = "0.5.23" [[deps.TranscodingStreams]] -git-tree-sha1 = "14389d51751169994b2e1317d5c72f7dc4f21045" +git-tree-sha1 = "71509f04d045ec714c4748c785a59045c3736349" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.10.6" +version = "0.10.7" weakdeps = ["Random", "Test"] [deps.TranscodingStreams.extensions] @@ -2534,9 +2587,9 @@ version = "1.5.0" [[deps.TypedSyntax]] deps = ["CodeTracking", "JuliaSyntax"] -git-tree-sha1 = "59ccd5febe932ee23af9e8d7e217ba6d27506b79" +git-tree-sha1 = "f3ea2aa283e95df02d6c9bf1e1896af88874579e" uuid = "d265eb64-f81a-44ad-a842-4247ee1503de" -version = "1.3.0" +version = "1.3.1" [[deps.URIs]] git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" @@ -2603,9 +2656,9 @@ version = "1.18.3" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "07e470dabc5a6a4254ffebc29a1b3fc01464e105" +git-tree-sha1 = "532e22cf7be8462035d092ff21fada7527e2c488" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.12.5+0" +version = "2.12.6+0" [[deps.XSLT_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] @@ -2615,9 +2668,9 @@ version = "1.1.34+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "31c421e5516a6248dfb22c194519e37effbf1f30" +git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.6.1+0" +version = "5.4.6+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] @@ -2680,9 +2733,9 @@ version = "1.2.13+1" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" +git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.5+0" +version = "1.5.6+0" [[deps.isoband_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] diff --git a/perf/benchmark_netcdf_io.jl b/perf/benchmark_netcdf_io.jl index 8b9cf220089..4950fb76195 100644 --- a/perf/benchmark_netcdf_io.jl +++ b/perf/benchmark_netcdf_io.jl @@ -104,7 +104,7 @@ for device in keys(timings) NCDatasets.defDim(nc, "x", NUM) NCDatasets.defDim(nc, "y", NUM) NCDatasets.defDim(nc, "z", NUM) - v = NCDatasets.defVar(nc, "rhoa", Float32, ("time", "x", "y", "z")) + v = NCDatasets.defVar(nc, "rhoa", Float64, ("time", "x", "y", "z")) outarray = Array(netcdf_writer.remappers["rhoa"]._interpolated_values) v[1, :, :, :] = outarray diff --git a/perf/jet.jl b/perf/jet.jl index 85fd9fe3f91..021395f528f 100644 --- a/perf/jet.jl +++ b/perf/jet.jl @@ -1,3 +1,12 @@ +#= +# to get a target configuration: +julia --project=perf +import ClimaAtmos as CA +using Revise; include(joinpath(pkgdir(CA), "perf", "common.jl")) +config = TargetJobConfig("gpu_prognostic_edmfx_aquaplanet") + +include(joinpath(pkgdir(CA), "perf", "jet.jl")) +=# redirect_stderr(IOContext(stderr, :stacktrace_types_limited => Ref(false))) import Random import HDF5, NCDatasets, CUDA @@ -6,16 +15,31 @@ import ClimaAtmos as CA include("common.jl") -config_dict = Dict("z_elem" => 63, "dt" => "10secs", "t_end" => "3600secs") -config = AtmosCoveragePerfConfig(config_dict) +if !(@isdefined config) + config_dict = Dict("z_elem" => 63, "dt" => "10secs", "t_end" => "3600secs") + config = AtmosCoveragePerfConfig(config_dict) +end + +import JET + +function jet_test(f, args) + f(args...) # compile first + JET.@test_opt ignored_modules = (HDF5, CUDA, NCDatasets) f(args...) +end simulation = CA.get_simulation(config) (; integrator) = simulation -import JET - import SciMLBase -SciMLBase.step!(integrator) # Make sure no errors -JET.@test_opt ignored_modules = (HDF5, CUDA, NCDatasets) SciMLBase.step!( - integrator, -) +W = get_W(integrator); +(; u, p, dt, t) = integrator; + +# jet_test(wfact_fun(integrator), (W, u, p, dt, t)) +# jet_test(LA.ldiv!, (X, W, u)) +# jet_test(implicit_fun(integrator), implicit_args(integrator)) +# jet_test(remaining_fun(integrator), remaining_args(integrator)) +# jet_test(CA.additional_tendency!, (X, u, p, t)) +# jet_test(CA.hyperdiffusion_tendency!, remaining_args(integrator)) +# jet_test(CA.dss!, (u, p, t)) +# jet_test(CA.set_precomputed_quantities!, (u, p, t)) +jet_test(SciMLBase.step!, (integrator,)) diff --git a/post_processing/ci_plots.jl b/post_processing/ci_plots.jl index 03395f5ed7f..f072752667e 100644 --- a/post_processing/ci_plots.jl +++ b/post_processing/ci_plots.jl @@ -829,6 +829,7 @@ AquaplanetPlots = Union{ Val{:longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_diagedmf_diffonly_0M}, Val{:longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_diagedmf_0M}, Val{:longrun_aquaplanet_rhoe_equil_55km_nz63_allsky_diagedmf_0M}, + Val{:longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_diffonly_0M}, Val{:longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_0M_earth}, Val{:longrun_aquaplanet_rhoe_equil_highres_allsky_ft32}, Val{:longrun_aquaplanet_dyamond}, @@ -939,17 +940,23 @@ EDMFBoxPlots = Union{ Val{:diagnostic_edmfx_trmm_box}, Val{:diagnostic_edmfx_trmm_stretched_box}, Val{:diagnostic_edmfx_dycoms_rf01_explicit_box}, - Val{:prognostic_edmfx_adv_test_box}, - Val{:prognostic_edmfx_gabls_box}, - Val{:prognostic_edmfx_bomex_fixtke_box}, + Val{:prognostic_edmfx_adv_test_column}, + Val{:prognostic_edmfx_gabls_column}, + Val{:prognostic_edmfx_bomex_fixtke_column}, + Val{:prognostic_edmfx_bomex_column}, + Val{:prognostic_edmfx_bomex_stretched_column}, + Val{:prognostic_edmfx_dycoms_rf01_column}, + Val{:prognostic_edmfx_trmm_column_0M}, + Val{:prognostic_edmfx_simpleplume_column}, Val{:prognostic_edmfx_bomex_box}, - Val{:prognostic_edmfx_bomex_stretched_box}, - Val{:prognostic_edmfx_dycoms_rf01_box}, +} + +EDMFBoxPlotsWithPrecip = Union{ Val{:prognostic_edmfx_rico_column}, Val{:prognostic_edmfx_trmm_column}, - Val{:prognostic_edmfx_simpleplume_column}, } + """ plot_edmf_vert_profile!(grid_loc, var_group) @@ -1023,9 +1030,14 @@ function pair_edmf_names(short_names) return grouped_vars end -function make_plots(::EDMFBoxPlots, output_paths::Vector{<:AbstractString}) +function make_plots( + sim_type::Union{EDMFBoxPlots, EDMFBoxPlotsWithPrecip}, + output_paths::Vector{<:AbstractString}, +) simdirs = SimDir.(output_paths) + precip_names = sim_type isa EDMFBoxPlotsWithPrecip ? ("husra", "hussn") : () + short_names = [ "ua", "wa", @@ -1037,6 +1049,7 @@ function make_plots(::EDMFBoxPlots, output_paths::Vector{<:AbstractString}) "haup", "waup", "tke", + "lmix", "arup", "hus", "husup", @@ -1047,6 +1060,7 @@ function make_plots(::EDMFBoxPlots, output_paths::Vector{<:AbstractString}) "clwup", "cli", "cliup", + precip_names..., ] reduction = "inst" period = "30m" diff --git a/regression_tests/print_new_mse.jl b/regression_tests/print_new_mse.jl index 0c70a63ae76..f998a7fea45 100644 --- a/regression_tests/print_new_mse.jl +++ b/regression_tests/print_new_mse.jl @@ -19,7 +19,7 @@ percent_reduction_mse = Dict() computed_mse = OrderedCollections.OrderedDict() files_skipped = OrderedCollections.OrderedDict() for job_id in job_ids - filename = joinpath(job_id, "computed_mse.json") + filename = joinpath(job_id, "output_active/computed_mse.json") if !isfile(filename) @warn "File $filename skipped" files_skipped[job_id] = true diff --git a/regression_tests/ref_counter.jl b/regression_tests/ref_counter.jl index bb79365350b..7a9aee41ba3 100644 --- a/regression_tests/ref_counter.jl +++ b/regression_tests/ref_counter.jl @@ -1 +1,13 @@ -155 +158 + +# 158: +# - Switched back the precipitation threshold defintion in the +# 0-moment scheme to specific humidity +# 157: +# - For the grid mean precipitation tendency in the 0-moment scheme: +# - added limiting by q_tot/dt +# - switched the precipitation threshold defintion +# from specific humidity based to supersaturation based + +# 156: +# - Changed start date (changes insolation) diff --git a/src/ClimaAtmos.jl b/src/ClimaAtmos.jl index 2a2d3ef0936..4294fe61b1c 100644 --- a/src/ClimaAtmos.jl +++ b/src/ClimaAtmos.jl @@ -43,7 +43,7 @@ include(joinpath("utils", "discrete_hydrostatic_balance.jl")) include(joinpath("prognostic_equations", "pressure_work.jl")) include(joinpath("prognostic_equations", "zero_velocity.jl")) -include(joinpath("prognostic_equations", "zero_gridscale_tendency.jl")) +include(joinpath("prognostic_equations", "zero_tendency.jl")) include(joinpath("prognostic_equations", "implicit", "implicit_tendency.jl")) include(joinpath("prognostic_equations", "implicit", "implicit_solver.jl")) @@ -105,6 +105,7 @@ include(joinpath("parameterized_tendencies", "sponge", "viscous_sponge.jl")) include(joinpath("prognostic_equations", "advection.jl")) include(joinpath("cache", "temporary_quantities.jl")) +include(joinpath("cache", "tracer_cache.jl")) include(joinpath("cache", "cache.jl")) include(joinpath("prognostic_equations", "dss.jl")) include(joinpath("prognostic_equations", "limited_tendencies.jl")) diff --git a/src/cache/cache.jl b/src/cache/cache.jl index 1131dde27d2..a31c75f0ef4 100644 --- a/src/cache/cache.jl +++ b/src/cache/cache.jl @@ -24,6 +24,7 @@ struct AtmosCache{ NONGW, ORGW, RAD, + TRAC, NETFLUXTOA, NETFLUXSFC, CONSCHECK, @@ -38,7 +39,7 @@ struct AtmosCache{ """Walltime estimate""" walltime_estimate::WTE - """Start date (used for insolation).""" + """Start date (used for insolation and for data files).""" start_date::SD """AtmosModel""" @@ -85,6 +86,7 @@ struct AtmosCache{ non_orographic_gravity_wave::NONGW orographic_gravity_wave::ORGW radiation::RAD + tracers::TRAC """Net energy flux coming through top of atmosphere and surface""" net_energy_flux_toa::NETFLUXTOA @@ -109,7 +111,7 @@ end # The model also depends on f_plane_coriolis_frequency(params) # This is a constant Coriolis frequency that is only used if space is flat -function build_cache(Y, atmos, params, surface_setup, sim_info) +function build_cache(Y, atmos, params, surface_setup, sim_info, aerosol_names) (; dt, t_end, start_date, output_dir) = sim_info FT = eltype(params) @@ -228,6 +230,7 @@ function build_cache(Y, atmos, params, surface_setup, sim_info) non_orographic_gravity_wave = non_orographic_gravity_wave_cache(Y, atmos) orographic_gravity_wave = orographic_gravity_wave_cache(Y, atmos) radiation = radiation_model_cache(Y, atmos, radiation_args...) + tracers = tracer_cache(Y, atmos, aerosol_names, start_date) args = ( dt, @@ -255,6 +258,7 @@ function build_cache(Y, atmos, params, surface_setup, sim_info) non_orographic_gravity_wave, orographic_gravity_wave, radiation, + tracers, net_energy_flux_toa, net_energy_flux_sfc, conservation_check, diff --git a/src/cache/cloud_fraction.jl b/src/cache/cloud_fraction.jl index 73ddaa8a473..0ae48fa3cd2 100644 --- a/src/cache/cloud_fraction.jl +++ b/src/cache/cloud_fraction.jl @@ -1,3 +1,4 @@ +import NVTX import StaticArrays as SA import ClimaCore.RecursiveApply: rzero, ⊞, ⊠ @@ -13,7 +14,7 @@ end """ Compute the grid scale cloud fraction based on sub-grid scale properties """ -function set_cloud_fraction!(Y, p, ::DryModel, _) +NVTX.@annotate function set_cloud_fraction!(Y, p, ::DryModel, _) (; ᶜmixing_length) = p.precomputed (; turbconv_model) = p.atmos if isnothing(turbconv_model) @@ -21,7 +22,7 @@ function set_cloud_fraction!(Y, p, ::DryModel, _) end @. p.precomputed.ᶜcloud_fraction = 0 end -function set_cloud_fraction!( +NVTX.@annotate function set_cloud_fraction!( Y, p, ::Union{EquilMoistModel, NonEquilMoistModel}, @@ -44,7 +45,7 @@ function set_cloud_fraction!( end @. ᶜcloud_fraction = ifelse(TD.has_condensate(thermo_params, ᶜts), 1, 0) end -function set_cloud_fraction!( +NVTX.@annotate function set_cloud_fraction!( Y, p, ::Union{EquilMoistModel, NonEquilMoistModel}, diff --git a/src/cache/diagnostic_edmf_precomputed_quantities.jl b/src/cache/diagnostic_edmf_precomputed_quantities.jl index f6f6982a33d..d94c8671d0a 100644 --- a/src/cache/diagnostic_edmf_precomputed_quantities.jl +++ b/src/cache/diagnostic_edmf_precomputed_quantities.jl @@ -1,10 +1,11 @@ ##### ##### Precomputed quantities ##### +import NVTX import Thermodynamics as TD import ClimaCore: Spaces, Fields, RecursiveApply -function kinetic_energy!( +NVTX.@annotate function kinetic_energy!( K_level, uₕ_level, u³_halflevel, @@ -28,7 +29,7 @@ function kinetic_energy!( ) / 2 end -function set_diagnostic_edmfx_draft_quantities_level!( +NVTX.@annotate function set_diagnostic_edmfx_draft_quantities_level!( thermo_params, ts_level, ρ_level, @@ -50,7 +51,7 @@ function set_diagnostic_edmfx_draft_quantities_level!( return nothing end -function set_diagnostic_edmfx_env_quantities_level!( +NVTX.@annotate function set_diagnostic_edmfx_env_quantities_level!( ρ_level, ρaʲs_level, u³_halflevel, @@ -86,7 +87,11 @@ end Updates the bottom boundary conditions in precomputed quantities stored in `p` for diagnostic edmfx. """ -function set_diagnostic_edmf_precomputed_quantities_bottom_bc!(Y, p, t) +NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_bottom_bc!( + Y, + p, + t, +) (; turbconv_model) = p.atmos FT = eltype(Y) n = n_mass_flux_subdomains(turbconv_model) @@ -207,7 +212,11 @@ function set_diagnostic_edmf_precomputed_quantities_bottom_bc!(Y, p, t) return nothing end -function set_diagnostic_edmf_precomputed_quantities_do_integral!(Y, p, t) +NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_do_integral!( + Y, + p, + t, +) (; turbconv_model, precip_model) = p.atmos FT = eltype(Y) n = n_mass_flux_subdomains(turbconv_model) @@ -693,7 +702,11 @@ end Updates the top boundary condition of precomputed quantities stored in `p` for diagnostic edmfx. """ -function set_diagnostic_edmf_precomputed_quantities_top_bc!(Y, p, t) +NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_top_bc!( + Y, + p, + t, +) n = n_mass_flux_subdomains(p.atmos.turbconv_model) (; ᶜentrʲs, ᶜdetrʲs, ᶜS_q_totʲs, ᶜS_e_totʲs_helper) = p.precomputed (; ᶠu³⁰, ᶠu³ʲs, ᶜuʲs, ᶠnh_pressure³ʲs) = p.precomputed @@ -741,7 +754,11 @@ end Updates the environment closures in precomputed quantities stored in `p` for diagnostic edmfx. """ -function set_diagnostic_edmf_precomputed_quantities_env_closures!(Y, p, t) +NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_env_closures!( + Y, + p, + t, +) (; moisture_model, turbconv_model, precip_model) = p.atmos n = n_mass_flux_subdomains(turbconv_model) ᶜz = Fields.coordinate_field(Y.c).z diff --git a/src/cache/precipitation_precomputed_quantities.jl b/src/cache/precipitation_precomputed_quantities.jl index 2b327783df1..21c0fc7f238 100644 --- a/src/cache/precipitation_precomputed_quantities.jl +++ b/src/cache/precipitation_precomputed_quantities.jl @@ -3,6 +3,11 @@ ##### import CloudMicrophysics.Microphysics1M as CM1 +# helper function to safely get precipitation from state +function qₚ(ρqₚ::FT, ρ::FT) where {FT} + return max(FT(0), ρqₚ / ρ) +end + """ set_precipitation_precomputed_quantities!(Y, p, t) @@ -12,10 +17,14 @@ for the 1-moment microphysics scheme function set_precipitation_precomputed_quantities!(Y, p, t) @assert (p.atmos.precip_model isa Microphysics1Moment) - (; ᶜwᵣ, ᶜwₛ) = p.precomputed + (; ᶜwᵣ, ᶜwₛ, ᶜqᵣ, ᶜqₛ) = p.precomputed cmp = CAP.microphysics_params(p.params) + # compute the precipitation specific humidities + @. ᶜqᵣ = qₚ(Y.c.ρq_rai, Y.c.ρ) + @. ᶜqₛ = qₚ(Y.c.ρq_sno, Y.c.ρ) + # compute the precipitation terminal velocity [m/s] @. ᶜwᵣ = CM1.terminal_velocity( cmp.pr, diff --git a/src/cache/precomputed_quantities.jl b/src/cache/precomputed_quantities.jl index 9f1b70dd71e..4ef6da543f1 100644 --- a/src/cache/precomputed_quantities.jl +++ b/src/cache/precomputed_quantities.jl @@ -56,6 +56,23 @@ function precomputed_quantities(Y, atmos) sfc_conditions = Fields.Field(SCT, Spaces.level(axes(Y.f), half)), ) cloud_diagnostics = (; ᶜcloud_fraction = similar(Y.c, FT),) + precipitation_sgs_quantities = + atmos.precip_model isa Microphysics0Moment ? + (; + ᶜS_q_totʲs = similar(Y.c, NTuple{n, FT}), + ᶜS_q_tot⁰ = similar(Y.c, FT), + ) : + atmos.precip_model isa Microphysics1Moment ? + (; + ᶜSeₜᵖʲs = similar(Y.c, NTuple{n, FT}), + ᶜSqₜᵖʲs = similar(Y.c, NTuple{n, FT}), + ᶜSqᵣᵖʲs = similar(Y.c, NTuple{n, FT}), + ᶜSqₛᵖʲs = similar(Y.c, NTuple{n, FT}), + ᶜSeₜᵖ⁰ = similar(Y.c, FT), + ᶜSqₜᵖ⁰ = similar(Y.c, FT), + ᶜSqᵣᵖ⁰ = similar(Y.c, FT), + ᶜSqₛᵖ⁰ = similar(Y.c, FT), + ) : (;) advective_sgs_quantities = atmos.turbconv_model isa PrognosticEDMFX ? (; @@ -83,8 +100,7 @@ function precomputed_quantities(Y, atmos) ᶜentrʲs = similar(Y.c, NTuple{n, FT}), ᶜdetrʲs = similar(Y.c, NTuple{n, FT}), ᶠnh_pressure₃ʲs = similar(Y.f, NTuple{n, C3{FT}}), - ᶜS_q_totʲs = similar(Y.c, NTuple{n, FT}), - ᶜS_q_tot⁰ = similar(Y.c, FT), + precipitation_sgs_quantities..., ) : (;) sgs_quantities = (; ᶜgradᵥ_θ_virt = Fields.Field(C3{FT}, cspace), @@ -130,7 +146,12 @@ function precomputed_quantities(Y, atmos) end precipitation_quantities = atmos.precip_model isa Microphysics1Moment ? - (; ᶜwᵣ = similar(Y.c, FT), ᶜwₛ = similar(Y.c, FT)) : (;) + (; + ᶜwᵣ = similar(Y.c, FT), + ᶜwₛ = similar(Y.c, FT), + ᶜqᵣ = similar(Y.c, FT), + ᶜqₛ = similar(Y.c, FT), + ) : (;) return (; gs_quantities..., sgs_quantities..., @@ -483,6 +504,11 @@ NVTX.@annotate function set_precomputed_quantities!(Y, p, t) set_prognostic_edmf_precomputed_quantities_draft_and_bc!(Y, p, ᶠuₕ³, t) set_prognostic_edmf_precomputed_quantities_environment!(Y, p, ᶠuₕ³, t) set_prognostic_edmf_precomputed_quantities_closures!(Y, p, t) + set_prognostic_edmf_precomputed_quantities_precipitation!( + Y, + p, + p.atmos.precip_model, + ) end if turbconv_model isa DiagnosticEDMFX diff --git a/src/cache/prognostic_edmf_precomputed_quantities.jl b/src/cache/prognostic_edmf_precomputed_quantities.jl index df85dbcb16a..fcc17e0f376 100644 --- a/src/cache/prognostic_edmf_precomputed_quantities.jl +++ b/src/cache/prognostic_edmf_precomputed_quantities.jl @@ -1,6 +1,7 @@ ##### ##### Precomputed quantities ##### +import NVTX import Thermodynamics as TD import ClimaCore: Spaces, Fields @@ -9,7 +10,12 @@ import ClimaCore: Spaces, Fields Updates the edmf environment precomputed quantities stored in `p` for edmfx. """ -function set_prognostic_edmf_precomputed_quantities_environment!(Y, p, ᶠuₕ³, t) +NVTX.@annotate function set_prognostic_edmf_precomputed_quantities_environment!( + Y, + p, + ᶠuₕ³, + t, +) @assert !(p.atmos.moisture_model isa DryModel) thermo_params = CAP.thermodynamics_params(p.params) @@ -49,7 +55,12 @@ end Updates the draft thermo state and boundary conditions precomputed quantities stored in `p` for edmfx. """ -function set_prognostic_edmf_precomputed_quantities_draft_and_bc!(Y, p, ᶠuₕ³, t) +NVTX.@annotate function set_prognostic_edmf_precomputed_quantities_draft_and_bc!( + Y, + p, + ᶠuₕ³, + t, +) (; moisture_model, turbconv_model) = p.atmos #EDMFX BCs only support total energy as state variable @assert !(moisture_model isa DryModel) @@ -161,15 +172,18 @@ end Updates the precomputed quantities stored in `p` for edmfx closures. """ -function set_prognostic_edmf_precomputed_quantities_closures!(Y, p, t) +NVTX.@annotate function set_prognostic_edmf_precomputed_quantities_closures!( + Y, + p, + t, +) - (; moisture_model, turbconv_model, precip_model) = p.atmos + (; moisture_model, turbconv_model) = p.atmos @assert !(moisture_model isa DryModel) (; params) = p (; dt) = p thermo_params = CAP.thermodynamics_params(params) - microphys_params = CAP.microphysics_params(params) FT = eltype(params) n = n_mass_flux_subdomains(turbconv_model) @@ -184,7 +198,6 @@ function set_prognostic_edmf_precomputed_quantities_closures!(Y, p, t) ρatke_flux, ) = p.precomputed (; ᶜuʲs, ᶜtsʲs, ᶠu³ʲs, ᶜρʲs, ᶜentrʲs, ᶜdetrʲs) = p.precomputed - (; ᶜS_q_totʲs, ᶜS_q_tot⁰) = p.precomputed (; ustar, obukhov_length, buoyancy_flux) = p.precomputed.sfc_conditions ᶜz = Fields.coordinate_field(Y.c).z @@ -245,26 +258,8 @@ function set_prognostic_edmf_precomputed_quantities_closures!(Y, p, t) draft_area(Y.c.sgsʲs.:($$j).ρa, ᶜρʲs.:($$j)), dt, ) - # precipitation - @. ᶜS_q_totʲs.:($$j) = q_tot_precipitation_sources( - precip_model, - thermo_params, - microphys_params, - dt, - Y.c.sgsʲs.:($$j).q_tot, - ᶜtsʲs.:($$j), - ) end - @. ᶜS_q_tot⁰ = q_tot_precipitation_sources( - precip_model, - thermo_params, - microphys_params, - dt, - ᶜq_tot⁰, - ᶜts⁰, - ) - # First order approximation: Use environmental mean fields. @. ᶜlinear_buoygrad = buoyancy_gradients( BuoyGradMean(), @@ -346,3 +341,114 @@ function set_prognostic_edmf_precomputed_quantities_closures!(Y, p, t) return nothing end + +""" + set_prognostic_edmf_precomputed_quantities_precipitation!(Y, p, precip_model) + +Updates the precomputed quantities stored in `p` for edmfx precipitation sources. +""" +function set_prognostic_edmf_precomputed_quantities_precipitation!( + Y, + p, + ::NoPrecipitation, +) + return nothing +end +NVTX.@annotate function set_prognostic_edmf_precomputed_quantities_precipitation!( + Y, + p, + ::Microphysics0Moment, +) + @assert !(p.atmos.moisture_model isa DryModel) + + (; params, dt) = p + thp = CAP.thermodynamics_params(params) + cmp = CAP.microphysics_params(params) + (; ᶜts⁰, ᶜq_tot⁰, ᶜtsʲs, ᶜS_q_totʲs, ᶜS_q_tot⁰) = p.precomputed + + # Sources from the updrafts + n = n_mass_flux_subdomains(p.atmos.turbconv_model) + for j in 1:n + @. ᶜS_q_totʲs.:($$j) = q_tot_precipitation_sources( + Microphysics0Moment(), + thp, + cmp, + dt, + Y.c.sgsʲs.:($$j).q_tot, + ᶜtsʲs.:($$j), + ) + end + # sources from the environment + @. ᶜS_q_tot⁰ = q_tot_precipitation_sources( + Microphysics0Moment(), + thp, + cmp, + dt, + ᶜq_tot⁰, + ᶜts⁰, + ) + return nothing +end +NVTX.@annotate function set_prognostic_edmf_precomputed_quantities_precipitation!( + Y, + p, + ::Microphysics1Moment, +) + @assert !(p.atmos.moisture_model isa DryModel) + + (; params, dt) = p + (; ᶜΦ,) = p.core + thp = CAP.thermodynamics_params(params) + cmp = CAP.microphysics_params(params) + + (; ᶜSeₜᵖʲs, ᶜSqₜᵖʲs, ᶜSqᵣᵖʲs, ᶜSqₛᵖʲs, ᶜρʲs, ᶜtsʲs) = p.precomputed + (; ᶜSeₜᵖ⁰, ᶜSqₜᵖ⁰, ᶜSqᵣᵖ⁰, ᶜSqₛᵖ⁰, ᶜρ⁰, ᶜts⁰) = p.precomputed + (; ᶜqᵣ, ᶜqₛ) = p.precomputed + + # TODO - can I re-use them between js and env? + ᶜSᵖ = p.scratch.ᶜtemp_scalar + ᶜSᵖ_snow = p.scratch.ᶜtemp_scalar_2 + + n = n_mass_flux_subdomains(p.atmos.turbconv_model) + + Fields.bycolumn(axes(Y.c.ρ)) do colidx + # Sources from the updrafts + for j in 1:n + compute_precipitation_sources!( + ᶜSᵖ[colidx], + ᶜSᵖ_snow[colidx], + ᶜSqₜᵖʲs.:($j)[colidx], + ᶜSqᵣᵖʲs.:($j)[colidx], + ᶜSqₛᵖʲs.:($j)[colidx], + ᶜSeₜᵖʲs.:($j)[colidx], + ᶜρʲs.:($j)[colidx], + ᶜqᵣ[colidx], + ᶜqₛ[colidx], + ᶜtsʲs.:($j)[colidx], + ᶜΦ[colidx], + dt, + cmp, + thp, + ) + end + + # Sources from the environment + compute_precipitation_sources!( + ᶜSᵖ[colidx], + ᶜSᵖ_snow[colidx], + ᶜSqₜᵖ⁰[colidx], + ᶜSqᵣᵖ⁰[colidx], + ᶜSqₛᵖ⁰[colidx], + ᶜSeₜᵖ⁰[colidx], + ᶜρ⁰[colidx], + ᶜqᵣ[colidx], + ᶜqₛ[colidx], + ᶜts⁰[colidx], + ᶜΦ[colidx], + dt, + cmp, + thp, + ) + end + return nothing +end diff --git a/src/cache/tracer_cache.jl b/src/cache/tracer_cache.jl new file mode 100644 index 00000000000..4ac582f7a04 --- /dev/null +++ b/src/cache/tracer_cache.jl @@ -0,0 +1,42 @@ +using ClimaUtilities.ClimaArtifacts +import ClimaUtilities.TimeVaryingInputs: TimeVaryingInput + +function tracer_cache(Y, atmos, prescribed_aerosol_names, start_date) + prescribed_aerosol_timevaryinginputs = (;) + prescribed_aerosol_fields = (;) + + # Take the aerosol2005/aero_2005.nc file, read the keys with names matching + # the ones passed in the prescribed_aerosol_names option, and create a + # NamedTuple that uses the same keys and has as values the TimeVaryingInputs + # for those variables. + # + # The keys in the aero_2005.nc file have to match the ones passed with the + # configuration. The file also has to be defined on the globe and provide + # time series of lon-lat-z data. + if !isempty(prescribed_aerosol_names) + prescribed_aerosol_names_as_symbols = Symbol.(prescribed_aerosol_names) + target_space = axes(Y.c) + timevaryinginputs = [ + TimeVaryingInput( + joinpath( + @clima_artifact("aerosol2005", ClimaComms.context(Y.c)), + "aero_2005.nc", + ), + name, + target_space; + reference_date = start_date, + regridder_type = :InterpolationsRegridder, + ) for name in prescribed_aerosol_names + ] + empty_fields = + [zero(Y.c.ρ) for _ in prescribed_aerosol_names_as_symbols] + + prescribed_aerosol_timevaryinginputs = + (; zip(prescribed_aerosol_names_as_symbols, timevaryinginputs)...) + + # We add empty Fields here. Fields are updated in the radiation callback + prescribed_aerosol_fields = + (; zip(prescribed_aerosol_names_as_symbols, empty_fields)...) + end + return (; prescribed_aerosol_fields, prescribed_aerosol_timevaryinginputs) +end diff --git a/src/callbacks/callbacks.jl b/src/callbacks/callbacks.jl index 463f905ad93..3a0c92368c1 100644 --- a/src/callbacks/callbacks.jl +++ b/src/callbacks/callbacks.jl @@ -14,6 +14,8 @@ using Dates using Insolation: instantaneous_zenith_angle import ClimaCore.Fields: ColumnField +import ClimaUtilities.TimeVaryingInputs: evaluate! + include("callback_helpers.jl") function flux_accumulation!(integrator) @@ -61,6 +63,12 @@ NVTX.@annotate function rrtmgp_model_callback!(integrator) (; idealized_insolation, idealized_h2o, idealized_clouds) = p.radiation (; ᶠradiation_flux, radiation_model) = p.radiation + # If we have prescribed aerosols, we need to update them + for (key, tv) in pairs(p.tracers.prescribed_aerosol_timevaryinginputs) + field = getfield(p.tracers.prescribed_aerosol_fields, key) + evaluate!(field, tv, t) + end + FT = Spaces.undertype(axes(Y.c)) thermo_params = CAP.thermodynamics_params(params) diff --git a/src/diagnostics/Diagnostics.jl b/src/diagnostics/Diagnostics.jl index 51d36696085..d3807b07cdc 100644 --- a/src/diagnostics/Diagnostics.jl +++ b/src/diagnostics/Diagnostics.jl @@ -29,6 +29,10 @@ import ..Microphysics1Moment # radiation import ClimaAtmos.RRTMGPInterface as RRTMGPI +# vert_diff +import ..VerticalDiffusion +import ..FriersonDiffusion + # turbconv_model import ..PrognosticEDMFX import ..DiagnosticEDMFX diff --git a/src/diagnostics/edmfx_diagnostics.jl b/src/diagnostics/edmfx_diagnostics.jl index abeb8c30ce5..a7eb2f2d0df 100644 --- a/src/diagnostics/edmfx_diagnostics.jl +++ b/src/diagnostics/edmfx_diagnostics.jl @@ -412,6 +412,66 @@ add_diagnostic_variable!( compute! = compute_cliup!, ) +### +# Entrainment (3d) +### +compute_entr!(out, state, cache, time) = + compute_entr!(out, state, cache, time, cache.atmos.turbconv_model) +compute_entr!(_, _, _, _, turbconv_model::T) where {T} = + error_diagnostic_variable("entr", turbconv_model) + +function compute_entr!( + out, + state, + cache, + time, + turbconv_model::Union{PrognosticEDMFX, DiagnosticEDMFX}, +) + if isnothing(out) + return copy(cache.precomputed.ᶜentrʲs.:1) + else + out .= cache.precomputed.ᶜentrʲs.:1 + end +end + +add_diagnostic_variable!( + short_name = "entr", + long_name = "Entrainment rate", + units = "s^-1", + comments = "Entrainment rate of the first updraft", + compute! = compute_entr!, +) + +### +# Detrainment (3d) +### +compute_detr!(out, state, cache, time) = + compute_detr!(out, state, cache, time, cache.atmos.turbconv_model) +compute_detr!(_, _, _, _, turbconv_model::T) where {T} = + error_diagnostic_variable("detr", turbconv_model) + +function compute_detr!( + out, + state, + cache, + time, + turbconv_model::Union{PrognosticEDMFX, DiagnosticEDMFX}, +) + if isnothing(out) + return copy(cache.precomputed.ᶜdetrʲs.:1) + else + out .= cache.precomputed.ᶜdetrʲs.:1 + end +end + +add_diagnostic_variable!( + short_name = "detr", + long_name = "Detrainment rate", + units = "s^-1", + comments = "Detrainment rate of the first updraft", + compute! = compute_detr!, +) + ### # Environment area fraction (3d) ### @@ -821,3 +881,171 @@ add_diagnostic_variable!( units = "m^2 s^-2", compute! = compute_tke!, ) + +### +# Buoyancy gradient (3d) +### +compute_bgrad!(out, state, cache, time) = + compute_bgrad!(out, state, cache, time, cache.atmos.turbconv_model) +compute_bgrad!(_, _, _, _, turbconv_model::T) where {T} = + error_diagnostic_variable("bgrad", turbconv_model) + +function compute_bgrad!( + out, + state, + cache, + time, + turbconv_model::Union{PrognosticEDMFX, DiagnosticEDMFX}, +) + if isnothing(out) + return copy(cache.precomputed.ᶜlinear_buoygrad) + else + out .= cache.precomputed.ᶜlinear_buoygrad + end +end + +add_diagnostic_variable!( + short_name = "bgrad", + long_name = "Linearized Buoyancy Gradient", + units = "s^-2", + compute! = compute_bgrad!, +) + +### +# Strain rate magnitude (3d) +### +compute_strain!(out, state, cache, time) = + compute_strain!(out, state, cache, time, cache.atmos.turbconv_model) +compute_strain!(_, _, _, _, turbconv_model::T) where {T} = + error_diagnostic_variable("strain", turbconv_model) + +function compute_strain!( + out, + state, + cache, + time, + turbconv_model::Union{PrognosticEDMFX, DiagnosticEDMFX}, +) + if isnothing(out) + return copy(cache.precomputed.ᶜstrain_rate_norm) + else + out .= cache.precomputed.ᶜstrain_rate_norm + end +end + +add_diagnostic_variable!( + short_name = "strain", + long_name = "String Rate Magnitude", + units = "s^-2", + compute! = compute_strain!, +) + +### +# Diffusivity of heat (3d) +### +compute_edt!(out, state, cache, time) = compute_edt!( + out, + state, + cache, + time, + cache.atmos.vert_diff, + cache.atmos.turbconv_model, +) +compute_edt!(_, _, _, _, vert_diff::T1, turbconv_model::T2) where {T1, T2} = + error_diagnostic_variable( + "Can only compute heat diffusivity with vertical diffusion or EDMFX", + ) + +function compute_edt!( + out, + state, + cache, + time, + vert_diff::Union{VerticalDiffusion, FriersonDiffusion}, + turbconv_model::Nothing, +) + if isnothing(out) + return copy(cache.precomputed.ᶜK_h) + else + out .= cache.precomputed.ᶜK_h + end +end + +function compute_edt!( + out, + state, + cache, + time, + vert_diff::Nothing, + turbconv_model::Union{PrognosticEDMFX, DiagnosticEDMFX}, +) + if isnothing(out) + return copy(cache.precomputed.ᶜK_h) + else + out .= cache.precomputed.ᶜK_h + end +end + +add_diagnostic_variable!( + short_name = "edt", + long_name = "Eddy Diffusivity Coefficient for Temperature", + standard_name = "atmosphere_heat_diffusivity", + units = "m^2 s^-1", + comments = "Vertical diffusion coefficient for temperature due to parameterized eddies", + compute! = compute_edt!, +) + +### +# Diffusivity of momentum (3d) +### +compute_evu!(out, state, cache, time) = compute_evu!( + out, + state, + cache, + time, + cache.atmos.vert_diff, + cache.atmos.turbconv_model, +) +compute_evu!(_, _, _, _, vert_diff::T1, turbconv_model::T2) where {T1, T2} = + error_diagnostic_variable( + "Can only compute momentum diffusivity with vertical diffusion or EDMFX", + ) + +function compute_evu!( + out, + state, + cache, + time, + vert_diff::Union{VerticalDiffusion, FriersonDiffusion}, + turbconv_model::Nothing, +) + if isnothing(out) + return copy(cache.precomputed.ᶜK_u) + else + out .= cache.precomputed.ᶜK_u + end +end + +function compute_evu!( + out, + state, + cache, + time, + vert_diff::Nothing, + turbconv_model::Union{PrognosticEDMFX, DiagnosticEDMFX}, +) + if isnothing(out) + return copy(cache.precomputed.ᶜK_u) + else + out .= cache.precomputed.ᶜK_u + end +end + +add_diagnostic_variable!( + short_name = "evu", + long_name = "Eddy Viscosity Coefficient for Momentum", + standard_name = "atmosphere_momentum_diffusivity", + units = "m^2 s^-1", + comments = "Vertical diffusion coefficient for momentum due to parameterized eddies", + compute! = compute_evu!, +) diff --git a/src/diagnostics/netcdf_writer.jl b/src/diagnostics/netcdf_writer.jl index 3f8d08869b4..9b7952153f6 100644 --- a/src/diagnostics/netcdf_writer.jl +++ b/src/diagnostics/netcdf_writer.jl @@ -527,7 +527,7 @@ function NetCDFWriter(; cspace, num_points = (180, 90, 50), disable_vertical_interpolation = false, - compression_level = 9, + compression_level = 0, ) space = cspace horizontal_space = Spaces.horizontal_space(space) diff --git a/src/parameterized_tendencies/microphysics/microphysics_wrappers.jl b/src/parameterized_tendencies/microphysics/microphysics_wrappers.jl index c2d85a95902..ca1559f2431 100644 --- a/src/parameterized_tendencies/microphysics/microphysics_wrappers.jl +++ b/src/parameterized_tendencies/microphysics/microphysics_wrappers.jl @@ -3,64 +3,273 @@ import Thermodynamics as TD import CloudMicrophysics.Microphysics0M as CM0 +# define some aliases and functions to make the code more readable +const Iₗ = TD.internal_energy_liquid +const Iᵢ = TD.internal_energy_ice +const Lf = TD.latent_heat_fusion +const Tₐ = TD.air_temperature +const PP = TD.PhasePartition +const qᵥ = TD.vapor_specific_humidity +qₗ(thp, ts) = TD.PhasePartition(thp, ts).liq +qᵢ(thp, ts) = TD.PhasePartition(thp, ts).ice + +# helper function to limit the tendency +function limit(q::FT, dt::FT) where {FT} + return q / dt / 5 +end + """ - q_tot_precipitation_sources(precip_model, t_prs, m_prs, dt, q_tot, ts) + q_tot_precipitation_sources(precip_model, thp, cmp, dt, qₜ, ts) - precip_model - a type for precipitation scheme choice - - t_prs, m_prs - stricts with thermodynamic and microphysics parameters + - thp, cmp - structs with thermodynamic and microphysics parameters - dt - model time step - - q_tot - total water specific humidity - - ts - thermodynamic state (see td package for details) + - qₜ - total water specific humidity + - ts - thermodynamic state (see Thermodynamics.jl package for details) -Returns the q_tot source term due to precipitation formation +Returns the qₜ source term due to precipitation formation defined as Δm_tot / (m_dry + m_tot) """ function q_tot_precipitation_sources( ::NoPrecipitation, - t_prs, - m_prs, + thp, + cmp, dt, - q_tot::FT, + qₜ::FT, ts, ) where {FT <: Real} return FT(0) end function q_tot_precipitation_sources( ::Microphysics0Moment, - t_prs, - m_prs, + thp, + cmp, dt, - q_tot::FT, + qₜ::FT, ts, ) where {FT <: Real} - return -min( - max(q_tot, 0) / dt, - -CM0.remove_precipitation( - m_prs, - TD.PhasePartition(t_prs, ts), - TD.q_vap_saturation(t_prs, ts), - ), - ) + return -min(max(qₜ, 0) / dt, -CM0.remove_precipitation(cmp, PP(thp, ts))) end """ - e_tot_0M_precipitation_sources_helper(t_prs, ts, Φ) + e_tot_0M_precipitation_sources_helper(thp, ts, Φ) - - t_prs - set with thermodynamics parameters + - thp - set with thermodynamics parameters - ts - thermodynamic state (see td package for details) - Φ - geopotential Returns the total energy source term multiplier from precipitation formation +for the 0-moment scheme """ function e_tot_0M_precipitation_sources_helper( - t_prs, + thp, ts, Φ::FT, ) where {FT <: Real} - λ::FT = TD.liquid_fraction(t_prs, ts) - I_l::FT = TD.internal_energy_liquid(t_prs, ts) - I_i::FT = TD.internal_energy_ice(t_prs, ts) + λ::FT = TD.liquid_fraction(thp, ts) + + return λ * Iₗ(thp, ts) + (1 - λ) * Iᵢ(thp, ts) + Φ +end + +""" + compute_precipitation_sources!(Sᵖ, Sᵖ_snow, Sqₜᵖ, Sqᵣᵖ, Sqₛᵖ, Seₜᵖ, ρ, qᵣ, qₛ, ts, Φ, dt, mp, thp) + + - Sᵖ, Sᵖ_snow - temporary containters to help compute precipitation source terms + - Sqₜᵖ, Sqᵣᵖ, Sqₛᵖ, Seₜᵖ - cached storage for precipitation source terms + - ρ - air density + - qᵣ, qₛ - precipitation (rain and snow) specific humidity + - ts - thermodynamic state (see td package for details) + - Φ - geopotential + - dt - model time step + - thp, cmp - structs with thermodynamic and microphysics parameters - return λ * I_l + (1 - λ) * I_i + Φ +Returns the q source terms due to precipitation formation from the 1-moment scheme. +The specific humidity source terms are defined as defined as Δmᵢ / (m_dry + m_tot) +where i stands for total, rain or snow. +Also returns the total energy source term due to the microphysics processes. +""" +function compute_precipitation_sources!( + Sᵖ, + Sᵖ_snow, + Sqₜᵖ, + Sqᵣᵖ, + Sqₛᵖ, + Seₜᵖ, + ρ, + qᵣ, + qₛ, + ts, + Φ, + dt, + mp, + thp, +) + FT = eltype(Sqₜᵖ) + @. Sqₜᵖ = FT(0) + @. Sqᵣᵖ = FT(0) + @. Sqₛᵖ = FT(0) + @. Seₜᵖ = FT(0) + + #! format: off + # rain autoconversion: q_liq -> q_rain + @. Sᵖ = min( + limit(qₗ(thp, ts), dt), + CM1.conv_q_liq_to_q_rai(mp.pr.acnv1M, qₗ(thp, ts), true), + ) + @. Sqₜᵖ -= Sᵖ + @. Sqᵣᵖ += Sᵖ + @. Seₜᵖ -= Sᵖ * (Iₗ(thp, ts) + Φ) + + # snow autoconversion assuming no supersaturation: q_ice -> q_snow + @. Sᵖ = min( + limit(qᵢ(thp, ts), dt), + CM1.conv_q_ice_to_q_sno_no_supersat(mp.ps.acnv1M, qᵢ(thp, ts), true), + ) + @. Sqₜᵖ -= Sᵖ + @. Sqₛᵖ += Sᵖ + @. Seₜᵖ -= Sᵖ * (Iᵢ(thp, ts) + Φ) + + # accretion: q_liq + q_rain -> q_rain + @. Sᵖ = min( + limit(qₗ(thp, ts), dt), + CM1.accretion(mp.cl, mp.pr, mp.tv.rain, mp.ce, qₗ(thp, ts), qᵣ, ρ), + ) + @. Sqₜᵖ -= Sᵖ + @. Sqᵣᵖ += Sᵖ + @. Seₜᵖ -= Sᵖ * (Iₗ(thp, ts) + Φ) + + # accretion: q_ice + q_snow -> q_snow + @. Sᵖ = min( + limit(qᵢ(thp, ts), dt), + CM1.accretion(mp.ci, mp.ps, mp.tv.snow, mp.ce, qᵢ(thp, ts), qₛ, ρ), + ) + @. Sqₜᵖ -= Sᵖ + @. Sqₛᵖ += Sᵖ + @. Seₜᵖ -= Sᵖ * (Iᵢ(thp, ts) + Φ) + + # accretion: q_liq + q_sno -> q_sno or q_rai + # sink of cloud water via accretion cloud water + snow + @. Sᵖ = min( + limit(qₗ(thp, ts), dt), + CM1.accretion(mp.cl, mp.ps, mp.tv.snow, mp.ce, qₗ(thp, ts), qₛ, ρ), + ) + # if T < T_freeze cloud droplets freeze to become snow + # else the snow melts and both cloud water and snow become rain + α(thp, ts) = TD.Parameters.cv_l(thp) / Lf(thp, ts) * (Tₐ(thp, ts) - mp.ps.T_freeze) + @. Sᵖ_snow = ifelse( + Tₐ(thp, ts) < mp.ps.T_freeze, + Sᵖ, + FT(-1) * min(Sᵖ * α(thp, ts), limit(qₛ, dt)), + ) + @. Sqₛᵖ += Sᵖ_snow + @. Sqₜᵖ -= Sᵖ + @. Sqᵣᵖ += ifelse(Tₐ(thp, ts) < mp.ps.T_freeze, FT(0), Sᵖ - Sᵖ_snow) + @. Seₜᵖ -= ifelse( + Tₐ(thp, ts) < mp.ps.T_freeze, + Sᵖ * (Iᵢ(thp, ts) + Φ), + Sᵖ * (Iₗ(thp, ts) + Φ) - Sᵖ_snow * (Iₗ(thp, ts) - Iᵢ(thp, ts)), + ) + + # accretion: q_ice + q_rai -> q_sno + @. Sᵖ = min( + limit(qᵢ(thp, ts), dt), + CM1.accretion(mp.ci, mp.pr, mp.tv.rain, mp.ce, qᵢ(thp, ts), qᵣ, ρ), + ) + @. Sqₜᵖ -= Sᵖ + @. Sqₛᵖ += Sᵖ + @. Seₜᵖ -= Sᵖ * (Iᵢ(thp, ts) + Φ) + # sink of rain via accretion cloud ice - rain + @. Sᵖ = min( + limit(qᵣ, dt), + CM1.accretion_rain_sink(mp.pr, mp.ci, mp.tv.rain, mp.ce, qᵢ(thp, ts), qᵣ, ρ), + ) + @. Sqᵣᵖ -= Sᵖ + @. Sqₛᵖ += Sᵖ + @. Seₜᵖ += Sᵖ * Lf(thp, ts) + + # accretion: q_rai + q_sno -> q_rai or q_sno + @. Sᵖ = ifelse( + Tₐ(thp, ts) < mp.ps.T_freeze, + min( + limit(qᵣ, dt), + CM1.accretion_snow_rain(mp.ps, mp.pr, mp.tv.rain, mp.tv.snow, mp.ce, qₛ, qᵣ, ρ), + ), + -min( + limit(qₛ, dt), + CM1.accretion_snow_rain(mp.pr, mp.ps, mp.tv.snow, mp.tv.rain, mp.ce, qᵣ, qₛ, ρ), + ), + ) + @. Sqₛᵖ += Sᵖ + @. Sqᵣᵖ -= Sᵖ + @. Seₜᵖ += Sᵖ * Lf(thp, ts) + #! format: on +end + +""" + compute_precipitation_sinks!(Sᵖ, Sqₜᵖ, Sqᵣᵖ, Sqₛᵖ, Seₜᵖ, ρ, qᵣ, qₛ, ts, Φ, dt, mp, thp) + + - Sᵖ - a temporary containter to help compute precipitation source terms + - Sqₜᵖ, Sqᵣᵖ, Sqₛᵖ, Seₜᵖ - cached storage for precipitation source terms + - ρ - air density + - qᵣ, qₛ - precipitation (rain and snow) specific humidities + - ts - thermodynamic state (see td package for details) + - Φ - geopotential + - dt - model time step + - thp, cmp - structs with thermodynamic and microphysics parameters + +Returns the q source terms due to precipitation sinks from the 1-moment scheme. +The specific humidity source terms are defined as defined as Δmᵢ / (m_dry + m_tot) +where i stands for total, rain or snow. +Also returns the total energy source term due to the microphysics processes. +""" +function compute_precipitation_sinks!( + Sᵖ, + Sqₜᵖ, + Sqᵣᵖ, + Sqₛᵖ, + Seₜᵖ, + ρ, + qᵣ, + qₛ, + ts, + Φ, + dt, + mp, + thp, +) + FT = eltype(Sqₜᵖ) + sps = (mp.ps, mp.tv.snow, mp.aps, thp) + rps = (mp.pr, mp.tv.rain, mp.aps, thp) + + #! format: off + # evaporation: q_rai -> q_vap + @. Sᵖ = -min( + limit(qᵣ, dt), + -CM1.evaporation_sublimation(rps..., PP(thp, ts), qᵣ, ρ, Tₐ(thp, ts)), + ) + @. Sqₜᵖ -= Sᵖ + @. Sqᵣᵖ += Sᵖ + @. Seₜᵖ -= Sᵖ * (Iₗ(thp, ts) + Φ) + + # melting: q_sno -> q_rai + @. Sᵖ = min( + limit(qₛ, dt), + CM1.snow_melt(sps..., qₛ, ρ, Tₐ(thp, ts)), + ) + @. Sqᵣᵖ += Sᵖ + @. Sqₛᵖ -= Sᵖ + @. Seₜᵖ -= Sᵖ * Lf(thp, ts) + + # deposition/sublimation: q_vap <-> q_sno + @. Sᵖ = CM1.evaporation_sublimation(sps..., PP(thp, ts), qₛ, ρ, Tₐ(thp, ts)) + @. Sᵖ = ifelse( + Sᵖ > FT(0), + min(limit(qᵥ(thp, ts), dt), Sᵖ), + -min(limit(qₛ, dt), FT(-1) * Sᵖ), + ) + @. Sqₜᵖ -= Sᵖ + @. Sqₛᵖ += Sᵖ + @. Seₜᵖ -= Sᵖ * (Iᵢ(thp, ts) + Φ) + #! format: on end diff --git a/src/parameterized_tendencies/microphysics/precipitation.jl b/src/parameterized_tendencies/microphysics/precipitation.jl index 0e84ad11e95..9003dc139a8 100644 --- a/src/parameterized_tendencies/microphysics/precipitation.jl +++ b/src/parameterized_tendencies/microphysics/precipitation.jl @@ -18,10 +18,10 @@ precipitation_cache(Y, atmos::AtmosModel) = ##### precipitation_cache(Y, precip_model::NoPrecipitation) = (;) -precipitation_tendency!(Yₜ, Y, p, t, colidx, ::NoPrecipitation) = nothing +precipitation_tendency!(Yₜ, Y, p, t, colidx, ::NoPrecipitation, _) = nothing ##### -##### 0-Moment without sgs scheme or with diagnostic edmf +##### 0-Moment without sgs scheme or with diagnostic/prognostic edmf ##### function precipitation_cache(Y, precip_model::Microphysics0Moment) @@ -40,16 +40,19 @@ function precipitation_cache(Y, precip_model::Microphysics0Moment) end function compute_precipitation_cache!(Y, p, colidx, ::Microphysics0Moment, _) - (; params) = p + (; params, dt) = p (; ᶜts) = p.precomputed (; ᶜS_ρq_tot) = p.precipitation cm_params = CAP.microphysics_params(params) thermo_params = CAP.thermodynamics_params(params) - #TODO missing limiting by q_tot/Δt @. ᶜS_ρq_tot[colidx] = - Y.c.ρ[colidx] * CM.Microphysics0M.remove_precipitation( + Y.c.ρ[colidx] * q_tot_precipitation_sources( + Microphysics0Moment(), + thermo_params, cm_params, - TD.PhasePartition(thermo_params, ᶜts[colidx]), + dt, + Y.c.ρq_tot[colidx] / Y.c.ρ[colidx], + ᶜts[colidx], ) end @@ -99,6 +102,7 @@ function precipitation_tendency!( t, colidx, precip_model::Microphysics0Moment, + _, ) (; ᶜT, ᶜΦ) = p.core (; ᶜts,) = p.precomputed # assume ᶜts has been updated @@ -185,268 +189,100 @@ function precipitation_cache(Y, precip_model::Microphysics1Moment) ) end -function qₚ(ρqₚ::FT, ρ::FT) where {FT} - return max(FT(0), ρqₚ / ρ) -end +function compute_precipitation_cache!(Y, p, colidx, ::Microphysics1Moment, _) + FT = Spaces.undertype(axes(Y.c)) + (; dt) = p + (; ᶜts, ᶜqᵣ, ᶜqₛ) = p.precomputed + (; ᶜΦ) = p.core + (; ᶜSqₜᵖ, ᶜSqᵣᵖ, ᶜSqₛᵖ, ᶜSeₜᵖ) = p.precipitation + ᶜSᵖ = p.scratch.ᶜtemp_scalar + ᶜSᵖ_snow = p.scratch.ᶜtemp_scalar_2 -function limit(q::FT, dt::FT) where {FT} - return q / dt / 5 + # get thermodynamics and 1-moment microphysics params + (; params) = p + cmp = CAP.microphysics_params(params) + thp = CAP.thermodynamics_params(params) + + # compute precipitation source terms on the grid mean + compute_precipitation_sources!( + ᶜSᵖ[colidx], + ᶜSᵖ_snow[colidx], + ᶜSqₜᵖ[colidx], + ᶜSqᵣᵖ[colidx], + ᶜSqₛᵖ[colidx], + ᶜSeₜᵖ[colidx], + Y.c.ρ[colidx], + ᶜqᵣ[colidx], + ᶜqₛ[colidx], + ᶜts[colidx], + ᶜΦ[colidx], + dt, + cmp, + thp, + ) + + # compute precipitation sinks + # (For now only done on the grid mean) + compute_precipitation_sinks!( + ᶜSᵖ[colidx], + ᶜSqₜᵖ[colidx], + ᶜSqᵣᵖ[colidx], + ᶜSqₛᵖ[colidx], + ᶜSeₜᵖ[colidx], + Y.c.ρ[colidx], + ᶜqᵣ[colidx], + ᶜqₛ[colidx], + ᶜts[colidx], + ᶜΦ[colidx], + dt, + cmp, + thp, + ) end -function compute_precipitation_cache!(Y, p, colidx, ::Microphysics1Moment, _) +function compute_precipitation_cache!( + Y, + p, + colidx, + ::Microphysics1Moment, + ::PrognosticEDMFX, +) FT = Spaces.undertype(axes(Y.c)) - (; params) = p (; dt) = p - (; ᶜts) = p.precomputed + (; ᶜts, ᶜqᵣ, ᶜqₛ) = p.precomputed (; ᶜΦ) = p.core + # Grid mean precipitation sinks (; ᶜSqₜᵖ, ᶜSqᵣᵖ, ᶜSqₛᵖ, ᶜSeₜᵖ) = p.precipitation - ᶜz = Fields.coordinate_field(Y.c).z - + # additional scratch storage ᶜSᵖ = p.scratch.ᶜtemp_scalar # get thermodynamics and 1-moment microphysics params + (; params) = p cmp = CAP.microphysics_params(params) thp = CAP.thermodynamics_params(params) - # some helper functions to make the code more readable - Iₗ(ts) = TD.internal_energy_liquid(thp, ts) - Iᵢ(ts) = TD.internal_energy_ice(thp, ts) - qₗ(ts) = TD.PhasePartition(thp, ts).liq - qᵢ(ts) = TD.PhasePartition(thp, ts).ice - qᵥ(ts) = TD.vapor_specific_humidity(thp, ts) - Lf(ts) = TD.latent_heat_fusion(thp, ts) - Tₐ(ts) = TD.air_temperature(thp, ts) - α(ts) = TD.Parameters.cv_l(thp) / Lf(ts) * (Tₐ(ts) - cmp.ps.T_freeze) - - # zero out the source terms + # zero out the helper source terms @. ᶜSqₜᵖ[colidx] = FT(0) - @. ᶜSeₜᵖ[colidx] = FT(0) @. ᶜSqᵣᵖ[colidx] = FT(0) @. ᶜSqₛᵖ[colidx] = FT(0) - - # All the tendencies are individually limited - # by the available condensate (q_ / dt). - - # rain autoconversion: q_liq -> q_rain - @. ᶜSᵖ[colidx] = min( - limit(qₗ(ᶜts[colidx]), dt), - CM1.conv_q_liq_to_q_rai(cmp.pr.acnv1M, qₗ(ᶜts[colidx]), true), - ) - @. ᶜSqₜᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSqᵣᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] -= ᶜSᵖ[colidx] * (Iₗ(ᶜts[colidx]) + ᶜΦ[colidx]) - - # snow autoconversion assuming no supersaturation: q_ice -> q_snow - @. ᶜSᵖ[colidx] = min( - limit(qᵢ(ᶜts[colidx]), dt), - CM1.conv_q_ice_to_q_sno_no_supersat( - cmp.ps.acnv1M, - qᵢ(ᶜts[colidx]), - true, - ), - ) - @. ᶜSqₜᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSqₛᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] -= ᶜSᵖ[colidx] * (Iᵢ(ᶜts[colidx]) + ᶜΦ[colidx]) - - # accretion: q_liq + q_rain -> q_rain - @. ᶜSᵖ[colidx] = min( - limit(qₗ(ᶜts[colidx]), dt), - CM1.accretion( - cmp.cl, - cmp.pr, - cmp.tv.rain, - cmp.ce, - qₗ(ᶜts[colidx]), - qₚ(Y.c.ρq_rai[colidx], Y.c.ρ[colidx]), - Y.c.ρ[colidx], - ), - ) - @. ᶜSqₜᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSqᵣᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] -= ᶜSᵖ[colidx] * (Iₗ(ᶜts[colidx]) + ᶜΦ[colidx]) - - # accretion: q_ice + q_snow -> q_snow - @. ᶜSᵖ[colidx] = min( - limit(qᵢ(ᶜts[colidx]), dt), - CM1.accretion( - cmp.ci, - cmp.ps, - cmp.tv.snow, - cmp.ce, - qᵢ(ᶜts[colidx]), - qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), - Y.c.ρ[colidx], - ), - ) - @. ᶜSqₜᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSqₛᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] -= ᶜSᵖ[colidx] * (Iᵢ(ᶜts[colidx]) + ᶜΦ[colidx]) - - # accretion: q_liq + q_sno -> q_sno or q_rai - # sink of cloud water via accretion cloud water + snow - @. ᶜSᵖ[colidx] = min( - limit(qₗ(ᶜts[colidx]), dt), - CM1.accretion( - cmp.cl, - cmp.ps, - cmp.tv.snow, - cmp.ce, - qₗ(ᶜts[colidx]), - qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), - Y.c.ρ[colidx], - ), - ) - # if T < T_freeze cloud droplets freeze to become snow - # else the snow melts and both cloud water and snow become rain - ᶜSᵖ_snow = p.scratch.ᶜtemp_scalar_2 - @. ᶜSᵖ_snow[colidx] = ifelse( - Tₐ(ᶜts[colidx]) < cmp.ps.T_freeze, + @. ᶜSeₜᵖ[colidx] = FT(0) + # compute precipitation sinks + # (For now only done on the grid mean) + compute_precipitation_sinks!( ᶜSᵖ[colidx], - FT(-1) * min( - ᶜSᵖ[colidx] * α(ᶜts[colidx]), - limit(qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), dt), - ), - ) - @. ᶜSqₛᵖ[colidx] += ᶜSᵖ_snow[colidx] - @. ᶜSqₜᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSqᵣᵖ[colidx] += ifelse( - Tₐ(ᶜts[colidx]) < cmp.ps.T_freeze, - FT(0), - ᶜSᵖ[colidx] - ᶜSᵖ_snow[colidx], - ) - @. ᶜSeₜᵖ[colidx] -= ifelse( - Tₐ(ᶜts[colidx]) < cmp.ps.T_freeze, - ᶜSᵖ[colidx] * (Iᵢ(ᶜts[colidx]) + ᶜΦ[colidx]), - ᶜSᵖ[colidx] * (Iₗ(ᶜts[colidx]) + ᶜΦ[colidx]) - - ᶜSᵖ_snow[colidx] * (Iₗ(ᶜts[colidx]) - Iᵢ(ᶜts[colidx])), - ) - - # accretion: q_ice + q_rai -> q_sno - @. ᶜSᵖ[colidx] = min( - limit(qᵢ(ᶜts[colidx]), dt), - CM1.accretion( - cmp.ci, - cmp.pr, - cmp.tv.rain, - cmp.ce, - qᵢ(ᶜts[colidx]), - qₚ(Y.c.ρq_rai[colidx], Y.c.ρ[colidx]), - Y.c.ρ[colidx], - ), - ) - @. ᶜSqₜᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSqₛᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] -= ᶜSᵖ[colidx] * (Iᵢ(ᶜts[colidx]) + ᶜΦ[colidx]) - # sink of rain via accretion cloud ice - rain - @. ᶜSᵖ[colidx] = min( - limit(qₚ(Y.c.ρq_rai[colidx], Y.c.ρ[colidx]), dt), - CM1.accretion_rain_sink( - cmp.pr, - cmp.ci, - cmp.tv.rain, - cmp.ce, - qᵢ(ᶜts[colidx]), - qₚ(Y.c.ρq_rai[colidx], Y.c.ρ[colidx]), - Y.c.ρ[colidx], - ), - ) - @. ᶜSqᵣᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSqₛᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] += ᶜSᵖ[colidx] * Lf(ᶜts[colidx]) - - # accretion: q_rai + q_sno -> q_rai or q_sno - @. ᶜSᵖ[colidx] = ifelse( - Tₐ(ᶜts[colidx]) < cmp.ps.T_freeze, - min( - limit(qₚ(Y.c.ρq_rai[colidx], Y.c.ρ[colidx]), dt), - CM1.accretion_snow_rain( - cmp.ps, - cmp.pr, - cmp.tv.rain, - cmp.tv.snow, - cmp.ce, - qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), - qₚ(Y.c.ρq_rai[colidx], Y.c.ρ[colidx]), - Y.c.ρ[colidx], - ), - ), - -min( - limit(qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), dt), - CM1.accretion_snow_rain( - cmp.pr, - cmp.ps, - cmp.tv.snow, - cmp.tv.rain, - cmp.ce, - qₚ(Y.c.ρq_rai[colidx], Y.c.ρ[colidx]), - qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), - Y.c.ρ[colidx], - ), - ), - ) - @. ᶜSqₛᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSqᵣᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] += ᶜSᵖ[colidx] * Lf(ᶜts[colidx]) - - # evaporation: q_rai -> q_vap - @. ᶜSᵖ[colidx] = - -min( - limit(qₚ(Y.c.ρq_rai[colidx], Y.c.ρ[colidx]), dt), - -CM1.evaporation_sublimation( - cmp.pr, - cmp.tv.rain, - cmp.aps, - thp, - TD.PhasePartition(thp, ᶜts[colidx]), - qₚ(Y.c.ρq_rai[colidx], Y.c.ρ[colidx]), - Y.c.ρ[colidx], - Tₐ(ᶜts[colidx]), - ), - ) - @. ᶜSqₜᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSqᵣᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] -= ᶜSᵖ[colidx] * (Iₗ(ᶜts[colidx]) + ᶜΦ[colidx]) - - # melting: q_sno -> q_rai - @. ᶜSᵖ[colidx] = min( - limit(qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), dt), - CM1.snow_melt( - cmp.ps, - cmp.tv.snow, - cmp.aps, - thp, - qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), - Y.c.ρ[colidx], - Tₐ(ᶜts[colidx]), - ), - ) - @. ᶜSqᵣᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSqₛᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] -= ᶜSᵖ[colidx] * Lf(ᶜts[colidx]) - - # deposition/sublimation: q_vap <-> q_sno - @. ᶜSᵖ[colidx] = CM1.evaporation_sublimation( - cmp.ps, - cmp.tv.snow, - cmp.aps, - thp, - TD.PhasePartition(thp, ᶜts[colidx]), - qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), + ᶜSqₜᵖ[colidx], + ᶜSqᵣᵖ[colidx], + ᶜSqₛᵖ[colidx], + ᶜSeₜᵖ[colidx], Y.c.ρ[colidx], - Tₐ(ᶜts[colidx]), - ) - @. ᶜSᵖ[colidx] = ifelse( - ᶜSᵖ[colidx] > FT(0), - min(limit(qᵥ(ᶜts[colidx]), dt), ᶜSᵖ[colidx]), - -min( - limit(qₚ(Y.c.ρq_sno[colidx], Y.c.ρ[colidx]), dt), - FT(-1) * ᶜSᵖ[colidx], - ), + ᶜqᵣ[colidx], + ᶜqₛ[colidx], + ᶜts[colidx], + ᶜΦ[colidx], + dt, + cmp, + thp, ) - @. ᶜSqₜᵖ[colidx] -= ᶜSᵖ[colidx] - @. ᶜSqₛᵖ[colidx] += ᶜSᵖ[colidx] - @. ᶜSeₜᵖ[colidx] -= ᶜSᵖ[colidx] * (Iᵢ(ᶜts[colidx]) + ᶜΦ[colidx]) end function precipitation_tendency!( @@ -456,18 +292,14 @@ function precipitation_tendency!( t, colidx, precip_model::Microphysics1Moment, + _, ) - FT = Spaces.undertype(axes(Y.c)) - (; ᶜSqₜᵖ, ᶜSqᵣᵖ, ᶜSqₛᵖ, ᶜSeₜᵖ) = p.precipitation + (; turbconv_model) = p.atmos + compute_precipitation_cache!(Y, p, colidx, precip_model, turbconv_model) - compute_precipitation_cache!( - Y, - p, - colidx, - precip_model, - p.atmos.turbconv_model, - ) + (; ᶜSqₜᵖ, ᶜSqᵣᵖ, ᶜSqₛᵖ, ᶜSeₜᵖ) = p.precipitation + # Update grid mean tendencies @. Yₜ.c.ρ[colidx] += Y.c.ρ[colidx] * ᶜSqₜᵖ[colidx] @. Yₜ.c.ρq_tot[colidx] += Y.c.ρ[colidx] * ᶜSqₜᵖ[colidx] @. Yₜ.c.ρe_tot[colidx] += Y.c.ρ[colidx] * ᶜSeₜᵖ[colidx] @@ -476,3 +308,50 @@ function precipitation_tendency!( return nothing end + +function precipitation_tendency!( + Yₜ, + Y, + p, + t, + colidx, + precip_model::Microphysics1Moment, + turbconv_model::PrognosticEDMFX, +) + # Source terms from EDMFX environment + (; ᶜSeₜᵖ⁰, ᶜSqₜᵖ⁰, ᶜSqᵣᵖ⁰, ᶜSqₛᵖ⁰, ᶜρa⁰) = p.precomputed + # Source terms from EDMFX updrafts + (; ᶜSeₜᵖʲs, ᶜSqₜᵖʲs, ᶜSqᵣᵖʲs, ᶜSqₛᵖʲs) = p.precomputed + # Grid mean precipitation sinks + (; ᶜSqₜᵖ, ᶜSqᵣᵖ, ᶜSqₛᵖ, ᶜSeₜᵖ) = p.precipitation + + compute_precipitation_cache!(Y, p, colidx, precip_model, turbconv_model) + + # Update from environment precipitation sources + # and the grid mean precipitation sinks + @. Yₜ.c.ρ[colidx] += + ᶜρa⁰[colidx] * ᶜSqₜᵖ⁰[colidx] + Y.c.ρ[colidx] * ᶜSqₜᵖ[colidx] + @. Yₜ.c.ρq_tot[colidx] += + ᶜρa⁰[colidx] * ᶜSqₜᵖ⁰[colidx] + Y.c.ρ[colidx] * ᶜSqₜᵖ[colidx] + @. Yₜ.c.ρe_tot[colidx] += + ᶜρa⁰[colidx] * ᶜSeₜᵖ⁰[colidx] + Y.c.ρ[colidx] * ᶜSeₜᵖ[colidx] + @. Yₜ.c.ρq_rai[colidx] += + ᶜρa⁰[colidx] * ᶜSqᵣᵖ⁰[colidx] + Y.c.ρ[colidx] * ᶜSqᵣᵖ[colidx] + @. Yₜ.c.ρq_sno[colidx] += + ᶜρa⁰[colidx] * ᶜSqₛᵖ⁰[colidx] + Y.c.ρ[colidx] * ᶜSqₛᵖ[colidx] + + # Update from the updraft precipitation sources + n = n_mass_flux_subdomains(p.atmos.turbconv_model) + for j in 1:n + @. Yₜ.c.ρ[colidx] += + Y.c.sgsʲs.:($$j).ρa[colidx] * ᶜSqₜᵖʲs.:($$j)[colidx] + @. Yₜ.c.ρq_tot[colidx] += + Y.c.sgsʲs.:($$j).ρa[colidx] * ᶜSqₜᵖʲs.:($$j)[colidx] + @. Yₜ.c.ρe_tot[colidx] += + Y.c.sgsʲs.:($$j).ρa[colidx] * ᶜSeₜᵖʲs.:($$j)[colidx] + @. Yₜ.c.ρq_rai[colidx] += + Y.c.sgsʲs.:($$j).ρa[colidx] * ᶜSqᵣᵖʲs.:($$j)[colidx] + @. Yₜ.c.ρq_sno[colidx] += + Y.c.sgsʲs.:($$j).ρa[colidx] * ᶜSqₛᵖʲs.:($$j)[colidx] + end +end diff --git a/src/prognostic_equations/edmfx_precipitation.jl b/src/prognostic_equations/edmfx_precipitation.jl index 7b0dcc2cd69..b020ac0c922 100644 --- a/src/prognostic_equations/edmfx_precipitation.jl +++ b/src/prognostic_equations/edmfx_precipitation.jl @@ -45,3 +45,33 @@ function edmfx_precipitation_tendency!( end return nothing end + +function edmfx_precipitation_tendency!( + Yₜ, + Y, + p, + t, + colidx, + turbconv_model::PrognosticEDMFX, + precip_model::Microphysics1Moment, +) + n = n_mass_flux_subdomains(turbconv_model) + (; ᶜSeₜᵖʲs, ᶜSqₜᵖʲs, ᶜtsʲs) = p.precomputed + thp = CAP.thermodynamics_params(p.params) + (; ᶜΦ) = p.core + + for j in 1:n + + @. Yₜ.c.sgsʲs.:($$j).ρa[colidx] += + Y.c.sgsʲs.:($$j).ρa[colidx] * ᶜSqₜᵖʲs.:($$j)[colidx] + + @. Yₜ.c.sgsʲs.:($$j).mse[colidx] += + ᶜSeₜᵖʲs.:($$j)[colidx] - + ᶜSqₜᵖʲs.:($$j)[colidx] * + TD.internal_energy(thp, ᶜtsʲs.:($$j)[colidx]) + + @. Yₜ.c.sgsʲs.:($$j).q_tot[colidx] += + ᶜSqₜᵖʲs.:($$j)[colidx] * (1 - Y.c.sgsʲs.:($$j).q_tot[colidx]) + end + return nothing +end diff --git a/src/prognostic_equations/gm_sgs_closures.jl b/src/prognostic_equations/gm_sgs_closures.jl index 07a752e7fb2..6635d2a4ce6 100644 --- a/src/prognostic_equations/gm_sgs_closures.jl +++ b/src/prognostic_equations/gm_sgs_closures.jl @@ -2,6 +2,7 @@ ##### Grid-mean SGS closures (mixing length) ##### +import NVTX import ClimaCore.Geometry as Geometry import ClimaCore.Fields as Fields @@ -22,7 +23,7 @@ function smagorinsky_lilly_length(c_smag, N_eff, dz, Pr, ϵ_st) c_smag * dz end -function compute_gm_mixing_length!(ᶜmixing_length, Y, p) +NVTX.@annotate function compute_gm_mixing_length!(ᶜmixing_length, Y, p) (; params) = p thermo_params = CAP.thermodynamics_params(params) diff --git a/src/prognostic_equations/implicit/implicit_solver.jl b/src/prognostic_equations/implicit/implicit_solver.jl index e03bd90b9a2..1847ded9889 100644 --- a/src/prognostic_equations/implicit/implicit_solver.jl +++ b/src/prognostic_equations/implicit/implicit_solver.jl @@ -9,7 +9,10 @@ use_derivative(::UseDerivative) = true use_derivative(::IgnoreDerivative) = false """ - ImplicitEquationJacobian(Y, atmos; approximate_solve_iters, diffusion_flag, topography_flag, transform_flag) + ImplicitEquationJacobian( + Y, atmos; + approximate_solve_iters, diffusion_flag, topography_flag, sgs_advection_flag, transform_flag + ) A wrapper for the matrix ``∂E/∂Y``, where ``E(Y)`` is the "error" of the implicit step with the state ``Y``. @@ -76,11 +79,15 @@ is reached. - `diffusion_flag::DerivativeFlag`: whether the derivative of the diffusion tendency with respect to the quantities being diffused should be computed or approximated as 0; must be either `UseDerivative()` or - `Ignoreerivative()` instead of a `Bool` to ensure type-stability + `IgnoreDerivative()` instead of a `Bool` to ensure type-stability - `topography_flag::DerivativeFlag`: whether the derivative of vertical contravariant velocity with respect to horizontal covariant velocity should be computed or approximated as 0; must be either `UseDerivative()` or `IgnoreDerivative()` instead of a `Bool` to ensure type-stability +- `sgs_advection_flag::DerivativeFlag`: whether the derivative of the + subgrid-scale advection tendency with respect to the updraft quantities should be + computed or approximated as 0; must be either `UseDerivative()` or + `IgnoreDerivative()` instead of a `Bool` to ensure type-stability - `transform_flag::Bool`: whether the error should be transformed from ``E(Y)`` to ``E(Y)/Δt``, which is required for non-Rosenbrock timestepping schemes from OrdinaryDiffEq.jl @@ -90,6 +97,7 @@ struct ImplicitEquationJacobian{ S <: MatrixFields.FieldMatrixSolver, F1 <: DerivativeFlag, F2 <: DerivativeFlag, + F3 <: DerivativeFlag, T <: Fields.FieldVector, R <: Base.RefValue, } @@ -102,6 +110,7 @@ struct ImplicitEquationJacobian{ # flags that determine how E'(Y) is approximated diffusion_flag::F1 topography_flag::F2 + sgs_advection_flag::F3 # required by Krylov.jl to evaluate ldiv! with AbstractVector inputs temp_b::T @@ -120,6 +129,8 @@ function ImplicitEquationJacobian( IgnoreDerivative(), topography_flag = has_topography(axes(Y.c)) ? UseDerivative() : IgnoreDerivative(), + sgs_advection_flag = atmos.sgs_adv_mode == Implicit() ? UseDerivative() : + IgnoreDerivative(), transform_flag = false, ) FT = Spaces.undertype(axes(Y.c)) @@ -214,14 +225,14 @@ function ImplicitEquationJacobian( ) end - sgs_blocks = if atmos.turbconv_model isa PrognosticEDMFX + sgs_advection_blocks = if atmos.turbconv_model isa PrognosticEDMFX @assert n_prognostic_mass_flux_subdomains(atmos.turbconv_model) == 1 sgs_scalar_names = ( @name(c.sgsʲs.:(1).q_tot), @name(c.sgsʲs.:(1).mse), @name(c.sgsʲs.:(1).ρa) ) - if use_derivative(diffusion_flag) + if use_derivative(sgs_advection_flag) ( MatrixFields.unrolled_map( name -> (name, name) => similar(Y.c, TridiagonalRow), @@ -261,7 +272,7 @@ function ImplicitEquationJacobian( matrix = MatrixFields.FieldMatrix( identity_blocks..., - sgs_blocks..., + sgs_advection_blocks..., advection_blocks..., diffusion_blocks..., ) @@ -287,49 +298,60 @@ function ImplicitEquationJacobian( ) alg₂ = MatrixFields.BlockLowerTriangularSolve(@name(c.uₕ)) - alg = if use_derivative(diffusion_flag) - alg₁_subalg₂ = if atmos.turbconv_model isa PrognosticEDMFX - (; - alg₂ = MatrixFields.BlockLowerTriangularSolve( - @name(c.sgsʲs.:(1).q_tot); - alg₂ = MatrixFields.BlockLowerTriangularSolve( - @name(c.sgsʲs.:(1).mse); - alg₂ = MatrixFields.BlockLowerTriangularSolve( - @name(c.sgsʲs.:(1).ρa), - @name(f.sgsʲs.:(1).u₃); + alg = + if use_derivative(diffusion_flag) || use_derivative(sgs_advection_flag) + alg₁_subalg₂ = + if atmos.turbconv_model isa PrognosticEDMFX && + use_derivative(sgs_advection_flag) + diff_subalg = + use_derivative(diffusion_flag) ? + (; alg₂ = MatrixFields.BlockLowerTriangularSolve( names₁_group₂..., + ) + ) : (;) + (; + alg₂ = MatrixFields.BlockLowerTriangularSolve( + @name(c.sgsʲs.:(1).q_tot); + alg₂ = MatrixFields.BlockLowerTriangularSolve( + @name(c.sgsʲs.:(1).mse); + alg₂ = MatrixFields.BlockLowerTriangularSolve( + @name(c.sgsʲs.:(1).ρa), + @name(f.sgsʲs.:(1).u₃); + diff_subalg..., + ), ), - ), - ), - ) + ) + ) + else + is_in_Y(@name(c.ρq_tot)) ? + (; + alg₂ = MatrixFields.BlockLowerTriangularSolve( + names₁_group₂..., + ) + ) : (;) + end + alg₁ = MatrixFields.BlockLowerTriangularSolve( + names₁_group₁...; + alg₁_subalg₂..., + ) + MatrixFields.ApproximateBlockArrowheadIterativeSolve( + names₁...; + alg₁, + alg₂, + P_alg₁ = MatrixFields.MainDiagonalPreconditioner(), + n_iters = approximate_solve_iters, ) else - is_in_Y(@name(c.ρq_tot)) ? - (; - alg₂ = MatrixFields.BlockLowerTriangularSolve(names₁_group₂...) - ) : (;) + MatrixFields.BlockArrowheadSolve(names₁...; alg₂) end - alg₁ = MatrixFields.BlockLowerTriangularSolve( - names₁_group₁...; - alg₁_subalg₂..., - ) - MatrixFields.ApproximateBlockArrowheadIterativeSolve( - names₁...; - alg₁, - alg₂, - P_alg₁ = MatrixFields.MainDiagonalPreconditioner(), - n_iters = approximate_solve_iters, - ) - else - MatrixFields.BlockArrowheadSolve(names₁...; alg₂) - end return ImplicitEquationJacobian( matrix, MatrixFields.FieldMatrixSolver(alg, matrix, Y), diffusion_flag, topography_flag, + sgs_advection_flag, similar(Y), similar(Y), transform_flag, @@ -397,9 +419,13 @@ NVTX.@annotate function Wfact!(A, Y, p, dtγ, t) ( use_derivative(A.diffusion_flag) && p.atmos.turbconv_model isa PrognosticEDMFX ? + (; p.precomputed.ᶜρa⁰) : (;) + )..., + ( + use_derivative(A.sgs_advection_flag) && + p.atmos.turbconv_model isa PrognosticEDMFX ? (; p.core.ᶜgradᵥ_ᶠΦ, - p.precomputed.ᶜρa⁰, p.precomputed.ᶜρʲs, p.precomputed.ᶠu³ʲs, p.precomputed.ᶜtsʲs, @@ -441,7 +467,7 @@ NVTX.@annotate function Wfact!(A, Y, p, dtγ, t) end function update_implicit_equation_jacobian!(A, Y, p, dtγ, colidx) - (; matrix, diffusion_flag, topography_flag) = A + (; matrix, diffusion_flag, sgs_advection_flag, topography_flag) = A (; ᶜspecific, ᶜK, ᶜts, ᶜp, ᶜΦ, ᶠgradᵥ_ᶜΦ, ᶜρ_ref, ᶜp_ref) = p (; ᶜtemp_C3, @@ -695,7 +721,7 @@ function update_implicit_equation_jacobian!(A, Y, p, dtγ, colidx) end if p.atmos.turbconv_model isa PrognosticEDMFX - if use_derivative(diffusion_flag) + if use_derivative(sgs_advection_flag) (; ᶜgradᵥ_ᶠΦ, ᶜρʲs, ᶠu³ʲs, ᶜtsʲs) = p is_third_order = edmfx_upwinding == Val(:third_order) ᶠupwind = is_third_order ? ᶠupwind3 : ᶠupwind1 diff --git a/src/prognostic_equations/implicit/implicit_tendency.jl b/src/prognostic_equations/implicit/implicit_tendency.jl index aedcc00b076..e3b217dc5a4 100644 --- a/src/prognostic_equations/implicit/implicit_tendency.jl +++ b/src/prognostic_equations/implicit/implicit_tendency.jl @@ -9,7 +9,7 @@ NVTX.@annotate function implicit_tendency!(Yₜ, Y, p, t) Yₜ .= zero(eltype(Yₜ)) Fields.bycolumn(axes(Y.c)) do colidx implicit_vertical_advection_tendency!(Yₜ, Y, p, t, colidx) - if p.atmos.diff_mode == Implicit() + if p.atmos.sgs_adv_mode == Implicit() edmfx_sgs_vertical_advection_tendency!( Yₜ, Y, @@ -18,6 +18,9 @@ NVTX.@annotate function implicit_tendency!(Yₜ, Y, p, t) colidx, p.atmos.turbconv_model, ) + end + + if p.atmos.diff_mode == Implicit() vertical_diffusion_boundary_layer_tendency!( Yₜ, Y, @@ -42,10 +45,10 @@ NVTX.@annotate function implicit_tendency!(Yₜ, Y, p, t) # please DO NOT add additional velocity tendencies after this function zero_velocity_tendency!(Yₜ, Y, p, t, colidx) - # NOTE: This will zero out all grid-scale tendencies in the simple edmfx test - # please DO NOT add additional grid-scale tendencies after this function - zero_gridscale_tendency!(Yₜ, Y, p, t, colidx) end + # NOTE: This will zero out all tendencies + # please DO NOT add additional tendencies after this function + zero_tendency!(Yₜ, Y, p, t, p.atmos.tendency_model, p.atmos.turbconv_model) return nothing end diff --git a/src/prognostic_equations/remaining_tendency.jl b/src/prognostic_equations/remaining_tendency.jl index dd87abe2966..5ba03a78727 100644 --- a/src/prognostic_equations/remaining_tendency.jl +++ b/src/prognostic_equations/remaining_tendency.jl @@ -34,7 +34,7 @@ NVTX.@annotate function additional_tendency!(Yₜ, Y, p, t) edmf_coriolis_tendency!(Yₜ, Y, p, t, colidx, p.atmos.edmf_coriolis) large_scale_advection_tendency!(Yₜ, Y, p, t, colidx, p.atmos.ls_adv) - if p.atmos.diff_mode == Explicit() + if p.atmos.sgs_adv_mode == Explicit() edmfx_sgs_vertical_advection_tendency!( Yₜ, Y, @@ -43,6 +43,9 @@ NVTX.@annotate function additional_tendency!(Yₜ, Y, p, t) colidx, p.atmos.turbconv_model, ) + end + + if p.atmos.diff_mode == Explicit() vertical_diffusion_boundary_layer_tendency!( Yₜ, Y, @@ -81,6 +84,7 @@ NVTX.@annotate function additional_tendency!(Yₜ, Y, p, t) p.atmos.turbconv_model, ) edmfx_tke_tendency!(Yₜ, Y, p, t, colidx, p.atmos.turbconv_model) + # TODO - add the 1-moment precipitation microphysics here edmfx_precipitation_tendency!( Yₜ, Y, @@ -90,7 +94,15 @@ NVTX.@annotate function additional_tendency!(Yₜ, Y, p, t) p.atmos.turbconv_model, p.atmos.precip_model, ) - precipitation_tendency!(Yₜ, Y, p, t, colidx, p.atmos.precip_model) + precipitation_tendency!( + Yₜ, + Y, + p, + t, + colidx, + p.atmos.precip_model, + p.atmos.turbconv_model, + ) # NOTE: All ρa tendencies should be applied before calling this function pressure_work_tendency!(Yₜ, Y, p, t, colidx, p.atmos.turbconv_model) @@ -99,9 +111,6 @@ NVTX.@annotate function additional_tendency!(Yₜ, Y, p, t) # please DO NOT add additional velocity tendencies after this function zero_velocity_tendency!(Yₜ, Y, p, t, colidx) - # NOTE: This will zero out all grid-scale tendencies in the simple edmfx test - # please DO NOT add additional grid-scale tendencies after this function - zero_gridscale_tendency!(Yₜ, Y, p, t, colidx) end # TODO: make bycolumn-able non_orographic_gravity_wave_tendency!( @@ -118,4 +127,7 @@ NVTX.@annotate function additional_tendency!(Yₜ, Y, p, t) t, p.atmos.orographic_gravity_wave, ) + # NOTE: This will zero out all tendencies + # please DO NOT add additional tendencies after this function + zero_tendency!(Yₜ, Y, p, t, p.atmos.tendency_model, p.atmos.turbconv_model) end diff --git a/src/prognostic_equations/zero_gridscale_tendency.jl b/src/prognostic_equations/zero_gridscale_tendency.jl deleted file mode 100644 index 04e113eaee4..00000000000 --- a/src/prognostic_equations/zero_gridscale_tendency.jl +++ /dev/null @@ -1,17 +0,0 @@ -### -### simple edmfx test -### - -function zero_gridscale_tendency!(Yₜ, Y, p, t, colidx) - # turn off all grid-scale tendencies in the simple edmfx test - if !p.atmos.gs_tendency - @. Yₜ.c.ρ[colidx] = 0 - @. Yₜ.c.uₕ[colidx] = C12(0, 0) - @. Yₜ.f.u₃[colidx] = C3(0) - @. Yₜ.c.ρe_tot[colidx] = 0 - for ρχ_name in filter(is_tracer_var, propertynames(Y.c)) - @. Yₜ.c.:($$ρχ_name)[colidx] = 0 - end - end - return nothing -end diff --git a/src/prognostic_equations/zero_tendency.jl b/src/prognostic_equations/zero_tendency.jl new file mode 100644 index 00000000000..768bdb78d8d --- /dev/null +++ b/src/prognostic_equations/zero_tendency.jl @@ -0,0 +1,36 @@ +### +### Zero grid-scale or subgrid-scale tendencies +### + +zero_tendency!(Yₜ, Y, p, t, _, _) = nothing + +function zero_tendency!(Yₜ, Y, p, t, ::NoGridScaleTendency, _) + # turn off all grid-scale tendencies + @. Yₜ.c.ρ = 0 + @. Yₜ.c.uₕ = C12(0, 0) + @. Yₜ.f.u₃ = C3(0) + @. Yₜ.c.ρe_tot = 0 + for ρχ_name in filter(is_tracer_var, propertynames(Y.c)) + @. Yₜ.c.:($$ρχ_name) = 0 + end + return nothing +end + +function zero_tendency!( + Yₜ, + Y, + p, + t, + ::NoSubgridScaleTendency, + ::PrognosticEDMFX, +) + # turn off all subgrid-scale tendencies + n = n_prognostic_mass_flux_subdomains(p.atmos.turbconv_model) + for j in 1:n + @. Yₜ.c.sgsʲs.:($$j).ρa = 0 + @. Yₜ.f.sgsʲs.:($$j).u₃ = C3(0) + @. Yₜ.c.sgsʲs.:($$j).mse = 0 + @. Yₜ.c.sgsʲs.:($$j).q_tot = 0 + end + return nothing +end diff --git a/src/solver/model_getters.jl b/src/solver/model_getters.jl index 6a36fd42194..e8a6a765c9d 100644 --- a/src/solver/model_getters.jl +++ b/src/solver/model_getters.jl @@ -12,7 +12,17 @@ end function get_model_config(parsed_args) config = parsed_args["config"] - @assert config in ("sphere", "column", "box", "plane") + + valid_configurations = ("sphere", "column", "box", "plane") + + if !(config ∈ valid_configurations) + error_message = string( + "config = $config is not one of the ", + "valid configurations $valid_configurations", + ) + throw(ArgumentError(error_message)) + end + return if config == "sphere" SphericalModel() elseif config == "column" @@ -423,3 +433,20 @@ function get_surface_thermo_state_type(parsed_args) dict["GCMSurfaceThermoState"] = GCMSurfaceThermoState() return dict[parsed_args["surface_thermo_state_type"]] end + +function get_tracers(parsed_args) + aerosol_names = Tuple(parsed_args["prescribed_aerosols"]) + return (; aerosol_names) +end + +function get_tendency_model(parsed_args) + zero_tendency_name = parsed_args["zero_tendency"] + @assert zero_tendency_name in (nothing, "grid_scale", "subgrid_scale") + return if zero_tendency_name == "grid_scale" + NoGridScaleTendency() + elseif zero_tendency_name == "subgrid_scale" + NoSubgridScaleTendency() + elseif isnothing(zero_tendency_name) + UseAllTendency() + end +end diff --git a/src/solver/type_getters.jl b/src/solver/type_getters.jl index f54469c3076..0c3ebf8e546 100644 --- a/src/solver/type_getters.jl +++ b/src/solver/type_getters.jl @@ -3,6 +3,7 @@ using Dates: DateTime, @dateformat_str using Dierckx using Interpolations import NCDatasets +import ClimaUtilities.OutputPathGenerator import ClimaCore: InputOutput, Meshes, Spaces, Quadratures import ClimaAtmos.RRTMGPInterface as RRTMGPI import ClimaAtmos as CA @@ -26,9 +27,6 @@ function get_atmos(config::AtmosConfig, params) advection_test = parsed_args["advection_test"] @assert advection_test in (false, true) - gs_tendency = parsed_args["gs_tendency"] - @assert gs_tendency in (false, true) - edmfx_entr_model = get_entrainment_model(parsed_args) edmfx_detr_model = get_detrainment_model(parsed_args) @@ -47,6 +45,9 @@ function get_atmos(config::AtmosConfig, params) implicit_diffusion = parsed_args["implicit_diffusion"] @assert implicit_diffusion in (true, false) + implicit_sgs_advection = parsed_args["implicit_sgs_advection"] + @assert implicit_sgs_advection in (true, false) + model_config = get_model_config(parsed_args) vert_diff = get_vertical_diffusion_model(diffuse_momentum, parsed_args, params, FT) @@ -59,7 +60,7 @@ function get_atmos(config::AtmosConfig, params) ls_adv = get_large_scale_advection_model(parsed_args, FT), edmf_coriolis = get_edmf_coriolis(parsed_args, FT), advection_test, - gs_tendency, + tendency_model = get_tendency_model(parsed_args), edmfx_entr_model, edmfx_detr_model, edmfx_sgs_mass_flux, @@ -82,6 +83,7 @@ function get_atmos(config::AtmosConfig, params) hyperdiff = get_hyperdiffusion_model(parsed_args, FT), vert_diff, diff_mode = implicit_diffusion ? Implicit() : Explicit(), + sgs_adv_mode = implicit_sgs_advection ? Implicit() : Explicit(), viscous_sponge = get_viscous_sponge_model(parsed_args, params, FT), rayleigh_sponge = get_rayleigh_sponge_model(parsed_args, params, FT), sfc_temperature = get_sfc_temperature_form(parsed_args), @@ -469,8 +471,12 @@ function get_sim_info(config::AtmosConfig) end default_output = haskey(ENV, "CI") ? job_id : joinpath("output", job_id) out_dir = parsed_args["output_dir"] - output_dir = isnothing(out_dir) ? default_output : out_dir - mkpath(output_dir) + base_output_dir = isnothing(out_dir) ? default_output : out_dir + + output_dir = OutputPathGenerator.generate_output_path( + base_output_dir; + context = config.comms_ctx, + ) sim = (; output_dir, @@ -612,8 +618,17 @@ function get_simulation(config::AtmosConfig) @info "Allocating Y: $s" end + tracers = get_tracers(config.parsed_args) + s = @timed_str begin - p = build_cache(Y, atmos, params, surface_setup, sim_info) + p = build_cache( + Y, + atmos, + params, + surface_setup, + sim_info, + tracers.aerosol_names, + ) end @info "Allocating cache (p): $s" diff --git a/src/solver/types.jl b/src/solver/types.jl index dcbe4224697..f5618f017e7 100644 --- a/src/solver/types.jl +++ b/src/solver/types.jl @@ -227,6 +227,11 @@ quad_type(::SGSQuadrature{N}) where {N} = N #TODO - this seems wrong? abstract type AbstractSurfaceThermoState end struct GCMSurfaceThermoState <: AbstractSurfaceThermoState end +abstract type AbstractTendencyModel end +struct UseAllTendency <: AbstractTendencyModel end +struct NoGridScaleTendency <: AbstractTendencyModel end +struct NoSubgridScaleTendency <: AbstractTendencyModel end + # Define broadcasting for types Base.broadcastable(x::AbstractSurfaceThermoState) = tuple(x) Base.broadcastable(x::AbstractMoistureModel) = tuple(x) @@ -237,6 +242,7 @@ Base.broadcastable(x::DiagnosticEDMFX) = tuple(x) Base.broadcastable(x::AbstractEntrainmentModel) = tuple(x) Base.broadcastable(x::AbstractDetrainmentModel) = tuple(x) Base.broadcastable(x::AbstractSGSamplingType) = tuple(x) +Base.broadcastable(x::AbstractTendencyModel) = tuple(x) Base.@kwdef struct RadiationDYCOMS_RF01{FT} "Large-scale divergence" @@ -327,7 +333,7 @@ Base.@kwdef struct AtmosModel{ LA, EC, AT, - GT, + TM, EEM, EDM, ESMF, @@ -340,6 +346,7 @@ Base.@kwdef struct AtmosModel{ HD, VD, DM, + SAM, VS, RS, ST, @@ -358,7 +365,7 @@ Base.@kwdef struct AtmosModel{ ls_adv::LA = nothing edmf_coriolis::EC = nothing advection_test::AT = nothing - gs_tendency::GT = nothing + tendency_model::TM = nothing edmfx_entr_model::EEM = nothing edmfx_detr_model::EDM = nothing edmfx_sgs_mass_flux::ESMF = nothing @@ -371,6 +378,7 @@ Base.@kwdef struct AtmosModel{ hyperdiff::HD = nothing vert_diff::VD = nothing diff_mode::DM = nothing + sgs_adv_mode::SAM = nothing viscous_sponge::VS = nothing rayleigh_sponge::RS = nothing sfc_temperature::ST = nothing diff --git a/src/solver/yaml_helper.jl b/src/solver/yaml_helper.jl index 00c980dea4c..8cc41f55976 100644 --- a/src/solver/yaml_helper.jl +++ b/src/solver/yaml_helper.jl @@ -72,7 +72,17 @@ function override_default_config(config_dict::AbstractDict;) for k in intersect(keys(config_dict), keys(default_config)) default_type = typeof(default_config[k]) v = config_dict[k] - config[k] = isnothing(default_config[k]) ? v : default_type(v) + + # Attempt to convert user value `v` to the same type as + # the default. If that fails, throw an informative error. + config[k] = try + isnothing(default_config[k]) ? v : default_type(v) + catch err + user_entry_type = typeof(v) + msg = """Configuration entry "$(k)" = $v has type $(user_entry_type), + but must have type $default_type.""" + throw(ArgumentError(msg)) + end end # The "diagnostics" entry is a more complex type that doesn't fit the schema described in diff --git a/test/coupler_compatibility.jl b/test/coupler_compatibility.jl index 3ac105de887..541f483f4b0 100644 --- a/test/coupler_compatibility.jl +++ b/test/coupler_compatibility.jl @@ -82,6 +82,7 @@ const T2 = 290 p.non_orographic_gravity_wave, p.orographic_gravity_wave, p.radiation, + p.tracers, p.net_energy_flux_toa, p.net_energy_flux_sfc, p.conservation_check, diff --git a/toml/longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_0M.toml b/toml/longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_0M.toml new file mode 100644 index 00000000000..c78bc0e113e --- /dev/null +++ b/toml/longrun_aquaplanet_rhoe_equil_55km_nz63_clearsky_progedmf_0M.toml @@ -0,0 +1,47 @@ +[zd_rayleigh] +value = 35000.0 + +[alpha_rayleigh_uh] +value = 0.0 + +[precipitation_timescale] +value = 600 + +[EDMF_surface_area] +value = 0 + +[EDMF_min_area] +value = 1.0e-5 + +[EDMF_max_area] +value = 0.7 + +[entr_inv_tau] +value = 0.0002 + +[entr_coeff] +value = 0.2 + +[min_area_limiter_scale] +value = 0 + +[min_area_limiter_power] +value = 100 + +[detr_inv_tau] +value = 0 + +[detr_coeff] +value = 0 + +[detr_buoy_coeff] +value = 0 + +[detr_vertdiv_coeff] +value = 0 + +[detr_massflux_vertdiv_coeff] +value = 1 + +[pressure_normalmode_drag_coeff] +value = 40.0 diff --git a/toml/prognostic_edmfx_box.toml b/toml/prognostic_edmfx.toml similarity index 100% rename from toml/prognostic_edmfx_box.toml rename to toml/prognostic_edmfx.toml diff --git a/toml/prognostic_edmfx_box_advection.toml b/toml/prognostic_edmfx_advection.toml similarity index 100% rename from toml/prognostic_edmfx_box_advection.toml rename to toml/prognostic_edmfx_advection.toml diff --git a/toml/prognostic_edmfx_bomex_box.toml b/toml/prognostic_edmfx_bomex.toml similarity index 100% rename from toml/prognostic_edmfx_bomex_box.toml rename to toml/prognostic_edmfx_bomex.toml diff --git a/toml/prognostic_edmfx_dycoms_rf01_box.toml b/toml/prognostic_edmfx_dycoms_rf01.toml similarity index 100% rename from toml/prognostic_edmfx_dycoms_rf01_box.toml rename to toml/prognostic_edmfx_dycoms_rf01.toml