From 76a471ba3f0527aae3a60123cb6ae6ed6f5f8bb0 Mon Sep 17 00:00:00 2001 From: Mathew Maltrud Date: Thu, 19 Jun 2025 14:16:59 -0500 Subject: [PATCH 1/5] add capability to use prognostic dust/Fe from atm --- components/mpas-ocean/bld/build-namelist | 1 + .../mpas-ocean/bld/build-namelist-section | 1 + .../namelist_defaults_mpaso.xml | 1 + .../namelist_definition_mpaso.xml | 8 + components/mpas-ocean/driver/ocn_comp_mct.F | 42 ++++- .../src/shared/mpas_ocn_tracer_ecosys.F | 166 +++++++++++++++--- .../src/tracer_groups/Registry_ecosys.xml | 34 ++++ 7 files changed, 226 insertions(+), 27 deletions(-) diff --git a/components/mpas-ocean/bld/build-namelist b/components/mpas-ocean/bld/build-namelist index 457078f1314a..027be0234f38 100755 --- a/components/mpas-ocean/bld/build-namelist +++ b/components/mpas-ocean/bld/build-namelist @@ -1200,6 +1200,7 @@ if ($ice_bgc eq 'ice_bgc' ) { add_default($nl, 'config_use_ecosysTracers_sea_ice_coupling', 'val'=>".false."); } add_default($nl, 'config_use_ecosysTracers_river_inputs_from_coupler'); +add_default($nl, 'config_use_ecosysTracers_iron_solubility_file'); #################################################### # Namelist group: tracer_forcing_freshwaterTracers # diff --git a/components/mpas-ocean/bld/build-namelist-section b/components/mpas-ocean/bld/build-namelist-section index c1a2e634dcd6..cd9cf87985fc 100644 --- a/components/mpas-ocean/bld/build-namelist-section +++ b/components/mpas-ocean/bld/build-namelist-section @@ -599,6 +599,7 @@ add_default($nl, 'config_use_ecosysTracers_ttd_forcing'); add_default($nl, 'config_use_ecosysTracers_surface_value'); add_default($nl, 'config_use_ecosysTracers_river_inputs_from_coupler'); add_default($nl, 'config_use_ecosysTracers_sea_ice_coupling'); +add_default($nl, 'config_use_ecosysTracers_iron_solubility_file'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level1'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level2'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level3'); diff --git a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml index fcb9bcb7f114..bd5a341835a7 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml @@ -760,6 +760,7 @@ .false. .false. .false. +.false. .false. .false. .false. diff --git a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml index a455ff88869a..8e7edeb55ae4 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml @@ -3115,6 +3115,14 @@ Valid values: .true. or .false. Default: Defined in namelist_defaults.xml + +if true, use iron solubility field read in from a file + +Valid values: .true. or .false. +Default: Defined in namelist_defaults.xml + + if true, make variables in ecosysDiagFieldsLevel1 available for output diff --git a/components/mpas-ocean/driver/ocn_comp_mct.F b/components/mpas-ocean/driver/ocn_comp_mct.F index c9465ca51983..d3e22d2b56cb 100644 --- a/components/mpas-ocean/driver/ocn_comp_mct.F +++ b/components/mpas-ocean/driver/ocn_comp_mct.F @@ -1981,6 +1981,8 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ atmosphericPressureField, iceFractionField, & seaIcePressureField, windSpeedSquared10mField, & atmosphericCO2Field, atmosphericCO2_ALT_CO2Field, & + dust_FLUX_WETField, & + dust_FLUX_DRYField, & iceFluxDICField, & iceFluxDONField, & iceFluxNO3Field, & @@ -2032,6 +2034,8 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ seaIcePressure, windSpeedSquared10m, & atmosphericCO2, atmosphericCO2_ALT_CO2, & windSpeedSquared10mCFC, & + dust_FLUX_WET, & + dust_FLUX_DRY, & iceFluxDIC, & iceFluxDON, & iceFluxNO3, & @@ -2251,6 +2255,11 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ call mpas_pool_get_field(ecosysSeaIceCoupling, 'iceFluxDOC', iceFluxDOCField) call mpas_pool_get_field(ecosysSeaIceCoupling, 'iceFluxDON', iceFluxDONField) + if (config_use_ecosysTracers_iron_solubility_file) then + call mpas_pool_get_field(ecosysAuxiliary, 'dust_FLUX_WET' , dust_FLUX_WETField) + call mpas_pool_get_field(ecosysAuxiliary, 'dust_FLUX_DRY' , dust_FLUX_DRYField) + endif + iceFluxPhytoC => iceFluxPhytoCField % array iceFluxDIC => iceFluxDICField % array iceFluxNO3 => iceFluxNO3Field % array @@ -2262,6 +2271,12 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ iceFluxDust => iceFluxDustField % array iceFluxDOC => iceFluxDOCField % array iceFluxDON => iceFluxDONField % array + + if (config_use_ecosysTracers_iron_solubility_file) then + dust_FLUX_WET => dust_FLUX_WETField % array + dust_FLUX_DRY => dust_FLUX_DRYField % array + endif + endif endif if (config_use_DMSTracers .and. config_use_DMSTracers_sea_ice_coupling) then @@ -2518,9 +2533,23 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ if ( iceFluxFeDissolvedField % isActive ) then iceFluxFeDissolved(i) = x2o_o % rAttr(index_x2o_Fioi_fed1, n) endif - if ( iceFluxDustField % isActive ) then + if ( config_use_ecosysTracers_iron_solubility_file .and. & + config_use_ecosystracers_sea_ice_coupling .and. & + iceFluxDustField % isActive ) then iceFluxDust(i) = x2o_o % rAttr(index_x2o_Fioi_dust1, n) endif + if ( config_use_ecosysTracers_iron_solubility_file .and. dust_FLUX_WETField % isActive ) then + dust_FLUX_WET(i) = x2o_o % rAttr(index_x2o_Faxa_dstwet1, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstwet2, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstwet3, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstwet4, n) + endif + if ( config_use_ecosysTracers_iron_solubility_file .and. dust_FLUX_DRYField % isActive ) then + dust_FLUX_DRY(i) = x2o_o % rAttr(index_x2o_Faxa_dstdry1, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstdry2, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstdry3, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstdry4, n) + endif if ( iceFluxDOCField % isActive ) then iceFluxDOC(1,i) = x2o_o % rAttr(index_x2o_Fioi_doc1, n) iceFluxDOC(2,i) = x2o_o % rAttr(index_x2o_Fioi_doc2, n) @@ -2626,6 +2655,11 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ call mpas_pool_get_field(ecosysSeaIceCoupling, 'iceFluxDust', iceFluxDustField) call mpas_pool_get_field(ecosysSeaIceCoupling, 'iceFluxDOC', iceFluxDOCField) call mpas_pool_get_field(ecosysSeaIceCoupling, 'iceFluxDON', iceFluxDONField) + + if (config_use_ecosysTracers_iron_solubility_file) then + call mpas_pool_get_field(ecosysAuxiliary, 'dust_FLUX_WET' , dust_FLUX_WETField) + call mpas_pool_get_field(ecosysAuxiliary, 'dust_FLUX_DRY' , dust_FLUX_DRYField) + endif endif endif if (config_use_DMSTracers .and. config_use_DMSTracers_sea_ice_coupling) then @@ -2808,6 +2842,12 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ if ( iceFluxDustField % isActive ) then call mpas_dmpar_exch_halo_field(iceFluxDustField) endif + if ( config_use_ecosysTracers_iron_solubility_file .and. dust_FLUX_WETField % isActive ) then + call mpas_dmpar_exch_halo_field(dust_FLUX_WETField) + endif + if ( config_use_ecosysTracers_iron_solubility_file .and. dust_FLUX_DRYField % isActive ) then + call mpas_dmpar_exch_halo_field(dust_FLUX_DRYField) + endif if ( iceFluxDOCField % isActive ) then call mpas_dmpar_exch_halo_field(iceFluxDOCField) endif diff --git a/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F b/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F index 0148c32947cd..c31950a04e88 100755 --- a/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F +++ b/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F @@ -1696,13 +1696,19 @@ subroutine ocn_tracer_ecosys_surface_flux_compute(activeTracers, ecosysTracers, iceFraction, & landIceFraction + ! input flux components in ecosysAuxiliary real (kind=RKIND), dimension(:), pointer :: & windSpeedSquared10m, & depositionFluxNO3, & depositionFluxNH4, & IRON_FLUX_IN, & + IRON_Solubility_wet, & + IRON_Solubility_dry, & + IRON_in_dust_fraction,& dust_FLUX_IN, & + dust_FLUX_WET, & + dust_FLUX_DRY, & riverFluxNO3, & riverFluxPO4, & riverFluxDON, & @@ -1723,6 +1729,7 @@ subroutine ocn_tracer_ecosys_surface_flux_compute(activeTracers, ecosysTracers, iceFluxSiO3, & iceFluxNH4, & iceFluxDOCr, & + iceFluxDust, & iceFluxFeDissolved real (kind=RKIND), dimension(:,:), pointer :: iceFluxPhytoC, & @@ -1810,6 +1817,7 @@ subroutine ocn_tracer_ecosys_surface_flux_compute(activeTracers, ecosysTracers, call mpas_pool_get_array(ecosysSeaIceCoupling, 'iceFluxDOCr', iceFluxDOCr) call mpas_pool_get_array(ecosysSeaIceCoupling, 'iceFluxDOC', iceFluxDOC) call mpas_pool_get_array(ecosysSeaIceCoupling, 'iceFluxDON', iceFluxDON) + call mpas_pool_get_array(ecosysSeaIceCoupling, 'iceFluxDust', iceFluxDust) call mpas_pool_get_array(ecosysSeaIceCoupling, 'iceFluxFeDissolved', iceFluxFeDissolved) endif @@ -1864,14 +1872,20 @@ subroutine ocn_tracer_ecosys_surface_flux_compute(activeTracers, ecosysTracers, activeTracers(indexTemperature,iLevelSurface,iCell) marbl_instances(1)%surface_flux_forcings(sss_indexInMARBL)%field_0d(iCell) = & activeTracers(indexSalinity,iLevelSurface,iCell) -! NOTE pass in total Fe and mult by parm_Fe_bioavail inside the flux routine -! divide river Fe by bioavail since it is already the available to make it total - marbl_instances(1)%surface_flux_forcings(ironFlux_indexInMARBL)%field_0d(iCell) = & - IRON_FLUX_IN(iCell) marbl_instances(1)%surface_flux_forcings(noxFlux_indexInMARBL)%field_0d(iCell) = & depositionFluxNO3(iCell) marbl_instances(1)%surface_flux_forcings(nhyFlux_indexInMARBL)%field_0d(iCell) = & depositionFluxNH4(iCell) + + if(config_use_ecosystracers_sea_ice_coupling) then + IRON_FLUX_IN(iCell) = (1.0_RKIND - iceFraction(iCell))*IRON_FLUX_IN(iCell) & + + iceFluxFeDissolved(iCell) + dust_FLUX_IN(iCell) = (1.0_RKIND - iceFraction(iCell))*dust_FLUX_IN(iCell) & + + iceFluxDust(iCell) + endif +! NOTE pass in total Fe and mult by parm_Fe_bioavail inside the flux routine + marbl_instances(1)%surface_flux_forcings(ironFlux_indexInMARBL)%field_0d(iCell) = & + IRON_FLUX_IN(iCell) marbl_instances(1)%surface_flux_forcings(dustFluxSurface_indexInMARBL)%field_0d(iCell) = & dust_FLUX_IN(iCell) @@ -1947,6 +1961,7 @@ subroutine ocn_tracer_ecosys_surface_flux_compute(activeTracers, ecosysTracers, ecosysSurfaceFlux(sio3_ind_MPAS,iCell) = & ecosysSurfaceFlux(sio3_ind_MPAS,iCell) + riverFluxSiO3(iCell) ecosysSurfaceFlux(fe_ind_MPAS,iCell) = & +! divide river Fe by bioavail since it is already the available to make it total ecosysSurfaceFlux(fe_ind_MPAS,iCell) + riverFluxFe(iCell) / parm_Fe_bioavail ecosysSurfaceFlux(dic_ind_MPAS,iCell) = & ecosysSurfaceFlux(dic_ind_MPAS,iCell) + riverFluxDIC(iCell) @@ -2128,7 +2143,12 @@ subroutine ocn_tracer_ecosys_init(domain,err)!{{{ depositionFluxNO3, & depositionFluxNH4, & IRON_FLUX_IN, & + IRON_Solubility_wet, & + IRON_Solubility_dry, & + IRON_in_dust_fraction,& dust_FLUX_IN, & + dust_FLUX_WET, & + dust_FLUX_DRY, & riverFluxNO3, & riverFluxPO4, & riverFluxDON, & @@ -2144,7 +2164,12 @@ subroutine ocn_tracer_ecosys_init(domain,err)!{{{ depositionFluzNO3, & depositionFluzNH4, & IRON_FLUZ_IN, & + IRON_Zolubility_wet, & + IRON_Zolubility_dry, & + IRON_in_duzt_fraction,& dust_FLUZ_IN, & + dust_FLUZ_WET, & + dust_FLUZ_DRY, & riverFluzNO3, & riverFluzPO4, & riverFluzDON, & @@ -2422,6 +2447,13 @@ subroutine ocn_tracer_ecosys_init(domain,err)!{{{ call mpas_pool_get_array(ecosysAuxiliary, 'depositionFluxNH4', depositionFluxNH4) call mpas_pool_get_array(ecosysAuxiliary, 'IRON_FLUX_IN', IRON_FLUX_IN) call mpas_pool_get_array(ecosysAuxiliary, 'dust_FLUX_IN', dust_FLUX_IN) + if (config_use_ecosysTracers_iron_solubility_file) then + call mpas_pool_get_array(ecosysAuxiliary, 'IRON_Solubility_wet', IRON_Solubility_wet) + call mpas_pool_get_array(ecosysAuxiliary, 'IRON_Solubility_dry', IRON_Solubility_dry) + call mpas_pool_get_array(ecosysAuxiliary, 'IRON_in_dust_fraction', IRON_in_dust_fraction) + call mpas_pool_get_array(ecosysAuxiliary, 'dust_FLUX_WET', dust_FLUX_WET) + call mpas_pool_get_array(ecosysAuxiliary, 'dust_FLUX_DRY', dust_FLUX_DRY) + endif if (.not. config_use_ecosysTracers_river_inputs_from_coupler) then call mpas_pool_get_array(ecosysAuxiliary, 'riverFluxNO3', riverFluxNO3) call mpas_pool_get_array(ecosysAuxiliary, 'riverFluxPO4', riverFluxPO4) @@ -2440,6 +2472,13 @@ subroutine ocn_tracer_ecosys_init(domain,err)!{{{ call mpas_pool_get_array(ecosysMonthlyForcing, 'depositionFluzNH4', depositionFluzNH4) call mpas_pool_get_array(ecosysMonthlyForcing, 'IRON_FLUZ_IN', IRON_FLUZ_IN) call mpas_pool_get_array(ecosysMonthlyForcing, 'dust_FLUZ_IN', dust_FLUZ_IN) + if (config_use_ecosysTracers_iron_solubility_file) then + call mpas_pool_get_array(ecosysMonthlyForcing, 'IRON_Zolubility_wet', IRON_Zolubility_wet) + call mpas_pool_get_array(ecosysMonthlyForcing, 'IRON_Zolubility_dry', IRON_Zolubility_dry) + call mpas_pool_get_array(ecosysMonthlyForcing, 'IRON_in_duzt_fraction', IRON_in_duzt_fraction) + call mpas_pool_get_array(ecosysMonthlyForcing, 'dust_FLUZ_WET', dust_FLUZ_WET) + call mpas_pool_get_array(ecosysMonthlyForcing, 'dust_FLUZ_DRY', dust_FLUZ_DRY) + endif if (.not. config_use_ecosysTracers_river_inputs_from_coupler) then call mpas_pool_get_array(ecosysMonthlyForcing, 'riverFluzNO3', riverFluzNO3) call mpas_pool_get_array(ecosysMonthlyForcing, 'riverFluzPO4', riverFluzPO4) @@ -2474,27 +2513,62 @@ subroutine ocn_tracer_ecosys_init(domain,err)!{{{ forcingReferenceTimeMonthly, & forcingIntervalMonthly) - call MPAS_forcing_init_field( domain % streamManager, & - forcingGroupHead, & - 'ecosysMonthlyClimatology', & - 'IRON_FLUZ_IN', & - 'ecosys_monthly_flux', & - 'ecosysMonthlyForcing', & - 'IRON_FLUZ_IN', & - 'linear', & - forcingReferenceTimeMonthly, & - forcingIntervalMonthly) + if (.not. config_use_ecosysTracers_iron_solubility_file) then + call MPAS_forcing_init_field( domain % streamManager, & + forcingGroupHead, & + 'ecosysMonthlyClimatology', & + 'IRON_FLUZ_IN', & + 'ecosys_monthly_flux', & + 'ecosysMonthlyForcing', & + 'IRON_FLUZ_IN', & + 'linear', & + forcingReferenceTimeMonthly, & + forcingIntervalMonthly) - call MPAS_forcing_init_field( domain % streamManager, & - forcingGroupHead, & - 'ecosysMonthlyClimatology', & - 'dust_FLUZ_IN', & - 'ecosys_monthly_flux', & - 'ecosysMonthlyForcing', & - 'dust_FLUZ_IN', & - 'linear', & - forcingReferenceTimeMonthly, & - forcingIntervalMonthly) + call MPAS_forcing_init_field( domain % streamManager, & + forcingGroupHead, & + 'ecosysMonthlyClimatology', & + 'dust_FLUZ_IN', & + 'ecosys_monthly_flux', & + 'ecosysMonthlyForcing', & + 'dust_FLUZ_IN', & + 'linear', & + forcingReferenceTimeMonthly, & + forcingIntervalMonthly) + else + call MPAS_forcing_init_field( domain % streamManager, & + forcingGroupHead, & + 'ecosysMonthlyClimatology', & + 'IRON_Zolubility_wet', & + 'ecosys_monthly_flux', & + 'ecosysMonthlyForcing', & + 'IRON_Zolubility_wet', & + 'linear', & + forcingReferenceTimeMonthly, & + forcingIntervalMonthly) + + call MPAS_forcing_init_field( domain % streamManager, & + forcingGroupHead, & + 'ecosysMonthlyClimatology', & + 'IRON_Zolubility_dry', & + 'ecosys_monthly_flux', & + 'ecosysMonthlyForcing', & + 'IRON_Zolubility_dry', & + 'linear', & + forcingReferenceTimeMonthly, & + forcingIntervalMonthly) + + call MPAS_forcing_init_field( domain % streamManager, & + forcingGroupHead, & + 'ecosysMonthlyClimatology', & + 'IRON_in_duzt_fraction', & + 'ecosys_monthly_flux', & + 'ecosysMonthlyForcing', & + 'IRON_in_duzt_fraction', & + 'linear', & + forcingReferenceTimeMonthly, & + forcingIntervalMonthly) + endif ! only read in river fluxes if not getting them from coupler if (.not. config_use_ecosysTracers_river_inputs_from_coupler) then @@ -2651,6 +2725,11 @@ subroutine ocn_get_ecosysData( streamManager, & depositionFluxNH4, & IRON_FLUX_IN, & dust_FLUX_IN, & + dust_FLUX_WET, & + dust_FLUX_DRY, & + IRON_Solubility_wet, & + IRON_Solubility_dry, & + IRON_in_dust_fraction,& riverFluxNO3, & riverFluxPO4, & riverFluxDON, & @@ -2667,6 +2746,11 @@ subroutine ocn_get_ecosysData( streamManager, & depositionFluzNH4, & IRON_FLUZ_IN, & dust_FLUZ_IN, & + dust_FLUZ_WET, & + dust_FLUZ_DRY, & + IRON_Zolubility_wet, & + IRON_Zolubility_dry, & + IRON_in_duzt_fraction,& riverFluzNO3, & riverFluzPO4, & riverFluzDON, & @@ -2702,6 +2786,13 @@ subroutine ocn_get_ecosysData( streamManager, & call mpas_pool_get_array(ecosysAuxiliary, 'depositionFluxNH4', depositionFluxNH4) call mpas_pool_get_array(ecosysAuxiliary, 'IRON_FLUX_IN', IRON_FLUX_IN) call mpas_pool_get_array(ecosysAuxiliary, 'dust_FLUX_IN', dust_FLUX_IN) + if (config_use_ecosysTracers_iron_solubility_file) then + call mpas_pool_get_array(ecosysAuxiliary, 'IRON_Solubility_wet', IRON_Solubility_wet) + call mpas_pool_get_array(ecosysAuxiliary, 'IRON_Solubility_dry', IRON_Solubility_dry) + call mpas_pool_get_array(ecosysAuxiliary, 'IRON_in_dust_fraction', IRON_in_dust_fraction) + call mpas_pool_get_array(ecosysAuxiliary, 'dust_FLUX_WET', dust_FLUX_WET) + call mpas_pool_get_array(ecosysAuxiliary, 'dust_FLUX_DRY', dust_FLUX_DRY) + endif if (.not. config_use_ecosysTracers_river_inputs_from_coupler) then call mpas_pool_get_array(ecosysAuxiliary, 'riverFluxNO3', riverFluxNO3) call mpas_pool_get_array(ecosysAuxiliary, 'riverFluxPO4', riverFluxPO4) @@ -2718,6 +2809,13 @@ subroutine ocn_get_ecosysData( streamManager, & call mpas_pool_get_array(ecosysMonthlyForcing, 'depositionFluzNH4', depositionFluzNH4) call mpas_pool_get_array(ecosysMonthlyForcing, 'IRON_FLUZ_IN', IRON_FLUZ_IN) call mpas_pool_get_array(ecosysMonthlyForcing, 'dust_FLUZ_IN', dust_FLUZ_IN) + if (config_use_ecosysTracers_iron_solubility_file) then + call mpas_pool_get_array(ecosysMonthlyForcing, 'IRON_Zolubility_wet', IRON_Zolubility_wet) + call mpas_pool_get_array(ecosysMonthlyForcing, 'IRON_Zolubility_dry', IRON_Zolubility_dry) + call mpas_pool_get_array(ecosysMonthlyForcing, 'IRON_in_duzt_fraction', IRON_in_duzt_fraction) + call mpas_pool_get_array(ecosysMonthlyForcing, 'dust_FLUZ_WET', dust_FLUZ_WET) + call mpas_pool_get_array(ecosysMonthlyForcing, 'dust_FLUZ_DRY', dust_FLUZ_DRY) + endif if (.not. config_use_ecosysTracers_river_inputs_from_coupler) then call mpas_pool_get_array(ecosysMonthlyForcing, 'riverFluzNO3', riverFluzNO3) call mpas_pool_get_array(ecosysMonthlyForcing, 'riverFluzPO4', riverFluzPO4) @@ -2733,8 +2831,24 @@ subroutine ocn_get_ecosysData( streamManager, & do iCell = 1, nCells depositionFluxNO3(iCell) = depositionFluzNO3(iCell) depositionFluxNH4(iCell) = depositionFluzNH4(iCell) - IRON_FLUX_IN(iCell) = IRON_FLUZ_IN(iCell) - dust_FLUX_IN(iCell) = dust_FLUZ_IN(iCell) + if (config_use_ecosysTracers_iron_solubility_file) then +! calculate Fe flux from dust, solubility, fraction +! Fe flux units are mmol/m2/s, dust is kg/m2/s +! use 55.845 for atomic weight of Fe (same as mpas-seaice and MarBL) + IRON_Solubility_wet(iCell) = IRON_Zolubility_wet(iCell) + IRON_Solubility_dry(iCell) = IRON_Zolubility_dry(iCell) + IRON_in_dust_fraction(iCell) = IRON_in_duzt_fraction(iCell) + dust_FLUX_WET(iCell) = dust_FLUZ_WET(iCell) + dust_FLUX_DRY(iCell) = dust_FLUZ_DRY(iCell) + + IRON_FLUX_IN(iCell) = ( dust_FLUX_WET(iCell)*IRON_Solubility_wet(iCell) & + + dust_FLUX_DRY(iCell)*IRON_Solubility_dry(iCell) ) & + * IRON_in_dust_fraction(iCell)*1.e6_RKIND/55.845_RKIND + dust_FLUX_IN(iCell) = dust_FLUX_WET(iCell) + dust_FLUX_DRY(iCell) + else + IRON_FLUX_IN(iCell) = IRON_FLUZ_IN(iCell) + dust_FLUX_IN(iCell) = dust_FLUZ_IN(iCell) + endif enddo if (.not. config_use_ecosysTracers_river_inputs_from_coupler) then diff --git a/components/mpas-ocean/src/tracer_groups/Registry_ecosys.xml b/components/mpas-ocean/src/tracer_groups/Registry_ecosys.xml index ac0225d3d0a4..73be7f9ade51 100644 --- a/components/mpas-ocean/src/tracer_groups/Registry_ecosys.xml +++ b/components/mpas-ocean/src/tracer_groups/Registry_ecosys.xml @@ -75,6 +75,10 @@ description="if true, make variables in ecosysDiagFieldsLevel5 available for output" possible_values=".true. or .false." /> + @@ -708,9 +712,24 @@ + + + + + @@ -2046,7 +2065,22 @@ + + + + + From 97de0a4bfcdbf84659061c56323fd27173f9cf3d Mon Sep 17 00:00:00 2001 From: Mathew E Maltrud Date: Mon, 7 Jul 2025 12:49:47 -0700 Subject: [PATCH 2/5] introduce config_use_ecosysTracers_atm_dust_from_coupler --- components/mpas-ocean/bld/build-namelist | 1 + .../mpas-ocean/bld/build-namelist-section | 1 + .../namelist_defaults_mpaso.xml | 1 + .../namelist_definition_mpaso.xml | 8 +++++ components/mpas-ocean/driver/ocn_comp_mct.F | 33 ++++++++++--------- .../src/shared/mpas_ocn_tracer_ecosys.F | 18 ++++++++-- .../src/tracer_groups/Registry_ecosys.xml | 4 +++ 7 files changed, 49 insertions(+), 17 deletions(-) diff --git a/components/mpas-ocean/bld/build-namelist b/components/mpas-ocean/bld/build-namelist index 027be0234f38..faa68c99d51b 100755 --- a/components/mpas-ocean/bld/build-namelist +++ b/components/mpas-ocean/bld/build-namelist @@ -1201,6 +1201,7 @@ if ($ice_bgc eq 'ice_bgc' ) { } add_default($nl, 'config_use_ecosysTracers_river_inputs_from_coupler'); add_default($nl, 'config_use_ecosysTracers_iron_solubility_file'); +add_default($nl, 'config_use_ecosysTracers_atm_dust_from_coupler'); #################################################### # Namelist group: tracer_forcing_freshwaterTracers # diff --git a/components/mpas-ocean/bld/build-namelist-section b/components/mpas-ocean/bld/build-namelist-section index cd9cf87985fc..e44b01817c70 100644 --- a/components/mpas-ocean/bld/build-namelist-section +++ b/components/mpas-ocean/bld/build-namelist-section @@ -600,6 +600,7 @@ add_default($nl, 'config_use_ecosysTracers_surface_value'); add_default($nl, 'config_use_ecosysTracers_river_inputs_from_coupler'); add_default($nl, 'config_use_ecosysTracers_sea_ice_coupling'); add_default($nl, 'config_use_ecosysTracers_iron_solubility_file'); +add_default($nl, 'config_use_ecosysTracers_atm_dust_from_coupler'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level1'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level2'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level3'); diff --git a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml index bd5a341835a7..903d6e4a719c 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml @@ -761,6 +761,7 @@ .false. .false. .false. +.false. .false. .false. .false. diff --git a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml index 8e7edeb55ae4..d9aa5234d2c7 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml @@ -3123,6 +3123,14 @@ Valid values: .true. or .false. Default: Defined in namelist_defaults.xml + +if true, get wet and dry atm dust deposition from the coupler instead of file + +Valid values: .true. or .false. +Default: Defined in namelist_defaults.xml + + if true, make variables in ecosysDiagFieldsLevel1 available for output diff --git a/components/mpas-ocean/driver/ocn_comp_mct.F b/components/mpas-ocean/driver/ocn_comp_mct.F index d3e22d2b56cb..92d4192d2ca6 100644 --- a/components/mpas-ocean/driver/ocn_comp_mct.F +++ b/components/mpas-ocean/driver/ocn_comp_mct.F @@ -2255,7 +2255,7 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ call mpas_pool_get_field(ecosysSeaIceCoupling, 'iceFluxDOC', iceFluxDOCField) call mpas_pool_get_field(ecosysSeaIceCoupling, 'iceFluxDON', iceFluxDONField) - if (config_use_ecosysTracers_iron_solubility_file) then + if (config_use_ecosysTracers_atm_dust_from_coupler) then call mpas_pool_get_field(ecosysAuxiliary, 'dust_FLUX_WET' , dust_FLUX_WETField) call mpas_pool_get_field(ecosysAuxiliary, 'dust_FLUX_DRY' , dust_FLUX_DRYField) endif @@ -2272,7 +2272,7 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ iceFluxDOC => iceFluxDOCField % array iceFluxDON => iceFluxDONField % array - if (config_use_ecosysTracers_iron_solubility_file) then + if (config_use_ecosysTracers_atm_dust_from_coupler) then dust_FLUX_WET => dust_FLUX_WETField % array dust_FLUX_DRY => dust_FLUX_DRYField % array endif @@ -2538,17 +2538,20 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ iceFluxDustField % isActive ) then iceFluxDust(i) = x2o_o % rAttr(index_x2o_Fioi_dust1, n) endif - if ( config_use_ecosysTracers_iron_solubility_file .and. dust_FLUX_WETField % isActive ) then - dust_FLUX_WET(i) = x2o_o % rAttr(index_x2o_Faxa_dstwet1, n) & - + x2o_o % rAttr(index_x2o_Faxa_dstwet2, n) & - + x2o_o % rAttr(index_x2o_Faxa_dstwet3, n) & - + x2o_o % rAttr(index_x2o_Faxa_dstwet4, n) +! do not want atmospheric deposition on 100% land ice to enter the ocean + if ( config_use_ecosysTracers_atm_dust_from_coupler .and. dust_FLUX_WETField % isActive ) then + dust_FLUX_WET(i) = ( x2o_o % rAttr(index_x2o_Faxa_dstwet1, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstwet2, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstwet3, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstwet4, n) ) & + * (1.0_RKIND - landIceFraction(i)) endif - if ( config_use_ecosysTracers_iron_solubility_file .and. dust_FLUX_DRYField % isActive ) then - dust_FLUX_DRY(i) = x2o_o % rAttr(index_x2o_Faxa_dstdry1, n) & - + x2o_o % rAttr(index_x2o_Faxa_dstdry2, n) & - + x2o_o % rAttr(index_x2o_Faxa_dstdry3, n) & - + x2o_o % rAttr(index_x2o_Faxa_dstdry4, n) + if ( config_use_ecosysTracers_atm_dust_from_coupler .and. dust_FLUX_DRYField % isActive ) then + dust_FLUX_DRY(i) = ( x2o_o % rAttr(index_x2o_Faxa_dstdry1, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstdry2, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstdry3, n) & + + x2o_o % rAttr(index_x2o_Faxa_dstdry4, n) ) & + * (1.0_RKIND - landIceFraction(i)) endif if ( iceFluxDOCField % isActive ) then iceFluxDOC(1,i) = x2o_o % rAttr(index_x2o_Fioi_doc1, n) @@ -2656,7 +2659,7 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ call mpas_pool_get_field(ecosysSeaIceCoupling, 'iceFluxDOC', iceFluxDOCField) call mpas_pool_get_field(ecosysSeaIceCoupling, 'iceFluxDON', iceFluxDONField) - if (config_use_ecosysTracers_iron_solubility_file) then + if (config_use_ecosysTracers_atm_dust_from_coupler) then call mpas_pool_get_field(ecosysAuxiliary, 'dust_FLUX_WET' , dust_FLUX_WETField) call mpas_pool_get_field(ecosysAuxiliary, 'dust_FLUX_DRY' , dust_FLUX_DRYField) endif @@ -2842,10 +2845,10 @@ subroutine ocn_import_mct(x2o_o, errorCode)!{{{ if ( iceFluxDustField % isActive ) then call mpas_dmpar_exch_halo_field(iceFluxDustField) endif - if ( config_use_ecosysTracers_iron_solubility_file .and. dust_FLUX_WETField % isActive ) then + if ( config_use_ecosysTracers_atm_dust_from_coupler .and. dust_FLUX_WETField % isActive ) then call mpas_dmpar_exch_halo_field(dust_FLUX_WETField) endif - if ( config_use_ecosysTracers_iron_solubility_file .and. dust_FLUX_DRYField % isActive ) then + if ( config_use_ecosysTracers_atm_dust_from_coupler .and. dust_FLUX_DRYField % isActive ) then call mpas_dmpar_exch_halo_field(dust_FLUX_DRYField) endif if ( iceFluxDOCField % isActive ) then diff --git a/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F b/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F index c31950a04e88..e35fb8dd9801 100755 --- a/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F +++ b/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F @@ -2443,6 +2443,16 @@ subroutine ocn_tracer_ecosys_init(domain,err)!{{{ call mpas_pool_get_subpool(domain % blocklist % structs, 'forcing', forcingPool) call mpas_pool_get_subpool(forcingPool, 'ecosysAuxiliary', ecosysAuxiliary) +! make sure that if config_use_ecosysTracers_atm_dust_from_coupler is true, then +! config_use_ecosysTracers_iron_solubility_file is also true + + if (config_use_ecosysTracers_atm_dust_from_coupler .and. & + .not. config_use_ecosysTracers_iron_solubility_file) then + call mpas_log_write('Abort: In ocn_tracer_ecosys_init' // & + ' must have config_use_ecosysTracers_iron_solubility_file true if ' // & + 'config_use_ecosysTracers_atm_dust_from_coupler is true', MPAS_LOG_CRIT) + endif + call mpas_pool_get_array(ecosysAuxiliary, 'depositionFluxNO3', depositionFluxNO3) call mpas_pool_get_array(ecosysAuxiliary, 'depositionFluxNH4', depositionFluxNH4) call mpas_pool_get_array(ecosysAuxiliary, 'IRON_FLUX_IN', IRON_FLUX_IN) @@ -2838,8 +2848,12 @@ subroutine ocn_get_ecosysData( streamManager, & IRON_Solubility_wet(iCell) = IRON_Zolubility_wet(iCell) IRON_Solubility_dry(iCell) = IRON_Zolubility_dry(iCell) IRON_in_dust_fraction(iCell) = IRON_in_duzt_fraction(iCell) - dust_FLUX_WET(iCell) = dust_FLUZ_WET(iCell) - dust_FLUX_DRY(iCell) = dust_FLUZ_DRY(iCell) + +! only use dust fluxes from file if not coming from the coupler + if (.not. config_use_ecosysTracers_atm_dust_from_coupler) then + dust_FLUX_WET(iCell) = dust_FLUZ_WET(iCell) + dust_FLUX_DRY(iCell) = dust_FLUZ_DRY(iCell) + endif IRON_FLUX_IN(iCell) = ( dust_FLUX_WET(iCell)*IRON_Solubility_wet(iCell) & + dust_FLUX_DRY(iCell)*IRON_Solubility_dry(iCell) ) & diff --git a/components/mpas-ocean/src/tracer_groups/Registry_ecosys.xml b/components/mpas-ocean/src/tracer_groups/Registry_ecosys.xml index 73be7f9ade51..870e07fcd9ce 100644 --- a/components/mpas-ocean/src/tracer_groups/Registry_ecosys.xml +++ b/components/mpas-ocean/src/tracer_groups/Registry_ecosys.xml @@ -55,6 +55,10 @@ description="if true, couple ecosys fields with sea ice" possible_values=".true. or .false." /> + Date: Fri, 3 Oct 2025 13:09:01 -0500 Subject: [PATCH 3/5] new dust and solubility fields in ocn eco forcing stream --- components/mpas-ocean/cime_config/buildnml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/mpas-ocean/cime_config/buildnml b/components/mpas-ocean/cime_config/buildnml index 30682163e965..803f2bae500e 100755 --- a/components/mpas-ocean/cime_config/buildnml +++ b/components/mpas-ocean/cime_config/buildnml @@ -1812,6 +1812,11 @@ def buildnml(case, caseroot, compname): lines.append(' ') lines.append(' ') lines.append(' ') + lines.append(' ') + lines.append(' ') + lines.append(' ') + lines.append(' ') + lines.append(' ') lines.append(' ') lines.append(' ') lines.append(' ') From 784ec432e4033750b436caa8c4b0c67d551aef72 Mon Sep 17 00:00:00 2001 From: Mathew Maltrud Date: Fri, 3 Oct 2025 13:39:05 -0500 Subject: [PATCH 4/5] define shared constant for iron molecular weight --- components/mpas-ocean/src/shared/mpas_ocn_constants.F | 5 ++++- .../mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F | 4 ++-- .../mpas-seaice/src/shared/mpas_seaice_constants.F | 9 +++++---- share/util/shr_const_mod.F90 | 1 + 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/components/mpas-ocean/src/shared/mpas_ocn_constants.F b/components/mpas-ocean/src/shared/mpas_ocn_constants.F index dd3214d8d4fc..69117d68d7b2 100644 --- a/components/mpas-ocean/src/shared/mpas_ocn_constants.F +++ b/components/mpas-ocean/src/shared/mpas_ocn_constants.F @@ -59,7 +59,8 @@ module ocn_constants ocn_ref_salinity ,&! ocean reference salinity (psu) atm_ref_pressure ,&! standard sea level pressure (Pa) molecular_weight_C ,&! molecular weight carbon - molecular_weight_O2 ! molecular weight oxygen + molecular_weight_O2 ,&! molecular weight oxygen + molecular_weight_Fe ! molecular weight iron ! conversion factors @@ -137,6 +138,7 @@ subroutine ocn_constants_init(configPool, packagePool)!{{{ atm_ref_pressure = 101325.0_RKIND ! (Pa) molecular_weight_C = 12.0107_RKIND ! molecular weight carbon molecular_weight_O2 = 15.9994_RKIND ! molecular weight oxygen + molecular_weight_Fe = 55.845_RKIND ! molecular weight iron !----------------------------------------------------------------------- @@ -176,6 +178,7 @@ subroutine ocn_constants_init(configPool, packagePool)!{{{ sea_ice_salinity = SHR_CONST_ICE_REF_SAL ! psu molecular_weight_C = SHR_CONST_MWC ! molecular weight carbon molecular_weight_O2 = SHR_CONST_MWO ! molecular weight oxygen + molecular_weight_Fe = SHR_CONST_MWFE ! molecular weight iron #endif !#ifdef ZERO_SEA_ICE_REF_SAL diff --git a/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F b/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F index e35fb8dd9801..351b2011e7ef 100755 --- a/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F +++ b/components/mpas-ocean/src/shared/mpas_ocn_tracer_ecosys.F @@ -2844,7 +2844,7 @@ subroutine ocn_get_ecosysData( streamManager, & if (config_use_ecosysTracers_iron_solubility_file) then ! calculate Fe flux from dust, solubility, fraction ! Fe flux units are mmol/m2/s, dust is kg/m2/s -! use 55.845 for atomic weight of Fe (same as mpas-seaice and MarBL) +! use same value for atomic weight of Fe as mpas-seaice and MarBL IRON_Solubility_wet(iCell) = IRON_Zolubility_wet(iCell) IRON_Solubility_dry(iCell) = IRON_Zolubility_dry(iCell) IRON_in_dust_fraction(iCell) = IRON_in_duzt_fraction(iCell) @@ -2857,7 +2857,7 @@ subroutine ocn_get_ecosysData( streamManager, & IRON_FLUX_IN(iCell) = ( dust_FLUX_WET(iCell)*IRON_Solubility_wet(iCell) & + dust_FLUX_DRY(iCell)*IRON_Solubility_dry(iCell) ) & - * IRON_in_dust_fraction(iCell)*1.e6_RKIND/55.845_RKIND + * IRON_in_dust_fraction(iCell)*1.e6_RKIND/molecular_weight_Fe dust_FLUX_IN(iCell) = dust_FLUX_WET(iCell) + dust_FLUX_DRY(iCell) else IRON_FLUX_IN(iCell) = IRON_FLUZ_IN(iCell) diff --git a/components/mpas-seaice/src/shared/mpas_seaice_constants.F b/components/mpas-seaice/src/shared/mpas_seaice_constants.F index 6852084479b4..a1034cce3dee 100644 --- a/components/mpas-seaice/src/shared/mpas_seaice_constants.F +++ b/components/mpas-seaice/src/shared/mpas_seaice_constants.F @@ -50,8 +50,9 @@ module seaice_constants seaiceLatentHeatVaporization = SHR_CONST_LATVAP ,&! latent heat, vaporization freshwater (J/kg) seaiceLatentHeatMelting = SHR_CONST_LATICE ,&! latent heat of melting of fresh ice (J/kg) seaiceReferenceSalinity = SHR_CONST_ICE_REF_SAL,&! ice reference salinity (ppt) - seaiceSnowPatchiness = 0.005_RKIND ! parameter for fractional snow area (m) + seaiceSnowPatchiness = 0.005_RKIND ,&! parameter for fractional snow area (m) + gramsIronPerMolIron = SHR_CONST_MWFE ! molecular weight of Iron ! R_gC2molC = SHR_CONST_MWC ,&! molar mass of carbon #else @@ -87,8 +88,9 @@ module seaice_constants ! - seaiceLatentHeatVaporization, & seaiceLatentHeatMelting = 3.34e5_RKIND ,&! latent heat of melting of fresh ice (J/kg) seaiceReferenceSalinity = 4._RKIND ,&! ice reference salinity (ppt) - seaiceSnowPatchiness = 0.02_RKIND ! parameter for fractional snow area (m) + seaiceSnowPatchiness = 0.02_RKIND ,&! parameter for fractional snow area (m) + gramsIronPerMolIron = 55.845_RKIND ! molecular weight of Iron ! R_gC2molC = 12.0107_RKIND, & ! molar mass of carbon #endif @@ -184,8 +186,7 @@ module seaice_constants real(kind=RKIND), public :: & skeletalLayerThickness = 0.03_RKIND , & ! (m) skeletal layer thickness gramsCarbonPerMolCarbon = 12.0107_RKIND , & ! g carbon per mol carbon - microgramsPerKilograms = 1.0e9_RKIND , & ! kg to ug conversion - gramsIronPerMolIron = 55.845_RKIND ! g iron per mol iron + microgramsPerKilograms = 1.0e9_RKIND ! kg to ug conversion ! ocean biogeochemistry ISPOL values real(kind=RKIND), parameter, public :: & diff --git a/share/util/shr_const_mod.F90 b/share/util/shr_const_mod.F90 index fe8a4bb08286..a89b5b2b810a 100644 --- a/share/util/shr_const_mod.F90 +++ b/share/util/shr_const_mod.F90 @@ -29,6 +29,7 @@ MODULE shr_const_mod real(R8),parameter :: SHR_CONST_MWC = 12.0107_R8 ! molecular weight carbon real(R8),parameter :: SHR_CONST_MWO = 15.9994_R8 ! molecular weight oxygen real(R8),parameter :: SHR_CONST_MWCO2 = 44.0095_R8 ! molecular weight carbon dioxide + real(R8),parameter :: SHR_CONST_MWFE = 55.845_R8 ! molecular weight iron real(R8),parameter :: SHR_CONST_RDAIR = SHR_CONST_RGAS/SHR_CONST_MWDAIR ! Dry air gas constant ~ J/K/kg real(R8),parameter :: SHR_CONST_RWV = SHR_CONST_RGAS/SHR_CONST_MWWV ! Water vapor gas constant ~ J/K/kg real(R8),parameter :: SHR_CONST_ZVIR = (SHR_CONST_RWV/SHR_CONST_RDAIR)-1.0_R8 ! RWV/RDAIR - 1.0 From 0b48be3db84c915088db0754fa9403ec87dbc10b Mon Sep 17 00:00:00 2001 From: Jon Wolfe Date: Tue, 7 Oct 2025 12:25:10 -0500 Subject: [PATCH 5/5] Make bld files consistent with Registry --- components/mpas-ocean/bld/build-namelist | 2 +- .../mpas-ocean/bld/build-namelist-section | 2 +- .../namelist_files/namelist_defaults_mpaso.xml | 2 +- .../namelist_definition_mpaso.xml | 18 +++++++++--------- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/components/mpas-ocean/bld/build-namelist b/components/mpas-ocean/bld/build-namelist index faa68c99d51b..c6e5d47b8555 100755 --- a/components/mpas-ocean/bld/build-namelist +++ b/components/mpas-ocean/bld/build-namelist @@ -1200,8 +1200,8 @@ if ($ice_bgc eq 'ice_bgc' ) { add_default($nl, 'config_use_ecosysTracers_sea_ice_coupling', 'val'=>".false."); } add_default($nl, 'config_use_ecosysTracers_river_inputs_from_coupler'); -add_default($nl, 'config_use_ecosysTracers_iron_solubility_file'); add_default($nl, 'config_use_ecosysTracers_atm_dust_from_coupler'); +add_default($nl, 'config_use_ecosysTracers_iron_solubility_file'); #################################################### # Namelist group: tracer_forcing_freshwaterTracers # diff --git a/components/mpas-ocean/bld/build-namelist-section b/components/mpas-ocean/bld/build-namelist-section index e44b01817c70..3cdcbc840968 100644 --- a/components/mpas-ocean/bld/build-namelist-section +++ b/components/mpas-ocean/bld/build-namelist-section @@ -599,13 +599,13 @@ add_default($nl, 'config_use_ecosysTracers_ttd_forcing'); add_default($nl, 'config_use_ecosysTracers_surface_value'); add_default($nl, 'config_use_ecosysTracers_river_inputs_from_coupler'); add_default($nl, 'config_use_ecosysTracers_sea_ice_coupling'); -add_default($nl, 'config_use_ecosysTracers_iron_solubility_file'); add_default($nl, 'config_use_ecosysTracers_atm_dust_from_coupler'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level1'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level2'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level3'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level4'); add_default($nl, 'config_ecosysTracers_diagnostic_fields_level5'); +add_default($nl, 'config_use_ecosysTracers_iron_solubility_file'); #################################################### # Namelist group: tracer_forcing_freshwaterTracers # diff --git a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml index 903d6e4a719c..044f4ef3914a 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml @@ -760,13 +760,13 @@ .false. .false. .false. -.false. .false. .false. .false. .false. .false. .false. +.false. .false. diff --git a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml index d9aa5234d2c7..96486209b48a 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml @@ -3115,17 +3115,9 @@ Valid values: .true. or .false. Default: Defined in namelist_defaults.xml - -if true, use iron solubility field read in from a file - -Valid values: .true. or .false. -Default: Defined in namelist_defaults.xml - - -if true, get wet and dry atm dust deposition from the coupler instead of file +if true, get atmospheric dust inputs from the coupler, else from ecosys monthly forcing file Valid values: .true. or .false. Default: Defined in namelist_defaults.xml @@ -3171,6 +3163,14 @@ Valid values: .true. or .false. Default: Defined in namelist_defaults.xml + +if true, read in Fe solubility from the ecosys forcing file + +Valid values: .true. or .false. +Default: Defined in namelist_defaults.xml + +