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

Annotation 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 - (hide 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 gforget 1.16 C $Header: /u/gcmpack/MITgcm/pkg/ctrl/ctrl_map_ini_gentim2d.F,v 1.15 2017/03/06 20:03:46 gforget Exp $
2 gforget 1.1 C $Name: $
3    
4     #include "CTRL_OPTIONS.h"
5 gforget 1.3 #ifdef ALLOW_AUTODIFF
6     # include "AUTODIFF_OPTIONS.h"
7     #endif
8 gforget 1.1
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 gforget 1.3 #ifdef ALLOW_AUTODIFF
41     #include "tamc.h"
42     #endif
43 gforget 1.1
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 gforget 1.10 integer numsmo
53 gforget 1.1 character*(80) fnamegenIn
54     character*(80) fnamegenOut
55 gforget 1.8 character*(80) fnamegenTmp
56 heimbach 1.5 character*(80) fnamebase
57 gforget 1.1 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 gforget 1.10 logical dowc01
66     logical dosmooth
67 gforget 1.13 logical doscaling
68 gforget 1.1 _RL xx_gen(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
69 gforget 1.16 _RS dummyRS(1)
70 gforget 1.8 #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 gforget 1.1 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 gforget 1.15 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 gforget 1.1 C-- generic 2D control variables
97     DO iarr = 1, maxCtrlTim2D
98    
99 gforget 1.3 diffrec=0
100     startrec=0
101     endrec=0
102    
103 heimbach 1.5 #ifndef ALLOW_OPENAD
104 gforget 1.1 if (xx_gentim2d_weight(iarr).NE.' ') then
105 heimbach 1.5 #endif
106 gforget 1.1
107 heimbach 1.5 fnamebase = xx_gentim2d_file(iarr)
108     call ctrl_init_rec ( fnamebase,
109 gforget 1.1 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 gforget 1.10 dosmooth=.false.
118     dowc01 = .false.
119 gforget 1.13 doscaling=.true.
120 gforget 1.10
121     numsmo=1
122 gforget 1.1 do k2 = 1, maxCtrlProc
123 gforget 1.10 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 gforget 1.1 endif
134 gforget 1.13 if (xx_gentim2d_preproc(k2,iarr).EQ.'noscaling') then
135     doscaling=.FALSE.
136     endif
137 gforget 1.1 enddo
138    
139 gforget 1.8 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 gforget 1.9 c-- docycle
149 gforget 1.8
150 gforget 1.1 replicated_nrec=endrec
151     replicated_ntimes=0
152     do k2 = 1, maxCtrlProc
153 gforget 1.9 if (xx_gentim2d_preproc(k2,iarr).EQ.'docycle') then
154 gforget 1.1 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 gforget 1.7 DO jrec = 1, replicated_ntimes+1
167 gforget 1.1 DO irec = 1, replicated_nrec
168 gforget 1.3 #ifdef ALLOW_AUTODIFF
169     CADJ STORE xx_gentim2d_dummy = ctrltape, key = 1 , kind = isbyte
170     #endif
171 gforget 1.7 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 gforget 1.8 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 gforget 1.12 c print*,'endrec',endrec,replicated_ntimes,replicated_nrec
209 gforget 1.8
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 gforget 1.12 c print*,'nyearsINT',nyearsINT,nyearsRL
218 gforget 1.8
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 mmazloff 1.11 CALL READ_REC_XY_RL( fnamegenOut, xx_gen_tmp, krec,
234     & 1, myThid )
235 gforget 1.8 #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 gforget 1.7
292     DO irec = 1, endrec
293     #ifdef ALLOW_AUTODIFF
294     CADJ STORE xx_gentim2d_dummy = ctrltape, key = 1 , kind = isbyte
295     #endif
296 gforget 1.1
297 gforget 1.6 #ifdef ALLOW_AUTODIFF
298 gforget 1.8 call active_read_xy( fnamegenOut, xx_gen, irec,
299 gforget 1.1 & doglobalread, ladinit, optimcycle,
300     & mythid, xx_gentim2d_dummy(iarr) )
301 gforget 1.6 #else
302 gforget 1.10 CALL READ_REC_XY_RL( fnamegenOut, xx_gen, iRec, 1, myThid )
303 gforget 1.6 #endif
304 gforget 1.1
305 heimbach 1.5 #ifndef ALLOW_OPENAD
306 gforget 1.10 jrec=1
307     do k2 = 1, maxCtrlProc
308     if (xx_gentim2d_preproc(k2,iarr).EQ.'variaweight') jrec=irec
309     enddo
310 gforget 1.16 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 gforget 1.1
314     #ifdef ALLOW_SMOOTH
315 gforget 1.10 IF (useSMOOTH) THEN
316 gforget 1.15 IF (dowc01) call smooth_correl2d(xx_gen,maskC,numsmo,mythid)
317 gforget 1.10 IF (dosmooth) call smooth2d(xx_gen,maskC,numsmo,mythid)
318     ENDIF
319     #endif /* ALLOW_SMOOTH */
320    
321 gforget 1.13 IF (doscaling) then
322 gforget 1.10 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 gforget 1.1 & (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 gforget 1.10 else
331 gforget 1.1 xx_gen(i,j,bi,bj)=0. _d 0
332 gforget 1.10 endif
333 gforget 1.1 ENDDO
334     ENDDO
335 gforget 1.10 ENDDO
336     ENDDO
337 gforget 1.13 ENDIF ! IF (doscaling) then
338 gforget 1.10 #endif /* ALLOW_OPENAD */
339 gforget 1.1
340 gforget 1.10 CALL CTRL_BOUND_2D(xx_gen,maskC,
341     & xx_gentim2d_bounds(1,iarr),myThid)
342 gforget 1.1
343 gforget 1.10 CALL EXCH_XY_RL ( xx_gen , myThid )
344 gforget 1.6
345     #ifdef ALLOW_AUTODIFF
346 gforget 1.1 call active_write_xy( fnamegenOut, xx_gen, irec, optimcycle,
347     & mythid, xx_gentim2d_dummy(iarr) )
348 gforget 1.6 #else
349     CALL WRITE_REC_XY_RL( fnamegenOut, xx_gen, iRec, 1, myThid )
350     #endif
351 gforget 1.1
352     c-- end irec loop
353     ENDDO
354    
355 heimbach 1.5 #ifndef ALLOW_OPENAD
356 gforget 1.1 endif
357 heimbach 1.5 #endif
358 gforget 1.1
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