Embedded zooms

Overview

AGRIF (Adaptive Grid Refinement In Fortran) is a library that allows the seamless space and time refinement over rectangular regions in NEMO. Refinement factors can be odd or even (usually lower than 5 to maintain stability). Interaction between grid is “two-ways” in the sense that the parent grid feeds the child grid open boundaries and the child grid provides volume averages of prognostic variables once a given number of time step is completed. These pages provide guidelines how to use AGRIF in NEMO. For a more technical description of the library itself, please refer to AGRIF.

Compilation

Activating AGRIF requires to append the cpp key key_agrif at compilation time:

./makenemo [...] add_key 'key_agrif'

Although this is transparent to users, the way the code is processed during compilation is different from the standard case: a preprocessing stage (the so called conv program) translates the actual code so that saved arrays may be switched in memory space from one domain to an other.

Definition of the grid hierarchy

An additional text file AGRIF_FixedGrids.in is required at run time. This is where the grid hierarchy is defined. An example of such a file, here taken from the ICEDYN test case, is given below

1
34 63 34 63 3 3 3
0

The first line indicates the number of zooms (1). The second line contains the starting and ending indices in both directions on the root grid (imin=34 imax=63 jmin=34 jmax=63) followed by the space and time refinement factors (3 3 3). The last line is the number of child grid nested in the refined region (0). A more complex example with telescoping grids can be found below and in the AGRIF_DEMO reference configuration directory.

When creating the nested domain, one must keep in mind that the child domain is shifted toward north-east and depends on the number of ghost cells as illustrated by the attempted drawing below for nbghostcells=1 and nbghostcells=3. The grid refinement is 3 and nxfin is the number of child grid points in i-direction.

_images/agrif_grid_position.jpg

Note that rectangular regions must be defined so that they are connected to a single parent grid. Hence, defining overlapping grids with the same refinement ratio will not work properly, boundary data exchange and update being only performed between root and child grids. Use of east-west periodic or north-fold boundary conditions is not allowed in child grids either. Defining for instance a circumpolar zoom in a global model is therefore not possible.

Preprocessing

Knowing the refinement factors and area, a NESTING pre-processing tool may help to create needed input files (mesh file, restart, climatological and forcing files). The key is to ensure volume matching near the child grid interface, a step done by invoking the Agrif_create_bathy.exe program. You may use the namelists provided in the NESTING directory as a guide. These correspond to the namelists used to create AGRIF_DEMO inputs.

Namelist options

Each child grid expects to read its own namelist so that different numerical choices can be made (these should be stored in the form 1_namelist_cfg, 2_namelist_cfg, etc… according to their rank in the grid hierarchy). Consistent time steps and number of steps with the chosen time refinement have to be provided. Specific to AGRIF is the following block:

!-----------------------------------------------------------------------
&namagrif      !  AGRIF zoom                                            ("key_agrif")
!-----------------------------------------------------------------------
   ln_spc_dyn    = .true.  !  use 0 as special value for dynamics
   rn_sponge_tra = 2880.   !  coefficient for tracer   sponge layer [m2/s]
   rn_sponge_dyn = 2880.   !  coefficient for dynamics sponge layer [m2/s]
   ln_chk_bathy  = .false. !  =T  check the parent bathymetry
/

where sponge layer coefficients have to be chosen according to the child grid mesh size. The sponge area is hard coded in NEMO and applies on the following grid points: 2 x refinement factor (from i=1+nbghostcells+1 to i=1+nbghostcells+sponge_area)

References

A1

Laurent Debreu, Patrick Marchesiello, Pierrick Penven, and Gildas Cambon. Two-way nesting in split-explicit ocean models: algorithms, implementation and validation. Ocean Modelling, 49-50:1 – 21, 2012. doi:10.1016/j.ocemod.2012.03.003.

A2

Pierrick Penven, Laurent Debreu, Patrick Marchesiello, and James C. McWilliams. Evaluation and application of the ROMS 1-way embedding procedure to the central california upwelling system. Ocean Modelling, 12(1):157 – 187, 2006. doi:10.1016/j.ocemod.2005.05.002.

A3

Michael A. Spall and William R. Holland. A nested primitive equation model for oceanic applications. Journal of Physical Oceanography, 21(2):205–220, 1991. doi:10.1175/1520-0485(1991)021<0205:ANPEMF>2.0.CO;2.