Conversation
With cflx_cpl_opt==2, cflx_tend() was called in tphysbc (cam_run1), which is invoked multiple times during initialization, causing CO2 surface fluxes (CO2_OCN, CO2_FFF, CO2_LND, CO2) to be applied redundantly and adding duplicate mass to the atmosphere. Fix (following @huiwanpnnl): split cflx_tend into two paths: - tphysbc (cam_run1): apply aerosol fluxes only (skip_co2=.true.) - tphysac (cam_run2): apply CO2 fluxes only (co2_only=.true.) This preserves the aerosol numerical coupling improvement of cflx_cpl_opt==2 while moving CO2 tracers back to cam_run2 to avoid the redundant flux application during the init sequence. Changes: - cflx.F90: add optional skip_co2 and co2_only arguments to cflx_tend(); build CO2 mask from c_i array to identify CO2 tracers (CO2_OCN, CO2_FFF, CO2_LND, CO2) - physpkg.F90: call cflx_tend with skip_co2=.true. in tphysbc; add elseif branch in tphysac to call cflx_tend with co2_only=.true. when cflx_cpl_opt==2; make get_carbon_sfc_fluxes unconditional in tphysac
Add infrastructure for water-tracer and isotope tracking: - Register WaterTracers and WaterIsotopes process types - Add CMake build rules and process factory integration - Create stub process interfaces with identity tendencies - Add namelist defaults for tracer_count configuration Part of water isotope infrastructure campaign (spec 001).
In components/eam/src/ and components/homme/src/, the command grep -ir 'hyai(1)' * reveals multiple places where the calculation of air pressure assumes hybi(1) = 0. This commit adds a few lines to abort a simulation when hybi(1) is non-zero.
If dosw or dolw is .false. at the first timestep, set the corresponding heating rates and TOA/SFC fluxes to zero to avoid floating-point exception in debug runs with LW or SW turned off.
...if all pmid values are higher than a specified threshold (currently set to 450 hPa)
Bugfixes due to separating CO2 tracers.
Move water tracer and isotope processes from physics/water_tracers/
to physics/aux_tracers/{water_tracers,water_isotopes}/ with separate
libraries per process. Water isotopes depend on and extend water tracers.
- Add aux_tracers/CMakeLists.txt with EAMXX_ENABLE_WATER_TRACERS and
EAMXX_ENABLE_WATER_ISOTOPES options (both default OFF)
- Enforce dependency: isotopes require tracers
- Create separate water_tracers and water_isotopes libraries
- Update register_physics.hpp include paths
- Use full include path in water_isotopes header for robustness
Update all CMake references and include paths to use specialized_tracers instead of aux_tracers for water tracer and isotope processes.
Intel oneAPI (ifx) fpp mishandles the COMMA macro-argument idiom used throughout the MPAS framework (e.g. DMPAR_DEBUG_WRITE in mpas_dmpar.F), miscounting a single macro argument as several and failing with "number of arguments doesn't match". Preprocess .F files with GNU cpp via GEN_F90=true instead, which handles the idiom correctly. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Export per-PFT 2m reference temperature (t_ref2m) from ELM to IAC via the coupler, and add the elm_ehc_deg_days namelist control: ELM changes: - lnd2iacMod.F90: Add t_ref2m(begg:endg,0:numpft) to lnd2iac_type; populate from veg_es%t_ref2m (instantaneous 2m temperature in K) - elm_cpl_indices.F90: Add index_l2x_Sl_t_ref2m coupling index mapped to field name Sl_t_ref2m_topo## - lnd_import_export.F90: Export lnd2iac_vars%t_ref2m into l2x vector Coupler changes: - seq_flds_mod.F90: Add Sl_t_ref2m_topo## to l2x_states (when add_iac_to_cplstate) and x2z_states with metadata (units: K) GCAM namelist changes: - namelist_definition_gcam.xml: Define elm_ehc_deg_days (logical, gcam_inparm group) - namelist_defaults_gcam.xml: Default elm_ehc_deg_days to .true. - build-namelist: Add elm_ehc_deg_days to default namelist generation Update components/gcam/src submodule pointer.
Replace the approximate annual-mean t_ref2m-based heating/cooling degree day computation with true sub-daily accumulation in ELM, wired through the full ELM→coupler→IAC coupling chain. Changes: - lnd2iacMod.F90: Accumulate per-PFT HDD_accum and CDD_accum every ELM sub-daily timestep as max(t_base_K - t_ref2m, 0)*dt_days and max(t_ref2m - t_base_K, 0)*dt_days, where t_base_K = 291.15 K (18°C). Accumulators are monotonically increasing (never reset in ELM). - elm_cpl_indices.F90: Add index_l2x_Sl_HDD_accum and index_l2x_Sl_CDD_accum per-PFT coupler index arrays; replace t_ref2m index. - lnd_import_export.F90: Export HDD_accum/CDD_accum per PFT via the new coupler fields Sl_HDD_accum_pftNN / Sl_CDD_accum_pftNN. - seq_flds_mod.F90: Register Sl_HDD_accum_pftNN and Sl_CDD_accum_pftNN in the l2x and x2z coupler state vectors; remove Sl_t_ref2m_topo fields.
Data flow schematic:
flowchart TD
subgraph Sources["Data Sources"]
FIRE["FireMod.F90\nforc_hdm\n(stream file / CPL_BYPASS)"]
ATM["lnd2atm_vars\nt_ref2m_grc\n(2m reference temperature)"]
end
subgraph LND2IAC["lnd2iacMod.F90 - lnd2iac_type"]
UPD["update_lnd2iac(bounds, lnd2atm_vars)\n* hr, npp, pftwgt <- veg/col data\n* hdd = max(T_base - T_ref2m, 0)\n* cdd = max(T_ref2m - T_base, 0)\n where T_base = 291.15 K (18 C)"]
FIELDS["lnd2iac_vars fields:\n* hr(:,:) * npp(:,:) * pftwgt(:,:)\n* forc_hdm(:) * hdd(:) * cdd(:)"]
UPD --> FIELDS
end
subgraph ELMDriver["elm_driver.F90"]
DRIVER["lnd2iac_vars%update_lnd2iac\n(bounds_clump, lnd2atm_vars)"]
end
subgraph Export["lnd_import_export.F90 - lnd_export()"]
COPY["Copy to coupler vector l2x:\n* forc_hdm <- FireMod::forc_hdm\n* hdd <- lnd2iac_vars%hdd\n* cdd <- lnd2iac_vars%cdd\n* hr, npp, pftwgt (existing)"]
IDX["elm_cpl_indices.F90\nindex_l2x_Sl_forc_hdm\nindex_l2x_Sl_hdd\nindex_l2x_Sl_cdd"]
IDX --> COPY
end
subgraph CPL["driver-mct: seq_flds_mod.F90"]
FLDS["Register coupler fields:\nSl_forc_hdm (ind/km2)\nSl_hdd (K-days)\nSl_cdd (K-days)\nin l2x_states and x2z_states"]
end
subgraph GCAM["GCAM Component"]
NML["Namelist flag:\nelm_ehc_hdd_cdd = .true.\n(namelist_defaults_gcam.xml)"]
SRC["gcam/src submodule update\n(commit e034ca1)"]
NML --> SRC
end
FIRE -->|forc_hdm public pointer| COPY
ATM -->|t_ref2m_grc| UPD
DRIVER -->|calls| UPD
FIELDS -->|lnd2iac_vars%forc_hdm/hdd/cdd| COPY
COPY -->|l2x vector| CPL
FLDS -->|field metadata| CPL
CPL -->|x2z coupler state| GCAM
HDD CDD transfer from ELM to GCAM
- Updated SMS test to SMS_Vmct.ne30pg2_f09_oEC60to30v3.SSP245_ZATM_BGC - Updated ERS test to ERS_Vmct.ne30pg2_f09_oEC60to30v3.SSP245_ZATM_BGC - These changes include new MOAB expectations needed for the two tests moving forward
Unit test for photo table. Fixing yaml liking issue. update values of etfphot_data.
This pull request makes a small change to how the ocean fraction variable is initialized in the `main()` function of `generate_domain_files_E3SM.py`. The code now initializes `ofrac` with ones instead of zeros, and uses the shape of `ds['omask']` rather than `ds['area_a']`. * Changed initialization of `ofrac` to use ones with the shape of `ds['omask']` instead of zeros with the shape of `ds['area_a']` in `generate_domain_files_E3SM.py`.
Only run unit test if nlev=72 Fixing warnings. get yaml from server. Update file name.
Aurora TestingPolaris
|
|
@xylar, I've been using |
|
Is that available on Chrysalis, too? |
Sorry, I'm not sure about Chrysalis. |
|
It doesn't look like |
|
One option would be cime_env: This is a conda environment that is for CIME tests that require more than basic python (things like numpy). It clearly has pyyaml. |
|
I had added a command to load the python module on chrysalis that seemed to fix this -- on @andrewdnolan's testing PR |
|
@jonbob, are you referring to this line? Omega/cime_config/machines/config_machines.xml Line 2558 in 9da1a59 If so, that didn't help at least for me: |
|
@xylar -- that's really weird. It works if I do the same thing: |
|
@jonbob, do you have another python already loaded before that (e.g. in your but the latter just loads the same python above: shows no yaml that I can see. |
|
By the way, my test failures above seem to be because of the same: |
|
@xylar -- I just have in my .bashrc as well |
…nd (PR #8651) For pm-gpu, reapply a LD_LIBRARY_PATH work-around to avoid cuda runtime error
|
But I ran a test with and it does point to a local python: So apparently loading the module is not a fix |
|
@jonbob, yes, I think you did something in your and that's why it works for you but that won't help the rest of us, I'm afraid. |
|
I see similar behavior to @jonbob: So I must have installed yaml in my home directory as well somehow. |
|
Having each developer install pyyaml locally really isn't a good solution in my opinion. It's very messy. We need a clean alternative. |
|
@rljacob, do you have thoughts? |
|
Passes |
|
Passes CTests and Polaris
|
Just for testing auto blesser For testing purposes only. [BFB]
We are using the DataInterpolation class for surface emissions. When this code was originally written, we used the former SAP reader as a guide to implement the surface-emission reader. As a result, there is a discrepancy in how time interpolation is performed. In particular, the former SAP reader uses the variable date instead of the time variable, and the day in the date is not taken into account when selecting the time interval. These differences produce discrepancies in the mam4xx tests. [non-BFB]
|
@xylar, E3SM-Project#8632 is still undergoing testing so I'm going to merge this since we've tested it already. I think we need to bring in the pm-gpu workaround now so we can test there. We can do another master merge once Kokkos is updated in E3SM. That one may not be BFB anyway, so it will be good to isolate that change and do a polaris submodule update. |
There seems to have been a minor mistake in resolving the diffs from #521, which resulted in the e3sm_omega_developer test suite definition missing it's closing bracket.
This PR brings in changes from:
Which are needed for the C++ 20 updates in:
Checklist
Testing
aurora, oneapi-ifx, mpich
chrysalis, oneapi-ifx, openmpi
frontier, craygnu, mpich
frontier, craygnu-mphipcc, mpich
pm-cpu, gnu, mpich
pm-gpu, gnugpu, mpich
Provide relevant details in a comment to the PR titled
Testingwith the following:have been run on and indicate that are all passing.
has passed, using the Polaris
e3sm_submodules/Omegabaseline-pfor both the baseline (Polarise3sm_submodules/Omega) and the PR build