/[MITgcm]/MITgcm/pkg/ctrl/ctrl_map_ini_gentim2d.F
ViewVC logotype

Contents of /MITgcm/pkg/ctrl/ctrl_map_ini_gentim2d.F

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


Revision 1.16 - (show annotations) (download)
Mon Sep 18 15:16:52 2017 UTC (7 years, 9 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, HEAD
Changes since 1.15: +5 -3 lines
- call MDS_READ_FIELD / MDS_WRITE_FIELD instead of the deprecated mdsreadfield / mdswritefield

1 C $Header: /u/gcmpack/MITgcm/pkg/ctrl/ctrl_map_ini_gentim2d.F,v 1.15 2017/03/06 20:03:46 gforget Exp $
2 C $Name: $
3
4 #include "CTRL_OPTIONS.h"
5 #ifdef ALLOW_AUTODIFF
6 # include "AUTODIFF_OPTIONS.h"
7 #endif
8
9 CBOP
10 C !ROUTINE: CTRL_MAP_INI_GENTIM2D
11 C !INTERFACE:
12 SUBROUTINE CTRL_MAP_INI_GENTIM2D( myThid )
13
14 C !DESCRIPTION: \bv
15 C *=================================================================
16 C | SUBROUTINE CTRL_MAP_INI_GENTIM2D
17 C | Dimensionalize and preprocess time variable controls.
18 C *=================================================================
19 C \ev
20
21 C !USES:
22 IMPLICIT NONE
23
24 C == global variables ==
25 #include "SIZE.h"
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 #include "GRID.h"
29 #include "DYNVARS.h"
30 #include "FFIELDS.h"
31 #include "CTRL_SIZE.h"
32 #include "ctrl.h"
33 #include "optim.h"
34 #include "ctrl_dummy.h"
35 #include "CTRL_GENARR.h"
36 #ifdef ALLOW_PTRACERS
37 # include "PTRACERS_SIZE.h"
38 # include "PTRACERS_FIELDS.h"
39 #endif
40 #ifdef ALLOW_AUTODIFF
41 #include "tamc.h"
42 #endif
43
44 C !INPUT/OUTPUT PARAMETERS:
45 C == routine arguments ==
46 INTEGER myThid
47
48 #ifdef ALLOW_GENTIM2D_CONTROL
49 C !LOCAL VARIABLES:
50 C == local variables ==
51 integer iarr
52 integer numsmo
53 character*(80) fnamegenIn
54 character*(80) fnamegenOut
55 character*(80) fnamegenTmp
56 character*(80) fnamebase
57 integer startrec
58 integer endrec
59 integer diffrec
60 integer irec, jrec, krec
61 integer replicated_nrec
62 integer replicated_ntimes
63 logical doglobalread
64 logical ladinit
65 logical dowc01
66 logical dosmooth
67 logical doscaling
68 _RL xx_gen(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
69 _RS dummyRS(1)
70 #ifdef ALLOW_ECCO
71 _RL xx_gen_tmp(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
72 integer nyearsINT
73 _RL nyearsRL
74 #endif
75 integer bi,bj
76 integer i,j,k2
77 INTEGER ILNBLNK
78 EXTERNAL ILNBLNK
79 integer ilgen
80 CEOP
81
82 c-- Now, read the control vector.
83 doglobalread = .false.
84 ladinit = .false.
85
86 DO bj=myByLo(myThid), myByHi(myThid)
87 DO bi=myBxLo(myThid), myBxHi(myThid)
88 DO j = 1-OLy,sNy+OLy
89 DO i = 1-OLx,sNx+OLx
90 xx_gen(i,j,bi,bj)=0. _d 0
91 ENDDO
92 ENDDO
93 ENDDO
94 ENDDO
95
96 C-- generic 2D control variables
97 DO iarr = 1, maxCtrlTim2D
98
99 diffrec=0
100 startrec=0
101 endrec=0
102
103 #ifndef ALLOW_OPENAD
104 if (xx_gentim2d_weight(iarr).NE.' ') then
105 #endif
106
107 fnamebase = xx_gentim2d_file(iarr)
108 call ctrl_init_rec ( fnamebase,
109 I xx_gentim2d_startdate1(iarr),
110 I xx_gentim2d_startdate2(iarr),
111 I xx_gentim2d_period(iarr),
112 I 1,
113 O xx_gentim2d_startdate(1,iarr),
114 O diffrec, startrec, endrec,
115 I myThid )
116
117 dosmooth=.false.
118 dowc01 = .false.
119 doscaling=.true.
120
121 numsmo=1
122 do k2 = 1, maxCtrlProc
123 if (xx_gentim2d_preproc(k2,iarr).EQ.'WC01') then
124 dowc01=.TRUE.
125 if (xx_gentim2d_preproc_i(k2,iarr).NE.0)
126 & numsmo=xx_gentim2d_preproc_i(k2,iarr)
127 endif
128 if ((.NOT.dowc01).AND.
129 & (xx_gentim2d_preproc(k2,iarr).EQ.'smooth')) then
130 dosmooth=.TRUE.
131 if (xx_gentim2d_preproc_i(k2,iarr).NE.0)
132 & numsmo=xx_gentim2d_preproc_i(k2,iarr)
133 endif
134 if (xx_gentim2d_preproc(k2,iarr).EQ.'noscaling') then
135 doscaling=.FALSE.
136 endif
137 enddo
138
139 fnamebase = xx_gentim2d_file(iarr)
140 ilgen=ilnblnk( fnamebase )
141 write(fnamegenIn(1:80),'(2a,i10.10)')
142 & fnamebase(1:ilgen),'.',optimcycle
143 write(fnamegenOut(1:80),'(2a,i10.10)')
144 & fnamebase(1:ilgen),'.effective.',optimcycle
145 write(fnamegenTmp(1:80),'(2a,i10.10)')
146 & fnamebase(1:ilgen),'.tmp.',optimcycle
147
148 c-- docycle
149
150 replicated_nrec=endrec
151 replicated_ntimes=0
152 do k2 = 1, maxCtrlProc
153 if (xx_gentim2d_preproc(k2,iarr).EQ.'docycle') then
154 if (xx_gentim2d_preproc_i(k2,iarr).NE.0) then
155 replicated_nrec=min(endrec,xx_gentim2d_preproc_i(k2,iarr))
156 replicated_ntimes=
157 & int(float(endrec)/float(replicated_nrec))
158 if (replicated_ntimes*replicated_nrec.LT.endrec)
159 & replicated_ntimes=replicated_ntimes+1
160 if (replicated_ntimes*replicated_nrec.GT.endrec)
161 & replicated_ntimes=replicated_ntimes-1
162 endif
163 endif
164 enddo
165
166 DO jrec = 1, replicated_ntimes+1
167 DO irec = 1, replicated_nrec
168 #ifdef ALLOW_AUTODIFF
169 CADJ STORE xx_gentim2d_dummy = ctrltape, key = 1 , kind = isbyte
170 #endif
171 krec=replicated_nrec*(jrec-1)+irec
172 IF (krec.LE.endrec) THEN
173 #ifdef ALLOW_AUTODIFF
174 call active_read_xy( fnamegenIn, xx_gen, irec,
175 & doglobalread, ladinit, optimcycle,
176 & mythid, xx_gentim2d_dummy(iarr) )
177 #else
178 CALL READ_REC_XY_RL( fnamegenIn, xx_gen, iRec, 1, myThid )
179 #endif
180 #ifdef ALLOW_AUTODIFF
181 call active_write_xy( fnamegenOut, xx_gen, krec, optimcycle,
182 & mythid, xx_gentim2d_dummy(iarr) )
183 #else
184 CALL WRITE_REC_XY_RL( fnamegenOut, xx_gen, iRec, 1, myThid )
185 #endif
186 ENDIF
187 ENDDO
188 ENDDO
189
190 c-- rmcycle
191 #ifdef ALLOW_ECCO
192 replicated_nrec=endrec
193 replicated_ntimes=0
194 do k2 = 1, maxCtrlProc
195 if (xx_gentim2d_preproc(k2,iarr).EQ.'rmcycle') then
196 if (xx_gentim2d_preproc_i(k2,iarr).NE.0) then
197 replicated_nrec=min(endrec,xx_gentim2d_preproc_i(k2,iarr))
198 replicated_ntimes=
199 & int(float(endrec)/float(replicated_nrec))
200 if (replicated_ntimes*replicated_nrec.LT.endrec)
201 & replicated_ntimes=replicated_ntimes+1
202 if (replicated_ntimes*replicated_nrec.GT.endrec)
203 & replicated_ntimes=replicated_ntimes-1
204 endif
205 endif
206 enddo
207
208 c print*,'endrec',endrec,replicated_ntimes,replicated_nrec
209
210 IF (replicated_ntimes.GT.0) THEN
211
212 c create cyclic average
213
214 nyearsINT=1+int((endrec-replicated_nrec)/replicated_nrec)
215 nyearsRL=float(nyearsINT)
216
217 c print*,'nyearsINT',nyearsINT,nyearsRL
218
219 DO irec = 1, replicated_nrec
220
221 call ecco_zero(xx_gen,1,zeroRL,myThid)
222
223 do jrec=1,nyearsINT
224 #ifdef ALLOW_AUTODIFF
225 CADJ STORE xx_gentim2d_dummy = ctrltape, key = 1 , kind = isbyte
226 #endif
227 krec=irec+(jrec-1)*replicated_nrec
228 #ifdef ALLOW_AUTODIFF
229 call active_read_xy( fnamegenOut, xx_gen_tmp, krec,
230 & doglobalread, ladinit, optimcycle,
231 & mythid, xx_gentim2d_dummy(iarr) )
232 #else
233 CALL READ_REC_XY_RL( fnamegenOut, xx_gen_tmp, krec,
234 & 1, myThid )
235 #endif
236 call ecco_add(xx_gen_tmp,1,xx_gen,1,myThid)
237 enddo
238
239 call ecco_div(xx_gen,1,nyearsRL,myThid)
240
241 #ifdef ALLOW_AUTODIFF
242 CADJ STORE xx_gentim2d_dummy = ctrltape, key = 1 , kind = isbyte
243 #endif
244
245 #ifdef ALLOW_AUTODIFF
246 call active_write_xy( fnamegenTmp, xx_gen, iRec, optimcycle,
247 & mythid, xx_gentim2d_dummy(iarr) )
248 #else
249 CALL WRITE_REC_XY_RL( fnamegenTmp, xx_gen, iRec, 1, myThid )
250 #endif
251
252 ENDDO
253
254 c subtract cyclic average
255 DO jrec = 1, replicated_ntimes+1
256 DO irec = 1, replicated_nrec
257 #ifdef ALLOW_AUTODIFF
258 CADJ STORE xx_gentim2d_dummy = ctrltape, key = 1 , kind = isbyte
259 #endif
260 krec=replicated_nrec*(jrec-1)+irec
261 IF (krec.LE.endrec) THEN
262 #ifdef ALLOW_AUTODIFF
263 CALL active_read_xy( fnamegenOut, xx_gen, kRec,
264 & doglobalread, ladinit, optimcycle,
265 & mythid, xx_gentim2d_dummy(iarr) )
266 #else
267 CALL READ_REC_XY_RL( fnamegenOut, xx_gen, kRec, 1, myThid )
268 #endif
269 #ifdef ALLOW_AUTODIFF
270 CALL active_read_xy( fnamegenTmp, xx_gen_tmp, iRec,
271 & doglobalread, ladinit, optimcycle,
272 & mythid, xx_gentim2d_dummy(iarr) )
273 #else
274 CALL READ_REC_XY_RL( fnamegenTmp, xx_gen_tmp, iRec, 1, myThid )
275 #endif
276 CALL ecco_subtract(xx_gen_tmp,1,xx_gen,1,myThid)
277 #ifdef ALLOW_AUTODIFF
278 CALL active_write_xy( fnamegenOut, xx_gen, kRec, optimcycle,
279 & mythid, xx_gentim2d_dummy(iarr) )
280 #else
281 CALL WRITE_REC_XY_RL( fnamegenOut, xx_gen, kRec, 1, myThid )
282 #endif
283 ENDIF
284 ENDDO
285 ENDDO
286
287 ENDIF
288 #endif /* ifdef ALLOW_ECCO */
289
290 c-- scaling and smoothing
291
292 DO irec = 1, endrec
293 #ifdef ALLOW_AUTODIFF
294 CADJ STORE xx_gentim2d_dummy = ctrltape, key = 1 , kind = isbyte
295 #endif
296
297 #ifdef ALLOW_AUTODIFF
298 call active_read_xy( fnamegenOut, xx_gen, irec,
299 & doglobalread, ladinit, optimcycle,
300 & mythid, xx_gentim2d_dummy(iarr) )
301 #else
302 CALL READ_REC_XY_RL( fnamegenOut, xx_gen, iRec, 1, myThid )
303 #endif
304
305 #ifndef ALLOW_OPENAD
306 jrec=1
307 do k2 = 1, maxCtrlProc
308 if (xx_gentim2d_preproc(k2,iarr).EQ.'variaweight') jrec=irec
309 enddo
310 CALL MDS_READ_FIELD( xx_gentim2d_weight(iarr),ctrlprec,
311 & .FALSE.,'RL',1,1,1,wgentim2d(1-Olx,1-Oly,1,1,iarr),
312 & dummyRS,jrec,myThid )
313
314 #ifdef ALLOW_SMOOTH
315 IF (useSMOOTH) THEN
316 IF (dowc01) call smooth_correl2d(xx_gen,maskC,numsmo,mythid)
317 IF (dosmooth) call smooth2d(xx_gen,maskC,numsmo,mythid)
318 ENDIF
319 #endif /* ALLOW_SMOOTH */
320
321 IF (doscaling) then
322 DO bj=myByLo(myThid), myByHi(myThid)
323 DO bi=myBxLo(myThid), myBxHi(myThid)
324 DO j = 1,sNy
325 DO i = 1,sNx
326 if ((maskC(i,j,1,bi,bj).NE.0.).AND.
327 & (wgentim2d(i,j,bi,bj,iarr).GT.0.)) then
328 xx_gen(i,j,bi,bj)=xx_gen(i,j,bi,bj)
329 & /sqrt(wgentim2d(i,j,bi,bj,iarr))
330 else
331 xx_gen(i,j,bi,bj)=0. _d 0
332 endif
333 ENDDO
334 ENDDO
335 ENDDO
336 ENDDO
337 ENDIF ! IF (doscaling) then
338 #endif /* ALLOW_OPENAD */
339
340 CALL CTRL_BOUND_2D(xx_gen,maskC,
341 & xx_gentim2d_bounds(1,iarr),myThid)
342
343 CALL EXCH_XY_RL ( xx_gen , myThid )
344
345 #ifdef ALLOW_AUTODIFF
346 call active_write_xy( fnamegenOut, xx_gen, irec, optimcycle,
347 & mythid, xx_gentim2d_dummy(iarr) )
348 #else
349 CALL WRITE_REC_XY_RL( fnamegenOut, xx_gen, iRec, 1, myThid )
350 #endif
351
352 c-- end irec loop
353 ENDDO
354
355 #ifndef ALLOW_OPENAD
356 endif
357 #endif
358
359 c-- end iarr loop
360 ENDDO
361
362 #endif /* ALLOW_GENTIM2D_CONTROL */
363
364 RETURN
365 END
366

  ViewVC Help
Powered by ViewVC 1.1.22