A package which provides the flexibility to relax fields (temperature, salinity, ptracers) in any 3-D location: so could be used as a sponge layer, or as a “source” anywhere in the domain.
For a tracer (T) at every grid point the tendency is modified so that:
\frac{dT}{dt}=\frac{dT}{dt} - \frac{M_{rbc}}{\tau_T} (T-T_{rbc})
where M_{rbc} is a 3-D mask (no time dependence) with values between 0 and 1. Where M_{rbc} is 1, relaxing timescale is 1/\tau_T. Where it is 0 there is no relaxing. The value relaxed to is a 3-D (potentially varying in time) field given by T_{rbc}.
A seperate mask can be used for T,S and ptracers and each of these can be relaxed or not and can have its own timescale \tau_T. These are set in data.rbcs (see below).
The only compile-time parameter you are likely to have to change is in
RBCS.h
, the number of masks, PARAMETER(maskLEN = 3 ), see below.
The runtime parameters are set in data.rbcs
:
Set in RBCS_PARM01: - rbcsForcingPeriod: time interval between forcing fields (in seconds), zero means constant-in-time forcing. - rbcsForcingCycle: repeat cycle of forcing fields (in seconds), zero means non-cyclic forcing. - rbcsForcingOffset: time offset of forcing fields (in seconds, default 0); this is relative to time averages starting at t=0, i.e., the first forcing record/file is placed at {\rm rbcsForcingOffset+rbcsForcingPeriod}/2; see below for examples. - rbcsSingleTimeFiles: true or false (default false), if true, forcing fields are given 1 file per rbcsForcingPeriod. - deltaTrbcs: time step used to compute the iteration numbers for rbcsSingleTimeFiles=T. - rbcsIter0: shift in iteration numbers used to label files if rbcsSingleTimeFiles=T (default 0, see below for examples). - useRBCtemp: true or false (default false) - useRBCsalt: true or false (default false) - useRBCptracers: true or false (default false), must be using ptracers to set true - tauRelaxT: timescale in seconds of relaxing in temperature (\tau_T in equation above). Where mask is 1, relax rate will be 1/tauRelaxT. Default is 1. - tauRelaxS: same for salinity. - relaxMaskFile(irbc): filename of 3-D file with mask (M_{rbc} in equation above. Need a file for each irbc. 1=temperature, 2=salinity, 3=ptracer01, 4=ptracer02 etc. If the mask numbers end (see maskLEN) are less than the number tracers, then relaxMaskFile(maskLEN) is used for all remaining ptracers. - relaxTFile: name of file where temperatures that need to be relaxed to (T_{rbc} in equation above) are stored. The file must contain 3-D records to match the model domain. If rbcsSingleTimeFiles=F, it must have one record for each forcing period. If T, there must be a separate file for each period and a 10-digit iteration number is appended to the file name (see Table [tab:pkg:rbcs:timing] and examples below). - relaxSFile: same for salinity.
Set in RBCS_PARM02 for each of the ptracers (iTrc): - useRBCptrnum(iTrc): true or false (default is false). - tauRelaxPTR(iTrc): relax timescale. - relaxPtracerFile(iTrc): file with relax fields.
For constant-in-time relaxation, set rbcsForcingPeriod=0. For time-varying relaxation, Table [tab:pkg:rbcs:timing] illustrates the relation between model time and forcing fields (either records in one big file or, for rbcsSingleTimeFiles=T, individual files labeled with an iteration number). With rbcsSingleTimeFiles=T, this is the same as in the offline package, except that the forcing offset is in seconds.
.. tabularcolumns:: |l|l|l|c|Timing of RBCS relaxation fields
rbcsSingleTimeFiles = T | F | ||
---|---|---|---|
c=0 | c\ne0 | c\ne0 | |
model time | file number | file number | record |
t_0 - p/2 | i_0 | i_0 + c/{\Delta t_{\text{rbcs}}} | c/p |
t_0 + p/2 | i_0 + p/{\Delta t_{\text{rbcs}}} | i_0 + p/{\Delta t_{\text{rbcs}}} | 1 |
t_0+p+p/2 | i_0 + 2p/{\Delta t_{\text{rbcs}}} | i_0 + 2p/{\Delta t_{\text{rbcs}}} | 2 |
... | ... | ... | ... |
t_0+c-p/2 | ... | i_0 + c/{\Delta t_{\text{rbcs}}} | c/p |
... | ... | ... | ... |
where
p = rbcsForcingPeriod
c = rbcsForcingCycle
t_0 = rbcsForcingOffset
i_0 = rbcsIter0
{\Delta t_{\text{rbcs}}} = deltaTrbcs
Set rbcsSingleTimeFiles=F and rbcsForcingOffset=0, and the model will start by interpolating the last and first records of rbcs data, placed at -p/2 and p/2, resp., as appropriate for fields averaged over the time intervals [-p, 0] and [0, p].
Set rbcsForcingCycle=0 and rbcsSingleTimeFiles=T. With rbcsForcingOffset=0, rbcsIter0=0 and deltaTrbcs=rbcsForcingPeriod, the model would then start by interpolating data from files relax*File.0000000000.data and relax*File.0000000001.data, ... , again placed at -p/2 and p/2.
Set rbcsSingleTimeFiles=F and rbcsForcingOffset=-p/2, and the model will start forcing with the first record at t=0.
Set rbcsForcingCycle=0 and rbcsSingleTimeFiles=T. In this case, it is more natural to set rbcsForcingOffset=+p/2. With rbcsIter0=0 and deltaTrbcs=rbcsForcingPeriod, the model would then start with data from files relax*File.0000000000.data at t=0. It would then proceed to interpolate between this file and files relax*File.0000000001.data at t={}rbcsForcingPeriod.
In the directory , the following experiments use rbcs
:
exp4
: box with 4 open boundaries, simulating flow over a Gaussian bump based on :cite:`adcroft:97`