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.
limrst.F90 in branches/dev_002_LIM/NEMO/LIM_SRC_3 – NEMO

source: branches/dev_002_LIM/NEMO/LIM_SRC_3/limrst.F90 @ 830

Last change on this file since 830 was 825, checked in by ctlod, 16 years ago

dev_002_LIM : add the LIM 3.0 component, see ticketr: #71

File size: 26.8 KB
Line 
1MODULE limrst
2!!======================================================================
3!!                     ***  MODULE  limrst  ***
4!! Ice restart :  write the ice restart file
5!!======================================================================
6#if defined key_lim3
7!!----------------------------------------------------------------------
8!!   'key_lim3' :                                   LIM sea-ice model
9!!----------------------------------------------------------------------
10!!   lim_rst_write   : write of the restart file
11!!   lim_rst_read    : read  the restart file
12!!----------------------------------------------------------------------
13!! * Modules used
14USE par_ice
15USE in_out_manager
16USE ice
17USE ioipsl
18USE dom_oce
19USE ice_oce         ! ice variables
20USE daymod
21USE limicepoints
22!USE limvar
23
24IMPLICIT NONE
25PRIVATE
26
27!! * Accessibility
28PUBLIC lim_rst_write  ! routine called by lim_step.F90
29PUBLIC lim_rst_read   ! routine called by lim_init.F90
30
31        !!----------------------------------------------------------------------
32!!   LIM 2.0,  UCL-LOCEAN-IPSL (2005)
33        !! $Header: /home/opalod/NEMOCVSROOT/NEMO/LIM_SRC/limrst.F90,v 1.6 2005/03/27 18:34:42 opalod Exp $
34        !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
35        !!----------------------------------------------------------------------
36
37        CONTAINS
38
39# if ( defined key_mpp_mpi || defined key_mpp_shmem ) && defined key_dimgout
40   !!----------------------------------------------------------------------
41   !!   'key_mpp_mpi'     OR
42   !!   'key_mpp_shmem'
43   !!   'key_dimgout' :                           clipper type restart file
44   !!                 :                     can be used in mpp
45   !!----------------------------------------------------------------------
46#  include "limrst_dimg.h90"
47
48# else
49   !!----------------------------------------------------------------------
50   !!   Default option                                          NetCDF file
51   !!----------------------------------------------------------------------
52
53SUBROUTINE lim_rst_write( niter )
54   !!----------------------------------------------------------------------
55   !!                    ***  lim_rst_write  ***
56   !!
57   !! ** purpose  :   output of sea-ice variable in a netcdf file
58   !!
59   !!----------------------------------------------------------------------
60   ! Arguments
61   INTEGER  ::    niter        ! number of iteration
62
63   !- dummy variables :
64   LOGICAL :: &
65   llbon
66   INTEGER :: &
67   ji, jj, jk ,jl, jm, index
68   INTEGER :: &
69   inumwrs, it0, itime
70   REAL(wp), DIMENSION(1) :: &
71   zdept
72   REAL(wp), DIMENSION(2) :: &
73   zinfo
74   REAL(wp),DIMENSION(jpi,jpj,40*jpl+5*(nlay_i-1)) :: &
75   zmoment
76   REAL(wp) :: &
77   zsec, zdate0, zdt
78        REAL(wp), DIMENSION(jpi,jpj,jpl) :: &
79        zheatcon
80
81        CHARACTER(len=7), DIMENSION(jpk) :: zheatnam
82        CHARACTER(len=1)                 :: zchar
83
84   CHARACTER(len=45)  ::  &
85   ccfile = 'restart_ice_out.nc'
86
87   inumwrs  = 61
88        INQUIRE ( FILE = ccfile, EXIST = llbon )
89   IF( llbon ) THEN
90   OPEN ( UNIT = inumwrs , FILE = ccfile, STATUS = 'old' )
91   CLOSE( inumwrs , STATUS = 'delete' )
92   ENDIF
93
94        WRITE(numout,*) 'lim_rst_write : Writes the restart file'
95        WRITE(numout,*) '~~~~~~~~~~~~~'
96        WRITE(numout,*) 
97
98
99   it0      = niter
100   zinfo(1) = FLOAT( nfice  )  ! coupling frequency OPA ICELLN  nfice
101   zinfo(2) = FLOAT( it0   )   ! iteration number
102
103   zsec     = 0.
104   itime    = 0
105   zdept(1) = 0.
106   zdt      = rdt_ice * nstock
107
108        WRITE(numout,*) 'Phase 1 successfull ?'
109   ! Write in inumwrs
110
111        WRITE(numout,*) ' jl, MOMENT FIELD NO '
112        DO jl = 1, jpl
113        WRITE(numout,*) jl, 6*5*(jl-1) + 1, 6*5*(jl-1) + 30
114   DO jj = 1, jpj              ! 3D array: 10 time faster than 35 restput
115   DO ji = 1, jpi
116        zmoment(ji,jj,6*5*(jl-1)+1) = sxice(ji,jj,jl)
117        zmoment(ji,jj,6*5*(jl-1)+2) = syice(ji,jj,jl)
118        zmoment(ji,jj,6*5*(jl-1)+3) = sxxice(ji,jj,jl)
119        zmoment(ji,jj,6*5*(jl-1)+4) = syyice(ji,jj,jl)
120        zmoment(ji,jj,6*5*(jl-1)+5) = sxyice(ji,jj,jl)
121        zmoment(ji,jj,6*5*(jl-1)+6) = sxsn(ji,jj,jl)
122        zmoment(ji,jj,6*5*(jl-1)+7) = sysn(ji,jj,jl)
123        zmoment(ji,jj,6*5*(jl-1)+8) = sxxsn(ji,jj,jl)
124        zmoment(ji,jj,6*5*(jl-1)+9) = syysn(ji,jj,jl)
125        zmoment(ji,jj,6*5*(jl-1)+10)= sxysn(ji,jj,jl)
126        zmoment(ji,jj,6*5*(jl-1)+11)= sxa(ji,jj,jl)
127        zmoment(ji,jj,6*5*(jl-1)+12)= sya(ji,jj,jl)
128        zmoment(ji,jj,6*5*(jl-1)+13)= sxxa(ji,jj,jl)
129        zmoment(ji,jj,6*5*(jl-1)+14)= syya(ji,jj,jl)
130        zmoment(ji,jj,6*5*(jl-1)+15)= sxya(ji,jj,jl)
131        zmoment(ji,jj,6*5*(jl-1)+16)= sxc0(ji,jj,jl)
132        zmoment(ji,jj,6*5*(jl-1)+17)= syc0(ji,jj,jl)
133        zmoment(ji,jj,6*5*(jl-1)+18)= sxxc0(ji,jj,jl)
134        zmoment(ji,jj,6*5*(jl-1)+19)= syyc0(ji,jj,jl)
135        zmoment(ji,jj,6*5*(jl-1)+20)= sxyc0(ji,jj,jl)
136        zmoment(ji,jj,6*5*(jl-1)+21)= sxsal(ji,jj,jl)
137        zmoment(ji,jj,6*5*(jl-1)+22)= sysal(ji,jj,jl)
138        zmoment(ji,jj,6*5*(jl-1)+23)= sxxsal(ji,jj,jl)
139        zmoment(ji,jj,6*5*(jl-1)+24)= syysal(ji,jj,jl)
140        zmoment(ji,jj,6*5*(jl-1)+25)= sxysal(ji,jj,jl)
141        zmoment(ji,jj,6*5*(jl-1)+26)= sxage(ji,jj,jl)
142        zmoment(ji,jj,6*5*(jl-1)+27)= syage(ji,jj,jl)
143        zmoment(ji,jj,6*5*(jl-1)+28)= sxxage(ji,jj,jl)
144        zmoment(ji,jj,6*5*(jl-1)+29)= syyage(ji,jj,jl)
145        zmoment(ji,jj,6*5*(jl-1)+30)= sxyage(ji,jj,jl)
146        END DO
147        END DO
148        END DO
149
150        WRITE(numout,*) ' jk, jl, MOMENT FIELD NO '
151        DO jl = 1, jpl
152        DO jk = 1, nlay_i 
153        WRITE(numout,*) jk, jl, 5*(6*jpl+(jk-1)+2*(jl-1))+1, 5*(6*jpl+(jk-1)+2*(jl-1))+5
154        DO jj = 1, jpj              ! 3D array: 10 time faster than 35 restput
155        DO ji = 1, jpi
156        zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+1)= sxe(ji,jj,jk,jl)
157        zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+2)= sye(ji,jj,jk,jl)
158        zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+3)= sxxe(ji,jj,jk,jl)
159        zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+4)= syye(ji,jj,jk,jl)
160        zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+5)= sxye(ji,jj,jk,jl)
161        END DO
162        END DO
163        END DO
164        END DO
165
166        WRITE(numout,*) ' openw , MOMENT FIELD NO '
167        WRITE(numout,*) 40*jpl + 5*nlay_i - 9, 40*jpl + 5*nlay_i - 5
168        DO jj = 1, jpj              ! 3D array: 10 time faster than 35 restput
169        DO ji = 1, jpi
170           zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 1)= sxopw(ji,jj)
171           zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 2)= syopw(ji,jj)
172           zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 3)= sxxopw(ji,jj)
173           zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 4)= syyopw(ji,jj)
174           zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 5)= sxyopw(ji,jj)
175        END DO
176        END DO
177        WRITE(numout,*) ' Done ... '
178
179        CALL ymds2ju( nyear, nmonth, nday, zsec, zdate0 )
180        CALL restini( 'NONE', jpi, jpj, glamt, gphit, 1 , zdept, ccfile, itime, zdate0, zdt, inumwrs )
181
182        CALL restput( inumwrs, 'info'   ,   1,   1,   2 , 0, zinfo   )  ! restart informations
183        CALL restput( inumwrs, 'v_i '   , jpi, jpj, jpl , 0, v_i  )
184        CALL restput( inumwrs, 'v_s '   , jpi, jpj, jpl , 0, v_s  )
185        CALL restput( inumwrs, 'smv_i'  , jpi, jpj, jpl , 0, smv_i )
186        CALL restput( inumwrs, 'oa_i'   , jpi, jpj, jpl , 0, oa_i )
187        CALL restput( inumwrs, 'a_i '   , jpi, jpj, jpl , 0, a_i  )
188        CALL restput( inumwrs, 't_su'   , jpi, jpj, jpl , 0, t_su )
189
190!     CALL restput( inumwrs, 'sist'   , jpi, jpj, 1 , 0, sist    )
191# if defined key_coupled
192      CALL restput( inumwrs, 'albege' , jpi, jpj, 1 , 0, albege  )
193# endif
194      zheatcon(:,:,:) = e_s(:,:,1,:)
195      CALL restput( inumwrs, 'tempts1'    , jpi, jpj, jpl, 0, zheatcon) ! snow
196                  ! heat content
197
198      DO jk = 1, nlay_i 
199         WRITE(zchar,'(I1)') jk
200         zheatnam(jk) = 'tempti'//zchar
201         zheatcon(:,:,:) = e_i(:,:,jk,:)
202         CALL restput( inumwrs, zheatnam(jk) , jpi, jpj, jpl, 0, zheatcon )
203      END DO
204
205      CALL restput( inumwrs, 'u_ice'  , jpi, jpj, 1 , 0, u_ice   )
206      CALL restput( inumwrs, 'v_ice'  , jpi, jpj, 1 , 0, v_ice   )
207      CALL restput( inumwrs, 'gtaux'  , jpi, jpj, 1 , 0, gtaux  )
208      CALL restput( inumwrs, 'gtauy'  , jpi, jpj, 1 , 0, gtauy  )
209! MV 2005
210      CALL restput( inumwrs, 'fsbbq'  , jpi, jpj, 1 , 0, fsbbq   )
211      WRITE(numout,*) ' Done 2 ... '
212      CALL restput( inumwrs, 'str1_i' , jpi, jpj, 1 , 0, stress1_i )
213      CALL restput( inumwrs, 'str2_i' , jpi, jpj, 1 , 0, stress2_i )
214      CALL restput( inumwrs, 'str12i' , jpi, jpj, 1 , 0, stress12_i )
215      CALL restput( inumwrs, 'moment' , jpi, jpj, 40*jpl+5*(nlay_i-1) , 0, zmoment )
216      WRITE(numout,*) ' Done 3 ... '
217     
218      CALL restclo( inumwrs )
219
220!+++++++++++ CHECK EVERYTHING ++++++++++
221            WRITE(numout,*)
222            WRITE(numout,*) ' lim_rst_write : CHUKCHI SEA POINT '
223            WRITE(numout,*) ' ~~~~~~~~~~'
224            WRITE(numout,*) ' ~~~ Arctic'
225
226            ji = jiindex
227            jj = jjindex
228
229            WRITE(numout,*) ' ji, jj ', ji, jj
230            WRITE(numout,*) ' ICE VARIABLES '
231            WRITE(numout,*) ' open water ', ato_i(ji,jj)
232            DO jl = 1, jpl
233               WRITE(numout,*) ' *** CATEGORY NUMBER *** ', jl
234               WRITE(numout,*) ' '
235               WRITE(numout,*) ' a_i        : ', a_i(ji,jj,jl)     
236               WRITE(numout,*) ' v_i        : ', v_i(ji,jj,jl) 
237               WRITE(numout,*) ' v_s        : ', v_s(ji,jj,jl)   
238               WRITE(numout,*) ' e_s        : ', e_s(ji,jj,1,jl)/1.0e9
239               WRITE(numout,*) ' e_i1       : ', e_i(ji,jj,1,jl)/1.0e9     
240               WRITE(numout,*) ' e_i2       : ', e_i(ji,jj,2,jl)/1.0e9     
241               WRITE(numout,*) ' smv_i      : ', smv_i(ji,jj,jl) 
242               WRITE(numout,*) ' oa_i       : ', oa_i(ji,jj,jl)
243               WRITE(numout,*) ' t_su       : ', t_su(ji,jj,jl)
244            END DO
245
246            WRITE(numout,*) ' MOMENTS OF ADVECTION '
247
248            WRITE(numout,*) ' open water '
249            WRITE(numout,*) ' sxopw  ', sxopw(ji,jj)
250            WRITE(numout,*) ' syopw  ', syopw(ji,jj)
251            WRITE(numout,*) ' sxxopw ', sxxopw(ji,jj)
252            WRITE(numout,*) ' syyopw ', syyopw(ji,jj)
253            WRITE(numout,*) ' sxyopw ', sxyopw(ji,jj)
254            DO jl = 1, jpl
255               WRITE(numout,*) ' jl, ice volume content ', jl
256               WRITE(numout,*) ' sxice  ', sxice(ji,jj,jl)
257               WRITE(numout,*) ' syice  ', syice(ji,jj,jl)
258               WRITE(numout,*) ' sxxice ', sxxice(ji,jj,jl)
259               WRITE(numout,*) ' syyice ', syyice(ji,jj,jl)
260               WRITE(numout,*) ' sxyice ', sxyice(ji,jj,jl)
261               WRITE(numout,*) ' jl, snow volume content ', jl
262               WRITE(numout,*) ' sxsn   ', sxsn(ji,jj,jl)
263               WRITE(numout,*) ' sysn   ', sysn(ji,jj,jl)
264               WRITE(numout,*) ' sxxsn  ', sxxsn(ji,jj,jl)
265               WRITE(numout,*) ' syysn  ', syysn(ji,jj,jl)
266               WRITE(numout,*) ' sxysn  ', sxysn(ji,jj,jl)
267               WRITE(numout,*) ' jl, ice area in category ', jl
268               WRITE(numout,*) ' sxa    ', sxa (ji,jj,jl)
269               WRITE(numout,*) ' sya    ', sya (ji,jj,jl)
270               WRITE(numout,*) ' sxxa   ', sxxa (ji,jj,jl)
271               WRITE(numout,*) ' syya   ', syya (ji,jj,jl)
272               WRITE(numout,*) ' sxya   ', sxya (ji,jj,jl)
273               WRITE(numout,*) ' jl, snow temp ', jl
274               WRITE(numout,*) ' sxc0   ', sxc0(ji,jj,jl)
275               WRITE(numout,*) ' syc0   ', syc0(ji,jj,jl)
276               WRITE(numout,*) ' sxxc0  ', sxxc0(ji,jj,jl)
277               WRITE(numout,*) ' syyc0  ', syyc0(ji,jj,jl)
278               WRITE(numout,*) ' sxyc0  ', sxyc0(ji,jj,jl)
279               WRITE(numout,*) ' jl, ice salinity ', jl
280               WRITE(numout,*) ' sxsal  ', sxsal(ji,jj,jl)
281               WRITE(numout,*) ' sysal  ', sysal(ji,jj,jl)
282               WRITE(numout,*) ' sxxsal ', sxxsal(ji,jj,jl)
283               WRITE(numout,*) ' syysal ', syysal(ji,jj,jl)
284               WRITE(numout,*) ' sxysal ', sxysal(ji,jj,jl)
285               WRITE(numout,*) ' jl, ice age      ', jl
286               WRITE(numout,*) ' sxage  ', sxage(ji,jj,jl)
287               WRITE(numout,*) ' syage  ', syage(ji,jj,jl)
288               WRITE(numout,*) ' sxxage ', sxxage(ji,jj,jl)
289               WRITE(numout,*) ' syyage ', syyage(ji,jj,jl)
290               WRITE(numout,*) ' sxyage ', sxyage(ji,jj,jl)
291            END DO
292            DO jl = 1, jpl
293               DO jk = 1, nlay_i
294                  WRITE(numout,*) ' jk, jl, ice heat content', jk, jl
295                  WRITE(numout,*) ' sxe    ', sxe(ji,jj,jk,jl)
296                  WRITE(numout,*) ' sye    ', sye(ji,jj,jk,jl)
297                  WRITE(numout,*) ' sxxe   ', sxxe(ji,jj,jk,jl)
298                  WRITE(numout,*) ' syye   ', syye(ji,jj,jk,jl)
299                  WRITE(numout,*) ' sxye   ', sxye(ji,jj,jk,jl)
300               END DO
301            END DO
302
303            DO jl = 1, 40*jpl+5*(nlay_i-1) 
304               WRITE(numout,*) ' zmoment No ', jl,' = ', zmoment(ji,jj,jl)
305            END DO
306
307!+++++++++++ END CHECK +++++++++++++++++
308
309   END SUBROUTINE lim_rst_write
310
311
312   SUBROUTINE lim_rst_read( niter )
313      !-----------------------------------------------------------------------
314      !  restart from a state defined in a binary file
315      !-----------------------------------------------------------------------
316      ! Arguments
317      INTEGER  ::   niter        ! number of iteration
318
319      !- dummy variables :
320      CHARACTER(len=45)  ::  &
321         ccfile = 'restart_ice_in.nc'
322      INTEGER :: &
323        ji, jj, jk, jl, index
324      INTEGER :: &
325         inumrst, it0, it1, itime, ibvar, ifice
326      LOGICAL :: &
327         llog
328      REAL(wp),DIMENSION(jpi,jpj) :: &
329         zlamt, zphit
330      REAL(wp),DIMENSION(jpi,jpj,40*jpl+5*(nlay_i-1)) :: &
331         zmoment
332      REAL(wp),DIMENSION(1) :: &
333         zdept
334      REAL(wp),DIMENSION(2) :: &
335         zinfo
336      REAL(wp) :: &
337         zdate0, zdt
338      REAL(wp) :: & !parameters for the salinity profile
339         zs_inf, z_slope_s, zsmax, zsmin, zalpha, zindb
340      REAL(wp), DIMENSION(nlay_i) :: &
341         zs_zero 
342      REAL(wp), DIMENSION(jpi,jpj,jpl) :: &
343         zheatcon
344      CHARACTER(len=7), DIMENSION(jpk) :: zheatnam
345      CHARACTER(len=1)                 :: zchar
346      CHARACTER ( len = 10 ) ::  &
347         clvnames(60)       
348
349!     !Read inumrst
350!     INQUIRE ( FILE = ccfile , EXIST = llbon)
351!     IF( .NOT. llbon ) THEN
352!        IF(lwp)WRITE(numout,cform_err)
353!        IF(lwp)WRITE(numout,*) 'lim_rst_read : ===>>>> : Le fichier restart ',ccfile,' n''existe pas'
354!        nstop = nstop + 1
355!     ENDIF
356
357      !Initialisations
358      inumrst    = 71
359      it0        = nit000
360      itime      = 0
361      llog       = .FALSE.
362      zlamt(:,:) = 0.
363      zphit(:,:) = 0.
364      zdept(1)   = 0.
365
366      CALL restini(ccfile , jpi, jpj, zlamt, zphit, 1 , zdept, ccfile, itime, zdate0, zdt, inumrst )     
367      CALL ioget_vname( inumrst, ibvar, clvnames )
368
369      CALL restget    ( inumrst,'info', 1, 1 , 2, 0, llog, zinfo )
370 
371      ifice   = INT( zinfo(1) )
372      it1     = INT( zinfo(2) )
373
374      IF(lwp) THEN
375         WRITE(numout,*)
376         WRITE(numout,*) 'lim_rst_read : READ restart file name ', ccfile,' at time step : ', it1
377         WRITE(numout,*) '~~~~~~~~~~~~   number of variables   : ', ibvar
378         WRITE(numout,*) '               NetCDF variables      : ', clvnames(1:ibvar)
379      ENDIF
380
381     
382      !Control of date
383     
384      IF( ( it0 - it1 ) /= 1 .AND. ABS( nrstdt ) == 1 ) THEN
385         IF(lwp) THEN
386            WRITE(numout,cform_err)
387            WRITE(numout,*) 'lim_rst_read ===>>>> : problem with nit000 for the restart'
388            WRITE(numout,*) '   we stop. verify the file or rerun with the value  0 for the'
389            WRITE(numout,*) '   control of time parameter  nrstdt'
390            nstop = nstop + 1
391         ENDIF
392      ENDIF
393
394      CALL restget( inumrst, 'v_i '   , jpi, jpj, jpl , 0, llog, v_i     )
395      CALL restget( inumrst, 'v_s '   , jpi, jpj, jpl , 0, llog, v_s     )
396      CALL restget( inumrst, 'smv_i'  , jpi, jpj, jpl , 0, llog, smv_i  )
397      CALL restget( inumrst, 'oa_i '  , jpi, jpj, jpl , 0, llog, oa_i     )
398      CALL restget( inumrst, 'a_i '   , jpi, jpj, jpl , 0, llog, a_i   )
399      CALL restget( inumrst, 't_su'   , jpi, jpj, jpl , 0, llog, t_su  )
400
401      ! we first with bulk ice salinity
402      DO jl = 1, jpl
403         DO jj = 1, jpj
404            DO ji = 1, jpi
405               zindb          = MAX( 0.0 , SIGN( 1.0 , v_i(ji,jj,jl) - 1.0e-4 ) ) 
406               sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX(v_i(ji,jj,jl),1.0e-6) * zindb
407               ht_i(ji,jj,jl) = v_i(ji,jj,jl)   / MAX(a_i(ji,jj,jl),1.0e-6) * zindb
408            END DO
409         END DO
410      END DO
411
412      DO jk = 1, nlay_i
413         s_i(:,:,jk,:) = sm_i(:,:,:)
414      END DO
415
416      ! Salinity profile
417      !--------------------------------------
418      WRITE(numout,*) ' num_sal - will restart understand salinity profile ', num_sal
419
420      num_sal = 2
421      IF (num_sal.eq.2) THEN
422!        CALL lim_var_salprof
423         DO jl = 1, jpl
424         DO jk = 1, nlay_i
425         DO jj = 1, jpj
426         DO ji = 1, jpi
427            zs_inf        = sm_i(ji,jj,jl)
428            z_slope_s     = 2.0*sm_i(ji,jj,jl)/MAX(0.01,ht_i(ji,jj,jl))
429                            !- slope of the salinity profile
430            zs_zero(jk)   = z_slope_s * ( FLOAT(jk)-1.0/2.0 ) * &
431                                         ht_i(ji,jj,jl) / FLOAT(nlay_i)
432            zsmax = 4.5
433            zsmin = 3.5
434            IF ( sm_i(ji,jj,jl) .LT. zsmin ) THEN
435               zalpha = 1.0
436            ELSEIF ( sm_i(ji,jj,jl) .LT.zsmax ) THEN
437               zalpha = sm_i(ji,jj,jl) / (zsmin-zsmax) + zsmax / (zsmax-zsmin)
438            ELSE
439               zalpha = 0.0
440            ENDIF
441            s_i(ji,jj,jk,jl) = zalpha*zs_zero(jk) + ( 1.0 - zalpha )*zs_inf
442         END DO
443         END DO
444         END DO
445         END DO
446         WRITE(numout,*) ' RESTART UNDERSTOOD SALINITY PROFILE '
447      ENDIF
448     
449# if defined key_coupled 
450      CALL restget( inumrst, 'albege' , jpi, jpj, 1 , 0, llog, albege  )
451# endif
452      CALL restget( inumrst, 'tempts1', jpi, jpj, jpl , 0, llog, zheatcon )
453      e_s(:,:,1,:) = zheatcon(:,:,:)
454
455      DO jk = 1, nlay_i 
456         WRITE(zchar,'(I1)') jk
457         WRITE(numout,*)  'zchar : ', zchar
458         zheatnam(jk) = 'tempti'//zchar
459         WRITE(numout,*)  'zheatnam(jk) : ', zheatnam(jk)
460         CALL restget( inumrst, zheatnam(jk), jpi, jpj, jpl , 0, llog, zheatcon )
461         e_i(:,:,jk,:) = zheatcon(:,:,:)
462      END DO
463
464      CALL restget( inumrst, 'u_ice'  , jpi, jpj, 1 , 0, llog, u_ice   )
465      CALL restget( inumrst, 'v_ice'  , jpi, jpj, 1 , 0, llog, v_ice   )
466      CALL restget( inumrst, 'gtaux'  , jpi, jpj, 1 , 0, llog, gtaux   )
467      CALL restget( inumrst, 'gtauy'  , jpi, jpj, 1 , 0, llog, gtauy   )
468      CALL restget( inumrst, 'fsbbq'  , jpi, jpj, 1 , 0, llog, fsbbq   )
469      !----
470      stress1_i(:,:) = 0.0
471      stress2_i(:,:) = 0.0
472      stress12_i(:,:) = 0.0
473!     CALL restget( inumwrs, 'str1_i' , jpi, jpj, 1 , 0, stress1_i )
474!     CALL restget( inumwrs, 'str2_i' , jpi, jpj, 1 , 0, stress2_i )
475!     CALL restget( inumwrs, 'str12i' , jpi, jpj, 1 , 0, stress12_i )
476      !----
477      CALL restget( inumrst, 'moment' , jpi, jpj, 40*jpl+5*(nlay_i-1), 0, llog, zmoment )
478      WRITE(numout,*) 'MOMENT DIMENSION ', (40*jpl+5*(nlay_i-1))
479
480      CALL restclo( inumrst )
481
482      niter = it1
483
484        WRITE(numout,*) ' jl, FIELD No '
485        DO jl = 1, jpl
486        WRITE(numout,*) jl, 6*5*(jl-1)+1, 6*5*(jl-1)+30
487   DO jj = 1, jpj              ! 3D array: 10 time faster than 35 restput
488   DO ji = 1, jpi
489        sxice(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+1)
490        syice(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+2)
491        sxxice(ji,jj,jl)= zmoment(ji,jj,6*5*(jl-1)+3)
492        syyice(ji,jj,jl)= zmoment(ji,jj,6*5*(jl-1)+4)
493        sxyice(ji,jj,jl)= zmoment(ji,jj,6*5*(jl-1)+5)
494        sxsn(ji,jj,jl)  = zmoment(ji,jj,6*5*(jl-1)+6)
495        sysn(ji,jj,jl)  = zmoment(ji,jj,6*5*(jl-1)+7)
496        sxxsn(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+8)
497        syysn(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+9)
498        sxysn(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+10)
499        sxa(ji,jj,jl)   = zmoment(ji,jj,6*5*(jl-1)+11)
500        sya(ji,jj,jl)   = zmoment(ji,jj,6*5*(jl-1)+12)
501        sxxa(ji,jj,jl)  = zmoment(ji,jj,6*5*(jl-1)+13)
502        syya(ji,jj,jl)  = zmoment(ji,jj,6*5*(jl-1)+14)
503        sxya(ji,jj,jl)  = zmoment(ji,jj,6*5*(jl-1)+15)
504        sxc0(ji,jj,jl)  = zmoment(ji,jj,6*5*(jl-1)+16)
505        syc0(ji,jj,jl)  = zmoment(ji,jj,6*5*(jl-1)+17)
506        sxxc0(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+18)
507        syyc0(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+19)
508        sxyc0(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+20)
509        sxsal(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+21)
510        sysal(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+22)
511        sxxsal(ji,jj,jl)= zmoment(ji,jj,6*5*(jl-1)+23)
512        syysal(ji,jj,jl)= zmoment(ji,jj,6*5*(jl-1)+24)
513        sxysal(ji,jj,jl)= zmoment(ji,jj,6*5*(jl-1)+25)
514        sxage(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+26)
515        syage(ji,jj,jl) = zmoment(ji,jj,6*5*(jl-1)+27)
516        sxxage(ji,jj,jl)= zmoment(ji,jj,6*5*(jl-1)+28)
517        syyage(ji,jj,jl)= zmoment(ji,jj,6*5*(jl-1)+29)
518        sxyage(ji,jj,jl)= zmoment(ji,jj,6*5*(jl-1)+30)
519        END DO
520        END DO
521        END DO
522
523        WRITE(numout,*) ' jk, jl, FIELD No '
524        DO jl = 1, jpl
525        DO jk = 1, nlay_i 
526        WRITE(numout,*) 5*(6*jpl+(jk-1)+2*(jl-1))+1, 5*(6*jpl+(jk-1)+2*(jl-1))+5
527   DO jj = 1, jpj              ! 3D array: 10 time faster than 35 restput
528   DO ji = 1, jpi
529        sxe(ji,jj,jk,jl) = zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+1)
530        sye(ji,jj,jk,jl) = zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+2)
531        sxxe(ji,jj,jk,jl)= zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+3)
532        syye(ji,jj,jk,jl)= zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+4)
533        sxye(ji,jj,jk,jl)= zmoment(ji,jj,5*(6*jpl+(jk-1)+2*(jl-1))+5)
534   END DO
535   END DO
536        END DO
537        END DO
538        WRITE(numout,*) 40*jpl+5*nlay_i-10 + 1, 40*jpl+5*nlay_i - 10 + 5
539   DO jj = 1, jpj              ! 3D array: 10 time faster than 35 restput
540   DO ji = 1, jpi
541        sxopw(ji,jj) = zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 1)
542        syopw(ji,jj) = zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 2)
543        sxxopw(ji,jj)= zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 3)
544        syyopw(ji,jj)= zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 4)
545        sxyopw(ji,jj)= zmoment(ji,jj,40*jpl + 5*nlay_i - 10 + 5)
546        END DO
547        END DO
548
549!+++++++++++ CHECK EVERYTHING ++++++++++
550
551            WRITE(numout,*)
552            WRITE(numout,*) ' lim_rst_read  : CHUKCHI SEA POINT '
553            WRITE(numout,*) ' ~~~~~~~~~~'
554            WRITE(numout,*) ' ~~~ Arctic'
555
556            index = 1
557            ji = 24
558            jj = 24
559            WRITE(numout,*) ' ji, jj ', ji, jj
560            WRITE(numout,*) ' ICE VARIABLES '
561            WRITE(numout,*) ' open water ', ato_i(ji,jj)
562
563            DO jl = 1, jpl
564               WRITE(numout,*) ' *** CATEGORY NUMBER *** ', jl
565               WRITE(numout,*) ' '
566               WRITE(numout,*) ' a_i        : ', a_i(ji,jj,jl)     
567               WRITE(numout,*) ' v_i        : ', v_i(ji,jj,jl) 
568               WRITE(numout,*) ' v_s        : ', v_s(ji,jj,jl)   
569               WRITE(numout,*) ' e_i1       : ', e_i(ji,jj,1,jl)/1.0e9     
570               WRITE(numout,*) ' e_i2       : ', e_i(ji,jj,2,jl)/1.0e9     
571               WRITE(numout,*) ' e_s        : ', e_s(ji,jj,1,jl)     
572               WRITE(numout,*) ' smv_i      : ', smv_i(ji,jj,jl) 
573               WRITE(numout,*) ' oa_i       : ', oa_i(ji,jj,jl)
574               WRITE(numout,*) ' t_su       : ', t_su(ji,jj,jl)
575            END DO
576
577            WRITE(numout,*) ' open water '
578            WRITE(numout,*) ' sxopw  ', sxopw(ji,jj)
579            WRITE(numout,*) ' syopw  ', syopw(ji,jj)
580            WRITE(numout,*) ' sxxopw ', sxxopw(ji,jj)
581            WRITE(numout,*) ' syyopw ', syyopw(ji,jj)
582            WRITE(numout,*) ' sxyopw ', sxyopw(ji,jj)
583            DO jl = 1, jpl
584               WRITE(numout,*) ' jl, ice volume content ', jl
585               WRITE(numout,*) ' sxice  ', sxice(ji,jj,jl)
586               WRITE(numout,*) ' syice  ', syice(ji,jj,jl)
587               WRITE(numout,*) ' sxxice ', sxxice(ji,jj,jl)
588               WRITE(numout,*) ' syyice ', syyice(ji,jj,jl)
589               WRITE(numout,*) ' sxyice ', sxyice(ji,jj,jl)
590               WRITE(numout,*) ' jl, snow volume content ', jl
591               WRITE(numout,*) ' sxsn   ', sxsn(ji,jj,jl)
592               WRITE(numout,*) ' sysn   ', sysn(ji,jj,jl)
593               WRITE(numout,*) ' sxxsn  ', sxxsn(ji,jj,jl)
594               WRITE(numout,*) ' syysn  ', syysn(ji,jj,jl)
595               WRITE(numout,*) ' sxysn  ', sxysn(ji,jj,jl)
596               WRITE(numout,*) ' jl, ice area in category ', jl
597               WRITE(numout,*) ' sxa    ', sxa (ji,jj,jl)
598               WRITE(numout,*) ' sya    ', sya (ji,jj,jl)
599               WRITE(numout,*) ' sxxa   ', sxxa (ji,jj,jl)
600               WRITE(numout,*) ' syya   ', syya (ji,jj,jl)
601               WRITE(numout,*) ' sxya   ', sxya (ji,jj,jl)
602               WRITE(numout,*) ' jl, snow temp ', jl
603               WRITE(numout,*) ' sxc0   ', sxc0(ji,jj,jl)
604               WRITE(numout,*) ' syc0   ', syc0(ji,jj,jl)
605               WRITE(numout,*) ' sxxc0  ', sxxc0(ji,jj,jl)
606               WRITE(numout,*) ' syyc0  ', syyc0(ji,jj,jl)
607               WRITE(numout,*) ' sxyc0  ', sxyc0(ji,jj,jl)
608               WRITE(numout,*) ' jl, ice salinity ', jl
609               WRITE(numout,*) ' sxsal  ', sxsal(ji,jj,jl)
610               WRITE(numout,*) ' sysal  ', sysal(ji,jj,jl)
611               WRITE(numout,*) ' sxxsal ', sxxsal(ji,jj,jl)
612               WRITE(numout,*) ' syysal ', syysal(ji,jj,jl)
613               WRITE(numout,*) ' sxysal ', sxysal(ji,jj,jl)
614               WRITE(numout,*) ' jl, ice age      ', jl
615               WRITE(numout,*) ' sxage  ', sxage(ji,jj,jl)
616               WRITE(numout,*) ' syage  ', syage(ji,jj,jl)
617               WRITE(numout,*) ' sxxage ', sxxage(ji,jj,jl)
618               WRITE(numout,*) ' syyage ', syyage(ji,jj,jl)
619               WRITE(numout,*) ' sxyage ', sxyage(ji,jj,jl)
620            END DO
621            DO jl = 1, jpl
622               DO jk = 1, nlay_i
623                  WRITE(numout,*) ' jk, jl, ice heat content', jk, jl
624                  WRITE(numout,*) ' sxe    ', sxe(ji,jj,jk,jl)
625                  WRITE(numout,*) ' sye    ', sye(ji,jj,jk,jl)
626                  WRITE(numout,*) ' sxxe   ', sxxe(ji,jj,jk,jl)
627                  WRITE(numout,*) ' syye   ', syye(ji,jj,jk,jl)
628                  WRITE(numout,*) ' sxye   ', sxye(ji,jj,jk,jl)
629               END DO
630            END DO
631
632            DO jl = 1, 40*jpl+5*(nlay_i-1) 
633               WRITE(numout,*) ' zmoment No ', jl,' = ', zmoment(ji,jj,jl)
634            END DO
635
636!+++++++++++ END CHECK +++++++++++++++++
637
638   END SUBROUTINE lim_rst_read
639
640# endif
641
642#else
643   !!----------------------------------------------------------------------
644   !!   Default option :       Empty module            NO LIM sea-ice model
645   !!----------------------------------------------------------------------
646CONTAINS
647   SUBROUTINE lim_rst_read             ! Empty routine
648   END SUBROUTINE lim_rst_read
649   SUBROUTINE lim_rst_write            ! Empty routine
650   END SUBROUTINE lim_rst_write
651#endif
652
653   !!======================================================================
654END MODULE limrst
Note: See TracBrowser for help on using the repository browser.