[MITgcm-support] Tracer budgets

Hannah Kleppin hkleppin at marum.de
Sat Oct 9 05:15:39 EDT 2021


Dear MITgcm users and developers,

When trying to close elemental budgets in a regional modelling set-up 
(using OBCS and RBCS) using a modified version of the DIC pkg, I came up 
with same general questions regarding the DIC package and Ptracers in 
combination with the OBCS pakage.

1.) Time stepping of the DIC-biogeochemistry model:

 From the documentation and the code I'm not entirely sure what the time 
stepping method of the biogeochemistry is. I would assume that it's 
supposedly a simple Euler forward method. However, I have the impression 
that the calculation of the biogeochemical source and sink terms is done 
with a modified tracer values ( I have difficulties locating it in time; 
I'm using the staggered baroclinic time-stepping in combination with 
advection scheme 77 (which switches of the AB- time stepping for 
thermodynamics, as far as I understand) ), i.e., the tracers are already 
updated for diffusion and advection contributions ( calls to  
timestep_tracer (L420) and cycle_tracer (L498) in ptracers_integrate.F), 
before gchem_forcing_sep.F is called.

In the documentation I found the following sentence regarding 
multi-dimensional advection (section 2.17.2.4)

"In order to incorporate this method into the general model algorithm, 
we compute the effective tendency rather than update the tracer so that 
other terms such as diffusion are using the nthtime-level and not the 
updated n+3/3

quantities".


The full tracer equation should be sth like

Tr^(n+1)=Tr^n+GTr_adv^(n+1/2)*dt+GTr^n_diff*dt +GTr_bio^n *dt

the biological sink and source tendencies (GTr_bio) should then be 
calculated based on TR^n

However, I believe the Tracer when entering subroutine 
dic_biotic_forcing.F is

Tr*:= Tr^n+GTr_adv^(n+1/2)*dt+GTr_diff^n*dt

If I calculate my biogeochemical source and sink terms based on the 
updated (advected and diffused) tracer field, wouldn't there be the need 
to do some kind of time splitting. Or is this done, and I just cannot 
see it?

Or otherwise shouldn't dic_biotic_forcing.F  use both, the unmodified 
Tr^n values and Tr*, with GTr_bio^n= a*Tr^n- b*Tr^n and then integrate 
as Tr^(n+1)= Tr*+GTr_bio^n*dt


2.) OBCS and ptracers

  I calculated the total change of phosphorous in my domain in two 
different ways:

First way: I cumulate the amount of phosphorous in each grid cell of the 
model at certain time intervals and get the change of phosphorus content 
in the domain by taking the difference

Second way: summing up all fluxes that leave/enter the domain, these are:

-advection of tracers across the OPBCs (I used the routine 
obcs_balance_flow.F as a template and added the multiplication by the 
pTracer value corresponding to first order upwind scheme, since I 'm 
setting OBCS_u1_adv_Tr=10 in data.obcs

-sedimentation of tracers, leaving the domain through the lower most wet 
grid cell (modification to DIC that I did myself)

-cumulating phosphorus content added to the domain due to resetting 
negative tracer values to zero

- RBCS contribution, by taking the difference in gPtracer in 
ptracers_apply_forcing.F after and before RBCS_ADD_TENDENCY is called 
(and then integrating it over volume of the corresponding grid cells and 
time step)

I manage to match the two different ways of calculating the total change 
in phosphorous in my domain only when I either close the domain with 
solid walls instead of open boundaries, or if I switch the advection and 
diffusion of ptracers of (and possibly other contribution that I'm not 
aware of, by either commenting out the call to Ptracers_integrate.f in 
thermodynamics.F or by setting gTracer to zero around line 380 in 
ptracers_integrate.F).


So I wonder whether I forgot some fluxes (is there diffusion across the 
open boundaries) or whether I calculate the fluxes across the open 
boundaries at a wrong time.  I tried to calculate them at the end of 
gchem_forcing_sep.F and at the end of ptracers_integrate.F just before 
OBCS_APPLY_PTRACER. (I assume that this call to OBCS_APPLY_PTRACER 
updates the ptracer with values of time-level n+1, since the advection 
across the OPBs for the current time level is done before).

I'm sorry for this very long and possibly confusing email. Any ideas on 
other fluxes contributing to ptracer budgets or hints on where in the 
routines to calculate the fluxes across the open boundaries will be 
greatly appreciated.

Kind regards,

Hannah

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.mitgcm.org/pipermail/mitgcm-support/attachments/20211009/0e2f4a44/attachment.html>


More information about the MITgcm-support mailing list