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