New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
dom_oce.F90 in branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DOM – NEMO

source: branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90 @ 5870

Last change on this file since 5870 was 5870, checked in by acc, 8 years ago

Branch 2015/dev_r5803_NOC_WAD. Merge in trunk changes from 5803 to 5869 in preparation for merge. Also tidied and reorganised some wetting and drying code. Renamed wadlmt.F90 to wetdry.F90. Wetting drying code changes restricted to domzgr.F90, domvvl.F90 nemogcm.F90 sshwzv.F90, dynspg_ts.F90, wetdry.F90 and dynhpg.F90. Code passes full SETTE tests with ln_wd=.false.. Still awaiting test case for checking with ln_wd=.false.

  • Property svn:keywords set to Id
File size: 29.4 KB
Line 
1MODULE dom_oce
2   !!======================================================================
3   !!                       ***  MODULE dom_oce  ***
4   !!       
5   !! ** Purpose :   Define in memory all the ocean space domain variables
6   !!======================================================================
7   !! History :  1.0  ! 2005-10  (A. Beckmann, G. Madec)  reactivate s-coordinate
8   !!            3.3  ! 2010-11  (G. Madec) add mbk. arrays associated to the deepest ocean level
9   !!            3.4  ! 2011-01  (A. R. Porter, STFC Daresbury) dynamical allocation
10   !!            3.5  ! 2012     (S. Mocavero, I. Epicoco) Add arrays associated
11   !!                             to the optimization of BDY communications
12   !!            3.7  ! 2015-11  (G. Madec) introduce surface and scale factor ratio
13   !!                 !          (H. Liu) Add arrays associated with Wetting and Drying
14   !!----------------------------------------------------------------------
15
16   !!----------------------------------------------------------------------
17   !!   Agrif_Root    : dummy function used when lk_agrif=F
18   !!   Agrif_CFixed  : dummy function used when lk_agrif=F
19   !!   dom_oce_alloc : dynamical allocation of dom_oce arrays
20   !!----------------------------------------------------------------------
21   USE par_oce        ! ocean parameters
22
23   IMPLICIT NONE
24   PUBLIC             ! allows the acces to par_oce when dom_oce is used (exception to coding rules)
25
26   PUBLIC dom_oce_alloc  ! Called from nemogcm.F90
27
28   !!----------------------------------------------------------------------
29   !! time & space domain namelist
30   !! ----------------------------
31   !                                    !!* Namelist namdom : time & space domain *
32   INTEGER , PUBLIC ::   nn_bathy        !: = 0/1 ,compute/read the bathymetry file
33   REAL(wp), PUBLIC ::   rn_bathy        !: depth of flat bottom (active if nn_bathy=0; if =0 depth=jpkm1)
34   REAL(wp), PUBLIC ::   rn_hmin         !: minimum ocean depth (>0) or minimum number of ocean levels (<0)
35   REAL(wp), PUBLIC ::   rn_e3zps_min    !: miminum thickness for partial steps (meters)
36   REAL(wp), PUBLIC ::   rn_e3zps_rat    !: minimum thickness ration for partial steps
37   INTEGER , PUBLIC ::   nn_msh          !: = 1 create a mesh-mask file
38   INTEGER , PUBLIC ::   nn_acc          !: = 0/1 use of the acceleration of convergence technique
39   REAL(wp), PUBLIC ::   rn_atfp         !: asselin time filter parameter
40   REAL(wp), PUBLIC ::   rn_rdt          !: time step for the dynamics (and tracer if nacc=0)
41   REAL(wp), PUBLIC ::   rn_rdtmin       !: minimum time step on tracers
42   REAL(wp), PUBLIC ::   rn_rdtmax       !: maximum time step on tracers
43   REAL(wp), PUBLIC ::   rn_rdth         !: depth variation of tracer step
44   INTEGER , PUBLIC ::   nn_closea       !: =0 suppress closed sea/lake from the ORCA domain or not (=1)
45   INTEGER , PUBLIC ::   nn_euler        !: =0 start with forward time step or not (=1)
46   LOGICAL , PUBLIC ::   ln_crs          !: Apply grid coarsening to dynamical model output or online passive tracers
47
48   !! Time splitting parameters
49   !! =========================
50   LOGICAL,  PUBLIC :: ln_bt_fw          !: Forward integration of barotropic sub-stepping
51   LOGICAL,  PUBLIC :: ln_bt_av          !: Time averaging of barotropic variables
52   LOGICAL,  PUBLIC :: ln_bt_nn_auto     !: Set number of barotropic iterations automatically
53   INTEGER,  PUBLIC :: nn_bt_flt         !: Filter choice
54   INTEGER,  PUBLIC :: nn_baro           !: Number of barotropic iterations during one baroclinic step (rdt)
55   REAL(wp), PUBLIC :: rn_bt_cmax        !: Maximum allowed courant number (used if ln_bt_nn_auto=T)
56
57   !! Horizontal grid parameters for domhgr
58   !! =====================================
59   INTEGER       ::   jphgr_msh        !: type of horizontal mesh
60   !                                       !  = 0 curvilinear coordinate on the sphere read in coordinate.nc
61   !                                       !  = 1 geographical mesh on the sphere with regular grid-spacing
62   !                                       !  = 2 f-plane with regular grid-spacing
63   !                                       !  = 3 beta-plane with regular grid-spacing
64   !                                       !  = 4 Mercator grid with T/U point at the equator
65
66   REAL(wp)      ::   ppglam0              !: longitude of first raw and column T-point (jphgr_msh = 1)
67   REAL(wp)      ::   ppgphi0              !: latitude  of first raw and column T-point (jphgr_msh = 1)
68   !                                                        !  used for Coriolis & Beta parameters (jphgr_msh = 2 or 3)
69   REAL(wp)      ::   ppe1_deg             !: zonal      grid-spacing (degrees)
70   REAL(wp)      ::   ppe2_deg             !: meridional grid-spacing (degrees)
71   REAL(wp)      ::   ppe1_m               !: zonal      grid-spacing (degrees)
72   REAL(wp)      ::   ppe2_m               !: meridional grid-spacing (degrees)
73
74   !! Vertical grid parameter for domzgr
75   !! ==================================
76   REAL(wp)      ::   ppsur                !: ORCA r4, r2 and r05 coefficients
77   REAL(wp)      ::   ppa0                 !: (default coefficients)
78   REAL(wp)      ::   ppa1                 !:
79   REAL(wp)      ::   ppkth                !:
80   REAL(wp)      ::   ppacr                !:
81   !
82   !  If both ppa0 ppa1 and ppsur are specified to 0, then
83   !  they are computed from ppdzmin, pphmax , ppkth, ppacr in dom_zgr
84   REAL(wp)      ::   ppdzmin              !: Minimum vertical spacing
85   REAL(wp)      ::   pphmax               !: Maximum depth
86   !
87   LOGICAL       ::   ldbletanh            !: Use/do not use double tanf function for vertical coordinates
88   REAL(wp)      ::   ppa2                 !: Double tanh function parameters
89   REAL(wp)      ::   ppkth2               !:
90   REAL(wp)      ::   ppacr2               !:
91
92   !                                    !! old non-DOCTOR names still used in the model
93   INTEGER , PUBLIC ::   ntopo           !: = 0/1 ,compute/read the bathymetry file
94   REAL(wp), PUBLIC ::   e3zps_min       !: miminum thickness for partial steps (meters)
95   REAL(wp), PUBLIC ::   e3zps_rat       !: minimum thickness ration for partial steps
96   INTEGER , PUBLIC ::   nmsh            !: = 1 create a mesh-mask file
97   INTEGER , PUBLIC ::   nacc            !: = 0/1 use of the acceleration of convergence technique
98   REAL(wp), PUBLIC ::   atfp            !: asselin time filter parameter
99   REAL(wp), PUBLIC ::   rdt             !: time step for the dynamics (and tracer if nacc=0)
100   REAL(wp), PUBLIC ::   rdtmin          !: minimum time step on tracers
101   REAL(wp), PUBLIC ::   rdtmax          !: maximum time step on tracers
102   REAL(wp), PUBLIC ::   rdth            !: depth variation of tracer step
103
104   !                                                  !!! associated variables
105   INTEGER , PUBLIC                 ::   neuler        !: restart euler forward option (0=Euler)
106   REAL(wp), PUBLIC                 ::   atfp1         !: asselin time filter coeff. (atfp1= 1-2*atfp)
107   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   rdttra  !: vertical profile of tracer time step
108   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   r2dtra  !: = 2*rdttra except at nit000 (=rdttra) if neuler=0
109
110   !!----------------------------------------------------------------------
111   !! space domain parameters
112   !!----------------------------------------------------------------------
113   LOGICAL, PUBLIC ::   lzoom      =  .FALSE.   !: zoom flag
114   LOGICAL, PUBLIC ::   lzoom_e    =  .FALSE.   !: East  zoom type flag
115   LOGICAL, PUBLIC ::   lzoom_w    =  .FALSE.   !: West  zoom type flag
116   LOGICAL, PUBLIC ::   lzoom_s    =  .FALSE.   !: South zoom type flag
117   LOGICAL, PUBLIC ::   lzoom_n    =  .FALSE.   !: North zoom type flag
118
119   !                                     !!! domain parameters linked to mpp
120   INTEGER, PUBLIC ::   nperio            !: type of lateral boundary condition
121   INTEGER, PUBLIC ::   nimpp, njmpp      !: i- & j-indexes for mpp-subdomain left bottom
122   INTEGER, PUBLIC ::   nreci, nrecj      !: overlap region in i and j
123   INTEGER, PUBLIC ::   nproc             !: number for local processor
124   INTEGER, PUBLIC ::   narea             !: number for local area
125   INTEGER, PUBLIC ::   nbondi, nbondj    !: mark of i- and j-direction local boundaries
126   INTEGER, ALLOCATABLE, PUBLIC ::   nbondi_bdy(:)    !: mark i-direction local boundaries for BDY open boundaries
127   INTEGER, ALLOCATABLE, PUBLIC ::   nbondj_bdy(:)    !: mark j-direction local boundaries for BDY open boundaries
128   INTEGER, ALLOCATABLE, PUBLIC ::   nbondi_bdy_b(:)  !: mark i-direction of neighbours local boundaries for BDY open boundaries 
129   INTEGER, ALLOCATABLE, PUBLIC ::   nbondj_bdy_b(:)  !: mark j-direction of neighbours local boundaries for BDY open boundaries 
130
131   INTEGER, PUBLIC ::   npolj             !: north fold mark (0, 3 or 4)
132   INTEGER, PUBLIC ::   nlci, nldi, nlei  !: i-dimensions of the local subdomain and its first and last indoor indices
133   INTEGER, PUBLIC ::   nlcj, nldj, nlej  !: i-dimensions of the local subdomain and its first and last indoor indices
134   INTEGER, PUBLIC ::   noea, nowe        !: index of the local neighboring processors in
135   INTEGER, PUBLIC ::   noso, nono        !: east, west, south and north directions
136   INTEGER, PUBLIC ::   npne, npnw        !: index of north east and north west processor
137   INTEGER, PUBLIC ::   npse, npsw        !: index of south east and south west processor
138   INTEGER, PUBLIC ::   nbne, nbnw        !: logical of north east & north west processor
139   INTEGER, PUBLIC ::   nbse, nbsw        !: logical of south east & south west processor
140   INTEGER, PUBLIC ::   nidom             !: ???
141
142   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mig        !: local  ==> global domain i-index
143   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mjg        !: local  ==> global domain j-index
144   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mi0, mi1   !: global ==> local  domain i-index    !!bug ==> other solution?
145   !                                                  ! (mi0=1 and mi1=0 if the global index is not in the local domain)
146   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mj0, mj1   !: global ==> local  domain j-index     !!bug ==> other solution?
147   !                                                  ! (mi0=1 and mi1=0 if the global index is not in the local domain)
148   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   nimppt, njmppt   !: i-, j-indexes for each processor
149   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   ibonit, ibonjt   !: i-, j- processor neighbour existence
150   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   nlcit , nlcjt    !: dimensions of every subdomain
151   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   nldit , nldjt    !: first, last indoor index for each i-domain
152   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   nleit , nlejt    !: first, last indoor index for each j-domain
153   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: nfiimpp, nfipproc, nfilcit
154
155   !!----------------------------------------------------------------------
156   !! horizontal curvilinear coordinate and scale factors
157   !! ---------------------------------------------------------------------
158   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   glamt , glamu, glamv , glamf    !: longitude at t, u, v, f-points [degree]
159   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   gphit , gphiu, gphiv , gphif    !: latitude  at t, u, v, f-points [degree]
160   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::   e1t   , e2t  , r1_e1t, r1_e2t   !: t-point horizontal scale factors    [m]
161   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::   e1u   , e2u  , r1_e1u, r1_e2u   !: horizontal scale factors at u-point [m]
162   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::   e1v   , e2v  , r1_e1v, r1_e2v   !: horizontal scale factors at v-point [m]
163   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::   e1f   , e2f  , r1_e1f, r1_e2f   !: horizontal scale factors at f-point [m]
164   !
165   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e1e2t , r1_e1e2t                !: associated metrics at t-point
166   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e1e2u , r1_e1e2u , e2_e1u       !: associated metrics at u-point
167   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e1e2v , r1_e1e2v , e1_e2v       !: associated metrics at v-point
168   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e1e2f , r1_e1e2f                !: associated metrics at f-point
169   !
170   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ff                              !: coriolis factor                   [1/s]
171
172   !!----------------------------------------------------------------------
173   !! vertical coordinate and scale factors
174   !! ---------------------------------------------------------------------
175   !                                 !!* Namelist namzgr : vertical coordinate *
176   LOGICAL, PUBLIC ::   ln_zco        !: z-coordinate - full step
177   LOGICAL, PUBLIC ::   ln_zps        !: z-coordinate - partial step
178   LOGICAL, PUBLIC ::   ln_sco        !: s-coordinate or hybrid z-s coordinate
179   LOGICAL, PUBLIC ::   ln_isfcav     !: presence of ISF
180
181   !! All coordinates
182   !! ---------------
183   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdep3w_0           !: depth of t-points (sum of e3w) (m)
184   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdept_0, gdepw_0   !: analytical (time invariant) depth at t-w  points (m)
185   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3v_0  , e3f_0     !: analytical (time invariant) vertical scale factors at  v-f
186   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3t_0  , e3u_0     !:                                      t-u  points (m)
187   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3vw_0             !: analytical (time invariant) vertical scale factors at  vw
188   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3w_0  , e3uw_0    !:                                      w-uw points (m)
189#if defined key_vvl
190   LOGICAL, PUBLIC, PARAMETER ::   lk_vvl = .TRUE.    !: variable grid flag
191
192   !! All coordinates
193   !! ---------------
194   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdep3w_n           !: now depth of T-points (sum of e3w) (m)
195   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdept_n, gdepw_n   !: now depth at T-W  points (m)
196   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdept_b, gdepw_b   !: before depth at T-W  points (m)
197   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3t_n              !: now    vertical scale factors at  t       point  (m)
198   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3u_n  , e3v_n     !:            -      -      -    -   u --v   points (m)
199   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3w_n  , e3f_n     !:            -      -      -    -   w --f   points (m)
200   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3uw_n , e3vw_n    !:            -      -      -    -   uw--vw  points (m)
201   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3t_b              !: before     -      -      -    -   t       points (m)
202   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3w_b              !: before     -      -      -    -   t       points (m)
203   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3u_b  , e3v_b     !:   -        -      -      -    -   u --v   points (m)
204   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3uw_b , e3vw_b    !:   -        -      -      -    -   uw--vw  points (m)
205   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3t_a              !: after      -      -      -    -   t       point  (m)
206   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e3u_a  , e3v_a     !:   -        -      -      -    -   u --v   points (m)
207#else
208   LOGICAL, PUBLIC, PARAMETER ::   lk_vvl = .FALSE.   !: fixed grid flag
209#endif
210   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hur  , hvr     !: Now    inverse of u and v-points ocean depth (1/m)
211   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hu   , hv      !:        depth at u- and v-points (meters)
212   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ht             !:        depth at t-points (meters)
213   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ehur_a, ehvr_a !: After  inverse of u and v-points ocean depth (1/m)
214   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ehu_a , ehv_a  !:        depth at u- and v-points (meters)
215   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ehur_b, ehvr_b !: Before inverse of u and v-points ocean depth (1/m)
216   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ehu_b , ehv_b  !:        depth at u- and v-points (meters)
217   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ht_0           !: reference depth at t-       points (meters)
218   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hu_0 , hv_0    !: reference depth at u- and v-points (meters)
219
220   INTEGER, PUBLIC ::   nla10              !: deepest    W level Above  ~10m (nlb10 - 1)
221   INTEGER, PUBLIC ::   nlb10              !: shallowest W level Bellow ~10m (nla10 + 1)
222
223   !! z-coordinate with full steps (also used in the other cases as reference z-coordinate)
224   !! =-----------------====------
225   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   gdept_1d, gdepw_1d !: reference depth of t- and w-points (m)
226   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   e3t_1d  , e3w_1d   !: reference vertical scale factors at T- and W-pts (m)
227   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e3tp    , e3wp     !: ocean bottom level thickness at T and W points
228
229   !! s-coordinate and hybrid z-s-coordinate
230   !! =----------------======---------------
231   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   gsigt, gsigw       !: model level depth coefficient at t-, w-levels (analytic)
232   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   gsi3w              !: model level depth coefficient at w-level (sum of gsigw)
233   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   esigt, esigw       !: vertical scale factor coef. at t-, w-levels
234
235   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hbatv , hbatf      !: ocean depth at the vertical of  v--f
236   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hbatt , hbatu      !:                                 t--u points (m)
237   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   scosrf, scobot     !: ocean surface and bottom topographies
238   !                                                                           !  (if deviating from coordinate surfaces in HYBRID)
239   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hifv  , hiff       !: interface depth between stretching at v--f
240   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hift  , hifu       !: and quasi-uniform spacing             t--u points (m)
241   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rx1                !: Maximum grid stiffness ratio
242
243   !!----------------------------------------------------------------------
244   !! masks, bathymetry
245   !! ---------------------------------------------------------------------
246   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   mbathy             !: number of ocean level (=0, 1, ... , jpk-1)
247   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   mbkt               !: vertical index of the bottom last T- ocean level
248   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   mbku, mbkv         !: vertical index of the bottom last U- and W- ocean level
249   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   bathy                              !: ocean depth (meters)
250   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   tmask_i, umask_i, vmask_i, fmask_i !: interior domain T-point mask
251   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   bmask                              !: land/ocean mask of barotropic stream function
252
253   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   misfdep                 !: top first ocean level                (ISF)
254   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   mikt, miku, mikv, mikf  !: first wet T-, U-, V-, F- ocean level (ISF)
255   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   risfdep                 !: Iceshelf draft                       (ISF)
256   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ssmask                   !: surface domain T-point mask
257
258   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: tmask, umask, vmask, fmask   !: land/ocean mask at T-, U-, V- and F-pts
259   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: wmask, wumask, wvmask        !: land/ocean mask at WT-, WU- and WV-pts
260
261   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   tpol, fpol          !: north fold mask (jperio= 3 or 4)
262
263   !!----------------------------------------------------------------------
264   !! calendar variables
265   !! ---------------------------------------------------------------------
266   INTEGER , PUBLIC ::   nyear         !: current year
267   INTEGER , PUBLIC ::   nmonth        !: current month
268   INTEGER , PUBLIC ::   nday          !: current day of the month
269   INTEGER , PUBLIC ::   ndastp        !: time step date in yyyymmdd format
270   INTEGER , PUBLIC ::   nday_year     !: current day counted from jan 1st of the current year
271   INTEGER , PUBLIC ::   nsec_year     !: current time step counted in second since 00h jan 1st of the current year
272   INTEGER , PUBLIC ::   nsec_month    !: current time step counted in second since 00h 1st day of the current month
273   INTEGER , PUBLIC ::   nsec_week     !: current time step counted in second since 00h of last monday
274   INTEGER , PUBLIC ::   nsec_day      !: current time step counted in second since 00h of the current day
275   REAL(wp), PUBLIC ::   fjulday       !: current julian day
276   REAL(wp), PUBLIC ::   fjulstartyear !: first day of the current year in julian days
277   REAL(wp), PUBLIC ::   adatrj        !: number of elapsed days since the begining of the whole simulation
278   !                                   !: (cumulative duration of previous runs that may have used different time-step size)
279   INTEGER , PUBLIC, DIMENSION(0: 2) ::   nyear_len     !: length in days of the previous/current/next year
280   INTEGER , PUBLIC, DIMENSION(0:13) ::   nmonth_len    !: length in days of the months of the current year
281   INTEGER , PUBLIC, DIMENSION(0:13) ::   nmonth_half   !: second since Jan 1st 0h of the current year and the half of the months
282   INTEGER , PUBLIC, DIMENSION(0:13) ::   nmonth_end    !: second since Jan 1st 0h of the current year and the end of the months
283   INTEGER , PUBLIC                  ::   nsec1jan000   !: second since Jan 1st 0h of nit000 year and Jan 1st 0h the current year
284
285   !!----------------------------------------------------------------------
286   !! mpp reproducibility
287   !!----------------------------------------------------------------------
288#if defined key_mpp_rep
289   LOGICAL, PUBLIC, PARAMETER ::   lk_mpp_rep = .TRUE.    !: agrif flag
290#else
291   LOGICAL, PUBLIC, PARAMETER ::   lk_mpp_rep = .FALSE.   !: agrif flag
292#endif
293
294   !!----------------------------------------------------------------------
295   !! agrif domain
296   !!----------------------------------------------------------------------
297#if defined key_agrif
298   LOGICAL, PUBLIC, PARAMETER ::   lk_agrif = .TRUE.    !: agrif flag
299#else
300   LOGICAL, PUBLIC, PARAMETER ::   lk_agrif = .FALSE.   !: agrif flag
301#endif
302
303   !!----------------------------------------------------------------------
304   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
305   !! $Id$
306   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
307   !!----------------------------------------------------------------------
308CONTAINS
309
310#if ! defined key_agrif
311   !!----------------------------------------------------------------------
312   !! NOT 'key_agrif'      dummy function                     No AGRIF zoom
313   !!----------------------------------------------------------------------
314   LOGICAL FUNCTION Agrif_Root()
315      Agrif_Root = .TRUE.
316   END FUNCTION Agrif_Root
317
318   CHARACTER(len=3) FUNCTION Agrif_CFixed()
319      Agrif_CFixed = '0' 
320   END FUNCTION Agrif_CFixed
321#endif
322
323   INTEGER FUNCTION dom_oce_alloc()
324      !!----------------------------------------------------------------------
325      INTEGER, DIMENSION(13) :: ierr
326      !!----------------------------------------------------------------------
327      ierr(:) = 0
328      !
329      ALLOCATE( rdttra(jpk), r2dtra(jpk), mig(jpi), mjg(jpj), nfiimpp(jpni,jpnj),  &
330         &      nfipproc(jpni,jpnj), nfilcit(jpni,jpnj), STAT=ierr(1) )
331         !
332      ALLOCATE( nimppt(jpnij) , ibonit(jpnij) , nlcit(jpnij) , nlcjt(jpnij) ,     &
333         &      njmppt(jpnij) , ibonjt(jpnij) , nldit(jpnij) , nldjt(jpnij) ,     &
334         &                                      nleit(jpnij) , nlejt(jpnij) ,     &
335         &      mi0(jpidta)   , mi1 (jpidta),  mj0(jpjdta)   , mj1 (jpjdta),      &
336         &      tpol(jpiglo)  , fpol(jpiglo)                               , STAT=ierr(2) )
337         !
338      ALLOCATE( glamt(jpi,jpj) ,    glamu(jpi,jpj) ,  glamv(jpi,jpj) ,  glamf(jpi,jpj) ,     &
339         &      gphit(jpi,jpj) ,    gphiu(jpi,jpj) ,  gphiv(jpi,jpj) ,  gphif(jpi,jpj) ,     &
340         &       e1t (jpi,jpj) ,     e2t (jpi,jpj) , r1_e1t(jpi,jpj) , r1_e2t(jpi,jpj) ,     &
341         &       e1u (jpi,jpj) ,     e2u (jpi,jpj) , r1_e1u(jpi,jpj) , r1_e2u(jpi,jpj) ,     &
342         &       e1v (jpi,jpj) ,     e2v (jpi,jpj) , r1_e1v(jpi,jpj) , r1_e2v(jpi,jpj) ,     &
343         &       e1f (jpi,jpj) ,     e2f (jpi,jpj) , r1_e1f(jpi,jpj) , r1_e2f(jpi,jpj) ,     &
344         &      e1e2t(jpi,jpj) , r1_e1e2t(jpi,jpj)                                     ,     &
345         &      e1e2u(jpi,jpj) , r1_e1e2u(jpi,jpj) , e2_e1u(jpi,jpj)                   ,     &
346         &      e1e2v(jpi,jpj) , r1_e1e2v(jpi,jpj) , e1_e2v(jpi,jpj)                   ,     &
347         &      e1e2f(jpi,jpj) , r1_e1e2f(jpi,jpj)                                     ,     &
348         &        ff (jpi,jpj)                                                         , STAT=ierr(3) )
349         !
350      ALLOCATE( gdep3w_0(jpi,jpj,jpk) , e3v_0(jpi,jpj,jpk) , e3f_0 (jpi,jpj,jpk) ,                         &
351         &      gdept_0 (jpi,jpj,jpk) , e3t_0(jpi,jpj,jpk) , e3u_0 (jpi,jpj,jpk) ,                         &
352         &      gdepw_0 (jpi,jpj,jpk) , e3w_0(jpi,jpj,jpk) , e3vw_0(jpi,jpj,jpk) , e3uw_0(jpi,jpj,jpk) , STAT=ierr(4) )
353         !
354#if defined key_vvl
355      ALLOCATE( gdep3w_n(jpi,jpj,jpk) , e3t_n (jpi,jpj,jpk) , e3u_n (jpi,jpj,jpk) ,                           &
356         &      gdept_n (jpi,jpj,jpk) , e3v_n (jpi,jpj,jpk) , e3w_n (jpi,jpj,jpk) ,                           &
357         &      gdepw_n (jpi,jpj,jpk) , e3f_n (jpi,jpj,jpk) , e3vw_n(jpi,jpj,jpk) , e3uw_n(jpi,jpj,jpk) ,     &
358         &      e3t_b   (jpi,jpj,jpk) , e3u_b (jpi,jpj,jpk) , e3v_b (jpi,jpj,jpk) ,                           &
359         &      e3uw_b  (jpi,jpj,jpk) , e3vw_b(jpi,jpj,jpk) ,                                                 &
360         &      gdept_b (jpi,jpj,jpk) ,gdepw_b(jpi,jpj,jpk) , e3w_b (jpi,jpj,jpk) ,                           &
361         &      e3t_a   (jpi,jpj,jpk) , e3u_a (jpi,jpj,jpk) , e3v_a (jpi,jpj,jpk) ,                           &
362         &      ehu_a   (jpi,jpj)     , ehv_a (jpi,jpj),                                                     &
363         &      ehur_a  (jpi,jpj)     , ehvr_a(jpi,jpj),                                                     &
364         &      ehu_b   (jpi,jpj)     , ehv_b (jpi,jpj),                                                     &
365         &      ehur_b  (jpi,jpj)     , ehvr_b(jpi,jpj),                                  STAT=ierr(5) )                         
366#endif
367         !
368      ALLOCATE( hu(jpi,jpj) , hur(jpi,jpj) , hu_0(jpi,jpj) , ht_0(jpi,jpj) ,     &
369         &      hv(jpi,jpj) , hvr(jpi,jpj) , hv_0(jpi,jpj) , ht  (jpi,jpj) , STAT=ierr(6)  )
370         !
371      ALLOCATE( gdept_1d(jpk) , gdepw_1d(jpk) ,                                     &
372         &      e3t_1d  (jpk) , e3w_1d  (jpk) , e3tp (jpi,jpj), e3wp(jpi,jpj) ,     &
373         &      gsigt   (jpk) , gsigw   (jpk) , gsi3w(jpk)    ,                     &
374         &      esigt   (jpk) , esigw   (jpk)                                 , STAT=ierr(7) )
375         !
376      ALLOCATE( hbatv (jpi,jpj) , hbatf (jpi,jpj) ,     &
377         &      hbatt (jpi,jpj) , hbatu (jpi,jpj) ,     &
378         &      scosrf(jpi,jpj) , scobot(jpi,jpj) ,     &
379         &      hifv  (jpi,jpj) , hiff  (jpi,jpj) ,     &
380         &      hift  (jpi,jpj) , hifu  (jpi,jpj) , rx1(jpi,jpj) , STAT=ierr(8) )
381
382      ALLOCATE( mbathy(jpi,jpj) , bathy(jpi,jpj) ,                                      &
383         &     tmask_i(jpi,jpj) , umask_i(jpi,jpj), vmask_i(jpi,jpj), fmask_i(jpi,jpj), &
384         &     bmask  (jpi,jpj) ,                                                       &
385         &     mbkt   (jpi,jpj) , mbku (jpi,jpj) , mbkv(jpi,jpj) , STAT=ierr(9) )
386
387! (ISF) Allocation of basic array   
388      ALLOCATE( misfdep(jpi,jpj) , risfdep(jpi,jpj),                   &
389         &      mikt(jpi,jpj), miku(jpi,jpj), mikv(jpi,jpj) ,           &
390         &      mikf(jpi,jpj), ssmask(jpi,jpj), STAT=ierr(10) )
391
392      ALLOCATE( tmask(jpi,jpj,jpk) , umask(jpi,jpj,jpk),     & 
393         &      vmask(jpi,jpj,jpk) , fmask(jpi,jpj,jpk), STAT=ierr(11) )
394
395      ALLOCATE( wmask(jpi,jpj,jpk) , wumask(jpi,jpj,jpk), wvmask(jpi,jpj,jpk) , STAT=ierr(12) )
396
397      !
398      dom_oce_alloc = MAXVAL(ierr)
399      !
400   END FUNCTION dom_oce_alloc
401
402   !!======================================================================
403END MODULE dom_oce
404
Note: See TracBrowser for help on using the repository browser.