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

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

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


Revision 1.8 - (show annotations) (download)
Fri Mar 7 02:45:48 2003 UTC (21 years, 2 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint50c_post, c49_ctrl, checkpoint50c_pre, checkpoint50, checkpoint50d_post, checkpoint50b_pre, checkpoint50f_post, checkpoint50a_post, checkpoint50f_pre, checkpoint50g_post, checkpoint50h_post, checkpoint50e_pre, checkpoint50i_post, checkpoint50e_post, checkpoint50d_pre, checkpoint50b_post
Changes since 1.7: +4 -0 lines
merging.

1
2 #include "CTRL_CPPOPTIONS.h"
3
4 CBOI
5 C
6 C !TITLE: CONTROL VECTOR
7 C !AUTHORS: mitgcm developers ( support@mitgcm.org )
8 C !AFFILIATION: Massachussetts Institute of Technology
9 C !DATE:
10 C !INTRODUCTION: control vector handling
11 C \bv
12 c The control vector package is connected to the differntiability
13 c of the code. Differentiability refers to computing the derivative
14 c of a cost function with respect to a set of control variables
15 c (initial state, boundary values, model parameters).
16 c To reduce memory, the control variables are kept on file and
17 c are only read/written, when needed.
18 c To achieve this, adjoint support routines are available which
19 c handle I/O of active variables.
20 c In addition, a single control vector is created, which contains
21 c all wet points of all control variables.
22 c
23 C !CALLING SEQUENCE:
24 c ...
25 c |-- the_model_main
26 c |
27 c |-- initialise_fixed
28 c | |
29 c | |-- packages_readparms
30 c | |
31 c | |-- ctrl_init - initialise control
32 c | package
33 c |-- ctrl_unpack - unpack control vector
34 c |
35 c |-- adthe_main_loop - forward/adjoint run
36 c | |
37 c | |-- initialise_variables
38 c | | |
39 c | | |-- packages_init_variables
40 c | | |
41 c | | |-- ctrl_map_ini - link init. state to
42 c | | control variables
43 c | |-- ctrl_map_forcing - link forcing fields to
44 c | ... control variables
45 c |
46 c |-- ctrl_pack - pack control vector
47 C \ev
48 CEOI
49
50 CBOP
51 C !ROUTINE: ctrl_unpack
52 C !INTERFACE:
53 subroutine ctrl_unpack( myiter, mytime, mythid )
54
55 C !DESCRIPTION: \bv
56 c *=================================================================
57 c | SUBROUTINE ctrl_unpack
58 c | Unpack the control vector
59 c | * If in sensitivity study mode,
60 c | control variable and adjoint variable arrays and files
61 c | are initialised.
62 c | * If in optimization mode,
63 c | wet points of updated control variables (i.e. anomalies
64 c | to corresponding fields) from previous optimization
65 c | iteration are extracted from single control vector,
66 c | mapped onto full (2D or 3D) fields and distributed
67 c | to control variable files.
68 c *=================================================================
69 C \ev
70
71 C !USES:
72 implicit none
73
74 c == global variables ==
75
76 #include "EEPARAMS.h"
77 #include "SIZE.h"
78 #include "PARAMS.h"
79 #include "GRID.h"
80
81 #include "ecco.h"
82 #include "ctrl.h"
83 #include "cost.h"
84
85 #ifdef ALLOW_ECCO_OPTIMIZATION
86 #include "optim.h"
87 #endif
88
89 c == routine arguments ==
90
91 integer myiter
92 _RL mytime
93 integer mythid
94
95 c == local variables ==
96
97 #ifndef ALLOW_ECCO_OPTIMIZATION
98 integer optimcycle
99 #endif
100
101 integer i, j, k
102 integer ii
103 integer il
104 integer irec
105 integer ig,jg
106 integer ivartype
107
108 integer cbuffindex
109 integer cunit
110
111 character*(128) cfile
112 character*( 80) weighttype
113
114 logical first
115
116 integer filenvartype
117 integer filenvarlength
118 character*(10) fileYctrlid
119 integer fileOptimCycle
120 integer filencbuffindex
121 _RL fileDummy
122 integer fileIg
123 integer fileJg
124 integer fileI
125 integer fileJ
126 integer filensx
127 integer filensy
128 integer filek
129 integer filenWetcGlobal(nr)
130 integer filenWetsGlobal(nr)
131 integer filenWetwGlobal(nr)
132 integer filenWetvGlobal(nr)
133 integer filencvarindex(maxcvars)
134 integer filencvarrecs(maxcvars)
135 integer filencvarxmax(maxcvars)
136 integer filencvarymax(maxcvars)
137 integer filencvarnrmax(maxcvars)
138 cgg( Add OBCS mask names.
139 #ifdef ALLOW_OBCSN_CONTROL
140 integer filenWetobcsnGlo(nr,nobcs)
141 #endif
142 #ifdef ALLOW_OBCSS_CONTROL
143 integer filenWetobcssGlo(nr,nobcs)
144 #endif
145 #ifdef ALLOW_OBCSW_CONTROL
146 integer filenWetobcswGlo(nr,nobcs)
147 #endif
148 #ifdef ALLOW_OBCSE_CONTROL
149 integer filenWetobcseGlo(nr,nobcs)
150 #endif
151 integer iobcs
152 cgg)
153 character*( 1) filencvargrd(maxcvars)
154 character*( 80) fname_theta
155 character*( 80) adfname_theta
156 character*( 80) fname_salt
157 character*( 80) adfname_salt
158 character*( 80) fname_hflux
159 character*( 80) adfname_hflux
160 character*( 80) fname_sflux
161 character*( 80) adfname_sflux
162 character*( 80) fname_tauu
163 character*( 80) adfname_tauu
164 character*( 80) fname_tauv
165 character*( 80) adfname_tauv
166 character*( 80) fname_atemp
167 character*( 80) adfname_atemp
168 character*( 80) fname_aqh
169 character*( 80) adfname_aqh
170 character*( 80) fname_uwind
171 character*( 80) adfname_uwind
172 character*( 80) fname_vwind
173 character*( 80) adfname_vwind
174 character*( 80) fname_obcsn
175 character*( 80) adfname_obcsn
176 character*( 80) fname_obcss
177 character*( 80) adfname_obcss
178 character*( 80) fname_obcsw
179 character*( 80) adfname_obcsw
180 character*( 80) fname_obcse
181 character*( 80) adfname_obcse
182 character*( 80) fname_diffkr
183 character*( 80) adfname_diffkr
184 character*( 80) fname_kapgm
185 character*( 80) adfname_kapgm
186 character*( 80) fname_tr1
187 character*( 80) adfname_tr1
188 character*( 80) fname_sst
189 character*( 80) adfname_sst
190 character*( 80) fname_sss
191 character*( 80) adfname_sss
192 character*( 80) fname_hfacc
193 character*( 80) adfname_hfacc
194 character*( 80) fname_efluxy
195 character*( 80) adfname_efluxy
196 character*( 80) fname_efluxp
197 character*( 80) adfname_efluxp
198 character*( 80) fname_bottomdrag
199 character*( 80) adfname_bottomdrag
200
201 cgg( Initialization of ecco_ctrl requires two new local var.
202 _RL tmpvar
203 logical lxxadxx
204 cgg)
205
206 c == external ==
207
208 integer ilnblnk
209 external ilnblnk
210
211 c == end of interface ==
212
213 #ifndef ALLOW_ECCO_OPTIMIZATION
214 optimcycle = 0
215 #endif
216
217 tmpvar = 0. _d 0
218
219 c-- Check if this is the first model time step.
220 if ( mytime .lt. startTime + 0.5*deltaTClock ) then
221 first = .true.
222 else
223 first = .false.
224 endif
225
226 if ( first ) then
227
228 c-- Only the master thread will do I/O.
229 _BEGIN_MASTER( mythid )
230
231 jG = 1 + (myygloballo - 1)/sny
232 iG = 1 + (myxgloballo - 1)/snx
233
234 #ifdef ALLOW_THETA0_CONTROL
235 ivartype = 1
236 call ctrl_set_fname(
237 & xx_theta_file, fname_theta, adfname_theta, mythid )
238 call ctrl_set_globfld_xyz(
239 & adfname_theta, ivartype, mythid)
240 #endif /* ALLOW_THETA0_CONTROL */
241
242 #ifdef ALLOW_SALT0_CONTROL
243 ivartype = 2
244 call ctrl_set_fname(
245 I xx_salt_file, fname_salt, adfname_salt, mythid )
246 call ctrl_set_globfld_xyz(
247 & adfname_salt, ivartype, mythid)
248 #endif
249
250 #if (defined (ALLOW_HFLUX_CONTROL) || \
251 defined (ALLOW_HFLUX0_CONTROL))
252 ivartype = 3
253 call ctrl_set_fname(
254 I xx_hflux_file, fname_hflux, adfname_hflux, mythid )
255 call ctrl_set_globfld_xy(
256 & adfname_hflux, ivartype, mythid)
257 #endif
258
259 #if (defined (ALLOW_SFLUX_CONTROL) || \
260 defined (ALLOW_SFLUX0_CONTROL))
261 ivartype = 4
262 call ctrl_set_fname(
263 I xx_sflux_file, fname_sflux, adfname_sflux, mythid )
264 call ctrl_set_globfld_xy(
265 & adfname_sflux, ivartype, mythid)
266 #endif
267
268 #if (defined (ALLOW_USTRESS_CONTROL) || \
269 defined (ALLOW_TAUU0_CONTROL))
270 ivartype = 5
271 call ctrl_set_fname(
272 I xx_tauu_file, fname_tauu, adfname_tauu, mythid )
273 call ctrl_set_globfld_xy(
274 & adfname_tauu, ivartype, mythid)
275 #endif
276
277 #if (defined (ALLOW_VSTRESS_CONTROL) || \
278 defined (ALLOW_TAUV0_CONTROL))
279 ivartype = 6
280 call ctrl_set_fname(
281 I xx_tauv_file, fname_tauv, adfname_tauv, mythid )
282 call ctrl_set_globfld_xy(
283 & adfname_tauv, ivartype, mythid)
284 #endif
285
286 #ifdef ALLOW_ATEMP_CONTROL
287 ivartype = 7
288 call ctrl_set_fname(
289 I xx_atemp_file, fname_atemp, adfname_atemp, mythid )
290 call ctrl_set_globfld_xy(
291 & adfname_atemp, ivartype, mythid)
292 #endif
293
294 #ifdef ALLOW_AQH_CONTROL
295 ivartype = 8
296 call ctrl_set_fname(
297 I xx_aqh_file, fname_aqh, adfname_aqh, mythid )
298 call ctrl_set_globfld_xy(
299 & adfname_aqh, ivartype, mythid)
300 #endif
301
302 #ifdef ALLOW_UWIND_CONTROL
303 ivartype = 9
304 call ctrl_set_fname(
305 I xx_uwind_file, fname_uwind, adfname_uwind, mythid )
306 call ctrl_set_globfld_xy(
307 & adfname_uwind, ivartype, mythid)
308 #endif
309
310 #ifdef ALLOW_VWIND_CONTROL
311 ivartype = 10
312 call ctrl_set_fname(
313 I xx_vwind_file, fname_vwind, adfname_vwind, mythid )
314 call ctrl_set_globfld_xy(
315 & adfname_vwind, ivartype, mythid)
316 #endif
317
318 #ifdef ALLOW_OBCSN_CONTROL
319 ivartype = 11
320 call ctrl_set_fname(
321 I xx_obcsn_file, fname_obcsn, adfname_obcsn, mythid )
322 call ctrl_set_globfld_xz(
323 & adfname_obcsn, ivartype, mythid)
324 #endif
325
326 #ifdef ALLOW_OBCSS_CONTROL
327 ivartype = 12
328 call ctrl_set_fname(
329 I xx_obcss_file, fname_obcss, adfname_obcss, mythid )
330 call ctrl_set_globfld_xz(
331 & adfname_obcss, ivartype, mythid)
332 #endif
333
334 #ifdef ALLOW_OBCSW_CONTROL
335 ivartype = 13
336 call ctrl_set_fname(
337 I xx_obcsw_file, fname_obcsw, adfname_obcsw, mythid )
338 call ctrl_set_globfld_yz(
339 & adfname_obcsw, ivartype, mythid)
340 #endif
341
342 #ifdef ALLOW_OBCSE_CONTROL
343 ivartype = 14
344 call ctrl_set_fname(
345 I xx_obcse_file, fname_obcse, adfname_obcse, mythid )
346 call ctrl_set_globfld_yz(
347 & adfname_obcse, ivartype, mythid)
348 #endif
349
350 #ifdef ALLOW_DIFFKR_CONTROL
351 ivartype = 15
352 call ctrl_set_fname(
353 I xx_diffkr_file, fname_diffkr, adfname_diffkr, mythid )
354 call ctrl_set_globfld_xyz(
355 & adfname_diffkr, ivartype, mythid)
356 #endif
357
358 #ifdef ALLOW_KAPGM_CONTROL
359 ivartype = 16
360 call ctrl_set_fname(
361 I xx_kapgm_file, fname_kapgm, adfname_kapgm, mythid )
362 call ctrl_set_globfld_xyz(
363 & adfname_kapgm, ivartype, mythid)
364 #endif
365
366 #ifdef ALLOW_TR10_CONTROL
367 ivartype = 17
368 call ctrl_set_fname(
369 I xx_tr1_file, fname_tr1, adfname_tr1, mythid )
370 call ctrl_set_globfld_xyz(
371 & adfname_tr1, ivartype, mythid)
372 #endif
373
374 #ifdef ALLOW_SST0_CONTROL
375 ivartype = 18
376 call ctrl_set_fname(
377 I xx_sst_file, fname_sst, adfname_sst, mythid )
378 call ctrl_set_globfld_xy(
379 & adfname_sst, ivartype, mythid)
380 #endif
381
382 #ifdef ALLOW_SSS0_CONTROL
383 ivartype = 19
384 call ctrl_set_fname(
385 I xx_sss_file, fname_sss, adfname_sss, mythid )
386 call ctrl_set_globfld_xy(
387 & adfname_sss, ivartype, mythid)
388 #endif
389
390 #ifdef ALLOW_HFACC_CONTROL
391 ivartype = 20
392 call ctrl_set_fname(
393 I xx_hfacc_file, fname_hfacc, adfname_hfacc, mythid )
394 #ifdef ALLOW_HFACC3D_CONTROL
395 call ctrl_set_globfld_xyz(
396 & adfname_hfacc, ivartype, mythid)
397 #else
398 call ctrl_set_globfld_xy(
399 & adfname_hfacc, ivartype, mythid)
400 #endif
401 #endif
402
403 #ifdef ALLOW_EFLUXY0_CONTROL
404 ivartype = 21
405 call ctrl_set_fname(
406 I xx_efluxy_file, fname_efluxy, adfname_efluxy, mythid )
407 call ctrl_set_globfld_xyz(
408 & adfname_efluxy, ivartype, mythid)
409 #endif
410
411 #ifdef ALLOW_EFLUXP0_CONTROL
412 ivartype = 22
413 call ctrl_set_fname(
414 I xx_efluxp_file, fname_efluxp, adfname_efluxp, mythid )
415 call ctrl_set_globfld_xyz(
416 & adfname_efluxp, ivartype, mythid)
417 #endif
418
419 #ifdef ALLOW_BOTTOMDRAG_CONTROL
420 ivartype = 23
421 call ctrl_set_fname(
422 I xx_bottomdrag_file, fname_bottomdrag, adfname_bottomdrag
423 I , mythid )
424 call ctrl_set_globfld_xy(
425 & adfname_bottomdrag, ivartype, mythid)
426 #endif
427
428
429 c *********************************************************************
430 c if NOT very first iteration of optimization
431 if ( optimcycle .ne. 0 ) then
432 c *********************************************************************
433
434 call mdsfindunit( cunit, mythid )
435
436 write(cfile(1:128),'(4a,i4.4)')
437 & ctrlname(1:9),'_',yctrlid(1:10),'.opt',
438 & optimcycle
439
440 open( cunit, file = cfile,
441 & status = 'old',
442 & form = 'unformatted',
443 & access = 'sequential' )
444
445 c-- Header information.
446 read(cunit) filenvartype
447 read(cunit) filenvarlength
448 read(cunit) fileYctrlid
449 read(cunit) fileOptimCycle
450 read(cunit) fileDummy
451 read(cunit) fileIg
452 read(cunit) fileJg
453 read(cunit) filensx
454 read(cunit) filensy
455 read(cunit) (filenWetcGlobal(k), k=1,nr)
456 read(cunit) (filenWetsGlobal(k), k=1,nr)
457 read(cunit) (filenWetwGlobal(k), k=1,nr)
458 #ifdef ALLOW_CTRL_WETV
459 read(cunit) (filenWetvGlobal(k), k=1,nr)
460 #endif
461
462 cgg( Add OBCS mask information to the header.
463 #ifdef ALLOW_OBCSN_CONTROL
464 read(cunit) ((filenWetobcsnGlo(k,iobcs),
465 & k=1,nr), iobcs= 1,nobcs)
466 #endif
467 #ifdef ALLOW_OBCSS_CONTROL
468 read(cunit) ((filenWetobcssGlo(k,iobcs),
469 & k=1,nr), iobcs= 1,nobcs)
470 #endif
471 #ifdef ALLOW_OBCSW_CONTROL
472 read(cunit) ((filenWetobcswGlo(k,iobcs),
473 & k=1,nr), iobcs= 1,nobcs)
474 #endif
475 #ifdef ALLOW_OBCSE_CONTROL
476 read(cunit) ((filenWetobcseGlo(k,iobcs),
477 & k=1,nr), iobcs= 1,nobcs)
478 #endif
479 cgg)
480 read(cunit) (filencvarindex(i), i=1,maxcvars)
481 read(cunit) (filencvarrecs(i), i=1,maxcvars)
482 read(cunit) (filencvarxmax(i), i=1,maxcvars)
483 read(cunit) (filencvarymax(i), i=1,maxcvars)
484 read(cunit) (filencvarnrmax(i), i=1,maxcvars)
485 read(cunit) (filencvargrd(i), i=1,maxcvars)
486 read(cunit)
487
488 c Check file header info.
489 c
490 if ( filenvarlength .NE. nvarlength ) then
491 print *, 'WARNING: wrong nvarlength ',
492 & filenvarlength, nvarlength
493 STOP 'in S/R ctrl_unpack'
494 else if ( filensx .NE. nsx .OR. filensy .NE. nsy ) then
495 print *, 'WARNING: wrong nsx or nsy ',
496 & filensx, nsx, filensy, nsy
497 STOP 'in S/R ctrl_unpack'
498 endif
499 do k = 1, nr
500 if ( filenWetcGlobal(k) .NE. nWetcGlobal(k) .OR.
501 & filenWetsGlobal(k) .NE. nWetsGlobal(k) .OR.
502 & filenWetwGlobal(k) .NE. nWetwGlobal(k) .OR.
503 & filenWetvGlobal(k) .NE. nWetvGlobal(k) ) then
504 print *, 'WARNING: wrong nWet?Global for k = ', k
505 STOP
506 endif
507 end do
508
509 cgg( Lets also check the OBCS mask info in the header.
510
511 #ifdef ALLOW_OBCSN_CONTROL
512 do iobcs = 1, nobcs
513 do k = 1, nr
514 if (filenWetobcsnGlo(k,iobcs) .NE.
515 & nWetobcsnGlo(k,iobcs)) then
516 print *, 'WARNING: OBCSN wrong nWet?Global for k = ', k
517 STOP
518 endif
519 end do
520 end do
521 #endif
522
523 #ifdef ALLOW_OBCSS_CONTROL
524 do iobcs = 1, nobcs
525 do k = 1, nr
526 if (filenWetobcssGlo(k,iobcs) .NE.
527 & nWetobcssGlo(k,iobcs)) then
528 print *, 'WARNING: OBCSS wrong nWet?Global for k = ', k
529 STOP
530 endif
531 end do
532 end do
533 #endif
534
535 #ifdef ALLOW_OBCSW_CONTROL
536 do iobcs = 1, nobcs
537 do k = 1, nr
538 if (filenWetobcswGlo(k,iobcs) .NE.
539 & nWetobcswGlo(k,iobcs)) then
540 print *, 'WARNING: OBCSW wrong nWet?Global for k = ', k
541 STOP
542 endif
543 end do
544 end do
545 #endif
546
547 #ifdef ALLOW_OBCSE_CONTROL
548 do iobcs = 1, nobcs
549 do k = 1, nr
550 if (filenWetobcseGlo(k,iobcs) .NE.
551 & nWetobcseGlo(k,iobcs)) then
552 print *, 'WARNING: OBCSE wrong nWet?Global for k = ', k
553 STOP
554 endif
555 end do
556 end do
557 #endif
558 cgg) End OBCS mask check.
559
560 c----------------------------------------------------------------------
561
562 #ifdef ALLOW_THETA0_CONTROL
563 ivartype = 1
564 call ctrl_set_unpack_xyz(
565 & cunit, ivartype, fname_theta, "hFacC",
566 & wtheta, nwetcglobal, mythid)
567 #endif
568
569 #ifdef ALLOW_SALT0_CONTROL
570 ivartype = 2
571 call ctrl_set_unpack_xyz(
572 & cunit, ivartype, fname_salt, "hFacC",
573 & wsalt, nwetcglobal, mythid)
574 #endif
575
576 #if (defined (ALLOW_HFLUX_CONTROL) || \
577 defined (ALLOW_HFLUX0_CONTROL))
578 ivartype = 3
579 write(weighttype(1:80),'(80a)') ' '
580 write(weighttype(1:80),'(a)') "whflux"
581 call ctrl_set_unpack_xy(
582 & cunit, ivartype, fname_hflux, "hFacC", weighttype,
583 & nwetcglobal, mythid)
584 #endif
585
586 #if (defined (ALLOW_SFLUX_CONTROL) || \
587 defined (ALLOW_SFLUX0_CONTROL))
588 ivartype = 4
589 write(weighttype(1:80),'(80a)') ' '
590 write(weighttype(1:80),'(a)') "wsflux"
591 call ctrl_set_unpack_xy(
592 & cunit, ivartype, fname_sflux, "hFacC", weighttype,
593 & nwetcglobal, mythid)
594 #endif
595
596 #if (defined (ALLOW_USTRESS_CONTROL) || \
597 defined (ALLOW_TAUU0_CONTROL))
598 ivartype = 5
599 write(weighttype(1:80),'(80a)') ' '
600 write(weighttype(1:80),'(a)') "wtauu"
601 call ctrl_set_unpack_xy(
602 & cunit, ivartype, fname_tauu, "maskW", weighttype,
603 & nwetwglobal, mythid)
604 #endif
605
606 #if (defined (ALLOW_VSTRESS_CONTROL) || \
607 defined (ALLOW_TAUV0_CONTROL))
608 ivartype = 6
609 write(weighttype(1:80),'(80a)') ' '
610 write(weighttype(1:80),'(a)') "wtauv"
611 call ctrl_set_unpack_xy(
612 & cunit, ivartype, fname_tauv, "maskS", weighttype,
613 & nwetsglobal, mythid)
614 #endif
615
616 #ifdef ALLOW_ATEMP_CONTROL
617 ivartype = 7
618 write(weighttype(1:80),'(80a)') ' '
619 write(weighttype(1:80),'(a)') "watemp"
620 call ctrl_set_unpack_xy(
621 & cunit, ivartype, fname_atemp, "hFacC", weighttype,
622 & nwetcglobal, mythid)
623 #endif
624
625 #ifdef ALLOW_AQH_CONTROL
626 ivartype = 8
627 write(weighttype(1:80),'(80a)') ' '
628 write(weighttype(1:80),'(a)') "waqh"
629 call ctrl_set_unpack_xy(
630 & cunit, ivartype, fname_aqh, "hFacC", weighttype,
631 & nwetcglobal, mythid)
632 #endif
633
634 #ifdef ALLOW_UWIND_CONTROL
635 ivartype = 9
636 write(weighttype(1:80),'(80a)') ' '
637 write(weighttype(1:80),'(a)') "wuwind"
638 call ctrl_set_unpack_xy(
639 & cunit, ivartype, fname_uwind, "maskW", weighttype,
640 & nwetcglobal, mythid)
641 #endif
642
643 #ifdef ALLOW_VWIND_CONTROL
644 ivartype = 10
645 write(weighttype(1:80),'(80a)') ' '
646 write(weighttype(1:80),'(a)') "wvwind"
647 call ctrl_set_unpack_xy(
648 & cunit, ivartype, fname_vwind, "maskS", weighttype,
649 & nwetcglobal, mythid)
650 #endif
651
652 #ifdef ALLOW_OBCSN_CONTROL
653 ivartype = 11
654 write(weighttype(1:80),'(80a)') ' '
655 write(weighttype(1:80),'(a)') "wobcsn"
656 call ctrl_set_unpack_xz(
657 & cunit, ivartype, fname_obcsn, "maskobcsn",
658 & wobcsn, nWetobcsnGlo, mythid)
659 #endif
660
661 #ifdef ALLOW_OBCSS_CONTROL
662 ivartype = 12
663 write(weighttype(1:80),'(80a)') ' '
664 write(weighttype(1:80),'(a)') "wobcss"
665 call ctrl_set_unpack_xz(
666 & cunit, ivartype, fname_obcss, "maskobcss",
667 & wobcss, nWetobcssGlo, mythid)
668 #endif
669
670 #ifdef ALLOW_OBCSW_CONTROL
671 ivartype = 13
672 write(weighttype(1:80),'(80a)') ' '
673 write(weighttype(1:80),'(a)') "wobcsw"
674 call ctrl_set_unpack_yz(
675 & cunit, ivartype, fname_obcsw, "maskobcsw",
676 & wobcsw, nWetobcswGlo, mythid)
677 #endif
678
679 #ifdef ALLOW_OBCSE_CONTROL
680 ivartype = 14
681 write(weighttype(1:80),'(80a)') ' '
682 write(weighttype(1:80),'(a)') "wobcse"
683 call ctrl_set_unpack_yz(
684 & cunit, ivartype, fname_obcse, "maskobcse",
685 & wobcse, nWetobcseGlo, mythid)
686 #endif
687
688 #ifdef ALLOW_DIFFKR_CONTROL
689 ivartype = 15
690 call ctrl_set_unpack_xyz(
691 & cunit, ivartype, fname_diffkr, "hFacC",
692 & wunit, nwetcglobal, mythid)
693 #endif
694
695 #ifdef ALLOW_KAPGM_CONTROL
696 ivartype = 16
697 call ctrl_set_unpack_xyz(
698 & cunit, ivartype, fname_kapgm, "hFacC",
699 & wunit, nwetcglobal, mythid)
700 #endif
701
702 #ifdef ALLOW_TR10_CONTROL
703 ivartype = 17
704 call ctrl_set_unpack_xyz(
705 & cunit, ivartype, fname_tr1, "hFacC",
706 & wunit, nwetcglobal, mythid)
707 #endif
708
709 #ifdef ALLOW_SST0_CONTROL
710 ivartype = 18
711 write(weighttype(1:80),'(80a)') ' '
712 write(weighttype(1:80),'(a)') "wsst"
713 call ctrl_set_unpack_xy(
714 & cunit, ivartype, fname_sst, "hFacC", weighttype,
715 & nwetcglobal, mythid)
716 #endif
717
718 #ifdef ALLOW_SSS0_CONTROL
719 ivartype = 19
720 write(weighttype(1:80),'(80a)') ' '
721 write(weighttype(1:80),'(a)') "wsss"
722 call ctrl_set_unpack_xy(
723 & cunit, ivartype, fname_sss, "hFacC", weighttype,
724 & nwetcglobal, mythid)
725 #endif
726
727 #ifdef ALLOW_HFACC_CONTROL
728 ivartype = 20
729 #ifdef ALLOW_HFACC3D_CONTROL
730 call ctrl_set_unpack_xyz(
731 & cunit, ivartype, fname_hfacc, "hFacC",
732 & wunit, nwetcglobal, mythid)
733 #else
734 write(weighttype(1:80),'(80a)') ' '
735 write(weighttype(1:80),'(a)') "whfacc"
736 call ctrl_set_unpack_xy(
737 & cunit, ivartype, fname_hfacc, "hFacC", weighttype,
738 & nwetcglobal, mythid)
739 #endif
740 #endif
741
742 #ifdef ALLOW_EFLUXY0_CONTROL
743 ivartype = 21
744 call ctrl_set_unpack_xyz(
745 & cunit, ivartype, fname_efluxy, "hFacS",
746 & wefluxy, nwetsglobal, mythid)
747 #endif
748
749 #ifdef ALLOW_EFLUXP0_CONTROL
750 ivartype = 22
751 call ctrl_set_unpack_xyz(
752 & cunit, ivartype, fname_efluxp, "hFacV",
753 & wefluxp, nwetvglobal, mythid)
754 #endif
755
756 #ifdef ALLOW_BOTTOMDRAG_CONTROL
757 ivartype = 23
758 write(weighttype(1:80),'(80a)') ' '
759 write(weighttype(1:80),'(a)') "wbottomdrag"
760 call ctrl_set_unpack_xy(
761 & cunit, ivartype, fname_bottomdrag, "hFacC", weighttype,
762 & nwetcglobal, mythid)
763 #endif
764
765 close ( cunit )
766
767 c *********************************************************************
768 c if very first iteration of optimization
769 else
770 c *********************************************************************
771
772 c-- Write zeroes to file.
773
774 #ifdef ALLOW_THETA0_CONTROL
775 ivartype = 1
776 call ctrl_set_globfld_xyz(
777 I fname_theta, ivartype, mythid )
778 #endif
779
780 #ifdef ALLOW_SALT0_CONTROL
781 ivartype = 2
782 call ctrl_set_globfld_xyz(
783 I fname_salt, ivartype, mythid )
784 #endif
785
786 #if (defined (ALLOW_HFLUX_CONTROL) || \
787 defined (ALLOW_HFLUX0_CONTROL))
788 ivartype = 3
789 call ctrl_set_globfld_xy(
790 I fname_hflux, ivartype, mythid )
791 #endif
792
793 #if (defined (ALLOW_SFLUX_CONTROL) || \
794 defined (ALLOW_SFLUX0_CONTROL))
795 ivartype = 4
796 call ctrl_set_globfld_xy(
797 I fname_sflux, ivartype, mythid )
798 #endif
799
800 #if (defined (ALLOW_USTRESS_CONTROL) || \
801 defined (ALLOW_TAUU0_CONTROL))
802 ivartype = 5
803 call ctrl_set_globfld_xy(
804 I fname_tauu, ivartype, mythid )
805 #endif
806
807 #if (defined (ALLOW_VSTRESS_CONTROL) || \
808 defined (ALLOW_TAUV0_CONTROL))
809 ivartype = 6
810 call ctrl_set_globfld_xy(
811 I fname_tauv, ivartype, mythid )
812 #endif
813
814 #ifdef ALLOW_ATEMP_CONTROL
815 ivartype = 7
816 call ctrl_set_globfld_xy(
817 I fname_atemp, ivartype, mythid )
818 #endif
819
820 #ifdef ALLOW_AQH_CONTROL
821 ivartype = 8
822 call ctrl_set_globfld_xy(
823 I fname_aqh, ivartype, mythid )
824 #endif
825
826 #ifdef ALLOW_UWIND_CONTROL
827 ivartype = 9
828 call ctrl_set_globfld_xy(
829 I fname_uwind, ivartype, mythid )
830 #endif
831
832 #ifdef ALLOW_VWIND_CONTROL
833 ivartype = 10
834 call ctrl_set_globfld_xy(
835 I fname_vwind, ivartype, mythid )
836 #endif
837
838 #ifdef ALLOW_OBCSN_CONTROL
839 ivartype = 11
840 call ctrl_set_globfld_xz(
841 I fname_obcsn, ivartype, mythid )
842 #endif
843
844 #ifdef ALLOW_OBCSS_CONTROL
845 ivartype = 12
846 call ctrl_set_globfld_xz(
847 I fname_obcss, ivartype, mythid )
848 #endif
849
850 #ifdef ALLOW_OBCSW_CONTROL
851 ivartype = 13
852 call ctrl_set_globfld_yz(
853 I fname_obcsw, ivartype, mythid )
854 #endif
855
856 #ifdef ALLOW_OBCSE_CONTROL
857 ivartype = 14
858 call ctrl_set_globfld_yz(
859 I fname_obcse, ivartype, mythid )
860 #endif
861
862 #ifdef ALLOW_DIFFKR_CONTROL
863 ivartype = 15
864 call ctrl_set_globfld_xyz(
865 I fname_diffkr, ivartype, mythid )
866 #endif
867
868 #ifdef ALLOW_KAPGM_CONTROL
869 ivartype = 16
870 call ctrl_set_globfld_xyz(
871 I fname_kapgm, ivartype, mythid )
872 #endif
873
874 #ifdef ALLOW_TR10_CONTROL
875 ivartype = 17
876 call ctrl_set_globfld_xyz(
877 I fname_tr1, ivartype, mythid )
878 #endif
879
880 #ifdef ALLOW_SST0_CONTROL
881 ivartype = 18
882 call ctrl_set_globfld_xy(
883 I fname_sst, ivartype, mythid )
884 #endif
885
886 #ifdef ALLOW_SSS0_CONTROL
887 ivartype = 19
888 call ctrl_set_globfld_xy(
889 I fname_sss, ivartype, mythid )
890 #endif
891
892 #ifdef ALLOW_HFACC_CONTROL
893 ivartype = 20
894 #ifdef ALLOW_HFACC3D_CONTROL
895 call ctrl_set_globfld_xyz(
896 I fname_hfacc, ivartype, mythid )
897 #else
898 call ctrl_set_globfld_xy(
899 I fname_hfacc, ivartype, mythid )
900 #endif
901 #endif
902
903 #ifdef ALLOW_EFLUXY0_CONTROL
904 ivartype = 21
905 call ctrl_set_globfld_xyz(
906 I fname_efluxy, ivartype, mythid )
907 #endif
908
909 #ifdef ALLOW_EFLUXP0_CONTROL
910 ivartype = 22
911 call ctrl_set_globfld_xyz(
912 I fname_efluxp, ivartype, mythid )
913 #endif
914
915 #ifdef ALLOW_BOTTOMDRAG_CONTROL
916 ivartype = 23
917 call ctrl_set_globfld_xy(
918 I fname_bottomdrag, ivartype, mythid )
919 #endif
920
921 cgg( For optimcycle = 0, we need to output ecco_ctrl file to disk with the
922 cgg header information and everything else 0.
923 c >>> Write control vector <<<
924 lxxadxx = .TRUE.
925
926 call mdsfindunit( cunit, mythid )
927 write(cfile(1:128),'(4a,i4.4)')
928 & ctrlname(1:9),'_',yctrlid(1:10),'.opt',
929 & optimcycle
930
931 open( cunit, file = cfile,
932 & status = 'unknown',
933 & form = 'unformatted',
934 & access = 'sequential' )
935
936 c-- Header information.
937
938 write(cunit) nvartype
939 write(cunit) nvarlength
940 write(cunit) yctrlid
941 write(cunit) optimCycle
942 write(cunit) tmpvar
943 write(cunit) 1
944 write(cunit) 1
945 write(cunit) 1
946 write(cunit) 1
947 write(cunit) (nWetcGlobal(k), k=1,nr)
948 write(cunit) (nWetsGlobal(k), k=1,nr)
949 write(cunit) (nWetwGlobal(k), k=1,nr)
950 #ifdef ALLOW_CTRL_WETC
951 write(cunit) (nWetvGlobal(k), k=1,nr)
952 #endif
953
954 cgg( Add OBCS Mask information into the header section for optimization.
955 #ifdef ALLOW_OBCSN_CONTROL
956 write(cunit) ((nWetobcsnGlo(k,iobcs), k=1,nr),iobcs= 1,nobcs)
957 #endif
958 #ifdef ALLOW_OBCSS_CONTROL
959 write(cunit) ((nWetobcssGlo(k,iobcs), k=1,nr),iobcs= 1,nobcs)
960 #endif
961 #ifdef ALLOW_OBCSW_CONTROL
962 write(cunit) ((nWetobcswGlo(k,iobcs), k=1,nr),iobcs= 1,nobcs)
963 #endif
964 #ifdef ALLOW_OBCSE_CONTROL
965 write(cunit) ((nWetobcseGlo(k,iobcs), k=1,nr),iobcs= 1,nobcs)
966 #endif
967 cgg)
968 write(cunit) (ncvarindex(i), i=1,maxcvars)
969 write(cunit) (ncvarrecs(i), i=1,maxcvars)
970 write(cunit) (nx, i=1,maxcvars)
971 write(cunit) (ny, i=1,maxcvars)
972 write(cunit) (ncvarnrmax(i), i=1,maxcvars)
973 write(cunit) (ncvargrd(i), i=1,maxcvars)
974 write(cunit)
975
976 #ifdef ALLOW_THETA0_CONTROL
977 ivartype = 1
978 call ctrl_set_pack_xyz(
979 & cunit, ivartype, fname_theta, "hFacC",
980 & wtheta, lxxadxx, mythid)
981 #endif
982
983 #ifdef ALLOW_SALT0_CONTROL
984 ivartype = 2
985 call ctrl_set_pack_xyz(
986 & cunit, ivartype, fname_salt, "hFacC",
987 & wsalt, lxxadxx, mythid)
988 #endif
989
990 #if (defined (ALLOW_HFLUX_CONTROL) || \
991 defined (ALLOW_HFLUX0_CONTROL))
992 ivartype = 3
993 write(weighttype(1:80),'(80a)') ' '
994 write(weighttype(1:80),'(a)') "whflux"
995 call ctrl_set_pack_xy(
996 & cunit, ivartype, fname_hflux, "hFacC", weighttype,
997 & lxxadxx, mythid)
998 #endif
999
1000 #if (defined (ALLOW_SFLUX_CONTROL) || \
1001 defined (ALLOW_SFLUX0_CONTROL))
1002 ivartype = 4
1003 write(weighttype(1:80),'(80a)') ' '
1004 write(weighttype(1:80),'(a)') "wsflux"
1005 call ctrl_set_pack_xy(
1006 & cunit, ivartype, fname_sflux, "hFacC", weighttype,
1007 & lxxadxx, mythid)
1008 #endif
1009
1010 #if (defined (ALLOW_USTRESS_CONTROL) || \
1011 defined (ALLOW_TAUU0_CONTROL))
1012 ivartype = 5
1013 write(weighttype(1:80),'(80a)') ' '
1014 write(weighttype(1:80),'(a)') "wtauu"
1015 call ctrl_set_pack_xy(
1016 & cunit, ivartype, fname_tauu, "maskW", weighttype,
1017 & lxxadxx, mythid)
1018 #endif
1019
1020 #if (defined (ALLOW_VSTRESS_CONTROL) || \
1021 defined (ALLOW_TAUV0_CONTROL))
1022 ivartype = 6
1023 write(weighttype(1:80),'(80a)') ' '
1024 write(weighttype(1:80),'(a)') "wtauv"
1025 call ctrl_set_pack_xy(
1026 & cunit, ivartype, fname_tauv, "maskS", weighttype,
1027 & lxxadxx, mythid)
1028 #endif
1029
1030 #ifdef ALLOW_ATEMP_CONTROL
1031 ivartype = 7
1032 write(weighttype(1:80),'(80a)') ' '
1033 write(weighttype(1:80),'(a)') "watemp"
1034 call ctrl_set_pack_xy(
1035 & cunit, ivartype, fname_atemp, "hFacC", weighttype,
1036 & lxxadxx, mythid)
1037 #endif
1038
1039 #ifdef ALLOW_AQH_CONTROL
1040 ivartype = 8
1041 write(weighttype(1:80),'(80a)') ' '
1042 write(weighttype(1:80),'(a)') "waqh"
1043 call ctrl_set_pack_xy(
1044 & cunit, ivartype, fname_aqh, "hFacC", weighttype,
1045 & lxxadxx, mythid)
1046 #endif
1047
1048 #ifdef ALLOW_UWIND_CONTROL
1049 ivartype = 9
1050 write(weighttype(1:80),'(80a)') ' '
1051 write(weighttype(1:80),'(a)') "wuwind"
1052 call ctrl_set_pack_xy(
1053 & cunit, ivartype, fname_uwind, "maskW", weighttype,
1054 & lxxadxx, mythid)
1055 #endif
1056
1057 #ifdef ALLOW_VWIND_CONTROL
1058 ivartype = 10
1059 write(weighttype(1:80),'(80a)') ' '
1060 write(weighttype(1:80),'(a)') "wvwind"
1061 call ctrl_set_pack_xy(
1062 & cunit, ivartype, fname_vwind, "maskS", weighttype,
1063 & lxxadxx, mythid)
1064 #endif
1065
1066 #ifdef ALLOW_OBCSN_CONTROL
1067 ivartype = 11
1068 call ctrl_set_pack_xz(
1069 & cunit, ivartype, fname_obcsn, "maskobcsn",
1070 & wobcsn, lxxadxx, mythid)
1071 #endif
1072
1073 #ifdef ALLOW_OBCSS_CONTROL
1074 ivartype = 12
1075 call ctrl_set_pack_xz(
1076 & cunit, ivartype, fname_obcsn, "maskobcss",
1077 & wobcss, lxxadxx, mythid)
1078 #endif
1079
1080 #ifdef ALLOW_OBCSW_CONTROL
1081 ivartype = 13
1082 call ctrl_set_pack_yz(
1083 & cunit, ivartype, fname_obcsw, "maskobcsw",
1084 & wobcsw, lxxadxx, mythid)
1085 #endif
1086
1087 #ifdef ALLOW_OBCSE_CONTROL
1088 ivartype = 14
1089 call ctrl_set_pack_yz(
1090 & cunit, ivartype, fname_obcse, "maskobcse",
1091 & wobcse, lxxadxx, mythid)
1092 #endif
1093
1094 #ifdef ALLOW_DIFFKR_CONTROL
1095 ivartype = 15
1096 call ctrl_set_pack_xyz(
1097 & cunit, ivartype, fname_diffkr, "hFacC",
1098 & wunit, lxxadxx, mythid)
1099 #endif
1100
1101 #ifdef ALLOW_KAPGM_CONTROL
1102 ivartype = 16
1103 call ctrl_set_pack_xyz(
1104 & cunit, ivartype, fname_kapgm, "hFacC",
1105 & wunit, lxxadxx, mythid)
1106 #endif
1107
1108 #ifdef ALLOW_TR10_CONTROL
1109 ivartype = 17
1110 call ctrl_set_pack_xyz(
1111 & cunit, ivartype, fname_tr1, "hFacC",
1112 & wunit, lxxadxx, mythid)
1113 #endif
1114
1115 #ifdef ALLOW_SST0_CONTROL
1116 ivartype = 18
1117 write(weighttype(1:80),'(80a)') ' '
1118 write(weighttype(1:80),'(a)') "wsst"
1119 call ctrl_set_pack_xy(
1120 & cunit, ivartype, fname_sst, "hFacC", weighttype,
1121 & lxxadxx, mythid)
1122 #endif
1123
1124 #ifdef ALLOW_SSS0_CONTROL
1125 ivartype = 19
1126 write(weighttype(1:80),'(80a)') ' '
1127 write(weighttype(1:80),'(a)') "wsss"
1128 call ctrl_set_pack_xy(
1129 & cunit, ivartype, fname_sss, "hFacC", weighttype,
1130 & lxxadxx, mythid)
1131 #endif
1132
1133 #ifdef ALLOW_HFACC_CONTROL
1134 ivartype = 20
1135 #ifdef ALLOW_HFACC3D_CONTROL
1136 call ctrl_set_pack_xyz(
1137 & cunit, ivartype, fname_hfacc, "hFacC",
1138 #else
1139 write(weighttype(1:80),'(80a)') ' '
1140 write(weighttype(1:80),'(a)') "whfacc"
1141 call ctrl_set_pack_xy(
1142 & cunit, ivartype, fname_hfacc, "hFacC", weighttype,
1143 & lxxadxx, mythid)
1144 #endif
1145 #endif
1146
1147 #ifdef ALLOW_EFLUXY0_CONTROL
1148 ivartype = 21
1149 call ctrl_set_pack_xyz(
1150 & cunit, ivartype, fname_efluxy, "hFacS",
1151 & wunit, lxxadxx, mythid)
1152 #endif
1153
1154 #ifdef ALLOW_EFLUXP0_CONTROL
1155 ivartype = 22
1156 call ctrl_set_pack_xyz(
1157 & cunit, ivartype, fname_efluxp, "hFacV",
1158 & wunit, lxxadxx, mythid)
1159 #endif
1160
1161 #ifdef ALLOW_BOTTOMDRAG_CONTROL
1162 ivartype = 23
1163 write(weighttype(1:80),'(80a)') ' '
1164 write(weighttype(1:80),'(a)') "wbottomdrag"
1165 call ctrl_set_pack_xy(
1166 & cunit, ivartype, fname_bottomdrag, "hFacC", weighttype,
1167 & lxxadxx, mythid)
1168 #endif
1169
1170 close ( cunit )
1171 cgg) End of the initialization of the ecco_ctrl file for optimcycle=0.
1172
1173 endif
1174 cgg End of optimcycle if.
1175
1176 _END_MASTER( mythid )
1177
1178 endif
1179 cgg End of "first" if.
1180
1181 return
1182 end
1183

  ViewVC Help
Powered by ViewVC 1.1.22