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 |
---|---|---|---|
rbcsForcingPeriod | PARM01 | 0.0 | Time interval between forcing fields (in seconds), zero means constant-in-time forcing. |
rbcsForcingCycle | PARM01 | 0.0 | Repeat cycle of forcing fields (in seconds), zero means non-cyclic forcing. |
rbcsForcingOffset | 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. |
rbcsSingleTimeFiles | PARM01 | FALSE | If .TRUE. , forcing fields are given 1 file per rbcsForcingPeriod. |
deltaTrbcs | PARM01 | deltaTclock | Time step used to compute the iteration numbers for rbcsSingleTimeFiles = .TRUE. . |
rbcsVanishingTime | PARM01 | 0.0 | If rbcsVanishingTime > 0, the relaxation strength reduces linearly to vanish at myTime == rbcsVanishingTime. |
rbcsIter0 | PARM01 | 0 | Shift in iteration numbers used to label files if rbcsSingleTimeFiles = .TRUE. (see below for examples). |
useRBCtemp, useRBCsalt, useRBCuVel, useRCvVel | PARM01 | FALSE | Whether to use RBCS for T/S/U/V. |
tauRelaxT, tauRelaxT, tauRelaxT, tauRelaxT | 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 useRBCxxx is TRUE . |
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 relaxMaskFile(maskLEN) is used for all remaining tracers. |
relaxMaskUFile, relaxMaskVFile | PARM01 | ' ' | Filename of 3-D file with mask for U/V. |
relaxTFile, relaxSFile, relaxUFile, relaxVFile | 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 = .FALSE. , it must have one record for each forcing period.
Otherwise there must be a separate file for each period and a 10-digit iteration number is appended to the file name (see Table [Timing of RBCS relaxation fields] and examples below). |
useRBCptracers | 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\)¶
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]\).
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\)¶
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\).
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
:
- exp4 : box with 4 open boundaries, simulating flow over a Gaussian bump based on [adcroft:97]