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

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

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


Revision 1.69 - (show annotations) (download)
Fri Dec 25 15:24:51 2015 UTC (8 years, 5 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65s, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.68: +5 -1 lines
- optim_readparms.F: skip if .NOT.useCTRL
- ctrl_map_ini_genarr.F, ctrl_init.F: treat
  case when pkg.autodiff is not compiled.

1 C $Header: /u/gcmpack/MITgcm/pkg/ctrl/ctrl_init.F,v 1.68 2015/10/29 17:03:38 gforget Exp $
2 C $Name: $
3
4 #include "CTRL_OPTIONS.h"
5 #ifdef ALLOW_EXF
6 # include "EXF_OPTIONS.h"
7 #endif
8
9 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
10
11 subroutine ctrl_init( myThid )
12
13 c ==================================================================
14 c SUBROUTINE ctrl_init
15 c ==================================================================
16 c
17 c o The vector of control variables is defined here.
18 c
19 c ==================================================================
20 c SUBROUTINE ctrl_init
21 c ==================================================================
22
23 implicit none
24
25 c == global variables ==
26
27 #include "EEPARAMS.h"
28 #include "SIZE.h"
29 #include "PARAMS.h"
30 #include "GRID.h"
31 #ifdef ALLOW_CTRL
32 # include "CTRL_SIZE.h"
33 # include "ctrl.h"
34 # include "CTRL_GENARR.h"
35 # include "CTRL_OBCS.h"
36 # include "optim.h"
37 #endif
38 #ifdef ALLOW_CAL
39 # include "cal.h"
40 #endif
41 #ifdef ALLOW_EXF
42 # include "EXF_PARAM.h"
43 #endif
44 #ifdef ALLOW_DIC_CONTROL
45 # include "DIC_CTRL.h"
46 #endif
47
48 c == routine arguments ==
49
50 integer myThid
51
52 c == local variables ==
53
54 integer bi,bj
55 integer i,j,k
56 integer itlo,ithi
57 integer jtlo,jthi
58 integer jmin,jmax
59 integer imin,imax
60
61 integer ivar
62 integer startrec
63 integer endrec
64 integer diffrec
65 integer iarr
66
67 _RL dummy
68 _RL loctmp3d (1-olx:snx+olx,1-oly:sny+oly,Nr,nsx,nsy)
69
70 #ifdef ALLOW_OBCS_CONTROL_MODES
71 INTEGER length_of_rec,dUnit
72 INTEGER MDS_RECLEN
73 EXTERNAL MDS_RECLEN
74 #endif
75
76 #ifdef ALLOW_GENTIM2D_CONTROL
77 CHARACTER*(MAX_LEN_FNAM) fnamegen
78 INTEGER ilgen, k2, diffrecFull, endrecFull
79 #endif
80
81 c == external ==
82
83 integer ilnblnk
84 external ilnblnk
85
86 c == end of interface ==
87
88 jtlo = mybylo(myThid)
89 jthi = mybyhi(myThid)
90 itlo = mybxlo(myThid)
91 ithi = mybxhi(myThid)
92 jmin = 1-oly
93 jmax = sny+oly
94 imin = 1-olx
95 imax = snx+olx
96
97 c-- Set default values.
98 do ivar = 1,maxcvars
99 ncvarindex(ivar) = -1
100 ncvarrecs(ivar) = 0
101 ncvarxmax(ivar) = 0
102 ncvarymax(ivar) = 0
103 ncvarnrmax(ivar) = 0
104 ncvargrd(ivar) = '?'
105 enddo
106
107 c Set unit weight to 1
108 c
109
110 do bj=1,nSy
111 do bi=1,nSx
112 do k=1,Nr
113 wunit(k,bi,bj) = 1. _d 0
114 do j=1-oly,sNy+oly
115 do i=1-olx,sNx+olx
116 loctmp3d(i,j,k,bi,bj) = 1. _d 0
117 enddo
118 enddo
119 enddo
120 enddo
121 enddo
122
123 #ifdef ALLOW_AUTODIFF
124 call active_write_xyz( 'wunit', loctmp3d, 1, 0, mythid, dummy)
125 #else
126 CALL WRITE_REC_XYZ_RL( 'wunit', loctmp3d, 1, 1, myThid )
127 #endif
128
129 _BARRIER
130
131 #ifdef ECCO_CTRL_DEPRECATED
132
133 c-- =====================
134 c-- Initial state fields.
135 c-- =====================
136
137 cph(
138 cph index 7-10 reserved for atmos. state,
139 cph index 11-14 reserved for open boundaries,
140 cph index 15-16 reserved for mixing coeff.
141 cph index 17 reserved for passive tracer TR1
142 cph index 18,19 reserved for sst, sss
143 cph index 20 for hFacC
144 cph index 21-22 for efluxy, efluxp
145 cph index 23 for bottom drag
146 cph index 24
147 cph index 25-26 for edtaux, edtauy
148 cph index 27-29 for uvel0, vvel0, etan0
149 cph index 30-31 for generic 2d, 3d field
150 cph index 32 reserved for precip (atmos. state)
151 cph index 33 reserved for swflux (atmos. state)
152 cph index 34 reserved for swdown (atmos. state)
153 cph 35 lwflux
154 cph 36 lwdown
155 cph 37 evap
156 cph 38 snowprecip
157 cph 39 apressure
158 cph 40 runoff
159 cph 41 seaice SIAREA
160 cph 42 seaice SIHEFF
161 cph 43 seaice SIHSNOW
162 cph 44 gmredi kapredi
163 cph 45 shelfice shifwflx
164 cph 47-52 mean atmos. state
165 cph)
166
167 c----------------------------------------------------------------------
168 c--
169 #ifdef ALLOW_THETA0_CONTROL
170 c-- Initial state temperature contribution.
171 call ctrl_init_ctrlvar (
172 & xx_theta_file, 1, 101, 1, 1, 1,
173 & snx, sny, nr, 'c', '3d', myThid )
174 #endif /* ALLOW_THETA0_CONTROL */
175
176 c----------------------------------------------------------------------
177 c--
178 #ifdef ALLOW_SALT0_CONTROL
179 c-- Initial state salinity contribution.
180 call ctrl_init_ctrlvar (
181 & xx_salt_file, 2, 102, 1, 1, 1,
182 & snx, sny, nr, 'c', '3d', myThid )
183 #endif /* ALLOW_SALT0_CONTROL */
184
185 c-- ===========================
186 c-- Surface flux contributions.
187 c-- ===========================
188
189 c----------------------------------------------------------------------
190 c--
191 #if (defined (ALLOW_HFLUX_CONTROL))
192 c-- Heat flux.
193 call ctrl_init_rec ( xx_hflux_file,
194 I xx_hfluxstartdate1, xx_hfluxstartdate2, xx_hfluxperiod, 1,
195 O xx_hfluxstartdate, diffrec, startrec, endrec,
196 I myThid )
197 call ctrl_init_ctrlvar (
198 & xx_hflux_file, 3, 103, diffrec, startrec, endrec,
199 & snx, sny, 1, 'c', 'xy', myThid )
200
201 #elif (defined (ALLOW_ATEMP_CONTROL))
202 c-- Atmos. temperature
203 call ctrl_init_rec ( xx_atemp_file,
204 I xx_atempstartdate1, xx_atempstartdate2, xx_atempperiod, 1,
205 O xx_atempstartdate, diffrec, startrec, endrec,
206 I myThid )
207 call ctrl_init_ctrlvar (
208 & xx_atemp_file, 7, 107, diffrec, startrec, endrec,
209 & snx, sny, 1, 'c', 'xy', myThid )
210
211 #elif (defined (ALLOW_HFLUX0_CONTROL))
212 c-- initial forcing only
213 call ctrl_init_ctrlvar (
214 & xx_hflux_file, 3, 103, 1, 1, 1,
215 & snx, sny, 1, 'c', 'xy', myThid )
216
217 #endif /* ALLOW_HFLUX_CONTROL */
218
219 c----------------------------------------------------------------------
220 c--
221 #if (defined (ALLOW_SFLUX_CONTROL))
222 c-- Salt flux.
223 call ctrl_init_rec ( xx_sflux_file,
224 I xx_sfluxstartdate1, xx_sfluxstartdate2, xx_sfluxperiod, 1,
225 O xx_sfluxstartdate, diffrec, startrec, endrec,
226 I myThid )
227 call ctrl_init_ctrlvar (
228 & xx_sflux_file, 4, 104, diffrec, startrec, endrec,
229 & snx, sny, 1, 'c', 'xy', myThid )
230
231 #elif (defined (ALLOW_AQH_CONTROL))
232 c-- Atmos. humidity
233 call ctrl_init_rec ( xx_aqh_file,
234 I xx_aqhstartdate1, xx_aqhstartdate2, xx_aqhperiod, 1,
235 O xx_aqhstartdate, diffrec, startrec, endrec,
236 I myThid )
237 call ctrl_init_ctrlvar (
238 & xx_aqh_file, 8, 108, diffrec, startrec, endrec,
239 & snx, sny, 1, 'c', 'xy', myThid )
240
241 #elif (defined (ALLOW_SFLUX0_CONTROL))
242 c-- initial forcing only
243 call ctrl_init_ctrlvar (
244 & xx_sflux_file, 4, 104, 1, 1, 1,
245 & snx, sny, 1, 'c', 'xy', myThid )
246
247 #endif /* ALLOW_SFLUX_CONTROL */
248
249 c----------------------------------------------------------------------
250 c--
251 #ifdef ALLOW_EXF
252 IF ( .NOT.useAtmWind ) THEN
253 #endif
254 #if (defined (ALLOW_USTRESS_CONTROL))
255 c-- Zonal wind stress.
256 call ctrl_init_rec ( xx_tauu_file,
257 I xx_tauustartdate1, xx_tauustartdate2, xx_tauuperiod, 1,
258 O xx_tauustartdate, diffrec, startrec, endrec,
259 I myThid )
260 call ctrl_init_ctrlvar (
261 & xx_tauu_file, 5, 105, diffrec, startrec, endrec,
262 #ifndef ALLOW_ROTATE_UV_CONTROLS
263 & snx, sny, 1, 'w', 'xy', myThid )
264 #else
265 & snx, sny, 1, 'c', 'xy', myThid )
266 #endif
267
268 #elif (defined (ALLOW_TAUU0_CONTROL))
269 c-- initial forcing only
270 call ctrl_init_ctrlvar (
271 & xx_tauu_file, 5, 105, 1, 1, 1,
272 & snx, sny, 1, 'w', 'xy', myThid )
273
274 #endif /* ALLOW_USTRESS_CONTROL */
275 #ifdef ALLOW_EXF
276 ENDIF
277 #endif
278
279 #if (defined (ALLOW_UWIND_CONTROL))
280 #ifdef ALLOW_EXF
281 IF ( useAtmWind ) THEN
282 #endif
283 c-- Zonal wind speed.
284 call ctrl_init_rec ( xx_uwind_file,
285 I xx_uwindstartdate1, xx_uwindstartdate2, xx_uwindperiod, 1,
286 O xx_uwindstartdate, diffrec, startrec, endrec,
287 I myThid )
288 call ctrl_init_ctrlvar (
289 & xx_uwind_file, 9, 109, diffrec, startrec, endrec,
290 & snx, sny, 1, 'c', 'xy', myThid )
291 #ifdef ALLOW_EXF
292 ENDIF
293 #endif
294 #endif /* ALLOW_UWIND_CONTROL */
295
296 c----------------------------------------------------------------------
297 c--
298 #ifdef ALLOW_EXF
299 IF ( .NOT.useAtmWind ) THEN
300 #endif
301 #if (defined (ALLOW_VSTRESS_CONTROL))
302 c-- Meridional wind stress.
303 call ctrl_init_rec ( xx_tauv_file,
304 I xx_tauvstartdate1, xx_tauvstartdate2, xx_tauvperiod, 1,
305 O xx_tauvstartdate, diffrec, startrec, endrec,
306 I myThid )
307 call ctrl_init_ctrlvar (
308 & xx_tauv_file, 6, 106, diffrec, startrec, endrec,
309 #ifndef ALLOW_ROTATE_UV_CONTROLS
310 & snx, sny, 1, 's', 'xy', myThid )
311 #else
312 & snx, sny, 1, 'c', 'xy', myThid )
313 #endif
314
315 #elif (defined (ALLOW_TAUV0_CONTROL))
316 c-- initial forcing only
317 call ctrl_init_ctrlvar (
318 & xx_tauv_file, 6, 106, 1, 1, 1,
319 & snx, sny, 1, 's', 'xy', myThid )
320
321 #endif /* ALLOW_VSTRESS_CONTROL */
322 #ifdef ALLOW_EXF
323 ENDIF
324 #endif
325
326 #if (defined (ALLOW_VWIND_CONTROL))
327 #ifdef ALLOW_EXF
328 IF ( useAtmWind ) THEN
329 #endif
330 c-- Meridional wind speed.
331 call ctrl_init_rec ( xx_vwind_file,
332 I xx_vwindstartdate1, xx_vwindstartdate2, xx_vwindperiod, 1,
333 O xx_vwindstartdate, diffrec, startrec, endrec,
334 I myThid )
335 call ctrl_init_ctrlvar (
336 & xx_vwind_file, 10, 110, diffrec, startrec, endrec,
337 & snx, sny, 1, 'c', 'xy', myThid )
338 #ifdef ALLOW_EXF
339 ENDIF
340 #endif
341 #endif /* ALLOW_VWIND_CONTROL */
342
343 #endif /* ECCO_CTRL_DEPRECATED */
344
345 c-- ===========================
346 c-- Open boundary contributions.
347 c-- ===========================
348
349 c----------------------------------------------------------------------
350 c--
351 #ifdef ALLOW_OBCSN_CONTROL
352 c-- Northern obc.
353 call ctrl_init_rec ( xx_obcsn_file,
354 I xx_obcsnstartdate1, xx_obcsnstartdate2, xx_obcsnperiod, 4,
355 O xx_obcsnstartdate, diffrec, startrec, endrec,
356 I myThid )
357 call ctrl_init_ctrlvar (
358 & xx_obcsn_file, 11, 111, diffrec, startrec, endrec,
359 & snx, 1, nr, 'm', 'xz', myThid )
360 #endif /* ALLOW_OBCSN_CONTROL */
361
362 c----------------------------------------------------------------------
363 c--
364 #ifdef ALLOW_OBCSS_CONTROL
365 c-- Southern obc.
366 call ctrl_init_rec ( xx_obcss_file,
367 I xx_obcssstartdate1, xx_obcssstartdate2, xx_obcssperiod, 4,
368 O xx_obcssstartdate, diffrec, startrec, endrec,
369 I myThid )
370 call ctrl_init_ctrlvar (
371 & xx_obcss_file, 12, 112, diffrec, startrec, endrec,
372 & snx, 1, nr, 'm', 'xz', myThid )
373 #endif /* ALLOW_OBCSS_CONTROL */
374
375 c----------------------------------------------------------------------
376 c--
377 #ifdef ALLOW_OBCSW_CONTROL
378 c-- Western obc.
379 call ctrl_init_rec ( xx_obcsw_file,
380 I xx_obcswstartdate1, xx_obcswstartdate2, xx_obcswperiod, 4,
381 O xx_obcswstartdate, diffrec, startrec, endrec,
382 I myThid )
383 call ctrl_init_ctrlvar (
384 & xx_obcsw_file, 13, 113, diffrec, startrec, endrec,
385 & 1, sny, nr, 'm', 'yz', myThid )
386 #endif /* ALLOW_OBCSW_CONTROL */
387
388 c----------------------------------------------------------------------
389 c--
390 #ifdef ALLOW_OBCSE_CONTROL
391 c-- Eastern obc.
392 call ctrl_init_rec ( xx_obcse_file,
393 I xx_obcsestartdate1, xx_obcsestartdate2, xx_obcseperiod, 4,
394 O xx_obcsestartdate, diffrec, startrec, endrec,
395 I myThid )
396 call ctrl_init_ctrlvar (
397 & xx_obcse_file, 14, 114, diffrec, startrec, endrec,
398 & 1, sny, nr, 'm', 'yz', myThid )
399 #endif /* ALLOW_OBCSE_CONTROL */
400
401 c----------------------------------------------------------------------
402 c--
403 #ifdef ALLOW_OBCS_CONTROL_MODES
404 cih Get matrices for reconstruction from barotropic-barclinic modes
405 CMM To use modes now hardcoded with ECCO_CPPOPTION. Would be good to have
406 c run-time option and also define filename=baro_invmodes.bin
407 CALL MDSFINDUNIT( dUnit, myThid )
408 length_of_rec = MDS_RECLEN( 64, NR*NR, myThid )
409 open(dUnit, file='baro_invmodes.bin', status='old',
410 & access='direct', recl=length_of_rec )
411 do j = 1,Nr
412 read(dUnit,rec=j) ((modesv(k,i,j), k=1,Nr), i=1,Nr)
413 end do
414 CLOSE( dUnit )
415 CMM double precision modesv is size [NR,NR,NR]
416 c dim one is z-space
417 c dim two is mode space
418 c dim three is the total depth for which this set of modes applies
419 c so for example modesv(:,2,nr) will be the second mode
420 c in z-space for the full model depth
421 c The modes are to be orthogonal when weighted by dz.
422 c i.e. if f_i(z) = mode i, sum_j(f_i(z_j)*f_j(z_j)*dz_j = delta_ij
423 c first mode should also be constant in depth...barotropic
424 c For a matlab code example how to construct the orthonormal modes,
425 c which are ideally the solution of planetary vertical mode equation
426 c using model mean dRho/dz, see
427 c MITgcm/verification/obcs_ctrl/input/gendata.m
428 c This code is compatible with partial cells
429 #endif
430
431 #ifdef ECCO_CTRL_DEPRECATED
432
433 c----------------------------------------------------------------------
434 c--
435 #ifdef ALLOW_DIFFKR_CONTROL
436 call ctrl_init_ctrlvar (
437 & xx_diffkr_file, 15, 115, 1, 1, 1,
438 & snx, sny, nr, 'c', '3d', myThid )
439 #endif /* ALLOW_DIFFKR_CONTROL */
440
441 c----------------------------------------------------------------------
442 c--
443 #ifdef ALLOW_KAPGM_CONTROL
444 call ctrl_init_ctrlvar (
445 & xx_kapgm_file, 16, 116, 1, 1, 1,
446 & snx, sny, nr, 'c', '3d', myThid )
447 #endif /* ALLOW_KAPGM_CONTROL */
448
449 c----------------------------------------------------------------------
450 c--
451 #ifdef ALLOW_TR10_CONTROL
452 call ctrl_init_ctrlvar (
453 & xx_tr1_file, 17, 117, 1, 1, 1,
454 & snx, sny, nr, 'c', '3d', myThid )
455 #endif /* ALLOW_TR10_CONTROL */
456
457 c----------------------------------------------------------------------
458 c--
459 #if (defined (ALLOW_SST_CONTROL))
460 call ctrl_init_rec ( xx_sst_file,
461 I xx_sststartdate1, xx_sststartdate2, xx_sstperiod, 1,
462 O xx_sststartdate, diffrec, startrec, endrec,
463 I myThid )
464 call ctrl_init_ctrlvar (
465 & xx_sst_file, 18, 118, diffrec, startrec, endrec,
466 & snx, sny, 1, 'c', 'xy', myThid )
467
468 #elif (defined (ALLOW_SST0_CONTROL))
469 call ctrl_init_ctrlvar (
470 & xx_sst_file, 18, 118, 1, 1, 1,
471 & snx, sny, 1, 'c', 'xy', myThid )
472
473 #endif /* ALLOW_SST_CONTROL */
474
475 c----------------------------------------------------------------------
476 c--
477 #if (defined (ALLOW_SSS_CONTROL))
478 call ctrl_init_rec ( xx_sss_file,
479 I xx_sssstartdate1, xx_sssstartdate2, xx_sssperiod, 1,
480 O xx_sssstartdate, diffrec, startrec, endrec,
481 I myThid )
482 call ctrl_init_ctrlvar (
483 & xx_sss_file, 19, 119, diffrec, startrec, endrec,
484 & snx, sny, 1, 'c', 'xy', myThid )
485
486 #elif (defined (ALLOW_SSS0_CONTROL))
487 call ctrl_init_ctrlvar (
488 & xx_sss_file, 19, 119, 1, 1, 1,
489 & snx, sny, 1, 'c', 'xy', myThid )
490
491 #endif /* ALLOW_SSS0_CONTROL */
492
493 c----------------------------------------------------------------------
494 c--
495 #ifdef ALLOW_DEPTH_CONTROL
496 call ctrl_init_ctrlvar (
497 & xx_depth_file, 20, 120, 1, 1, 1,
498 & snx, sny, 1, 'c', 'xy', myThid )
499 #endif /* ALLOW_DEPTH_CONTROL */
500
501 c----------------------------------------------------------------------
502 c--
503 #ifdef ALLOW_EFLUXY0_CONTROL
504 call ctrl_init_ctrlvar (
505 & xx_efluxy_file, 21, 121, 1, 1, 1,
506 & snx, sny, nr, 's', '3d', myThid )
507 #endif /* ALLOW_EFLUXY0_CONTROL */
508
509 c----------------------------------------------------------------------
510 c--
511 #ifdef ALLOW_EFLUXP0_CONTROL
512 call ctrl_init_ctrlvar (
513 & xx_efluxp_file, 22, 122, 1, 1, 1,
514 & snx, sny, nr, 'v', '3d', myThid )
515 #endif /* ALLOW_EFLUXP0_CONTROL */
516
517 c----------------------------------------------------------------------
518 c--
519 #ifdef ALLOW_BOTTOMDRAG_CONTROL_NONGENERIC
520 call ctrl_init_ctrlvar (
521 & xx_bottomdrag_file, 23, 123, 1, 1, 1,
522 & snx, sny, 1, 'c', 'xy', myThid )
523 #endif /* ALLOW_BOTTOMDRAG_CONTROL */
524
525 c----------------------------------------------------------------------
526 c--
527 #ifdef ALLOW_HFLUXM_CONTROL
528 call ctrl_init_ctrlvar (
529 & xx_hfluxm_file, 24, 124, 1, 1, 1,
530 & snx, sny, 1, 'c', 'xy', myThid )
531 #endif /* ALLOW_HFLUXM_CONTROL */
532
533 c----------------------------------------------------------------------
534 c--
535 #ifdef ALLOW_EDDYPSI_CONTROL
536 call ctrl_init_ctrlvar (
537 & xx_edtaux_file, 25, 125, 1, 1, 1,
538 & snx, sny, nr, 'w', '3d', myThid )
539
540 call ctrl_init_ctrlvar (
541 & xx_edtauy_file, 26, 126, 1, 1, 1,
542 & snx, sny, nr, 's', '3d', myThid )
543 #endif /* ALLOW_EDDYPSI_CONTROL */
544
545 c----------------------------------------------------------------------
546 c--
547 #ifdef ALLOW_UVEL0_CONTROL
548 call ctrl_init_ctrlvar (
549 & xx_uvel_file, 27, 127, 1, 1, 1,
550 & snx, sny, nr, 'w', '3d', myThid )
551 #endif /* ALLOW_UVEL0_CONTROL */
552
553 c----------------------------------------------------------------------
554 c--
555 #ifdef ALLOW_VVEL0_CONTROL
556 call ctrl_init_ctrlvar (
557 & xx_vvel_file, 28, 128, 1, 1, 1,
558 & snx, sny, nr, 's', '3d', myThid )
559 #endif /* ALLOW_VVEL0_CONTROL */
560
561 c----------------------------------------------------------------------
562 c--
563 #ifdef ALLOW_ETAN0_CONTROL
564 call ctrl_init_ctrlvar (
565 & xx_etan_file, 29, 129, 1, 1, 1,
566 & snx, sny, 1, 'c', 'xy', myThid )
567 #endif /* ALLOW_VVEL0_CONTROL */
568
569 c----------------------------------------------------------------------
570 c--
571 #ifdef ALLOW_GEN2D_CONTROL
572 call ctrl_init_ctrlvar (
573 & xx_gen2d_file, 30, 130, 1, 1, 1,
574 & snx, sny, 1, 'c', 'xy', myThid )
575 #endif /* ALLOW_GEN2D_CONTROL */
576
577 c----------------------------------------------------------------------
578 c--
579 #ifdef ALLOW_GEN3D_CONTROL
580 call ctrl_init_ctrlvar (
581 & xx_gen3d_file, 31, 131, 1, 1, 1,
582 & snx, sny, nr, 'c', '3d', myThid )
583 #endif /* ALLOW_GEN3D_CONTROL */
584
585 c----------------------------------------------------------------------
586 c--
587 #ifdef ALLOW_PRECIP_CONTROL
588 c-- Atmos. precipitation
589 call ctrl_init_rec ( xx_precip_file,
590 I xx_precipstartdate1, xx_precipstartdate2, xx_precipperiod,1,
591 O xx_precipstartdate, diffrec, startrec, endrec,
592 I myThid )
593 call ctrl_init_ctrlvar (
594 & xx_precip_file, 32, 132, diffrec, startrec, endrec,
595 & snx, sny, 1, 'c', 'xy', myThid )
596
597 #endif /* ALLOW_PRECIP_CONTROL */
598
599 c----------------------------------------------------------------------
600 c--
601 #ifdef ALLOW_SWFLUX_CONTROL
602 c-- Atmos. swflux
603 call ctrl_init_rec ( xx_swflux_file,
604 I xx_swfluxstartdate1, xx_swfluxstartdate2, xx_swfluxperiod, 1,
605 O xx_swfluxstartdate, diffrec, startrec, endrec,
606 I myThid )
607 call ctrl_init_ctrlvar (
608 & xx_swflux_file, 33, 133, diffrec, startrec, endrec,
609 & snx, sny, 1, 'c', 'xy', myThid )
610
611 #endif /* ALLOW_SWFLUX_CONTROL */
612
613 c----------------------------------------------------------------------
614 c--
615 #ifdef ALLOW_SWDOWN_CONTROL
616 c-- Atmos. swdown
617 call ctrl_init_rec ( xx_swdown_file,
618 I xx_swdownstartdate1, xx_swdownstartdate2, xx_swdownperiod, 1,
619 O xx_swdownstartdate, diffrec, startrec, endrec,
620 I myThid )
621 call ctrl_init_ctrlvar (
622 & xx_swdown_file, 34, 134, diffrec, startrec, endrec,
623 & snx, sny, 1, 'c', 'xy', myThid )
624
625 #endif /* ALLOW_SWDOWN_CONTROL */
626
627 c----------------------------------------------------------------------
628 c--
629 #ifdef ALLOW_LWFLUX_CONTROL
630 c-- Atmos. lwflux
631 call ctrl_init_rec ( xx_lwflux_file,
632 I xx_lwfluxstartdate1, xx_lwfluxstartdate2, xx_lwfluxperiod, 1,
633 O xx_lwfluxstartdate, diffrec, startrec, endrec,
634 I myThid )
635 call ctrl_init_ctrlvar (
636 & xx_lwflux_file, 35, 135, diffrec, startrec, endrec,
637 & snx, sny, 1, 'c', 'xy', myThid )
638
639 #endif /* ALLOW_LWFLUX_CONTROL */
640
641 c----------------------------------------------------------------------
642 c--
643 #ifdef ALLOW_LWDOWN_CONTROL
644 c-- Atmos. lwdown
645 call ctrl_init_rec ( xx_lwdown_file,
646 I xx_lwdownstartdate1, xx_lwdownstartdate2, xx_lwdownperiod, 1,
647 O xx_lwdownstartdate, diffrec, startrec, endrec,
648 I myThid )
649 call ctrl_init_ctrlvar (
650 & xx_lwdown_file, 36, 136, diffrec, startrec, endrec,
651 & snx, sny, 1, 'c', 'xy', myThid )
652
653 #endif /* ALLOW_LWDOWN_CONTROL */
654
655 c----------------------------------------------------------------------
656 c--
657 #ifdef ALLOW_EVAP_CONTROL
658 c-- Atmos. evap
659 call ctrl_init_rec ( xx_evap_file,
660 I xx_evapstartdate1, xx_evapstartdate2, xx_evapperiod, 1,
661 O xx_evapstartdate, diffrec, startrec, endrec,
662 I myThid )
663 call ctrl_init_ctrlvar (
664 & xx_evap_file, 37, 137, diffrec, startrec, endrec,
665 & snx, sny, 1, 'c', 'xy', myThid )
666
667 #endif /* ALLOW_EVAP_CONTROL */
668
669 c----------------------------------------------------------------------
670 c--
671 #ifdef ALLOW_SNOWPRECIP_CONTROL
672 c-- Atmos. snowprecip
673 call ctrl_init_rec ( xx_snowprecip_file,
674 I xx_snowprecipstartdate1, xx_snowprecipstartdate2,
675 I xx_snowprecipperiod, 1,
676 O xx_snowprecipstartdate, diffrec, startrec, endrec,
677 I myThid )
678 call ctrl_init_ctrlvar (
679 & xx_snowprecip_file, 38, 138, diffrec, startrec, endrec,
680 & snx, sny, 1, 'c', 'xy', myThid )
681
682 #endif /* ALLOW_SNOWPRECIP_CONTROL */
683
684 c----------------------------------------------------------------------
685 c--
686 #ifdef ALLOW_APRESSURE_CONTROL
687 c-- Atmos. apressure
688 call ctrl_init_rec ( xx_apressure_file,
689 I xx_apressurestartdate1, xx_apressurestartdate2,
690 I xx_apressureperiod, 1,
691 O xx_apressurestartdate, diffrec, startrec, endrec,
692 I myThid )
693 call ctrl_init_ctrlvar (
694 & xx_apressure_file, 39, 139, diffrec, startrec, endrec,
695 & snx, sny, 1, 'c', 'xy', myThid )
696
697 #endif /* ALLOW_APRESSURE_CONTROL */
698
699 c----------------------------------------------------------------------
700 c--
701 #ifdef ALLOW_RUNOFF_CONTROL
702 c-- Atmos. runoff
703 call ctrl_init_rec ( xx_runoff_file,
704 I xx_runoffstartdate1, xx_runoffstartdate2, xx_runoffperiod, 1,
705 O xx_runoffstartdate, diffrec, startrec, endrec,
706 I myThid )
707 call ctrl_init_ctrlvar (
708 & xx_runoff_file, 40, 140, diffrec, startrec, endrec,
709 & snx, sny, 1, 'c', 'xy', myThid )
710 #endif /* ALLOW_RUNOFF_CONTROL */
711
712 c----------------------------------------------------------------------
713 c--
714 #ifdef ALLOW_SIAREA_CONTROL
715 C-- so far there are no xx_siareastartdate1, etc., so we need to fudge it.
716 CML call ctrl_init_rec ( xx_siarea_file,
717 CML I xx_siareastartdate1, xx_siareastartdate2, xx_siareaperiod, 1,
718 CML O xx_siareastartdate, diffrec, startrec, endrec,
719 CML I myThid )
720 startrec = 1
721 endrec = 1
722 diffrec = endrec - startrec + 1
723 call ctrl_init_ctrlvar (
724 & xx_siarea_file, 41, 141, diffrec, startrec, endrec,
725 & snx, sny, 1, 'c', 'xy', myThid )
726 #endif /* ALLOW_siarea_CONTROL */
727
728 c----------------------------------------------------------------------
729 c--
730 #ifdef ALLOW_SIHEFF_CONTROL
731 C-- so far there are no xx_siheffstartdate1, etc., so we need to fudge it.
732 CML call ctrl_init_rec ( xx_siheff_file,
733 CML I xx_siheffstartdate1, xx_siheffstartdate2, xx_siheffperiod, 1,
734 CML O xx_siheffstartdate, diffrec, startrec, endrec,
735 CML I myThid )
736 startrec = 1
737 endrec = 1
738 diffrec = endrec - startrec + 1
739 call ctrl_init_ctrlvar (
740 & xx_siheff_file, 42, 142, diffrec, startrec, endrec,
741 & snx, sny, 1, 'c', 'xy', myThid )
742 #endif /* ALLOW_siheff_CONTROL */
743
744 c----------------------------------------------------------------------
745 c--
746 #ifdef ALLOW_SIHSNOW_CONTROL
747 C-- so far there are no xx_sihsnowstartdate1, etc., so we need to fudge it.
748 CML call ctrl_init_rec ( xx_sihsnow_file,
749 CML I xx_sihsnowstartdate1, xx_sihsnowstartdate2, xx_sihsnowperiod, 1,
750 CML O xx_sihsnowstartdate, diffrec, startrec, endrec,
751 CML I myThid )
752 startrec = 1
753 endrec = 1
754 diffrec = endrec - startrec + 1
755 call ctrl_init_ctrlvar (
756 & xx_sihsnow_file, 43, 143, diffrec, startrec, endrec,
757 & snx, sny, 1, 'c', 'xy', myThid )
758 #endif /* ALLOW_sihsnow_CONTROL */
759
760
761 c----------------------------------------------------------------------
762 c--
763 #ifdef ALLOW_KAPREDI_CONTROL
764 call ctrl_init_ctrlvar (
765 & xx_kapredi_file, 44, 144, 1, 1, 1,
766 & snx, sny, nr, 'c', '3d', myThid )
767 #endif /* ALLOW_KAPREDI_CONTROL */
768
769 c----------------------------------------------------------------------
770 c----------------------------------------------------------------------
771
772 #ifdef ALLOW_SHIFWFLX_CONTROL
773 c-- freshwater flux underneath ice-shelves
774 call ctrl_init_rec ( xx_shifwflx_file,
775 I xx_shifwflxstartdate1, xx_shifwflxstartdate2,
776 I xx_shifwflxperiod, 1,
777 O xx_shifwflxstartdate, diffrec, startrec, endrec,
778 I myThid )
779 call ctrl_init_ctrlvar (
780 & xx_shifwflx_file, 45, 145, diffrec, startrec, endrec,
781 & snx, sny, 1, 'i', 'xy', myThid )
782 #endif /* ALLOW_SHIFWFLX_CONTROL */
783
784 c----------------------------------------------------------------------
785 c--
786 #ifdef ALLOW_ATM_MEAN_CONTROL
787 # ifdef ALLOW_ATEMP_CONTROL
788 call ctrl_init_ctrlvar (
789 & xx_atemp_mean_file, 47, 147, 1, 1, 1,
790 & snx, sny, 1, 'c', 'xy', myThid )
791 # endif
792 # ifdef ALLOW_AQH_CONTROL
793 call ctrl_init_ctrlvar (
794 & xx_aqh_mean_file, 48, 148, 1, 1, 1,
795 & snx, sny, 1, 'c', 'xy', myThid )
796 # endif
797 # ifdef ALLOW_UWIND_CONTROL
798 call ctrl_init_ctrlvar (
799 & xx_uwind_mean_file, 49, 149, 1, 1, 1,
800 & snx, sny, 1, 'c', 'xy', myThid )
801 # endif
802 # ifdef ALLOW_VWIND_CONTROL
803 call ctrl_init_ctrlvar (
804 & xx_vwind_mean_file, 50, 150, 1, 1, 1,
805 & snx, sny, 1, 'c', 'xy', myThid )
806 # endif
807 # ifdef ALLOW_PRECIP_CONTROL
808 call ctrl_init_ctrlvar (
809 & xx_precip_mean_file,51, 151, 1, 1, 1,
810 & snx, sny, 1, 'c', 'xy', myThid )
811 # endif
812 # ifdef ALLOW_SWDOWN_CONTROL
813 call ctrl_init_ctrlvar (
814 & xx_swdown_mean_file,52, 152, 1, 1, 1,
815 & snx, sny, 1, 'c', 'xy', myThid )
816 # endif
817 #endif /* ALLOW_ATM_MEAN_CONTROL */
818
819 #endif /* ECCO_CTRL_DEPRECATED */
820
821 c----------------------------------------------------------------------
822 c--
823 #ifdef ALLOW_GENARR2D_CONTROL
824 do iarr = 1, maxCtrlArr2D
825 #ifndef ALLOW_OPENAD
826 if (xx_genarr2d_weight(iarr).NE.' ')
827 & call ctrl_init_ctrlvar (
828 #else
829 call ctrl_init_ctrlvar (
830 #endif
831 & xx_genarr2d_file(iarr)(1:MAX_LEN_FNAM),
832 & 100+iarr, 200+iarr, 1, 1, 1,
833 & snx, sny, 1, 'c', 'xy', myThid )
834
835 enddo
836 #endif /* ALLOW_GENARR2D_CONTROL */
837
838 c----------------------------------------------------------------------
839 c--
840 #ifdef ALLOW_GENARR3D_CONTROL
841 do iarr = 1, maxCtrlArr3D
842 #ifndef ALLOW_OPENAD
843 if (xx_genarr3d_weight(iarr).NE.' ')
844 & call ctrl_init_ctrlvar (
845 #else
846 call ctrl_init_ctrlvar (
847 #endif
848 & xx_genarr3d_file(iarr)(1:MAX_LEN_FNAM),
849 & 200+iarr, 300+iarr, 1, 1, 1,
850 & snx, sny, nr, 'c', '3d', myThid )
851 enddo
852 #endif /* ALLOW_GENARR3D_CONTROL */
853
854 c----------------------------------------------------------------------
855 c--
856 #ifdef ALLOW_GENTIM2D_CONTROL
857 do iarr = 1, maxCtrlTim2D
858
859 #ifdef ALLOW_CAL
860 if (xx_gentim2d_startdate1(iarr).EQ.0) then
861 xx_gentim2d_startdate1(iarr)=startdate_1
862 xx_gentim2d_startdate2(iarr)=startdate_2
863 endif
864 #endif
865
866 call ctrl_init_rec ( xx_gentim2d_file(iarr)(1:MAX_LEN_FNAM),
867 I xx_gentim2d_startdate1(iarr),
868 I xx_gentim2d_startdate2(iarr),
869 I xx_gentim2d_period(iarr),
870 I 1,
871 O xx_gentim2d_startdate(1,iarr),
872 O diffrec, startrec, endrec,
873 I myThid )
874 C
875
876 #ifndef ALLOW_OPENAD
877 if (xx_gentim2d_weight(iarr).NE.' ') then
878 #endif
879 do k2 = 1, maxCtrlProc
880 if (xx_gentim2d_preproc(k2,iarr).EQ.'replicate')
881 & xx_gentim2d_preproc(k2,iarr)='docycle'
882 if (xx_gentim2d_preproc(k2,iarr).EQ.'doglomean')
883 & xx_gentim2d_glosum(iarr) = .TRUE.
884 if (xx_gentim2d_preproc(k2,iarr).EQ.'documul')
885 & xx_gentim2d_cumsum(iarr) = .TRUE.
886 enddo
887 C
888 diffrecFull=diffrec
889 endrecFull=endrec
890 do k2 = 1, maxCtrlProc
891 if (xx_gentim2d_preproc(k2,iarr).EQ.'docycle') then
892 if (xx_gentim2d_preproc_i(k2,iarr).NE.0) then
893 diffrec=min(diffrec,xx_gentim2d_preproc_i(k2,iarr))
894 endrec=min(endrec,xx_gentim2d_preproc_i(k2,iarr))
895 endif
896 endif
897 enddo
898 C
899 ilgen=ilnblnk( xx_gentim2d_file(iarr) )
900 write(fnamegen(1:MAX_LEN_FNAM),'(2a)')
901 & xx_gentim2d_file(iarr)(1:ilgen),'.effective'
902 call ctrl_init_ctrlvar (
903 & fnamegen(1:MAX_LEN_FNAM),
904 & 300+iarr, 400+iarr,
905 & diffrecFull, startrec, endrecFull,
906 & snx, sny, 1, 'c', 'xy', myThid )
907 C
908 ilgen=ilnblnk( xx_gentim2d_file(iarr) )
909 write(fnamegen(1:MAX_LEN_FNAM),'(2a)')
910 & xx_gentim2d_file(iarr)(1:ilgen),'.tmp'
911 call ctrl_init_ctrlvar (
912 & fnamegen(1:MAX_LEN_FNAM),
913 & 300+iarr, 400+iarr,
914 & diffrecFull, startrec, endrecFull,
915 & snx, sny, 1, 'c', 'xy', myThid )
916 C
917 call ctrl_init_ctrlvar (
918 & xx_gentim2d_file(iarr)(1:MAX_LEN_FNAM),
919 & 300+iarr, 400+iarr,
920 & diffrec, startrec, endrec,
921 & snx, sny, 1, 'c', 'xy', myThid )
922 C
923 #ifndef ALLOW_OPENAD
924 endif
925 #endif
926 C
927 enddo
928 #endif /* ALLOW_GENTIM2D_CONTROL */
929
930 c----------------------------------------------------------------------
931 c----------------------------------------------------------------------
932
933 call ctrl_init_wet( myThid )
934
935 c----------------------------------------------------------------------
936 c----------------------------------------------------------------------
937
938 #ifdef ALLOW_DIC_CONTROL
939 do i = 1, dic_n_control
940 xx_dic(i) = 0. _d 0
941 enddo
942 #endif
943
944 c----------------------------------------------------------------------
945 c----------------------------------------------------------------------
946
947 do bj = jtlo,jthi
948 do bi = itlo,ithi
949 do j = jmin,jmax
950 do i = imin,imax
951 wareaunit (i,j,bi,bj) = 1.0
952 #ifndef ALLOW_ECCO
953 whflux (i,j,bi,bj) = maskC(i,j,1,bi,bj)
954 wsflux (i,j,bi,bj) = maskC(i,j,1,bi,bj)
955 wtauu (i,j,bi,bj) = maskW(i,j,1,bi,bj)
956 wtauv (i,j,bi,bj) = maskS(i,j,1,bi,bj)
957 watemp (i,j,bi,bj) = maskC(i,j,1,bi,bj)
958 waqh (i,j,bi,bj) = maskC(i,j,1,bi,bj)
959 wprecip (i,j,bi,bj) = maskC(i,j,1,bi,bj)
960 wswflux (i,j,bi,bj) = maskC(i,j,1,bi,bj)
961 wswdown (i,j,bi,bj) = maskC(i,j,1,bi,bj)
962 wuwind (i,j,bi,bj) = maskC(i,j,1,bi,bj)
963 wvwind (i,j,bi,bj) = maskC(i,j,1,bi,bj)
964 wlwflux (i,j,bi,bj) = maskC(i,j,1,bi,bj)
965 wlwdown (i,j,bi,bj) = maskC(i,j,1,bi,bj)
966 wevap (i,j,bi,bj) = maskC(i,j,1,bi,bj)
967 wsnowprecip(i,j,bi,bj) = maskC(i,j,1,bi,bj)
968 wapressure(i,j,bi,bj) = maskC(i,j,1,bi,bj)
969 wrunoff (i,j,bi,bj) = maskC(i,j,1,bi,bj)
970 wsst (i,j,bi,bj) = maskC(i,j,1,bi,bj)
971 wsss (i,j,bi,bj) = maskC(i,j,1,bi,bj)
972 #endif
973 enddo
974 enddo
975 enddo
976 enddo
977
978 _BARRIER
979
980 c-- Summarize the cost function setup.
981 _BEGIN_MASTER( myThid )
982 call ctrl_summary( myThid )
983 _END_MASTER( myThid )
984
985 return
986 end

  ViewVC Help
Powered by ViewVC 1.1.22