From aa0819018eed8127de14c89693b34aba5384cc80 Mon Sep 17 00:00:00 2001 From: Gabriele Bozzola Date: Wed, 29 Jan 2025 14:28:55 -0800 Subject: [PATCH] Remove CO2 from AMIP driver CO2 is read in Atmos: https://github.com/CliMA/ClimaAtmos.jl/pull/3522 --- NEWS.md | 8 ++++++ config/amip_configs/amip.yml | 1 + config/benchmark_configs/climaatmos.yml | 1 + .../benchmark_configs/climaatmos_diagedmf.yml | 1 + .../climaatmos_diagedmf_io.yml | 1 + .../ci_configs/amip_albedo_temporal_map.yml | 1 + .../amip_albedo_temporal_map_1M.yml | 1 + config/ci_configs/amip_bucket_ic.yml | 1 + config/ci_configs/amip_coarse_ft32.yml | 1 + .../amip_coarse_ft64_hourly_checkpoints.yml | 1 + ...coarse_ft64_hourly_checkpoints_restart.yml | 1 + config/ci_configs/amip_coarse_mpi.yml | 1 + config/ci_configs/amip_component_dts.yml | 1 + config/ci_configs/amip_default.yml | 1 + config/ci_configs/amip_n1_shortrun.yml | 1 + .../amip_target_topo_diagedmf_shortrun.yml | 1 + config/longrun_configs/amip_target.yml | 1 + config/longrun_configs/amip_target_topo.yml | 1 + experiments/ClimaEarth/run_amip.jl | 25 +------------------ 19 files changed, 26 insertions(+), 24 deletions(-) diff --git a/NEWS.md b/NEWS.md index 9b8072eb6f..58f76cad52 100644 --- a/NEWS.md +++ b/NEWS.md @@ -21,6 +21,14 @@ object initialization and `step!`. Note that this results in changed order of operations and slightly different behavior for AMIP simulations - see the PR description for more details. +#### CO2 is now updated by ClimaAtmos directly PR[#1143](https://github.com/CliMA/ClimaCoupler.jl/pull/1143) + +Previously, CO2 was read in directly from the driver during init and in the +coupling loop. Now, it is read internally by ClimaAtmos. Note that this results +in changed order of operations and slightly different behavior for AMIP +simulations - see the PR description for more details. + + #### Simplified callbacks PR [#1121](https://github.com/CliMA/ClimaCoupler.jl/pull/1121) Callbacks were also reworked, and the previous system was removed. Here is an example of the diff --git a/config/amip_configs/amip.yml b/config/amip_configs/amip.yml index a9546a1b96..966e34d91d 100644 --- a/config/amip_configs/amip.yml +++ b/config/amip_configs/amip.yml @@ -2,6 +2,7 @@ FLOAT_TYPE: "Float32" albedo_model: "CouplerAlbedo" atmos_config_file: "config/longrun_configs/amip_target_diagedmf.yml" checkpoint_dt: "720hours" +co2: "maunaloa" coupler_toml: ["toml/amip.toml"] dt: "120secs" dt_cpl: "120secs" diff --git a/config/benchmark_configs/climaatmos.yml b/config/benchmark_configs/climaatmos.yml index c08566f1ab..e545ef9726 100644 --- a/config/benchmark_configs/climaatmos.yml +++ b/config/benchmark_configs/climaatmos.yml @@ -1,6 +1,7 @@ FLOAT_TYPE: "Float32" aerosol_radiation: true approximate_linear_solve_iters: 2 +co2: "maunaloa" dt: 120secs dt_cloud_fraction: 1hours dt_rad: 1hours diff --git a/config/benchmark_configs/climaatmos_diagedmf.yml b/config/benchmark_configs/climaatmos_diagedmf.yml index 779287072b..e51aa0e5bd 100644 --- a/config/benchmark_configs/climaatmos_diagedmf.yml +++ b/config/benchmark_configs/climaatmos_diagedmf.yml @@ -1,6 +1,7 @@ FLOAT_TYPE: "Float32" aerosol_radiation: true approximate_linear_solve_iters: 2 +co2: "maunaloa" dt: 120secs dt_cloud_fraction: 1hours dt_rad: 1hours diff --git a/config/benchmark_configs/climaatmos_diagedmf_io.yml b/config/benchmark_configs/climaatmos_diagedmf_io.yml index a9a5cc8a3c..9766ed18fd 100644 --- a/config/benchmark_configs/climaatmos_diagedmf_io.yml +++ b/config/benchmark_configs/climaatmos_diagedmf_io.yml @@ -1,5 +1,6 @@ FLOAT_TYPE: "Float32" approximate_linear_solve_iters: 2 +co2: "maunaloa" dt: 120secs dt_cloud_fraction: 1hours dt_rad: 1hours diff --git a/config/ci_configs/amip_albedo_temporal_map.yml b/config/ci_configs/amip_albedo_temporal_map.yml index f481bc7763..789afc90af 100644 --- a/config/ci_configs/amip_albedo_temporal_map.yml +++ b/config/ci_configs/amip_albedo_temporal_map.yml @@ -1,4 +1,5 @@ apply_limiter: false +co2: "maunaloa" dt: "150secs" dt_cpl: "150secs" dt_rad: "1hours" diff --git a/config/ci_configs/amip_albedo_temporal_map_1M.yml b/config/ci_configs/amip_albedo_temporal_map_1M.yml index fc424f4287..eb3e7b38d6 100644 --- a/config/ci_configs/amip_albedo_temporal_map_1M.yml +++ b/config/ci_configs/amip_albedo_temporal_map_1M.yml @@ -1,4 +1,5 @@ apply_limiter: false +co2: "maunaloa" dt: "150secs" dt_cpl: "150secs" dt_rad: "1hours" diff --git a/config/ci_configs/amip_bucket_ic.yml b/config/ci_configs/amip_bucket_ic.yml index b5719d9bba..e284f92c18 100644 --- a/config/ci_configs/amip_bucket_ic.yml +++ b/config/ci_configs/amip_bucket_ic.yml @@ -1,4 +1,5 @@ apply_limiter: false +co2: "maunaloa" dt: "150secs" dt_cpl: "150secs" dt_rad: "1hours" diff --git a/config/ci_configs/amip_coarse_ft32.yml b/config/ci_configs/amip_coarse_ft32.yml index 283fdd80ea..845864e8e4 100644 --- a/config/ci_configs/amip_coarse_ft32.yml +++ b/config/ci_configs/amip_coarse_ft32.yml @@ -1,5 +1,6 @@ FLOAT_TYPE: "Float32" apply_limiter: false +co2: "maunaloa" dt_save_to_sol: "100days" energy_check: false h_elem: 6 diff --git a/config/ci_configs/amip_coarse_ft64_hourly_checkpoints.yml b/config/ci_configs/amip_coarse_ft64_hourly_checkpoints.yml index 15ba3c21fd..5e5fab0530 100644 --- a/config/ci_configs/amip_coarse_ft64_hourly_checkpoints.yml +++ b/config/ci_configs/amip_coarse_ft64_hourly_checkpoints.yml @@ -1,4 +1,5 @@ apply_limiter: false +co2: "maunaloa" dt_save_to_sol: "1days" energy_check: false h_elem: 6 diff --git a/config/ci_configs/amip_coarse_ft64_hourly_checkpoints_restart.yml b/config/ci_configs/amip_coarse_ft64_hourly_checkpoints_restart.yml index 13e0fa1476..ec03d9a399 100644 --- a/config/ci_configs/amip_coarse_ft64_hourly_checkpoints_restart.yml +++ b/config/ci_configs/amip_coarse_ft64_hourly_checkpoints_restart.yml @@ -1,4 +1,5 @@ apply_limiter: false +co2: "maunaloa" checkpoint_dt: "1hours" dt_save_restart: "10days" dt_save_to_sol: "1days" diff --git a/config/ci_configs/amip_coarse_mpi.yml b/config/ci_configs/amip_coarse_mpi.yml index 15ba3c21fd..5e5fab0530 100644 --- a/config/ci_configs/amip_coarse_mpi.yml +++ b/config/ci_configs/amip_coarse_mpi.yml @@ -1,4 +1,5 @@ apply_limiter: false +co2: "maunaloa" dt_save_to_sol: "1days" energy_check: false h_elem: 6 diff --git a/config/ci_configs/amip_component_dts.yml b/config/ci_configs/amip_component_dts.yml index 2ba2a82851..345894a225 100644 --- a/config/ci_configs/amip_component_dts.yml +++ b/config/ci_configs/amip_component_dts.yml @@ -1,4 +1,5 @@ apply_limiter: false +co2: "maunaloa" dt_atmos: "150secs" dt_cpl: "150secs" dt_land: "50secs" diff --git a/config/ci_configs/amip_default.yml b/config/ci_configs/amip_default.yml index 9369e9e02a..0cc33bbd54 100644 --- a/config/ci_configs/amip_default.yml +++ b/config/ci_configs/amip_default.yml @@ -1,4 +1,5 @@ apply_limiter: false +co2: "maunaloa" dt: "150secs" dt_cpl: "150secs" dt_rad: "1hours" diff --git a/config/ci_configs/amip_n1_shortrun.yml b/config/ci_configs/amip_n1_shortrun.yml index dc09486662..19a33e1263 100644 --- a/config/ci_configs/amip_n1_shortrun.yml +++ b/config/ci_configs/amip_n1_shortrun.yml @@ -1,4 +1,5 @@ apply_limiter: false +co2: "maunaloa" dt: "150secs" dt_cpl: "150secs" dt_rad: "1hours" diff --git a/config/ci_configs/amip_target_topo_diagedmf_shortrun.yml b/config/ci_configs/amip_target_topo_diagedmf_shortrun.yml index e72bf8142b..b42cee69de 100644 --- a/config/ci_configs/amip_target_topo_diagedmf_shortrun.yml +++ b/config/ci_configs/amip_target_topo_diagedmf_shortrun.yml @@ -1,6 +1,7 @@ FLOAT_TYPE: "Float32" apply_limiter: false atmos_config_file: "config/longrun_configs/longrun_aquaplanet_allsky_diagedmf_0M.yml" +co2: "maunaloa" dt: "100secs" dt_cloud_fraction: "1hours" dt_cpl: "100secs" diff --git a/config/longrun_configs/amip_target.yml b/config/longrun_configs/amip_target.yml index 15bdf67f48..c80023bb2f 100644 --- a/config/longrun_configs/amip_target.yml +++ b/config/longrun_configs/amip_target.yml @@ -1,6 +1,7 @@ FLOAT_TYPE: "Float32" aerosol_radiation: true atmos_config_file: "config/longrun_configs/longrun_aquaplanet_allsky_0M.yml" +co2: "maunaloa" dt: "120secs" dt_cloud_fraction: "1hours" dt_cpl: "120secs" diff --git a/config/longrun_configs/amip_target_topo.yml b/config/longrun_configs/amip_target_topo.yml index 6ebce48a78..e81ea051a7 100644 --- a/config/longrun_configs/amip_target_topo.yml +++ b/config/longrun_configs/amip_target_topo.yml @@ -2,6 +2,7 @@ FLOAT_TYPE: "Float32" aerosol_radiation: true albedo_model: "CouplerAlbedo" atmos_config_file: "config/longrun_configs/longrun_aquaplanet_allsky_0M_earth.yml" +co2: "maunaloa" dt: "120secs" dt_cloud_fraction: "1hours" dt_cpl: "120secs" diff --git a/experiments/ClimaEarth/run_amip.jl b/experiments/ClimaEarth/run_amip.jl index 1e48ce278e..b4cdfb742c 100644 --- a/experiments/ClimaEarth/run_amip.jl +++ b/experiments/ClimaEarth/run_amip.jl @@ -169,7 +169,6 @@ tspan = (t_start, t_end) #= ## Data File Paths =# -co2_data = joinpath(@clima_artifact("co2_dataset", comms_ctx), "co2_mm_mlo.txt") land_mask_data = joinpath(@clima_artifact("landsea_mask_60arcseconds", comms_ctx), "landsea_mask.nc") #= @@ -281,22 +280,7 @@ if sim_mode <: AMIPMode ocean_fraction = FT(1) .- ice_fraction .- land_fraction ocean_sim = PrescribedOceanSimulation(FT, boundary_space, date0, t_start, ocean_fraction, thermo_params, comms_ctx) - ## CO2 concentration from temporally varying file - CO2_text = DelimitedFiles.readdlm(co2_data, Float64; comments = true) - # The text file only has month and year, so we set the day to 15th of the month - years = CO2_text[:, 1] - months = CO2_text[:, 2] - CO2_dates = Dates.DateTime.(years, months) + Dates.Day(14) - CO2_times = period_to_seconds_float.(CO2_dates .- date0) - # convert from ppm to fraction, data is in fourth column of the text file - CO2_vals = CO2_text[:, 4] .* 10^(-6) - CO2_timevaryinginput = TimeVaryingInput(CO2_times, CO2_vals;) - - CO2_init = zeros(boundary_space) - evaluate!(CO2_init, CO2_timevaryinginput, t_start) - CO2_field = Interfacer.update_field!(atmos_sim, Val(:co2), CO2_init) - - mode_specifics = (; type = sim_mode, CO2_timevaryinginput = CO2_timevaryinginput) + mode_specifics = (; type = sim_mode) Utilities.show_memory_usage() elseif (sim_mode <: AbstractSlabplanetSimulationMode) && !(sim_mode <: SlabplanetEisenmanMode) @@ -629,13 +613,6 @@ function solve_coupler!(cs) # Update date cs.dates.date[] = TimeManager.current_date(cs, t) - if cs.mode.type <: AMIPMode - # TODO: get_field with :co2 is not implemented, so this is a little awkward - current_CO2 = zeros(boundary_space) - evaluate!(current_CO2, cs.mode.CO2_timevaryinginput, t) - Interfacer.update_field!(atmos_sim, Val(:co2), current_CO2) - end - ## compute global energy and water conservation checks ## (only for slabplanet if tracking conservation is enabled) !isnothing(cs.conservation_checks) && ConservationChecker.check_conservation!(cs)