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 NEMO/branches/2020/dev_r13327_KERNEL-06_2_techene_e3/src/OCE/DOM – NEMO

source: NEMO/branches/2020/dev_r13327_KERNEL-06_2_techene_e3/src/OCE/DOM/dom_oce.F90 @ 13427

Last change on this file since 13427 was 13427, checked in by techene, 22 months ago

debug in order to pass non linear SETTE test when agrif in not activated see #2385

  • Property svn:keywords set to Id
File size: 22.9 KB
Line 
1MODULE dom_oce
2   !!======================================================================
3   !!                       ***  MODULE dom_oce  ***
4   !! ** Purpose :   Define in memory all the ocean space domain variables
5   !!======================================================================
6   !! History :  1.0  ! 2005-10  (A. Beckmann, G. Madec)  reactivate s-coordinate
7   !!            3.3  ! 2010-11  (G. Madec) add mbk. arrays associated to the deepest ocean level
8   !!            3.4  ! 2011-01  (A. R. Porter, STFC Daresbury) dynamical allocation
9   !!            3.5  ! 2012     (S. Mocavero, I. Epicoco) Add arrays associated
10   !!                             to the optimization of BDY communications
11   !!            3.7  ! 2015-11  (G. Madec) introduce surface and scale factor ratio
12   !!             -   ! 2015-11  (G. Madec, A. Coward)  time varying zgr by default
13   !!            4.1  ! 2019-08  (A. Coward, D. Storkey) rename prognostic variables in preparation for new time scheme.
14   !!            4.x  ! 2020-02  (G. Madec, S. Techene) introduce ssh to h0 ratio
15   !!----------------------------------------------------------------------
16
17   !!----------------------------------------------------------------------
18   !!   Agrif_Root    : dummy function used when lk_agrif=F
19   !!   Agrif_Fixed   : dummy function used when lk_agrif=F
20   !!   Agrif_CFixed  : dummy function used when lk_agrif=F
21   !!   dom_oce_alloc : dynamical allocation of dom_oce arrays
22   !!----------------------------------------------------------------------
23   USE par_oce        ! ocean parameters
24
25   IMPLICIT NONE
26   PUBLIC             ! allows the acces to par_oce when dom_oce is used (exception to coding rules)
27
28   PUBLIC dom_oce_alloc  ! Called from nemogcm.F90
29
30   !!----------------------------------------------------------------------
31   !! time & space domain namelist
32   !! ----------------------------
33   !                                   !!* Namelist namdom : time & space domain *
34   LOGICAL , PUBLIC ::   ln_linssh      !: =T  linear free surface ==>> model level are fixed in time
35   LOGICAL , PUBLIC ::   ln_meshmask    !: =T  create a mesh-mask file (mesh_mask.nc)
36   REAL(wp), PUBLIC ::   rn_Dt          !: time step for the dynamics and tracer
37   REAL(wp), PUBLIC ::   rn_atfp        !: asselin time filter parameter
38   LOGICAL , PUBLIC ::   ln_1st_euler   !: =T start with forward time step or not (=F)
39   LOGICAL , PUBLIC ::   ln_crs         !: Apply grid coarsening to dynamical model output or online passive tracers
40
41   !! Free surface parameters
42   !! =======================
43   LOGICAL , PUBLIC :: ln_dynspg_exp    !: Explicit free surface flag
44   LOGICAL , PUBLIC :: ln_dynspg_ts     !: Split-Explicit free surface flag
45
46   !! Time splitting parameters
47   !! =========================
48   LOGICAL,  PUBLIC :: ln_bt_fw         !: Forward integration of barotropic sub-stepping
49   LOGICAL,  PUBLIC :: ln_bt_av         !: Time averaging of barotropic variables
50   LOGICAL,  PUBLIC :: ln_bt_auto       !: Set number of barotropic iterations automatically
51   INTEGER,  PUBLIC :: nn_bt_flt        !: Filter choice
52   INTEGER,  PUBLIC :: nn_e          !: Number of barotropic iterations during one baroclinic step (rn_Dt)
53   REAL(wp), PUBLIC :: rn_bt_cmax       !: Maximum allowed courant number (used if ln_bt_auto=T)
54   REAL(wp), PUBLIC :: rn_bt_alpha      !: Time stepping diffusion parameter
55
56
57   !                                   !!! associated variables
58   LOGICAL , PUBLIC ::   l_1st_euler    !: Euler 1st time-step flag (=T if ln_restart=F or ln_1st_euler=T)
59   REAL(wp), PUBLIC ::   rDt, r1_Dt     !: Current model timestep and reciprocal
60                                        !: rDt = 2 * rn_Dt if leapfrog and l_1st_euler = F
61                                        !:     =     rn_Dt if leapfrog and l_1st_euler = T
62                                        !:     =     rn_Dt if RK3
63
64   !!----------------------------------------------------------------------
65   !! space domain parameters
66   !!----------------------------------------------------------------------
67   INTEGER, PUBLIC ::   jperio   !: Global domain lateral boundary type (between 0 and 7)
68   !                                !  = 0 closed                 ;   = 1 cyclic East-West
69   !                                !  = 2 cyclic North-South     ;   = 3 North fold T-point pivot
70   !                                !  = 4 cyclic East-West AND North fold T-point pivot
71   !                                !  = 5 North fold F-point pivot
72   !                                !  = 6 cyclic East-West AND North fold F-point pivot
73   !                                !  = 7 bi-cyclic East-West AND North-South
74   LOGICAL, PUBLIC ::   l_Iperio, l_Jperio   !   should we explicitely take care I/J periodicity
75
76   !                             !: domain MPP decomposition parameters
77   INTEGER             , PUBLIC ::   nimpp, njmpp     !: i- & j-indexes for mpp-subdomain left bottom
78   INTEGER             , PUBLIC ::   nproc            !: number for local processor
79   INTEGER             , PUBLIC ::   narea            !: number for local area
80   INTEGER             , PUBLIC ::   nbondi, nbondj   !: mark of i- and j-direction local boundaries
81   INTEGER, ALLOCATABLE, PUBLIC ::   nbondi_bdy(:)    !: mark i-direction local boundaries for BDY open boundaries
82   INTEGER, ALLOCATABLE, PUBLIC ::   nbondj_bdy(:)    !: mark j-direction local boundaries for BDY open boundaries
83   INTEGER, ALLOCATABLE, PUBLIC ::   nbondi_bdy_b(:)  !: mark i-direction of neighbours local boundaries for BDY open boundaries 
84   INTEGER, ALLOCATABLE, PUBLIC ::   nbondj_bdy_b(:)  !: mark j-direction of neighbours local boundaries for BDY open boundaries 
85
86   INTEGER, PUBLIC ::   npolj             !: north fold mark (0, 3 or 4)
87   INTEGER, PUBLIC ::   noea, nowe        !: index of the local neighboring processors in
88   INTEGER, PUBLIC ::   noso, nono        !: east, west, south and north directions
89   INTEGER, PUBLIC ::   nidom             !: ???
90
91   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mig        !: local ==> global domain, including halos (jpiglo), i-index
92   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mjg        !: local ==> global domain, including halos (jpjglo), j-index
93   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mig0       !: local ==> global domain, excluding halos (Ni0glo), i-index
94   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mjg0       !: local ==> global domain, excluding halos (Nj0glo), j-index
95   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mig0_oldcmp !: local ==> global domain, excluding halos (Ni0glo), i-index
96   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mjg0_oldcmp !: local ==> global domain, excluding halos (Nj0glo), j-index
97   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mi0, mi1   !: global, including halos (jpiglo) ==> local domain i-index
98   !                                                                !:    (mi0=1 and mi1=0 if global index not in local domain)
99   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   mj0, mj1   !: global, including halos (jpjglo) ==> local domain j-index
100   !                                                                !:    (mj0=1 and mj1=0 if global index not in local domain)
101   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   nimppt,  njmppt   !: i-, j-indexes for each processor
102   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   ibonit,  ibonjt   !: i-, j- processor neighbour existence
103   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   jpiall,  jpjall   !: dimensions of all subdomain
104   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   nis0all, njs0all  !: first, last indoor index for all i-subdomain
105   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   nie0all, nje0all  !: first, last indoor index for all j-subdomain
106   INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   nfimpp, nfproc, nfjpi
107
108   !!----------------------------------------------------------------------
109   !! horizontal curvilinear coordinate and scale factors
110   !! ---------------------------------------------------------------------
111   REAL(wp), PUBLIC, ALLOCATABLE, SAVE        , DIMENSION(:,:) ::   glamt , glamu, glamv , glamf    !: longitude at t, u, v, f-points [degree]
112   REAL(wp), PUBLIC, ALLOCATABLE, SAVE        , DIMENSION(:,:) ::   gphit , gphiu, gphiv , gphif    !: latitude  at t, u, v, f-points [degree]
113   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::   e1t   , e2t  , r1_e1t, r1_e2t   !: t-point horizontal scale factors    [m]
114   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::   e1u   , e2u  , r1_e1u, r1_e2u   !: horizontal scale factors at u-point [m]
115   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::   e1v   , e2v  , r1_e1v, r1_e2v   !: horizontal scale factors at v-point [m]
116   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::   e1f   , e2f  , r1_e1f, r1_e2f   !: horizontal scale factors at f-point [m]
117   !
118   REAL(wp), PUBLIC, ALLOCATABLE, SAVE        , DIMENSION(:,:) ::   e1e2t , r1_e1e2t                !: associated metrics at t-point
119   REAL(wp), PUBLIC, ALLOCATABLE, SAVE        , DIMENSION(:,:) ::   e1e2u , e2_e1u, r1_e1e2u        !: associated metrics at u-point
120   REAL(wp), PUBLIC, ALLOCATABLE, SAVE        , DIMENSION(:,:) ::   e1e2v , e1_e2v, r1_e1e2v        !: associated metrics at v-point
121   REAL(wp), PUBLIC, ALLOCATABLE, SAVE        , DIMENSION(:,:) ::   e1e2f , r1_e1e2f                !: associated metrics at f-point
122   !
123   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ff_f  , ff_t                    !: Coriolis factor at f- & t-points  [1/s]
124   !!----------------------------------------------------------------------
125   !! vertical coordinate and scale factors
126   !! ---------------------------------------------------------------------
127   LOGICAL, PUBLIC ::   ln_zco       !: z-coordinate - full step
128   LOGICAL, PUBLIC ::   ln_zps       !: z-coordinate - partial step
129   LOGICAL, PUBLIC ::   ln_sco       !: s-coordinate or hybrid z-s coordinate
130   LOGICAL, PUBLIC ::   ln_isfcav    !: presence of ISF
131   !                                                        !  reference scale factors
132   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3t_0   !: t- vert. scale factor [m]
133   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3u_0   !: u- vert. scale factor [m]
134   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3v_0   !: v- vert. scale factor [m]
135   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3f_0   !: f- vert. scale factor [m]
136   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3w_0   !: w- vert. scale factor [m]
137   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::    e3uw_0   !: uw-vert. scale factor [m]
138   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::    e3vw_0   !: vw-vert. scale factor [m]
139   !                                                        !  time-dependent scale factors
140#if ! defined key_qco
141   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   e3t, e3u, e3v, e3w, e3uw, e3vw  !: vert. scale factor [m]
142   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   e3f                             !: F-point vert. scale factor [m]
143#endif
144   !                                                        !  time-dependent ratio ssh / h_0
145   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   r3t, r3u, r3v                   !: time-dependent    ratio at t-, u- and v-point [-]
146   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   r3f                             !: mid-time-level    ratio at f-point            [-]
147   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   r3t_f, r3u_f, r3v_f             !: now time-filtered ratio at t-, u- and v-point [-]
148
149   !                                                        !  reference depths of cells
150   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdept_0  !: t- depth              [m]
151   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdepw_0  !: w- depth              [m]
152   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gde3w_0  !: w- depth (sum of e3w) [m]
153   !                                                        !  time-dependent depths of cells
154   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::  gdept, gdepw 
155   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::  gde3w 
156   
157   !                                                        !  reference heights of ocean water column and its inverse
158   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   ht_0, r1_ht_0   !: t-depth        [m] and [1/m]
159   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   hu_0, r1_hu_0   !: u-depth        [m] and [1/m]
160   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   hv_0, r1_hv_0   !: v-depth        [m] and [1/m]
161   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   hf_0, r1_hf_0   !: f-depth        [m] and [1/m]
162   !                                                        ! time-dependent heights of ocean water column
163#if ! defined key_qco
164   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   ht          !: t-points           [m]
165#endif
166   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   hu, r1_hu   !: u-depth            [m] and [1/m]
167   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   hv, r1_hv   !: v-depth            [m] and [1/m]
168
169   INTEGER, PUBLIC ::   nla10              !: deepest    W level Above  ~10m (nlb10 - 1)
170   INTEGER, PUBLIC ::   nlb10              !: shallowest W level Bellow ~10m (nla10 + 1)
171
172   !! 1D reference  vertical coordinate
173   !! =-----------------====------
174   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   gdept_1d, gdepw_1d !: reference depth of t- and w-points (m)
175   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   e3t_1d  , e3w_1d   !: reference vertical scale factors at T- and W-pts (m)
176
177   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   risfdep, bathy
178
179   !!----------------------------------------------------------------------
180   !! masks, top and bottom ocean point position
181   !! ---------------------------------------------------------------------
182!!gm Proposition of new name for top/bottom vertical indices
183!   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   mtk_t, mtk_u, mtk_v   !: top    first wet T-, U-, and V-level (ISF)
184!   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   mbk_t, mbk_u, mbk_v   !: bottom last  wet T-, U-, and V-level
185!!gm
186   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   mbkt, mbku, mbkv   !: bottom last wet T-, U- and V-level
187   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   tmask_i            !: interior domain T-point mask
188   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   tmask_h            !: internal domain T-point mask (Figure 8.5 NEMO book)
189
190   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   mikt, miku, mikv, mikf   !: top first wet T-, U-, V-, F-level           (ISF)
191
192   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)           ::   ssmask, ssumask, ssvmask, ssfmask   !: surface mask at T-,U-, V- and F-pts
193   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: tmask, umask, vmask, wmask, fmask   !: land/ocean mask at T-, U-, V-, W- and F-pts
194   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: wumask, wvmask        !: land/ocean mask at WT-, WU- and WV-pts
195
196   !!----------------------------------------------------------------------
197   !! calendar variables
198   !! ---------------------------------------------------------------------
199   INTEGER , PUBLIC ::   nyear         !: current year
200   INTEGER , PUBLIC ::   nmonth        !: current month
201   INTEGER , PUBLIC ::   nday          !: current day of the month
202   INTEGER , PUBLIC ::   nhour         !: current hour
203   INTEGER , PUBLIC ::   nminute       !: current minute
204   INTEGER , PUBLIC ::   ndastp        !: time step date in yyyymmdd format
205   INTEGER , PUBLIC ::   nday_year     !: current day counted from jan 1st of the current year
206   INTEGER , PUBLIC ::   nsec_year     !: seconds between 00h jan 1st of the current  year and half of the current time step
207   INTEGER , PUBLIC ::   nsec_month    !: seconds between 00h 1st day of the current month and half of the current time step
208   INTEGER , PUBLIC ::   nsec_monday   !: seconds between 00h         of the last Monday   and half of the current time step
209   INTEGER , PUBLIC ::   nsec_day      !: seconds between 00h         of the current   day and half of the current time step
210   REAL(wp), PUBLIC ::   fjulday       !: current julian day
211   REAL(wp), PUBLIC ::   fjulstartyear !: first day of the current year in julian days
212   REAL(wp), PUBLIC ::   adatrj        !: number of elapsed days since the begining of the whole simulation
213   !                                   !: (cumulative duration of previous runs that may have used different time-step size)
214   INTEGER , PUBLIC, DIMENSION(  0: 2) ::   nyear_len     !: length in days of the previous/current/next year
215   INTEGER , PUBLIC, DIMENSION(-11:25) ::   nmonth_len    !: length in days of the months of the current year
216   INTEGER , PUBLIC, DIMENSION(-11:25) ::   nmonth_beg    !: second since Jan 1st 0h of the current year and the half of the months
217   INTEGER , PUBLIC                  ::   nsec1jan000     !: second since Jan 1st 0h of nit000 year and Jan 1st 0h the current year
218   INTEGER , PUBLIC                  ::   nsec000_1jan000   !: second since Jan 1st 0h of nit000 year and nit000
219   INTEGER , PUBLIC                  ::   nsecend_1jan000   !: second since Jan 1st 0h of nit000 year and nitend
220
221   !!----------------------------------------------------------------------
222   !! agrif domain
223   !!----------------------------------------------------------------------
224#if defined key_agrif
225   LOGICAL, PUBLIC, PARAMETER ::   lk_agrif = .TRUE.    !: agrif flag
226   LOGICAL, PUBLIC            ::   lk_south, lk_north, lk_west, lk_east !: Child grid boundaries (interpolation or not)
227#else
228   LOGICAL, PUBLIC, PARAMETER ::   lk_agrif = .FALSE.   !: agrif flag
229#endif
230
231   !!----------------------------------------------------------------------
232   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
233   !! $Id$
234   !! Software governed by the CeCILL license (see ./LICENSE)
235   !!----------------------------------------------------------------------
236CONTAINS
237
238#if ! defined key_agrif
239   !!----------------------------------------------------------------------
240   !! NOT 'key_agrif'      dummy function                     No AGRIF zoom
241   !!----------------------------------------------------------------------
242   LOGICAL FUNCTION Agrif_Root()
243      Agrif_Root = .TRUE.
244   END FUNCTION Agrif_Root
245
246   INTEGER FUNCTION Agrif_Fixed()
247      Agrif_Fixed = 0
248   END FUNCTION Agrif_Fixed
249
250   CHARACTER(len=3) FUNCTION Agrif_CFixed()
251      Agrif_CFixed = '0' 
252   END FUNCTION Agrif_CFixed
253#endif
254
255   INTEGER FUNCTION dom_oce_alloc()
256      !!----------------------------------------------------------------------
257      INTEGER                ::   ii
258      INTEGER, DIMENSION(30) :: ierr
259      !!----------------------------------------------------------------------
260      ii = 0   ;   ierr(:) = 0
261      !
262      ii = ii+1
263      ALLOCATE( mig(jpi), mjg(jpj), mig0(jpi), mjg0(jpj), mig0_oldcmp(jpi), mjg0_oldcmp(jpj), STAT=ierr(ii) )
264         !
265      ii = ii+1
266      ALLOCATE( mi0(jpiglo), mi1(jpiglo), mj0(jpjglo), mj1(jpjglo), STAT=ierr(ii) )
267         !
268      ii = ii+1
269      ALLOCATE( glamt(jpi,jpj) ,    glamu(jpi,jpj) ,  glamv(jpi,jpj) ,  glamf(jpi,jpj) ,     &
270         &      gphit(jpi,jpj) ,    gphiu(jpi,jpj) ,  gphiv(jpi,jpj) ,  gphif(jpi,jpj) ,     &
271         &       e1t (jpi,jpj) ,     e2t (jpi,jpj) , r1_e1t(jpi,jpj) , r1_e2t(jpi,jpj) ,     &
272         &       e1u (jpi,jpj) ,     e2u (jpi,jpj) , r1_e1u(jpi,jpj) , r1_e2u(jpi,jpj) ,     &
273         &       e1v (jpi,jpj) ,     e2v (jpi,jpj) , r1_e1v(jpi,jpj) , r1_e2v(jpi,jpj) ,     &
274         &       e1f (jpi,jpj) ,     e2f (jpi,jpj) , r1_e1f(jpi,jpj) , r1_e2f(jpi,jpj) ,     &
275         &      e1e2t(jpi,jpj) , r1_e1e2t(jpi,jpj)                                     ,     &
276         &      e1e2u(jpi,jpj) , r1_e1e2u(jpi,jpj) , e2_e1u(jpi,jpj)                   ,     &
277         &      e1e2v(jpi,jpj) , r1_e1e2v(jpi,jpj) , e1_e2v(jpi,jpj)                   ,     &
278         &      e1e2f(jpi,jpj) , r1_e1e2f(jpi,jpj)                                     ,     &
279         &      ff_f (jpi,jpj) ,    ff_t (jpi,jpj)                                     , STAT=ierr(ii) )
280         !
281      ii = ii+1
282      ALLOCATE( gdept_0(jpi,jpj,jpk)     , gdepw_0(jpi,jpj,jpk)     , gde3w_0(jpi,jpj,jpk) ,      &
283         &      gdept  (jpi,jpj,jpk,jpt) , gdepw  (jpi,jpj,jpk,jpt) , gde3w  (jpi,jpj,jpk) , STAT=ierr(ii) )
284         !
285      ii = ii+1
286      ALLOCATE(  e3t_0(jpi,jpj,jpk) , e3u_0 (jpi,jpj,jpk) , e3v_0 (jpi,jpj,jpk) , e3f_0(jpi,jpj,jpk) ,      &
287         &       e3w_0(jpi,jpj,jpk) , e3uw_0(jpi,jpj,jpk) , e3vw_0(jpi,jpj,jpk)                      ,  STAT=ierr(ii) )
288         !
289#if defined key_qco
290      ii = ii+1
291      ALLOCATE( r3t  (jpi,jpj,jpt)   , r3u  (jpi,jpj,jpt)    , r3v  (jpi,jpj,jpt)    , r3f  (jpi,jpj) ,      &
292         &      r3t_f(jpi,jpj)       , r3u_f(jpi,jpj)        , r3v_f(jpi,jpj)                         ,  STAT=ierr(ii) )             
293#else
294      ii = ii+1
295      ALLOCATE( e3t(jpi,jpj,jpk,jpt) , e3u (jpi,jpj,jpk,jpt) , e3v (jpi,jpj,jpk,jpt) , e3f(jpi,jpj,jpk) ,      &
296         &      e3w(jpi,jpj,jpk,jpt) , e3uw(jpi,jpj,jpk,jpt) , e3vw(jpi,jpj,jpk,jpt)                    ,  STAT=ierr(ii) )
297#endif 
298         !
299      ii = ii+1
300      ALLOCATE( ht_0(jpi,jpj) ,    hu_0(jpi,jpj)    ,    hv_0(jpi,jpj)     , hf_0(jpi,jpj) ,       &
301         &   r1_ht_0(jpi,jpj) , r1_hu_0(jpi,jpj) ,    r1_hv_0(jpi,jpj),   r1_hf_0(jpi,jpj) ,   STAT=ierr(ii)  )
302         !
303#if ! defined key_qco
304      ii = ii+1
305      ALLOCATE( ht  (jpi,jpj) ,    hu  (jpi,jpj,jpt),    hv  (jpi,jpj,jpt)                 ,       &
306         &                      r1_hu  (jpi,jpj,jpt), r1_hv  (jpi,jpj,jpt)                 ,   STAT=ierr(ii)  )
307#endif
308         !
309      ii = ii+1
310      ALLOCATE( risfdep(jpi,jpj) , bathy(jpi,jpj) , STAT=ierr(ii)  ) 
311         !
312      ii = ii+1
313      ALLOCATE( gdept_1d(jpk) , gdepw_1d(jpk) , e3t_1d(jpk) , e3w_1d(jpk) , STAT=ierr(ii) )
314         !
315      ii = ii+1
316      ALLOCATE( tmask_i(jpi,jpj) , tmask_h(jpi,jpj) ,                        & 
317         &      ssmask (jpi,jpj) , ssumask(jpi,jpj) , ssvmask(jpi,jpj) , ssfmask(jpi,jpj) ,     &
318         &      mbkt   (jpi,jpj) , mbku   (jpi,jpj) , mbkv   (jpi,jpj) ,                    STAT=ierr(ii) )
319         !
320      ii = ii+1
321      ALLOCATE( mikt(jpi,jpj), miku(jpi,jpj), mikv(jpi,jpj), mikf(jpi,jpj), STAT=ierr(ii) )
322         !
323      ii = ii+1
324      ALLOCATE( tmask(jpi,jpj,jpk) , umask(jpi,jpj,jpk) ,     & 
325         &      vmask(jpi,jpj,jpk) , fmask(jpi,jpj,jpk) , STAT=ierr(ii) )
326         !
327      ii = ii+1
328      ALLOCATE( wmask(jpi,jpj,jpk) , wumask(jpi,jpj,jpk), wvmask(jpi,jpj,jpk) , STAT=ierr(ii) )
329      !
330      dom_oce_alloc = MAXVAL(ierr)
331      !
332   END FUNCTION dom_oce_alloc
333
334   !!======================================================================
335END MODULE dom_oce
Note: See TracBrowser for help on using the repository browser.