Skip to content

Commit

Permalink
Fix a bug in the iron flux computation
Browse files Browse the repository at this point in the history
Parentheses were wrong in a function in ecosys_forcing_mod.F90, two parameters
were renamed, and two more were introduced to make the parameterization more
flexible.

Note that this commit breaks backwards compatibility -- there is no way to run
compute this parameterization as it was done in CESM 2.0 and 2.1. Because of
that, I also removed the old namelist values that had previously been triggered
when OCN_BGC_CONFIG=cesm2.0 (or cesm2.1).
  • Loading branch information
mnlevy1981 committed Jun 3, 2020
2 parents 901a9eb + 084fed5 commit 09112aa
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 29 deletions.
6 changes: 4 additions & 2 deletions bld/build-namelist
Original file line number Diff line number Diff line change
Expand Up @@ -1692,8 +1692,10 @@ if ($ecosys_on eq "TRUE") {
add_default($nl, 'iron_frac_in_atm_fine_dust');
add_default($nl, 'iron_frac_in_atm_coarse_dust');
add_default($nl, 'iron_frac_in_seaice_dust');
add_default($nl, 'iron_frac_in_atm_bc');
add_default($nl, 'iron_frac_in_seaice_bc');
add_default($nl, 'atm_bc_fe_bioavail_frac');
add_default($nl, 'atm_fe_to_bc_ratio');
add_default($nl, 'seaice_bc_fe_bioavail_frac');
add_default($nl, 'seaice_fe_to_bc_ratio');
}

##########################################
Expand Down
17 changes: 8 additions & 9 deletions bld/namelist_files/namelist_defaults_pop.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1356,17 +1356,14 @@
<iron_flux_source>driver-derived</iron_flux_source>
<iron_flux_source ocn_coupling="partial" ocn_bgc_config="cesm2.0">monthly-calendar</iron_flux_source>

<dust_ratio_thres>55.0</dust_ratio_thres>
<dust_ratio_thres ocn_bgc_config="cesm2.0">60.0</dust_ratio_thres>
<dust_ratio_thres ocn_coupling="partial">66.2818</dust_ratio_thres>
<dust_ratio_thres>60.0</dust_ratio_thres>
<dust_ratio_thres ocn_coupling="partial">69.00594</dust_ratio_thres>

<fe_bioavail_frac_offset>0.01</fe_bioavail_frac_offset>
<fe_bioavail_frac_offset ocn_bgc_config="cesm2.0">0.01</fe_bioavail_frac_offset>
<fe_bioavail_frac_offset ocn_coupling="partial">0.0131875</fe_bioavail_frac_offset>
<fe_bioavail_frac_offset ocn_coupling="partial">0.0146756</fe_bioavail_frac_offset>

<dust_ratio_to_fe_bioavail_frac_r>170.0</dust_ratio_to_fe_bioavail_frac_r>
<dust_ratio_to_fe_bioavail_frac_r ocn_bgc_config="cesm2.0">170.0</dust_ratio_to_fe_bioavail_frac_r>
<dust_ratio_to_fe_bioavail_frac_r ocn_coupling="partial">400.064</dust_ratio_to_fe_bioavail_frac_r>
<dust_ratio_to_fe_bioavail_frac_r ocn_coupling="partial">366.314</dust_ratio_to_fe_bioavail_frac_r>

<iron_flux_input%filename ocn_grid="gx3v7">ocn/pop/gx3v7/forcing/solFe_scenario4_current_gx3v7_6gmol_cesm1_93_20161122.nc</iron_flux_input%filename>
<iron_flux_input%filename ocn_grid="gx1v6">ocn/pop/gx1v6/forcing/solFe_scenario4_current_gx1v6_8gmol_cesm1_93_20161114.nc</iron_flux_input%filename>
Expand Down Expand Up @@ -1623,8 +1620,10 @@
<iron_frac_in_atm_coarse_dust>0.035</iron_frac_in_atm_coarse_dust>
<iron_frac_in_seaice_dust>0.035</iron_frac_in_seaice_dust>

<iron_frac_in_atm_bc>0.06</iron_frac_in_atm_bc>
<iron_frac_in_seaice_bc>0.06</iron_frac_in_seaice_bc>
<atm_bc_fe_bioavail_frac>0.06</atm_bc_fe_bioavail_frac>
<atm_fe_to_bc_ratio>1.0</atm_fe_to_bc_ratio>
<seaice_bc_fe_bioavail_frac>0.06</seaice_bc_fe_bioavail_frac>
<seaice_fe_to_bc_ratio>1.0</seaice_fe_to_bc_ratio>

<!----------------------------->
<!-- ecosys_tracer_init_nml -->
Expand Down
29 changes: 25 additions & 4 deletions bld/namelist_files/namelist_definition_pop.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7014,22 +7014,43 @@ Default: 0.035
</entry>

<entry
id="iron_frac_in_atm_bc"
id="atm_bc_fe_bioavail_frac"
type="real"
category="ecosys"
category="Forcing (Ecosystem)"
group="ecosys_forcing_data_nml">
fraction, by weight, of iron in black carbon from atm
fraction, by weight, of soluble fe in fe associated with black carbon from atm

Default: 0.06
</entry>

<entry
id="iron_frac_in_seaice_bc"
id="atm_fe_to_bc_ratio"
type="real"
category="ecosys"
category="Forcing (Ecosystem)"
group="ecosys_forcing_data_nml">
ratio of iron mass to black carbon mass emitted from combustion

Default: 1.0
</entry>

<entry
id="seaice_bc_fe_bioavail_frac"
type="real"
category="Forcing (Ecosystem)"
group="ecosys_forcing_data_nml">
fraction, by weight, of soluble fe in fe associated with black carbon from seaice

Default: 0.06
</entry>

<entry
id="seaice_fe_to_bc_ratio"
type="real"
category="Forcing (Ecosystem)"
group="ecosys_forcing_data_nml">
fraction, by weight, of iron in black carbon from seaice
ratio of iron mass to black carbon mass emitted from seaice

Default: 0.06
</entry>
Expand Down
33 changes: 19 additions & 14 deletions source/ecosys_forcing_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -299,8 +299,10 @@ module ecosys_forcing_mod
real(r8) :: iron_frac_in_atm_fine_dust
real(r8) :: iron_frac_in_atm_coarse_dust
real(r8) :: iron_frac_in_seaice_dust
real(r8) :: iron_frac_in_atm_bc
real(r8) :: iron_frac_in_seaice_bc
real(r8) :: atm_bc_fe_bioavail_frac
real(r8) :: atm_fe_to_bc_ratio
real(r8) :: seaice_bc_fe_bioavail_frac
real(r8) :: seaice_fe_to_bc_ratio

real(r8) :: d14c_glo_avg ! global average D14C over the ocean, computed from current D14C field

Expand Down Expand Up @@ -416,7 +418,8 @@ subroutine ecosys_forcing_init(ciso_on, land_mask, &
surf_avg_alk_const, surf_avg_dic_const, &
surf_avg_di13c_const, surf_avg_di14c_const, &
iron_frac_in_atm_fine_dust, iron_frac_in_atm_coarse_dust, &
iron_frac_in_seaice_dust, iron_frac_in_atm_bc, iron_frac_in_seaice_bc
iron_frac_in_seaice_dust, atm_bc_fe_bioavail_frac, atm_fe_to_bc_ratio, &
seaice_bc_fe_bioavail_frac, seaice_fe_to_bc_ratio

!-----------------------------------------------------------------------
! &ecosys_forcing_data_nml
Expand All @@ -427,12 +430,7 @@ subroutine ecosys_forcing_init(ciso_on, land_mask, &
call set_defaults_tracer_read(gas_flux_fice, file_varname='FICE')
call set_defaults_tracer_read(gas_flux_ws, file_varname='XKW')
call set_defaults_tracer_read(gas_flux_ap, file_varname='P')
dust_flux_source = 'driver'
call set_defaults_tracer_read(dust_flux_input, file_varname='dust_flux')
iron_flux_source = 'driver-derived'
dust_ratio_thres = 55.0_r8
fe_bioavail_frac_offset = 0.01_r8
dust_ratio_to_fe_bioavail_frac_r = 170.0_r8
call set_defaults_tracer_read(iron_flux_input, file_varname='iron_flux')
call set_defaults_tracer_read(fesedflux_input, file_varname='FESEDFLUXIN')
call set_defaults_tracer_read(feventflux_input, file_varname='FESEDFLUXIN')
Expand Down Expand Up @@ -509,11 +507,18 @@ subroutine ecosys_forcing_init(ciso_on, land_mask, &
surf_avg_di13c_const = 1944.0_r8
surf_avg_di14c_const = 1944.0_r8

dust_flux_source = 'driver'
iron_flux_source = 'driver-derived'
dust_ratio_thres = 60.0_r8
fe_bioavail_frac_offset = 0.01_r8
dust_ratio_to_fe_bioavail_frac_r = 170.0_r8
iron_frac_in_atm_fine_dust = 0.035_r8
iron_frac_in_atm_coarse_dust = 0.035_r8
iron_frac_in_seaice_dust = 0.035_r8
iron_frac_in_atm_bc = 0.06_r8
iron_frac_in_seaice_bc = 0.06_r8
atm_bc_fe_bioavail_frac = 0.06_r8
atm_fe_to_bc_ratio = 1.0_r8
seaice_bc_fe_bioavail_frac = 0.06_r8
seaice_fe_to_bc_ratio = 1.0_r8

read(forcing_nml, nml=ecosys_forcing_data_nml, iostat=nml_error, iomsg=ioerror_msg)
if (nml_error /= 0) then
Expand Down Expand Up @@ -1981,16 +1986,16 @@ subroutine ecosys_forcing_set_surface_time_varying_forcing_data( &

forcing_field%field_0d(:,:,iblock) = atm_fe_bioavail_frac(:,:) * &
(iron_frac_in_atm_fine_dust * atm_fine_dust_flux(:,:,iblock) + &
iron_frac_in_atm_coarse_dust * atm_coarse_dust_flux(:,:,iblock) + &
iron_frac_in_atm_bc * atm_black_carbon_flux(:,:,iblock))
iron_frac_in_atm_coarse_dust * atm_coarse_dust_flux(:,:,iblock)) + &
atm_bc_fe_bioavail_frac * atm_fe_to_bc_ratio * atm_black_carbon_flux(:,:,iblock)

! add component from seaice

seaice_fe_bioavail_frac(:,:) = atm_fe_bioavail_frac(:,:)

forcing_field%field_0d(:,:,iblock) = forcing_field%field_0d(:,:,iblock) + seaice_fe_bioavail_frac(:,:) * &
(iron_frac_in_seaice_dust * seaice_dust_flux(:,:,iblock) + &
iron_frac_in_seaice_bc * seaice_black_carbon_flux(:,:,iblock))
(iron_frac_in_seaice_dust * seaice_dust_flux(:,:,iblock)) + &
seaice_bc_fe_bioavail_frac * seaice_fe_to_bc_ratio * seaice_black_carbon_flux(:,:,iblock)

! convert to nmol/cm^2/s
forcing_field%field_0d(:,:,iblock) = (1.0e9_r8 / molw_Fe) * forcing_field%field_0d(:,:,iblock)
Expand Down

0 comments on commit 09112aa

Please sign in to comment.