8.3.2. RBCS Package

8.3.2.1. Introduction

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).

8.3.2.2. Key subroutines and parameters

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.

8.3.2.3. Timing of relaxation forcing 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.

Table 8.3 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

8.3.2.4. Example 1: forcing with time averages starting at \(t=0\)

Cyclic data in a single file

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]\).

Non-cyclic data, multiple files

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\).

8.3.2.5. Example 2: forcing with snapshots starting at \(t=0\)

Cyclic data in a single file

Set rbcsSingleTimeFiles=F 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=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.

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 [AHM97]