River runoffs (sbcrnf.F90)


!-----------------------------------------------------------------------
&namsbc_rnf    !   runoffs namelist surface boundary condition
!-----------------------------------------------------------------------
!              !  file name           ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask !
!              !                      !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      !
   sn_rnf      = 'runoff_core_monthly',        -1         , 'sorunoff',   .true.     , .true. , 'yearly'  , ''       , ''       , ''
   sn_cnf      = 'runoff_core_monthly',         0         , 'socoefr0',   .false.    , .true. , 'yearly'  , ''       , ''       , ''
   sn_s_rnf    = 'runoffs'            ,        24         , 'rosaline',   .true.     , .true. , 'yearly'  , ''       , ''       , ''
   sn_t_rnf    = 'runoffs'            ,        24         , 'rotemper',   .true.     , .true. , 'yearly'  , ''       , ''       , ''
   sn_dep_rnf  = 'runoffs'            ,         0         , 'rodepth' ,   .false.    , .true. , 'yearly'  , ''       , ''       , ''

   cn_dir       = './'      !  root directory for the location of the runoff files
   ln_rnf_mouth = .true.    !  specific treatment at rivers mouths
   rn_hrnf      =  15.e0    !  depth over which enhanced vertical mixing is used
   rn_avt_rnf   =   1.e-3   !  value of the additional vertical mixing coef. [m2/s]
   rn_rfact     =   1.e0    !  multiplicative factor for runoff
   ln_rnf_depth = .false.   !  read in depth information for runoff
   ln_rnf_tem   = .false.   !  read in temperature information for runoff
   ln_rnf_sal   = .false.   !  read in salinity information for runoff
   ln_rnf_depth_ini = .false.  ! compute depth at initialisation from runoff file
   rn_rnf_max   = 5.735e-4  !  max value of the runoff climatologie over global domain ( ln_rnf_depth_ini = .true )
   rn_dep_max   = 150.      !  depth over which runoffs is spread ( ln_rnf_depth_ini = .true )
   nn_rnf_depth_file = 0    !  create (=1) a runoff depth file or not (=0)
/

River runoff generally enters the ocean at a nonzero depth rather than through the surface. Many models, however, have traditionally inserted river runoff to the top model cell. This was the case in NEMO prior to the version 3.3, and was combined with an option to increase vertical mixing near the river mouth.

However, with this method numerical and physical problems arise when the top grid cells are of the order of one meter. This situation is common in coastal modelling and is becoming more common in open ocean and climate modelling 7.2.

As such from V 3.3 onwards it is possible to add river runoff through a non-zero depth, and for the temperature and salinity of the river to effect the surrounding ocean. The user is able to specify, in a NetCDF input file, the temperature and salinity of the river, along with the depth (in metres) which the river should be added to.

Namelist variables in namsbc_rnf, ln_rnf_depth, ln_rnf_sal and ln_rnf_temp control whether the river attributes (depth, salinity and temperature) are read in and used. If these are set as false the river is added to the surface box only, assumed to be fresh (0 psu), and/or taken as surface temperature respectively.

The runoff value and attributes are read in in sbcrnf. For temperature -999 is taken as missing data and the river temperature is taken to be the surface temperatue at the river point. For the depth parameter a value of -1 means the river is added to the surface box only, and a value of -999 means the river is added through the entire water column. After being read in the temperature and salinity variables are multiplied by the amount of runoff (converted into m/s) to give the heat and salt content of the river runoff. After the user specified depth is read ini, the number of grid boxes this corresponds to is calculated and stored in the variable nz_rnf. The variable h_dep is then calculated to be the depth (in metres) of the bottom of the lowest box the river water is being added to (i.e. the total depth that river water is being added to in the model).

If the depth information is not provide in the NetCDF file, it can be estimate from the runoff input file at the initial time-step, by setting the namelist parameter ln_rnf_depth_ini to true.

This estimation is a simple linear relation between the runoff and a given depth :

$\displaystyle h\_dep = \frac{rn\_dep\_max} {rn\_rnf\_max} rnf$ (7.7)

where rn_dep_max is the given maximum depth over which the runoffs is spread, rn_rnf_max is the maximum value of the runoff climatologie over the global domain and rnf is the maximum value in time of the runoff climatology at each grid cell (computed online).

The estimated depth array can be output if needed in a NetCDF file by setting the namelist parameter nn_rnf_depth_file to 1.

The mass/volume addition due to the river runoff is, at each relevant depth level, added to the horizontal divergence (hdivn) in the subroutine sbc_rnf_div (called from divcur.F90). This increases the diffusion term in the vicinity of the river, thereby simulating a momentum flux. The sea surface height is calculated using the sum of the horizontal divergence terms, and so the river runoff indirectly forces an increase in sea surface height.

The hdivn terms are used in the tracer advection modules to force vertical velocities. This causes a mass of water, equal to the amount of runoff, to be moved into the box above. The heat and salt content of the river runoff is not included in this step, and so the tracer concentrations are diluted as water of ocean temperature and salinity is moved upward out of the box and replaced by the same volume of river water with no corresponding heat and salt addition.

For the linear free surface case, at the surface box the tracer advection causes a flux of water (of equal volume to the runoff) through the sea surface out of the domain, which causes a salt and heat flux out of the model. As such the volume of water does not change, but the water is diluted.

For the non-linear free surface case (key_ vvl), no flux is allowed through the surface. Instead in the surface box (as well as water moving up from the boxes below) a volume of runoff water is added with no corresponding heat and salt addition and so as happens in the lower boxes there is a dilution effect. (The runoff addition to the top box along with the water being moved up through boxes below means the surface box has a large increase in volume, whilst all other boxes remain the same size)

In trasbc the addition of heat and salt due to the river runoff is added. This is done in the same way for both vvl and non-vvl. The temperature and salinity are increased through the specified depth according to the heat and salt content of the river.

In the non-linear free surface case (vvl), near the end of the time step the change in sea surface height is redistrubuted through the grid boxes, so that the original ratios of grid box heights are restored. In doing this water is moved into boxes below, throughout the water column, so the large volume addition to the surface box is spread between all the grid boxes.

It is also possible for runnoff to be specified as a negative value for modelling flow through straits, i.e. modelling the Baltic flow in and out of the North Sea. When the flow is out of the domain there is no change in temperature and salinity, regardless of the namelist options used, as the ocean water leaving the domain removes heat and salt (at the same concentration) with it.



Footnotes

... modelling7.2
At least a top cells thickness of 1 meter and a 3 hours forcing frequency are required to properly represent the diurnal cycle [Bernie et al., 2005]. see also §7.12.1.

Gurvan Madec and the NEMO Team
NEMO European Consortium2017-02-17