Skip to content

Conversation

@maltrud
Copy link
Contributor

@maltrud maltrud commented Sep 22, 2025

Currently, the atmospheric dust and iron deposition to the surface ocean is specified to be a monthly climatology that has been used for all E3SM ocean BGC cases for the past decade. This PR now allows the use of a climatology generated by EAM from archival simulations with prognostic dust deposition and time-variable solubility for iron in dust, which requires extra fields to be read in. In addition, the wet and dry dust flux that EAM sends through the coupler can now also be used by the ocean in fully coupled runs so only the solubility is required to be read in from a file.

[NML]
[BFB] - stealth feature

@maltrud maltrud requested review from jonbob and njeffery September 22, 2025 20:10
@maltrud maltrud added enhancement MPAS-ocean Concerning the MPAS-ocean model coupled to E3SM. BFB PR leaves answers BFB Stealth PR has feature which, if turned on, could change climate. fka FCC BGC labels Sep 22, 2025
@njeffery
Copy link
Contributor

@maltrud : could you add the new stream fields to the buildnml?

--- a/components/mpas-ocean/cime_config/buildnml
+++ b/components/mpas-ocean/cime_config/buildnml
@@ -1811,6 +1811,11 @@ def buildnml(case, caseroot, compname):
lines.append(' ')
lines.append(' ')
lines.append(' ')

  •            lines.append('    <var name="dust_FLUZ_DRY"/>')
    
  •            lines.append('    <var name="dust_FLUZ_WET"/>')
    
  •            lines.append('    <var name="IRON_Zolubility_wet"/>')
    
  •            lines.append('    <var name="IRON_Zolubility_dry"/>')
    
  •            lines.append('    <var name="IRON_in_duzt_fraction"/>')
               lines.append('    <var name="dust_FLUZ_IN"/>')
               lines.append('    <var name="riverFluzNO3"/>')
               lines.append('    <var name="riverFluzPO4"/>')
    

@maltrud
Copy link
Contributor Author

maltrud commented Sep 24, 2025

@njeffery great idea--will do.

@mark-petersen mark-petersen self-requested a review September 30, 2025 14:38
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@maltrud : Should we create a shared constant for the 55.845_RKIND?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@njeffery this is the value used in MaRBL--I don't think it is capable of using shared constants. but it does make sense to use the same value for ocean and ice (and atmosphere too I guess). should we ask Yan what EAM uses? I doubt they'll change it if it's different, but we should check.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea! Let's coordinate with Yan and find out where the EAM constant is.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@yfenganl : we'd like to use a consistent iron molar mass constant across components. Where does EAM access the value?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @maltrud @njeffery : sorry I just saw this question. 55.845 would be the value I'd use for Fe molecular weight. In the current EAM, we don't specify the MW of Fe metal explicitly. Dust is treated as a mixture of minerals with a MW of 135 g/mol.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@yfenganl -- if you're OK with this solution, could you officially resolve the conversation (button below)?

@njeffery
Copy link
Contributor

njeffery commented Oct 1, 2025

I've run a fully-coupled test and all looks good. Here are some figures:

NJ-E3SM-10012025.pptx

Copy link
Contributor

@njeffery njeffery left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved after running a fully coupled test and verifying ocean and sea ice dust/iron concentrations. The iron molar mass is the same in ocean/seaice. Would be good to make this a shared constant across all components.

Copy link
Contributor

@mark-petersen mark-petersen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested MPAS-O standalone with the compass nightly suite on perlmutter with gnu and it passes compile and run, but that does not compile in the coupled code.

I also ran a smoke test with E3SM using

./create_test SMS_Ld3.T62_oQU240.GMPAS-NYF.pm-cpu_gnu -p m4572 -q debug --walltime 00:30:00

and it has a compile error at

/pscratch/sd/m/mpeterse/e3sm_scratch/pm-cpu/SMS_Ld3.T62_oQU240.GMPAS-NYF.pm-cpu_gnu.20251003_095213_nlxhjj/bld/cmake-bld/core_ocean/shared/mpas_ocn_tracer_ecosys.f90:2868:69:

 2868 |              if (.not. config_use_ecosysTracers_atm_dust_from_coupler) then
      |                                                                     1
Error: Symbol ‘config_use_ecosystracers_atm_dust_from_coupler’ at (1) has no IMPLICIT type
/pscratch/sd/m/mpeterse/e3sm_scratch/pm-cpu/SMS_Ld3.T62_oQU240.GMPAS-NYF.pm-cpu_gnu.20251003_095213_nlxhjj/bld/cmake-bld/core_ocean/shared/mpas_ocn_tracer_ecosys.f90:2814:57:

 2814 |         if (config_use_ecosysTracers_iron_solubility_file) then
      |                                                         1
Error: Symbol ‘config_use_ecosystracers_iron_solubility_file’ at (1) has no IMPLICIT type
/pscratch/sd/m/mpeterse/e3sm_scratch/pm-cpu/SMS_Ld3.T62_oQU240.GMPAS-NYF.pm-cpu_gnu.20251003_095213_nlxhjj/bld/cmake-bld/core_ocean/shared/mpas_ocn_tracer_ecosys.f90:2464:56:

 2464 |       if (config_use_ecosysTracers_atm_dust_from_coupler .and.  &
      |                                                        1
Error: Symbol ‘config_use_ecosystracers_atm_dust_from_coupler’ at (1) has no IMPLICIT type
/pscratch/sd/m/mpeterse/e3sm_scratch/pm-cpu/SMS_Ld3.T62_oQU240.GMPAS-NYF.pm-cpu_gnu.20251003_095213_nlxhjj/bld/cmake-bld/core_ocean/shared/mpas_ocn_tracer_ecosys.f90:2465:61:

 2465 |           .not. config_use_ecosysTracers_iron_solubility_file) then
      |                                                             1
Error: Symbol ‘config_use_ecosystracers_iron_solubility_file’ at (1) has no IMPLICIT type

so something is wrong with the declarations of those variables.

@mark-petersen
Copy link
Contributor

BTW, on the previous E3SM test, I had to rebase on the head of master to get through the setup on perlmutter. Submitting a job from the head of this PR, there is a library mismatch:

Finished SETUP for test SMS_Ld3.T62_oQU240.GMPAS-NYF.pm-cpu_gnu in 2.759769 seconds (FAIL). [COMPLETED 1 of 1]
    Case dir: /pscratch/sd/m/mpeterse/e3sm_scratch/pm-cpu/SMS_Ld3.T62_oQU240.GMPAS-NYF.pm-cpu_gnu.20251003_102449_9pimzr
    Errors were:
        ERROR: module command /usr/share/lmod/lmod/libexec/lmod python load PrgEnv-gnu/8.5.0 gcc-native/12.3 cray-libsci/23.12.5 craype-accel-host craype/2.7.30 cray-mpich/8.1.28 cray-hdf5-parallel/1.12.2.9 cray-netcdf-hdf5parallel/4.9.0.9 cray-parallel-netcdf/1.12.3.9 cmake/3.24.3 evp-patch failed with message:
        Lmod has detected the following error: These module(s) or extension(s) exist but cannot be loaded as requested: "evp-patch"
           Try: "module spider evp-patch" to see how to load the module(s).

Copy link
Contributor

@mark-petersen mark-petersen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Never mind. It did pass the smoke test. I've seen this error before, so I'll leave the previous message up there. When you add new config flags, it is best to start with a new repo directory. When I use an old repo directory, there must be some temporary files that remain and then we get errors that the config flags have not been declared.

@maltrud
Copy link
Contributor Author

maltrud commented Oct 3, 2025

I added the shared constant and updated ocean streams changes and pushed to the branch. I did a local merge of master with the branch and it passed all except NML since we added new namelist variables. I think it's ready for the next step.

SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod (Overall: NLFAIL) details:
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod CREATE_NEWCASE
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod XML
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod SETUP
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod SHAREDLIB_BUILD time=225
FAIL SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod NLCOMP
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod MODEL_BUILD time=275
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod SUBMIT
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod RUN time=1549
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod BASELINE master: ERROR Could not interpret CPRNC output
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod MEMLEAK insufficient data for memleak test
PASS SMS_D_Ld1.ne30pg2_r05_IcoswISC30E3r5.WCYCL1850.chrysalis_intel.allactive-wcprod SHORT_TERM_ARCHIVER

@jonbob
Copy link
Contributor

jonbob commented Oct 7, 2025

@maltrud -- I ran the semi-automated scripts to make the bld files consistent with what's in Registry. Most of the changes are in ordering of the new configs, but some of the documentation you added to namelist_definition_mpaso.xml will get lost. If any of it is important, please change the descriptions in Registry and I'll rerun the scripts

@jonbob jonbob added the NML label Oct 7, 2025
@jonbob
Copy link
Contributor

jonbob commented Oct 7, 2025

@maltrud -- since this is a stealth feature, we need to add a stealth test with this PR. I'm working on a testdef that just changes the values of these two new configs:

    config_use_ecosysTracers_atm_dust_from_coupler
    config_use_ecosysTracers_iron_solubility_file

Is that all that needs to be done? Does this need to be a marine BGC run in order for this to work?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

BFB PR leaves answers BFB BGC enhancement MPAS-ocean Concerning the MPAS-ocean model coupled to E3SM. NML Stealth PR has feature which, if turned on, could change climate. fka FCC

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants