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.
domrea_dimg.h90 in tags/nemo_v3_2/nemo_v3_2/NEMO/OFF_SRC/DOM – NEMO

source: tags/nemo_v3_2/nemo_v3_2/NEMO/OFF_SRC/DOM/domrea_dimg.h90 @ 1878

Last change on this file since 1878 was 1878, checked in by flavoni, 14 years ago

initial test for nemogcm

File size: 16.9 KB
Line 
1   SUBROUTINE dom_rea
2      !!----------------------------------------------------------------------
3      !!                  ***  ROUTINE dom_rea  ***   'key_mpp'
4      !!
5      !! ** Purpose :   READ the direct access files which contains all the
6      !!      ocean domain informations (mesh and mask arrays). These
7      !!      files are used for visualisation (SAXO software) and
8      !!      diagnostic computation.
9      !!
10      !! ** Method  :   READ in a file all the arrays generated in routines
11      !!      domhgr, domzgr, and dommsk. Note: the file contain depends on
12      !!      the vertical coord. used (z-coord, partial steps, s-coord)
13      !!    For mpp output direct access files are used and each processor
14      !!    uses a record range. Off line program (build_nc_meshmask) can be used
15      !!    to reconstruct the Netcdf files
16      !!                    nmsh = 1  :   'mesh_mask.nc' file
17      !!                         = 2  :   'mesh.nc' and mask.nc' files
18      !!                         = 3  :   'mesh_hgr.nc', 'mesh_zgr.nc' and
19      !!                                  'mask.nc' files
20      !!      For huge size domain, use option 2 or 3 depending on your
21      !!      vertical coordinate.
22      !!
23      !! ** output file :
24      !!      meshmask.nc  : domain size, horizontal grid-point position,
25      !!                     masks, depth and vertical scale factors
26      !!
27      !! History :
28      !!        !  97-02  (G. Madec)  Original code
29      !!        !  99-11  (M. Imbard)  NetCDF FORMAT with IOIPSL
30      !!   9.0  !  02-08  (G. Madec)  F90 and several file
31      !!        !  04-01  (J.M. Molines) MPP i/o
32      !!----------------------------------------------------------------------
33      !!   OPA 9.0 , LOCEAN-IPSL  (2005)
34      !!   $Id: domrea_dimg.h90 1715 2009-11-05 15:18:26Z smasson $
35      !!   This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
36      !!----------------------------------------------------------------------
37      !! * Modules used
38      USE lib_mpp
39      USE dom_oce         ! ocean space and time domain
40
41      !! * Local declarations
42      !! * Local declarations
43      INTEGER  ::                & !!! * temprary units for :
44         inum0 ,                 &  ! 'mesh_mask.nc' file
45         inum1 ,                 &  ! 'mesh.nc'      file
46         inum2 ,                 &  ! 'mask.nc'      file
47         inum3 ,                 &  ! 'mesh_hgr.nc'  file
48         inum4                      ! 'mesh_zgr.nc'  file
49      INTEGER  ::   itime           !  output from restini ???
50      INTEGER  ::   irecl8, irec    ! Record length (bytes) for output file
51      INTEGER  ::   jk              ! loop index
52      INTEGER  ::   ios1, ios2
53      INTEGER, DIMENSION(11:15)  :: irecv ! index of this array will be inumxxx
54      REAL(wp) ::   zdate0
55      REAL(wp), DIMENSION(jpi,jpj) ::   &
56         zprt                       ! temporary array for bathymetry
57
58      CHARACTER (len=21) ::      &
59         clnam0 = 'mesh_mask',   &  ! filename (mesh and mask informations)
60         clnam1 = 'mesh'     ,   &  ! filename (mesh informations)
61         clnam2 = 'mask'     ,   &  ! filename (mask informations)
62         clnam3 = 'mesh_hgr' ,   &  ! filename (horizontal mesh informations)
63         clnam4 = 'mesh_zgr'        ! filename (vertical   mesh informations)
64      !!----------------------------------------------------------------------
65
66       IF(lwp) WRITE(numout,*)
67       IF(lwp) WRITE(numout,*) 'dom_rea : read direct access  mesh and mask information files'
68       IF(lwp) WRITE(numout,*) '~~~~~~~'
69
70       inum0 = 11
71       irecl8 = jpi*jpj*wp
72       ios1 = 0 ; ios2 = 0
73       IF (ln_zps ) ios1= 1
74       IF (ln_sco ) ios2= 1
75   
76       SELECT CASE (nmsh )
77          !                                    !==============================
78          CASE ( 1 )                           !  read 'mesh_mask' file
79             !                                 !==============================
80             IF (lwp) WRITE(numout,*) '          one file in "mesh_mask.dimgproc '
81             OPEN(inum0,FILE=trim(clnam0)//'.mpp', &
82                & FORM='UNFORMATTED', ACCESS='DIRECT', RECL = irecl8 )
83             IF (lwp )READ(inum0,REC=1 ) irecl8, nmsh, ios1,ios2 , &
84            &  ndastp, adatrj, jpi,jpj,jpk,  &
85            &  jpni,jpnj,jpnij,jpiglo,jpjglo, &
86            &  nlcit,nlcjt, nldit, nldjt, nleit, nlejt, nimppt, njmppt
87
88             inum2 = inum0
89             inum3 = inum0
90             inum4 = inum0
91
92            !                                  ! ============================
93         CASE ( 2 )                            !  read 'mesh' and
94            !                                  !         'mask' files
95            !                                  ! ============================
96
97            IF(lwp) WRITE(numout,*) '          two files in "mesh" and "mask" '
98            inum1 = 12
99            inum2 = 13
100            OPEN(inum1,FILE=trim(clnam1)//'.mpp', &
101                & FORM='UNFORMATTED', ACCESS='DIRECT', RECL = irecl8 )
102             IF (lwp) READ(inum1,REC=1 ) irecl8, nmsh, ios1,ios2 , &
103            &  ndastp, adatrj, jpi,jpj,jpk,  &
104            &  jpni,jpnj,jpnij,jpiglo,jpjglo, &
105            &  nlcit,nlcjt, nldit, nldjt, nleit, nlejt, nimppt, njmppt
106
107             inum3 = inum1
108             inum4 = inum1
109            OPEN(inum2,FILE=trim(clnam2)//'.mpp', &
110                & FORM='UNFORMATTED', ACCESS='DIRECT', RECL = irecl8 )
111             IF (lwp) READ(inum2,REC=1 ) irecl8, nmsh, ios1,ios2 , &
112            &  ndastp, adatrj, jpi,jpj,jpk,  &
113            &  jpni,jpnj,jpnij,jpiglo,jpjglo, &
114            &  nlcit,nlcjt, nldit, nldjt, nleit, nlejt, nimppt, njmppt
115
116            !                                  ! ============================
117         CASE ( 3 )                            !  read 'mesh_hgr'
118            !                                  !         'mesh_zgr' and
119            !                                  !         'mask'     files
120            !                                  ! ============================
121
122            IF(lwp) WRITE(numout,*) '          three files in "mesh_hgr" , mesh_zgr" and "mask" '
123            inum3 = 14
124            inum2 = 13
125            inum4 = 15
126
127            OPEN(inum3,FILE=trim(clnam3)//'.mpp', &
128                & FORM='UNFORMATTED', ACCESS='DIRECT', RECL = irecl8 )
129             IF (lwp) READ(inum3,REC=1 ) irecl8, nmsh, ios1,ios2 , &
130            &  ndastp, adatrj, jpi,jpj,jpk,  &
131            &  jpni,jpnj,jpnij,jpiglo,jpjglo, &
132            &  nlcit,nlcjt, nldit, nldjt, nleit, nlejt, nimppt, njmppt
133
134            OPEN(inum2,FILE=trim(clnam2)//'.mpp', &
135                & FORM='UNFORMATTED', ACCESS='DIRECT', RECL = irecl8 )
136             IF (lwp) READ(inum2,REC=1 ) irecl8, nmsh, ios1,ios2 , &
137            &  ndastp, adatrj, jpi,jpj,jpk,  &
138            &  jpni,jpnj,jpnij,jpiglo,jpjglo, &
139            &  nlcit,nlcjt, nldit, nldjt, nleit, nlejt, nimppt, njmppt
140
141            OPEN(inum4,FILE=trim(clnam4)//'.mpp', &
142                & FORM='UNFORMATTED', ACCESS='DIRECT', RECL = irecl8 )
143             IF (lwp) READ(inum4,REC=1 ) irecl8, nmsh, ios1,ios2 , &
144            &  ndastp, adatrj, jpi,jpj,jpk,  &
145            &  jpni,jpnj,jpnij,jpiglo,jpjglo, &
146            &  nlcit,nlcjt, nldit, nldjt, nleit, nlejt, nimppt, njmppt
147         
148         END SELECT
149       
150         irecv(:) = 2
151         ! tmask
152         DO jk=1,jpk
153             irec=irecv(inum2) + (jk -1 ) + jpk * (narea - 1 )
154             READ(inum2,REC=irec) tmask(:,:,jk)
155         END DO
156         irecv(inum2) = irecv(inum2) + jpk * jpnij
157         !
158         ! umask
159         DO jk=1,jpk
160             irec=irecv(inum2) + (jk -1 ) + jpk * (narea - 1 )
161             READ(inum2,REC=irec) umask(:,:,jk)
162         END DO
163         irecv(inum2) = irecv(inum2) + jpk * jpnij
164         !
165         ! vmask
166         DO jk=1,jpk
167             irec=irecv(inum2) + (jk -1 ) + jpk * (narea - 1 )
168             READ(inum2,REC=irec) vmask(:,:,jk)
169         END DO
170         irecv(inum2) = irecv(inum2) + jpk * jpnij
171         !
172         ! fmask
173         DO jk=1,jpk
174             irec=irecv(inum2) + (jk -1 ) + jpk * (narea - 1 )
175             READ(inum2,REC=irec) fmask(:,:,jk)
176         END DO
177         irecv(inum2) = irecv(inum2) + jpk * jpnij
178         !
179         ! glam
180         irec = irecv(inum3) + (narea - 1 )
181         READ(inum3,REC=irec) glamt(:,:)
182         irecv(inum3) = irecv(inum3) + jpnij
183       
184         irec = irecv(inum3) + (narea - 1 )
185         READ(inum3,REC=irec) glamu(:,:)
186         irecv(inum3) = irecv(inum3) + jpnij
187
188         irec = irecv(inum3) + (narea - 1 )
189         READ(inum3,REC=irec) glamv(:,:)
190         irecv(inum3) = irecv(inum3) + jpnij
191
192         irec = irecv(inum3) + (narea - 1 )
193         READ(inum3,REC=irec) glamf(:,:)
194         irecv(inum3) = irecv(inum3) + jpnij
195         !
196         ! gphi
197         irec = irecv(inum3) + (narea - 1 )
198         READ(inum3,REC=irec) gphit(:,:)
199         irecv(inum3) = irecv(inum3) + jpnij
200       
201         irec = irecv(inum3) + (narea - 1 )
202         READ(inum3,REC=irec) gphiu(:,:)
203         irecv(inum3) = irecv(inum3) + jpnij
204
205         irec = irecv(inum3) + (narea - 1 )
206         READ(inum3,REC=irec) gphiv(:,:)
207         irecv(inum3) = irecv(inum3) + jpnij
208
209         irec = irecv(inum3) + (narea - 1 )
210         READ(inum3,REC=irec) gphif(:,:)
211         irecv(inum3) = irecv(inum3) + jpnij
212         !
213         ! e1
214         irec = irecv(inum3) + (narea - 1 )
215         READ(inum3,REC=irec) e1t(:,:)
216         irecv(inum3) = irecv(inum3) + jpnij
217       
218         irec = irecv(inum3) + (narea - 1 )
219         READ(inum3,REC=irec) e1u(:,:)
220         irecv(inum3) = irecv(inum3) + jpnij
221
222         irec = irecv(inum3) + (narea - 1 )
223         READ(inum3,REC=irec) e1v(:,:)
224         irecv(inum3) = irecv(inum3) + jpnij
225
226         irec = irecv(inum3) + (narea - 1 )
227         READ(inum3,REC=irec) e1f(:,:)
228         irecv(inum3) = irecv(inum3) + jpnij
229         !
230         ! e2
231         irec = irecv(inum3) + (narea - 1 )
232         READ(inum3,REC=irec) e2t(:,:)
233         irecv(inum3) = irecv(inum3) + jpnij
234       
235         irec = irecv(inum3) + (narea - 1 )
236         READ(inum3,REC=irec) e2u(:,:)
237         irecv(inum3) = irecv(inum3) + jpnij
238
239         irec = irecv(inum3) + (narea - 1 )
240         READ(inum3,REC=irec) e2v(:,:)
241         irecv(inum3) = irecv(inum3) + jpnij
242
243         irec = irecv(inum3) + (narea - 1 )
244         READ(inum3,REC=irec) e2f(:,:)
245         irecv(inum3) = irecv(inum3) + jpnij
246         !
247         ! ff
248         irec = irecv(inum3) + (narea - 1 )
249         READ(inum3,REC=irec) ff(:,:)
250         irecv(inum3) = irecv(inum3) + jpnij
251         !
252         ! mbathy
253         !       note that mbathy has been modified in dommsk or in solver.
254         !       it is the number of non-zero "w" levels in the water, and the minimum
255         !       value (on land) is 2. We define zprt as the number of "T" points in the ocean
256         !       at any location, and zero on land.
257         !
258         irec = irecv(inum4) + (narea - 1 )
259         READ(inum4,REC=irec) zprt(:,:)
260         irecv(inum4) = irecv(inum4) + jpnij
261
262          mbathy=zprt*tmask(:,:,1)+1
263
264#if ! defined key_zco
265          IF( ln_sco ) THEN                                         ! s-coordinate
266             !
267             ! hbat
268             irec = irecv(inum4) + (narea - 1 )
269             READ(inum4,REC=irec) hbatt(:,:)
270             irecv(inum4) = irecv(inum4) + jpnij
271             
272             irec = irecv(inum4) + (narea - 1 )
273             READ(inum4,REC=irec) hbatu(:,:)
274             irecv(inum4) = irecv(inum4) + jpnij
275             
276             irec = irecv(inum4) + (narea - 1 )
277             READ(inum4,REC=irec) hbatv(:,:)
278             irecv(inum4) = irecv(inum4) + jpnij
279             
280             irec = irecv(inum4) + (narea - 1 )
281             READ(inum4,REC=irec) hbatf(:,:)
282             irecv(inum4) = irecv(inum4) + jpnij
283             !
284             ! gsig and esig ( as vectors of jpk per record )
285             irec =  irecv(inum4) + (narea - 1 )
286             READ(inum4,REC=irec) gsigt(:)
287             irecv(inum4) = irecv(inum4) + jpnij
288             
289             irec =  irecv(inum4) + (narea - 1 )
290             READ(inum4,REC=irec) gsigw(:)
291             irecv(inum4) = irecv(inum4) + jpnij
292             
293             irec =  irecv(inum4) + (narea - 1 )
294             READ(inum4,REC=irec) gsi3w(:)
295             irecv(inum4) = irecv(inum4) + jpnij
296             
297             irec =  irecv(inum4) + (narea - 1 )
298             READ(inum4,REC=irec) esigt(:)
299             irecv(inum4) = irecv(inum4) + jpnij
300             
301             irec =  irecv(inum4) + (narea - 1 )
302             READ(inum4,REC=irec) esigw(:)
303             irecv(inum4) = irecv(inum4) + jpnij
304
305             ! e3 (3D)
306             DO jk=1,jpk
307                irec =  irecv(inum4) + (jk -1 ) + jpk * (narea - 1 )
308                READ(inum4,REC=irec) e3t(:,:,jk)
309             ENDIF
310             irecv(inum4) = irecv(inum4) + jpk * jpnij
311             
312             DO jk=1,jpk
313                irec =  irecv(inum4) + (jk -1 ) + jpk * (narea - 1 )
314                READ(inum4,REC=irec) e3u(:,:,jk)
315             ENDIF
316             irecv(inum4) = irecv(inum4) + jpk * jpnij
317             
318             DO jk=1,jpk
319                irec =  irecv(inum4) + (jk -1 ) + jpk * (narea - 1 )
320                READ(inum4,REC=irec) e3v(:,:,jk)
321             ENDIF
322             irecv(inum4) = irecv(inum4) + jpk * jpnij
323             
324             DO jk=1,jpk
325                irec =  irecv(inum4) + (jk -1 ) + jpk * (narea - 1 )
326                READ(inum4,REC=irec) e3w(:,:,jk)
327             ENDIF
328             irecv(inum4) = irecv(inum4) + jpk * jpnij
329
330             ! gdep
331             irec =  irecv(inum4) + (narea - 1 )
332             READ(inum4,REC=irec) gdept_0(:)
333             irecv(inum4) = irecv(inum4) + jpnij
334             
335             irec =  irecv(inum4) + (narea - 1 )
336             READ(inum4,REC=irec) gdepw_0(:)
337             irecv(inum4) = irecv(inum4) + jpnij
338             !
339          ENDIF
340             
341          IF( ln_zps ) THEN
342             !
343             ! hdep
344             irec = irecv(inum4) + (narea - 1 )
345             READ(inum4,REC=irec) hdept(:,:)
346             irecv(inum4) = irecv(inum4) + jpnij
347             
348             irec = irecv(inum4) + (narea - 1 )
349             READ(inum4,REC=irec) hdepw(:,:)
350             irecv(inum4) = irecv(inum4) + jpnij
351             !
352             ! e3t_ps (3D)
353             DO jk=1,jpk
354                irec=irecv(inum4) + (jk -1 ) + jpk * (narea - 1 )
355                READ(inum4,REC=irec) e3t(:,:,jk)
356             END DO
357             irecv(inum4) = irecv(inum4) + jpk * jpnij
358             
359             ! e3u_ps e3v_ps e3w_ps (3D)
360             DO jk=1,jpk
361                irec=irecv(inum4) + (jk -1 ) + jpk * (narea - 1 )
362                READ(inum4,REC=irec) e3u(:,:,jk)
363             END DO
364             irecv(inum4) = irecv(inum4) + jpk * jpnij
365             
366             DO jk=1,jpk
367                irec=irecv(inum4) + (jk -1 ) + jpk * (narea - 1 )
368                READ(inum4,REC=irec) e3v(:,:,jk)
369             END DO
370             irecv(inum4) = irecv(inum4) + jpk * jpnij
371             
372             DO jk=1,jpk
373                irec=irecv(inum4) + (jk -1 ) + jpk * (narea - 1 )
374                READ(inum4,REC=irec) e3w(:,:,jk)
375             END DO
376             irecv(inum4) = irecv(inum4) + jpk * jpnij
377             !
378             !
379             ! gdep
380             irec =  irecv(inum4) + (narea - 1 )
381             READ(inum4,REC=irec) gdept_0(:)
382             irecv(inum4) = irecv(inum4) + jpnij
383             
384             irec =  irecv(inum4) + (narea - 1 )
385             READ(inum4,REC=irec) gdepw_0(:)
386             irecv(inum4) = irecv(inum4) + jpnij
387             !
388             ! e3
389             irec =  irecv(inum4) + (narea - 1 )
390             READ(inum4,REC=irec) e3t_0(:)
391             irecv(inum4) = irecv(inum4) + jpnij
392             
393             irec =  irecv(inum4) + (narea - 1 )
394             READ(inum4,REC=irec) e3w_0(:)
395          ENDIF
396#else
397          !
398          ! gdep
399          irec =  irecv(inum4) + (narea - 1 )
400          READ(inum4,REC=irec) gdept_0(:)
401          irecv(inum4) = irecv(inum4) + jpnij
402         
403          irec =  irecv(inum4) + (narea - 1 )
404          READ(inum4,REC=irec) gdepw_0(:)
405          irecv(inum4) = irecv(inum4) + jpnij
406          !
407          ! e3
408          irec =  irecv(inum4) + (narea - 1 )
409          READ(inum4,REC=irec) e3t_0(:)
410          irecv(inum4) = irecv(inum4) + jpnij
411         
412          irec =  irecv(inum4) + (narea - 1 )
413          READ(inum4,REC=irec) e3w_0(:)
414          irecv(inum4) = irecv(inum4) + jpnij
415         !
416#endif
417         !                                     ! ============================
418         !                                     !        close the files
419         !                                     ! ============================
420         SELECT CASE ( nmsh )
421            CASE ( 1 )
422               CLOSE ( inum0 )
423            CASE ( 2 )
424               CLOSE ( inum1 )
425               CLOSE ( inum2 )
426            CASE ( 3 )
427               CLOSE ( inum2 )
428               CLOSE ( inum3 )
429               CLOSE ( inum4 )
430         END SELECT
431
432   END SUBROUTINE dom_rea
Note: See TracBrowser for help on using the repository browser.