/[MITgcm]/MITgcm_contrib/llc_hires/llc_4320/code-async/seaice_write_pickup.F
ViewVC logotype

Contents of /MITgcm_contrib/llc_hires/llc_4320/code-async/seaice_write_pickup.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.3 - (show annotations) (download)
Thu Apr 14 03:51:44 2016 UTC (9 years, 3 months ago) by dimitri
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +6 -5 lines
updating for checkpoint65v

1 C $Header: /u/gcmpack/MITgcm_contrib/llc_hires/llc_4320/code-async/seaice_write_pickup.F,v 1.2 2014/03/06 02:45:05 dimitri Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: SEAICE_WRITE_PICKUP
8 C !INTERFACE:
9 SUBROUTINE SEAICE_WRITE_PICKUP ( permPickup, suff,
10 I myTime, myIter, myThid )
11
12 C !DESCRIPTION: \bv
13 C *==========================================================*
14 C | SUBROUTINE SEAICE_WRITE_PICKUP
15 C | o Write sea ice pickup file for restarting.
16 C *==========================================================*
17 C \ev
18
19 C !USES:
20 IMPLICIT NONE
21
22 C == Global variables ===
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "SEAICE_SIZE.h"
27 #include "SEAICE_PARAMS.h"
28 #include "SEAICE.h"
29 #include "SEAICE_TRACER.h"
30
31 C !INPUT/OUTPUT PARAMETERS:
32 C == Routine arguments ==
33 C permPickup :: write a permanent pickup
34 C suff :: suffix for pickup file (eg. ckptA or 0000000010)
35 C myTime :: Current time in simulation
36 C myIter :: Current iteration number in simulation
37 C myThid :: My Thread Id number
38 LOGICAL permPickup
39 CHARACTER*(*) suff
40 _RL myTime
41 INTEGER myIter
42 INTEGER myThid
43
44 C !LOCAL VARIABLES:
45 C == Local variables ==
46 C fp :: pickup-file precision ( precFloat64 )
47 C glf :: local flag for "globalFiles"
48 C fn :: Temp. for building file name.
49 C nWrFlds :: number of fields being written
50 C listDim :: dimension of "wrFldList" local array
51 C wrFldList :: list of written fields
52 C j :: loop index / field number
53 C nj :: record number
54 C msgBuf :: Informational/error message buffer
55 INTEGER fp
56 LOGICAL glf
57 _RL timList(1)
58 CHARACTER*(MAX_LEN_FNAM) fn
59 INTEGER listDim, nWrFlds
60 PARAMETER( listDim = 20 )
61 CHARACTER*(8) wrFldList(listDim)
62 INTEGER j, nj
63 CHARACTER*(MAX_LEN_MBUF) msgBuf
64 #ifdef ALLOW_SITRACER
65 CHARACTER*(8) fldName
66 INTEGER iTrac
67 #endif
68 CEOP
69
70
71 chenze
72
73 COMMON /ICOUNTER_COMM/ ICOUNTER
74 INTEGER ICOUNTER
75 CHARACTER*(MAX_LEN_MBUF) mysuff
76 WRITE(mysuff,'(I10.10)') myIter
77
78 call timer_start('asyncio_seaice_pickup ',myThid)
79
80 ICOUNTER = ICOUNTER+1
81 CALL beginNewEpoch(icounter,myIter,2)
82 CALL ASYNCIO_WRITE_FLD_XYM_RL( 'A.',mysuff,TICES,iCounter,myThid)
83 CALL ASYNCIO_WRITE_FLD_XY_RL( 'B.',mysuff,AREA,iCounter,myThid)
84 CALL ASYNCIO_WRITE_FLD_XY_RL( 'C.',mysuff,HEFF,iCounter,myThid)
85 CALL ASYNCIO_WRITE_FLD_XY_RL( 'D.',mysuff,HSNOW,iCounter,myThid)
86 CALL ASYNCIO_WRITE_FLD_XY_RL( 'G.',mysuff,HSALT,iCounter,myThid)
87 CALL ASYNCIO_WRITE_FLD_XY_RL( 'E.',mysuff,UICE,iCounter,myThid)
88 CALL ASYNCIO_WRITE_FLD_XY_RL( 'F.',mysuff,VICE,iCounter,myThid)
89
90 call timer_stop('asyncio_seaice_pickup ',myThid)
91
92 return
93
94 chenze
95
96
97
98 C-- Write model fields
99 WRITE(fn,'(A,A)') 'pickup_seaice.',suff
100
101 c IF ( seaice_pickup_write_mdsio ) THEN
102
103 fp = precFloat64
104 j = 0
105 nj = 0
106 C record number < 0 : a hack not to write meta files now:
107
108 C-- write Sea-Ice Thermodynamics State variables, starting with 3-D fields:
109 IF ( .NOT.useThSIce ) THEN
110
111 #ifdef SEAICE_ITD
112
113 j = j + 1
114 CALL WRITE_REC_3D_RL( fn,fp, nITD, TICES, -j, myIter,myThid )
115 IF (j.LE.listDim) wrFldList(j) = 'siTICES '
116 j = j + 1
117 CALL WRITE_REC_3D_RL( fn,fp, nITD, AREAITD, -j, myIter,myThid )
118 IF (j.LE.listDim) wrFldList(j) = 'siAREAn '
119 j = j + 1
120 CALL WRITE_REC_3D_RL( fn,fp, nITD, HEFFITD, -j, myIter,myThid )
121 IF (j.LE.listDim) wrFldList(j) = 'siHEFFn '
122 j = j + 1
123 CALL WRITE_REC_3D_RL( fn,fp, nITD, HSNOWITD,-j, myIter,myThid )
124 IF (j.LE.listDim) wrFldList(j) = 'siHSNOWn'
125 C- switch to 2-D fields:
126 nj = -j*nITD
127
128 #else /* SEAICE_ITD */
129
130 j = j + 1
131 nj = nj-1
132 IF (SEAICE_multDim.GT.1) THEN
133 CALL WRITE_REC_3D_RL(fn,fp,nITD,TICES, nj, myIter, myThid )
134 IF (j.LE.listDim) wrFldList(j) = 'siTICES '
135 C- switch to 2-D fields:
136 c nj = nj*nITD
137 nj = nj-nITD+1
138 ELSE
139 CALL WRITE_REC_LEV_RL( fn, fp, nITD, 1, 1, TICES,
140 I nj, myIter, myThid )
141 IF (j.LE.listDim) wrFldList(j) = 'siTICE '
142 ENDIF
143
144 C--- continue to write 2-D fields:
145 j = j + 1
146 nj = nj-1
147 CALL WRITE_REC_3D_RL( fn, fp, 1, AREA , nj, myIter, myThid )
148 IF (j.LE.listDim) wrFldList(j) = 'siAREA '
149 j = j + 1
150 nj = nj-1
151 CALL WRITE_REC_3D_RL( fn, fp, 1, HEFF , nj, myIter, myThid )
152 IF (j.LE.listDim) wrFldList(j) = 'siHEFF '
153 j = j + 1
154 nj = nj-1
155 CALL WRITE_REC_3D_RL( fn, fp, 1, HSNOW , nj, myIter, myThid )
156 IF (j.LE.listDim) wrFldList(j) = 'siHSNOW '
157
158 #endif /* SEAICE_ITD */
159
160 #ifdef SEAICE_VARIABLE_SALINITY
161 j = j + 1
162 nj = nj-1
163 CALL WRITE_REC_3D_RL( fn, fp, 1, HSALT , nj, myIter, myThid )
164 IF (j.LE.listDim) wrFldList(j) = 'siHSALT '
165 #endif
166 #ifdef ALLOW_SITRACER
167 DO iTrac = 1, SItrNumInUse
168 WRITE(fldName,'(A6,I2.2)') 'siTrac', iTrac
169 j = j + 1
170 nj = nj-1
171 CALL WRITE_REC_3D_RL( fn, fp, 1,
172 & SItracer(1-OLx,1-OLy,1,1,iTrac),
173 & nj, myIter, myThid )
174 IF (j.LE.listDim) wrFldList(j) = fldName
175 ENDDO
176 #endif
177 ENDIF
178
179 C-- write Sea-Ice Dynamics variables (all 2-D fields):
180 j = j + 1
181 nj = nj-1
182 CALL WRITE_REC_3D_RL( fn, fp, 1, UICE , nj, myIter, myThid )
183 IF (j.LE.listDim) wrFldList(j) = 'siUICE '
184
185 j = j + 1
186 nj = nj-1
187 CALL WRITE_REC_3D_RL( fn, fp, 1, VICE , nj, myIter, myThid )
188 IF (j.LE.listDim) wrFldList(j) = 'siVICE '
189
190 IF ( SEAICEuseBDF2 ) THEN
191 j = j + 1
192 nj = nj-1
193 CALL WRITE_REC_3D_RL( fn, fp, 1, uIceNm1 , nj, myIter, myThid )
194 IF (j.LE.listDim) wrFldList(j) = 'siUicNm1'
195
196 j = j + 1
197 nj = nj-1
198 CALL WRITE_REC_3D_RL( fn, fp, 1, vIceNm1 , nj, myIter, myThid )
199 IF (j.LE.listDim) wrFldList(j) = 'siVicNm1'
200 ENDIF
201 #if (defined(SEAICE_CGRID) && defined(SEAICE_ALLOW_EVP))
202 IF ( SEAICEuseEVP ) THEN
203 j = j + 1
204 nj = nj-1
205 CALL WRITE_REC_3D_RL( fn, fp, 1, seaice_sigma1,
206 & nj, myIter, myThid )
207 IF (j.LE.listDim) wrFldList(j) = 'siSigm1 '
208
209 j = j + 1
210 nj = nj-1
211 CALL WRITE_REC_3D_RL( fn, fp, 1, seaice_sigma2,
212 & nj, myIter, myThid )
213 IF (j.LE.listDim) wrFldList(j) = 'siSigm2 '
214
215 j = j + 1
216 nj = nj-1
217 CALL WRITE_REC_3D_RL( fn, fp, 1, seaice_sigma12,
218 & nj, myIter, myThid )
219 IF (j.LE.listDim) wrFldList(j) = 'siSigm12'
220 ENDIF
221 #endif /* SEAICE_ALLOW_EVP */
222
223 nWrFlds = j
224 IF ( nWrFlds.GT.listDim ) THEN
225 WRITE(msgBuf,'(2A,I5,A)') 'WRITE_SEAICE_PICKUP: ',
226 & 'trying to write ',nWrFlds,' fields'
227 CALL PRINT_ERROR( msgBuf, myThid )
228 WRITE(msgBuf,'(2A,I5,A)') 'WRITE_SEAICE_PICKUP: ',
229 & 'field-list dimension (listDim=',listDim,') too small'
230 CALL PRINT_ERROR( msgBuf, myThid )
231 STOP 'ABNORMAL END: S/R WRITE_SEAICE_PICKUP (list-size Pb)'
232 ENDIF
233
234 #ifdef ALLOW_MDSIO
235 C uses this specific S/R to write (with more informations) only meta files
236 nj = ABS(nj)
237 glf = globalFiles
238 timList(1) = myTime
239 CALL MDS_WR_METAFILES( fn, fp, glf, .FALSE.,
240 & 0, 0, 1, ' ',
241 & nWrFlds, wrFldList,
242 & 1, timList, oneRL,
243 & nj, myIter, myThid )
244 C
245 #endif /* ALLOW_MDSIO */
246 C--------------------------
247 c ENDIF
248
249 RETURN
250 END

  ViewVC Help
Powered by ViewVC 1.1.22