1 | MODULE 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 |
---|
14 | USE par_ice |
---|
15 | USE in_out_manager |
---|
16 | USE ice |
---|
17 | USE ioipsl |
---|
18 | USE dom_oce |
---|
19 | USE ice_oce ! ice variables |
---|
20 | USE daymod |
---|
21 | USE limicepoints |
---|
22 | !USE limvar |
---|
23 | |
---|
24 | IMPLICIT NONE |
---|
25 | PRIVATE |
---|
26 | |
---|
27 | !! * Accessibility |
---|
28 | PUBLIC lim_rst_write ! routine called by lim_step.F90 |
---|
29 | PUBLIC 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 | |
---|
53 | SUBROUTINE 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 | !!---------------------------------------------------------------------- |
---|
646 | CONTAINS |
---|
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 | !!====================================================================== |
---|
654 | END MODULE limrst |
---|