Opened 9 years ago

Closed 8 years ago

Last modified 3 years ago

#937 closed Task (fixed)

Improvement of OBCs

Reported by: cbricaud Owned by: jchanut
Priority: low Milestone:
Component: OCE Version: release-3.4
Severity: Keywords:
Cc: Review:
MP ready?:


Add atmospheric pressure forcing and tide forcing in the new BDY package

Commit History (0)

(No commits)

Change History (5)

comment:2 Changed 8 years ago by greffray

  • Owner changed from Guillaume Reffray to greffray

Merge tidal packages
Merge OBC-BDY packages
Add atmospheric pressure at the open boundaries


  • tideini.F90 (new routine)

Determination of the tidal components specified in the namelist:
For ex, 11 components are considered here:

&nam_tide ! tide parameters (#ifdef key_tide)

ln_tide_pot = .true. ! use tidal potential forcing
clname(1) = 'M2' ! name of constituent
clname(2) = 'S2'
clname(3) = 'N2'
clname(4) = 'K1'
clname(5) = 'O1'
clname(6) = 'Q1'
clname(7) = 'M4'
clname(8) = 'K2'
clname(9) = 'P1'
clname(10) = 'Mf'
clname(11) = 'Mm'


The tidal potential forcing is also determined in this part of the namelist.


  • dynspg_ts.F90 have been modified to work correctly with or without the key_tide.


  • bdytides.F90

Change of the routine name : bdytide_init (old name tide_init used now in the main tidal routine tideini.F90)
Using of the nodal correction programs contained in tide_mod.F90 (merging of the two modules)
It is no more necessary to read the tidal components/phase speeds in the nambdy_tide. This is already done in tideini.F90.
nambdy_tides contains now just two informations:

&nambdy_tide ! tidal forcing at open boundaries

filtide = 'tidal_forcing/tide1_' ! file name root of tidal forcing files
ln_conjug = .true.


nambdy_tides contains now just two informations:
The path of the input tidal files and the convention used in the harmonics complex files.
If ln_conjug is true, the complex contained in the file is written z = x - iy.

The nodal coeffcients are computed each day to ensure the restartability of the code.


  • sbctide.F90

A large part of the initial routine is now contained in tideini.F90


  • nemogcm.F90

Light modification about the initialization of the tides in NEMO.
istate_init is now done previously to have the time informations (daymod.F90) in the computation of the nodal coefficents in tide_init.F90.


  • sbcapr.F90

The inverse barometer is added to the SSH data at the open boundaries. The namelist is changed by adding two parameters:

For ex:
&namsbc_apr ! Atmospheric pressure used as ocean forcing or in bulk
! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation !
! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing !

sn_apr = 'ECMWF_PRES_ORCA025' , 3 ,'somslpre', .true. , .false. , 'daily' , '' ,

cn_dir = 'ecmwf_forcing/' ! root directory for the location of the bulk files
ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F)
rpref = 100970.
ln_apr_obc = .true.


The flag ln_apr_obc activate this correction and the reference pressure can the mean on the domain (ln_ref_apr) or a constant (rpref).


  • bdytra.F90

New algorithms have been added for tracers at the open boundaries:

  • specified
  • neumann
  • damping
  • runoff conditions (S=0.1 PSU and neumann for the T)


  • bdydyn3d.F90

New algorithms have been added for baroclinic velocities at the open boundaries:

  • specified
  • zero
  • damping


  • bdy_oce.F90

Declarations of logicals and parameters usefull to determine the new algorithms.


  • bdyini.F90 and bdydta.F90

Modifications and simplication. Correction of some bug revealed when we consider more than one bdy package.


  • step_oce.F90 and step.F90

Declaration and call the new bdy algorithms

The namelist of the configuration AMM12 have been updated.
The new svn version is 3367.

comment:3 Changed 8 years ago by cbricaud

  • Owner changed from greffray to jchanut
  1. Chanut updates:


  • I have changed the definition of analytical open boundary sets (ie defined in the namelist, when ln_coords_file=.FALSE.). The idea was to be closer to the definition used in the former obc package, and more importantly to avoid some errors in segments locations. For such an open boundary set, it is now assumed that:
  1. One and only one segment can be defined per set. The user choose between an East, West, North or South open boundary type and gives row (column) indice of normal velocity points to be updated as well as start and end indices (note that in the previous version, user defined open boundary indices referred to tracer points which could be confusing with respect to former obc rules). The "default" mode with open boundaries defined at the model domain limits has been kept (nbdyind=-1). An example of namelist block is given below.
  2. Each segment must start and end on land or at an open boundary corner (acute bdy corners are not allowed).
  3. I found more convenient to set open boundary indices on global domain and not on data domain (This has no impact in AMM12 as long as jpizoom=jpjzoom=1 !).
  4. Open boundary data has the same size (nbdyend-nbdybeg+1) for each segments whatever the location of the variable needed (ie at T, U or V points). I also assumed that boundary data is structured (ie given in two dimensions: along boundary dimension first, normal dimension second). fldread.F90 routine has been modified accordingly, though this has not been tested yet. This has been done to simplify open boundary data generation and vizualization.
  5. In case of an open boundary corner, it is assumed that identical schemes are used for each segment (This is done for consistency, otherwise there is no particular reason why this would not be possible).
  6. We found that in case of overlapping analytical segments, open boundary points would be updated twice. As a matter of fact, in such cases, FRS weights were also wrong around corners. This has been corrected by keeping only points with the minimum distance to the open boundary.
&nambdy_index  !  structured open boundaries definition     ("key_bdy")
ctypebdy ='W'                 ! Open boundary type (W,E,S or N)
nbdyind  =-1                  ! indice of velocity row or column

                              ! if ==-1, set obc at the domain boundary
                              !        , discard start and end indices
nbdybeg  = 0                  ! indice of segment start
nbdyend  = 0                  ! indice of segment end


  • I have added the capability to read 2d harmonic tidal data (given on data domain). This makes easier model relocalisation. TPXO7.2 tidal data on AMM12 domain are available for testing. It could be added to the available input data needed for testing? Could we think of merging all harmonics in a single file to reduce the number of inputs ?
  • Small correction in case of FRS and tides: in that case fill boundary data arrays over the whole FRS zone and not only at rim points. For testing, it would be better if input tidal data could be extended to the whole FRS zone.

Pending bugs / ideas for future improvements:

  • Volume correction (ln_vol=.true.) will be wrong with key_vvl since open boundary lateral surface (bdysurftot) is not updated at each time step.
  • There is no open boundary condition on sea level. It is however assumed that divergence is null at open boundaries so that sea level only evolve according to surface water flux. This is has no consequence without key_vvl, but not very clean otherwise.
  • I would recommend not to consider FRS scheme as an "open boundary scheme" itself (rather consider a flag as for relaxation). I mean that it should be possible to use it in combination of other schemes that deal with "rim" points only.
  • Would be useful to duplicate bathymetry across open boundaries to ease Neumann boundary conditions.
  • Option to write initial open boundary data in file. This would be particularly useful to restart idealized experiments in which bdy data is taken from initial state.

comment:4 Changed 8 years ago by cbricaud

  • Resolution set to fixed
  • Status changed from new to closed

present in the merge for nemo_3.5

comment:5 Changed 3 years ago by nemo

  • Type changed from Development to Task

Remove 'Development' type

Note: See TracTickets for help on using tickets.