Skip to content

Commit ea6c06a

Browse files
committed
Enable exchange of runoff DOC from Land to Ice
- Land component calcutes the DOC (Dissolved Organic Carbon) content flux in runoff (KgC/m2/s) - COBALT needs access to that runoff flux (currently done via data_override from file) - Ocean component needs to make the flux available to COBALT - Ice component needs to make the flux available to ICE - land_ice_flux_exchange needs to exchange the flux from Land to Ice
1 parent d84c0af commit ea6c06a

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

config_src/drivers/FMS_cap/MOM_surface_forcing_gfdl.F90

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ module MOM_surface_forcing_gfdl
189189
real, pointer, dimension(:,:) :: lprec =>NULL() !< mass flux of liquid precip [kg m-2 s-1]
190190
real, pointer, dimension(:,:) :: fprec =>NULL() !< mass flux of frozen precip [kg m-2 s-1]
191191
real, pointer, dimension(:,:) :: runoff =>NULL() !< mass flux of liquid runoff [kg m-2 s-1]
192+
real, pointer, dimension(:,:) :: runoff_carbon =>NULL() !< mass flux of carbon in liquid runoff [kg m-2 s-1]
192193
real, pointer, dimension(:,:) :: calving =>NULL() !< mass flux of frozen runoff [kg m-2 s-1]
193194
real, pointer, dimension(:,:) :: stress_mag =>NULL() !< The time-mean magnitude of the stress on the ocean [Pa]
194195
real, pointer, dimension(:,:) :: ustar_berg =>NULL() !< frictional velocity beneath icebergs [m s-1]
@@ -503,6 +504,12 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
503504
call check_mask_val_consistency(IOB%runoff_hflx(i-i0,j-j0), G%mask2dT(i,j), i, j, 'runoff_hflx', G)
504505
endif
505506

507+
if (associated(IOB%runoff_carbon)) then
508+
fluxes%carbon_content_lrunoff(i,j) = US%W_m2_to_QRZ_T * IOB%runoff_carbon(i-i0,j-j0) * G%mask2dT(i,j)
509+
if (CS%check_no_land_fluxes) &
510+
call check_mask_val_consistency(IOB%runoff_carbon(i-i0,j-j0), G%mask2dT(i,j), i, j, 'runoff_carbon', G)
511+
endif
512+
506513
if (associated(IOB%calving_hflx)) then
507514
fluxes%heat_content_frunoff(i,j) = US%W_m2_to_QRZ_T * IOB%calving_hflx(i-i0,j-j0) * G%mask2dT(i,j)
508515
if (CS%check_no_land_fluxes) &

src/core/MOM_forcing_type.F90

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ module MOM_forcing_type
133133
frunoff_glc => NULL(), & !< frozen river glacier runoff entering ocean [R Z T-1 ~> kg m-2 s-1]
134134
seaice_melt => NULL() !< snow/seaice melt (positive) or formation (negative) [R Z T-1 ~> kg m-2 s-1]
135135

136+
! carbon content associated with water crossing ocean surface
137+
real, pointer, dimension(:,:) :: &
138+
carbon_content_lrunoff => NULL() !< carbon content associated with liquid runoff [R Z T-1 ~> kg m-2 s-1]
139+
136140
! Integrated water mass fluxes into the ocean, used for passive tracer sources [H ~> m or kg m-2]
137141
real, pointer, dimension(:,:) :: &
138142
netMassIn => NULL(), & !< Sum of water mass fluxes into the ocean integrated over a
@@ -368,6 +372,7 @@ module MOM_forcing_type
368372
integer :: id_heat_added = -1, id_heat_content_massin = -1
369373
integer :: id_hfrainds = -1, id_hfrunoffds = -1
370374
integer :: id_seaice_melt_heat = -1
375+
integer :: id_carbon_content_lrunoff = -1
371376

372377
! global area integrated heat flux diagnostic handles
373378
integer :: id_total_net_heat_coupler = -1, id_total_net_heat_surface = -1
@@ -1850,6 +1855,11 @@ subroutine register_forcing_type_diags(Time, diag, US, use_temperature, handles,
18501855
'W m-2', conversion=US%QRZ_T_to_W_m2, &
18511856
standard_name='temperature_flux_due_to_runoff_expressed_as_heat_flux_into_sea_water')
18521857

1858+
handles%id_carbon_content_lrunoff = register_diag_field('ocean_model', 'carbon_content_lrunoff', &
1859+
diag%axesT1, Time, 'Carbon content of liquid runoff into ocean', &
1860+
'Kg m-2 s-1', &
1861+
standard_name='carbon_flux_due_to_runoff')
1862+
18531863
if (present(use_glc_runoff)) then
18541864
handles%id_heat_content_frunoff_glc = register_diag_field('ocean_model', 'heat_content_frunoff_glc', &
18551865
diag%axesT1, Time, 'Heat content (relative to 0C) of solid glacier runoff into ocean', &
@@ -2476,6 +2486,11 @@ subroutine fluxes_accumulate(flux_tmp, fluxes, G, wt2, forces)
24762486
wt2*flux_tmp%heat_content_frunoff_glc(i,j)
24772487
enddo ; enddo
24782488
endif
2489+
if (associated(fluxes%carbon_content_lrunoff) .and. associated(flux_tmp%carbon_content_lrunoff)) then
2490+
do j=js,je ; do i=is,ie
2491+
fluxes%carbon_content_lrunoff(i,j) = wt1*fluxes%carbon_content_lrunoff(i,j) + wt2*flux_tmp%carbon_content_lrunoff(i,j)
2492+
enddo ; enddo
2493+
endif
24792494

24802495
if (associated(fluxes%ustar_shelf) .and. associated(flux_tmp%ustar_shelf)) then
24812496
do i=isd,ied ; do j=jsd,jed
@@ -2991,6 +3006,9 @@ subroutine forcing_diagnostics(fluxes_in, sfc_state, G_in, US, time_end, diag, h
29913006
endif
29923007
endif
29933008

3009+
if ((handles%id_carbon_content_lrunoff > 0) .and. associated(fluxes%carbon_content_lrunoff)) &
3010+
call post_data(handles%id_carbon_content_lrunoff, fluxes%carbon_content_lrunoff, diag)
3011+
29943012
! post diagnostics for boundary heat fluxes ====================================
29953013

29963014
if ((handles%id_heat_content_lrunoff > 0) .and. associated(fluxes%heat_content_lrunoff)) &
@@ -3486,6 +3504,7 @@ subroutine allocate_forcing_by_group(G, fluxes, water, heat, ustar, press, &
34863504
call myAlloc(fluxes%latent_frunoff_glc_diag,isd,ied,jsd,jed, heat)
34873505

34883506
call myAlloc(fluxes%salt_flux,isd,ied,jsd,jed, salt)
3507+
call myAlloc(fluxes%carbon_content_lrunoff,isd,ied,jsd,jed, .true.)
34893508

34903509
if (present(heat) .and. present(water)) then ; if (heat .and. water) then
34913510
call myAlloc(fluxes%heat_content_cond,isd,ied,jsd,jed, .true.)
@@ -3798,6 +3817,7 @@ subroutine deallocate_forcing_type(fluxes)
37983817
if (associated(fluxes%latent_frunoff_diag)) deallocate(fluxes%latent_frunoff_diag)
37993818
if (associated(fluxes%latent_frunoff_glc_diag)) deallocate(fluxes%latent_frunoff_glc_diag)
38003819
if (associated(fluxes%sens)) deallocate(fluxes%sens)
3820+
if (associated(fluxes%carbon_content_lrunoff)) deallocate(fluxes%carbon_content_lrunoff)
38013821
if (associated(fluxes%heat_added)) deallocate(fluxes%heat_added)
38023822
if (associated(fluxes%heat_content_lrunoff)) deallocate(fluxes%heat_content_lrunoff)
38033823
if (associated(fluxes%heat_content_frunoff)) deallocate(fluxes%heat_content_frunoff)

0 commit comments

Comments
 (0)