Skip to content

Commit

Permalink
Accumulate fluxes%salt_flux_added and pass to new generic_tracer_upda…
Browse files Browse the repository at this point in the history
…te_from_coupler routine

This allows virtual flux corrections in generic tracer packages
  • Loading branch information
dougiesquire committed Jan 23, 2025
1 parent c82b91a commit 62da2a0
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
9 changes: 9 additions & 0 deletions config_src/external/GFDL_ocean_BGC/generic_tracer.F90
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ module generic_tracer
public generic_tracer_vertdiff_G
public generic_tracer_get_diag_list
public generic_tracer_coupler_accumulate
public generic_tracer_update_from_coupler

!> Turn on generic tracers (note dangerous use of module data)
logical :: do_generic_tracer = .true.
Expand Down Expand Up @@ -65,6 +66,14 @@ subroutine generic_tracer_coupler_accumulate(IOB_struc, weight, model_time)
type(time_type), optional,intent(in) :: model_time !< Time
end subroutine generic_tracer_coupler_accumulate

!> Modify the values obtained from the coupler
subroutine generic_tracer_update_from_coupler(ilb, jlb, salt_flux_added)
integer, intent(in) :: ilb !< Lower bounds of x extent of input arrays on data domain
integer, intent(in) :: jlb !< Lower bounds of y extent of input arrays on data domain
real, dimension(ilb:,jlb:), intent(in) :: salt_flux_added !< Surface salt flux into ocean from restoring
!! or flux adjustment [g/m^2/sec]
end subroutine generic_tracer_update_from_coupler

!> Calls the corresponding generic_X_update_from_source routine for each package X
subroutine generic_tracer_source(Temp,Salt,rho_dzt,dzt,hblt_depth,ilb,jlb,tau,dtts,&
grid_dat,model_time,nbands,max_wavelength_band,sw_pen_band,opacity_band,internal_heat,&
Expand Down
5 changes: 5 additions & 0 deletions src/core/MOM_forcing_type.F90
Original file line number Diff line number Diff line change
Expand Up @@ -2280,6 +2280,11 @@ subroutine fluxes_accumulate(flux_tmp, fluxes, G, wt2, forces)

fluxes%salt_flux(i,j) = wt1*fluxes%salt_flux(i,j) + wt2*flux_tmp%salt_flux(i,j)
enddo ; enddo
if (associated(fluxes%salt_flux_added) .and. associated(flux_tmp%salt_flux_added)) then
do j=js,je ; do i=is,ie
fluxes%salt_flux_added(i,j) = wt1*fluxes%salt_flux_added(i,j) + wt2*flux_tmp%salt_flux_added(i,j)
enddo ; enddo
endif
if (associated(fluxes%heat_added) .and. associated(flux_tmp%heat_added)) then
do j=js,je ; do i=is,ie
fluxes%heat_added(i,j) = wt1*fluxes%heat_added(i,j) + wt2*flux_tmp%heat_added(i,j)
Expand Down
7 changes: 6 additions & 1 deletion src/tracer/MOM_generic_tracer.F90
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ module MOM_generic_tracer
use generic_tracer, only: generic_tracer_coupler_get, generic_tracer_coupler_set
use generic_tracer, only: generic_tracer_end, generic_tracer_get_list, do_generic_tracer
use generic_tracer, only: generic_tracer_update_from_bottom,generic_tracer_vertdiff_G
use generic_tracer, only: generic_tracer_coupler_accumulate
use generic_tracer, only: generic_tracer_coupler_accumulate, generic_tracer_update_from_coupler

use g_tracer_utils, only: g_tracer_get_name,g_tracer_set_values,g_tracer_set_common,g_tracer_get_common
use g_tracer_utils, only: g_tracer_get_next,g_tracer_type,g_tracer_is_prog,g_tracer_flux_init
Expand Down Expand Up @@ -527,6 +527,11 @@ subroutine MOM_generic_tracer_column_physics(h_old, h_new, ea, eb, fluxes, Hml,
! the fluxes without coming into this subroutine.
! MOM5 has to modified to conform.

!
!Call the generic_tracer's update_from_coupler routine (convert salt_flux_added to g/m^2/sec)
!
call generic_tracer_update_from_coupler(G%isd, G%jsd, 1000*(US%RZ_T_to_kg_m2s*fluxes%salt_flux_added))

!
!Add contribution of river to surface flux
!
Expand Down

0 comments on commit 62da2a0

Please sign in to comment.