8.3.2. RBCS Package¶
8.3.2.1. Introduction¶
A package which provides the flexibility to relax fields (temperature, salinity, ptracers, horizontal velocities) in any 3-D location: so could be used as a sponge layer, or as a “source” anywhere in the domain.
For a field (\(T\)) at every grid point the tendency is modified so that:
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).
8.3.2.2. Key subroutines and parameters¶
The only compile-time parameter you are likely to have to change is in RBCS_SIZE.h, the number of masks, PARAMETER(maskLEN = 3 ), see below.
Table 8.3 summarizes the
runtime flags that are set in data.rbcs
, and
their default values.
Flag/Parameter |
Group |
Default |
Description |
---|---|---|---|
PARM01 |
0.0 |
Time interval between forcing fields (in seconds), zero means constant-in-time forcing. |
|
PARM01 |
0.0 |
Repeat cycle of forcing fields (in seconds), zero means non-cyclic forcing. |
|
PARM01 |
0.0 |
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 (rbcsForcingOffset + rbcsForcingPeriod )/2 ; see below for examples. |
|
PARM01 |
FALSE |
If |
|
PARM01 |
Time step used to compute the iteration numbers for rbcsSingleTimeFiles = |
||
PARM01 |
0.0 |
If rbcsVanishingTime > 0, the relaxation strength reduces linearly to vanish at myTime == rbcsVanishingTime. |
|
PARM01 |
0 |
Shift in iteration numbers used to label files if rbcsSingleTimeFiles = |
|
PARM01 |
FALSE |
Whether to use RBCS for T/S/U/V. |
|
PARM01 |
0.0 |
Timescales in seconds of relaxing in T/S/U/V (\(\tau_T\) in equation above). Where mask is 1, relax rate will be 1/tauRelaxT. Must be set if the corresponding |
|
relaxMaskFile (irbc) |
PARM01 |
' ' |
Filename of 3-D file with mask (\(M_{rbc}\) in equation above). Need a file for each irbc (1=temperature, 2=salinity, 3=ptracer1, 4=ptracer2, etc). If maskLEN is les than the number of tracers, then |
PARM01 |
' ' |
Filename of 3-D file with mask for U/V. |
|
PARM01 |
' ' |
Name of file where the field that need to be relaxed to (\(T_{rbc}\) in equation above) is stored. The file must contain 3-D records to match the model domain.
If rbcsSingleTimeFiles = |
|
PARM02 |
FALSE |
DEPRECATED Use one useRBCpTrNum per tracer instead. |
|
useRBCpTrNum (iTrc) |
PARM02 |
FALSE |
Whether to use RBCS for the corresponding passive tracer. |
tauRelaxPTR (iTrc) |
PARM02 |
0.0 |
Relaxing timescale for the corresponding ptracer. |
relaxPtracerFile (iTrc) |
PARM02 |
' ' |
File with relax fields for the corresponding ptracer. |
8.3.2.3. Timing of relaxation forcing fields¶
For constant-in-time relaxation, set rbcsForcingPeriod =0.
For time-varying relaxation, Table Table 8.4 illustrates the
relation between model time and forcing fields (either records in one
big file or, for rbcsSingleTimeFiles = .TRUE.
, individual files labeled with an
iteration number). With rbcsSingleTimeFiles = .TRUE.
, this is the same as in
the offline package, except that the forcing offset is in seconds.
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
8.3.2.4. Example 1: forcing with time averages starting at \(t=0\)¶
8.3.2.4.1. Cyclic data in a single file¶
Set rbcsSingleTimeFiles = .FALSE.
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]\).
8.3.2.4.2. Non-cyclic data, multiple files¶
Set rbcsForcingCycle = 0 and rbcsSingleTimeFiles = .TRUE.
. 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\).
8.3.2.5. Example 2: forcing with snapshots starting at \(t=0\)¶
8.3.2.5.1. Cyclic data in a single file¶
Set rbcsSingleTimeFiles = .FALSE.
and rbcsForcingOffset =\(-p/2\), and the
model will start forcing with the first record at \(t=0\).
8.3.2.5.2. Non-cyclic data, multiple files¶
Set rbcsForcingCycle = 0 and rbcsSingleTimeFiles = .TRUE.
. 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.
8.3.2.6. Do’s and Don’ts¶
8.3.2.7. Reference Material¶
8.3.2.8. Experiments and tutorials that use rbcs¶
In the directory, the following experiments use rbcs
: