/[MITgcm]/MITgcm/pkg/ecco/ecco_toolbox.F
ViewVC logotype

Contents of /MITgcm/pkg/ecco/ecco_toolbox.F

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


Revision 1.8 - (show annotations) (download)
Thu Mar 26 14:52:42 2015 UTC (9 years, 1 month ago) by gforget
Branch: MAIN
CVS Tags: checkpoint65k, checkpoint65l
Changes since 1.7: +343 -1 lines
(modifications contributed by Ou Wang)
- cost_gencost_bpv4.F: increase smoothing scale to 750km.
- pkg/profiles: add option to remove time means of T/S.
- pkg/ecco: add computation of time mean T/S for pkg/profiles,
  additional option to omit time mean misfits in cost_generic.F
- pkg/ecco/ecco_toolbox.F: addition of ecco_diffanommsk,
  ecco_addmask and ecco_divfield.

1 C $Header: /u/gcmpack/MITgcm/pkg/ecco/ecco_toolbox.F,v 1.7 2015/03/23 21:10:04 gforget Exp $
2 C $Name: $
3
4 #include "ECCO_OPTIONS.h"
5
6 C-- File ecco_toolbox.F: Routines to handle basic operations common in ecco.
7 C-- Contents
8 C-- o ecco_zero
9 C-- o ecco_cp
10 C-- o ecco_cprsrl
11 C-- o ecco_diffmsk
12 C-- o ecco_diffanommsk
13 C-- o ecco_obsmsk
14 C-- o ecco_addcost
15 C-- o ecco_add
16 C-- o ecco_addmask
17 C-- o ecco_div
18 C-- o ecco_divfield
19 C-- o ecco_readbar
20 C-- o ecco_readwei
21
22 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
23 CBOP
24 C !ROUTINE: ecco_zero
25 C !INTERFACE:
26 subroutine ecco_zero( fld, nnzloc, zeroloc, myThid )
27 C !DESCRIPTION: \bv
28 C fill a field with zeroloc
29 C \ev
30
31 C !USES:
32 IMPLICIT NONE
33
34 C == global variables ==
35 #include "EEPARAMS.h"
36 #include "SIZE.h"
37
38 c == routine arguments ==
39
40 INTEGER myThid
41 INTEGER nnzloc
42 _RL zeroloc
43 _RL fld (1-olx:snx+olx,1-oly:sny+oly,nnzloc,nsx,nsy)
44
45 #ifdef ALLOW_ECCO
46
47 c == local variables ==
48
49 integer bi,bj
50 integer i,j,k
51 integer itlo,ithi
52 integer jtlo,jthi
53 integer jmin,jmax
54 integer imin,imax
55
56 CEOP
57
58 jtlo = mybylo(mythid)
59 jthi = mybyhi(mythid)
60 itlo = mybxlo(mythid)
61 ithi = mybxhi(mythid)
62 jmin = 1-oly
63 jmax = sny+oly
64 imin = 1-olx
65 imax = snx+olx
66
67
68 c-- Determine the model-data difference mask
69 do bj = jtlo,jthi
70 do bi = itlo,ithi
71 do k = 1,nnzloc
72 do j = jmin,jmax
73 do i = imin,imax
74 fld(i,j,k,bi,bj) = zeroloc
75 enddo
76 enddo
77 enddo
78 enddo
79 enddo
80
81 #endif /* ALLOW_ECCO */
82
83 RETURN
84 END
85
86
87 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
88 CBOP
89 C !ROUTINE: ecco_diffmsk
90 C !INTERFACE:
91 subroutine ecco_diffmsk(
92 I localbar, nnzbar, localobs, nnzobs, localmask,
93 I spminloc, spmaxloc, spzeroloc,
94 O localdif, difmask,
95 I myThid
96 & )
97
98 C !DESCRIPTION: \bv
99 C compute masked difference between model and observations
100 C \ev
101
102 C !USES:
103 IMPLICIT NONE
104
105 C == global variables ==
106 #include "EEPARAMS.h"
107 #include "SIZE.h"
108 #include "PARAMS.h"
109 #ifdef ALLOW_ECCO
110 # include "ecco.h"
111 #endif
112
113 c == routine arguments ==
114
115 INTEGER myThid
116 INTEGER nnzobs, nnzbar
117
118 _RL localbar (1-olx:snx+olx,1-oly:sny+oly,nnzbar,nsx,nsy)
119 _RL localobs (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
120 _RL localmask (1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
121 _RL localdif (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
122 _RL difmask (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
123
124 _RL spminloc, spmaxloc, spzeroloc
125
126 #ifdef ALLOW_ECCO
127
128 c == local variables ==
129
130 integer bi,bj
131 integer i,j,k
132 integer itlo,ithi
133 integer jtlo,jthi
134 integer jmin,jmax
135 integer imin,imax
136
137 CEOP
138
139 jtlo = mybylo(mythid)
140 jthi = mybyhi(mythid)
141 itlo = mybxlo(mythid)
142 ithi = mybxhi(mythid)
143 jmin = 1
144 jmax = sny
145 imin = 1
146 imax = snx
147
148
149 c-- Determine the model-data difference mask
150 do bj = jtlo,jthi
151 do bi = itlo,ithi
152 do k = 1,nnzobs
153 do j = jmin,jmax
154 do i = imin,imax
155 #ifdef ECCO_CTRL_DEPRECATED
156 difmask(i,j,k,bi,bj) = cosphi(i,j,bi,bj)*
157 & localmask(i,j,k,bi,bj)
158 #else
159 difmask(i,j,k,bi,bj) = localmask(i,j,k,bi,bj)
160 #endif
161 if ( localobs(i,j,k,bi,bj) .lt. spminloc .or.
162 & localobs(i,j,k,bi,bj) .gt. spmaxloc .or.
163 & localobs(i,j,k,bi,bj) .eq. spzeroloc ) then
164 difmask(i,j,k,bi,bj) = 0. _d 0
165 endif
166 localdif(i,j,k,bi,bj) = difmask(i,j,k,bi,bj)*
167 & (localbar(i,j,k,bi,bj)-localobs(i,j,k,bi,bj))
168 enddo
169 enddo
170 enddo
171 enddo
172 enddo
173
174 #endif /* ALLOW_ECCO */
175
176 RETURN
177 END
178
179 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
180 CBOP
181 C !ROUTINE: ecco_diffanommsk
182 C !INTERFACE:
183 subroutine ecco_diffanommsk(
184 I localbar, localbarmean, nnzbar,
185 I localobs, localobsmean, nnzobs,
186 I localmask,
187 I spminloc, spmaxloc, spzeroloc,
188 O localdif, difmask,
189 I myThid
190 & )
191
192 C !DESCRIPTION: \bv
193 C compute masked difference between time-anomaly model and observations
194 C \ev
195
196 C !USES:
197 IMPLICIT NONE
198
199 C == global variables ==
200 #include "EEPARAMS.h"
201 #include "SIZE.h"
202 #include "PARAMS.h"
203 #ifdef ALLOW_ECCO
204 # include "ecco.h"
205 #endif
206
207 c == routine arguments ==
208
209 INTEGER myThid
210 INTEGER nnzobs, nnzbar
211
212 _RL localbar (1-olx:snx+olx,1-oly:sny+oly,nnzbar,nsx,nsy)
213 _RL localbarmean (1-olx:snx+olx,1-oly:sny+oly,nnzbar,nsx,nsy)
214 _RL localobs (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
215 _RL localobsmean (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
216 _RL localmask (1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
217 _RL localdif (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
218 _RL difmask (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
219
220 _RL spminloc, spmaxloc, spzeroloc
221
222 #ifdef ALLOW_ECCO
223
224 c == local variables ==
225
226 integer bi,bj
227 integer i,j,k
228 integer itlo,ithi
229 integer jtlo,jthi
230 integer jmin,jmax
231 integer imin,imax
232
233 CEOP
234
235 jtlo = mybylo(mythid)
236 jthi = mybyhi(mythid)
237 itlo = mybxlo(mythid)
238 ithi = mybxhi(mythid)
239 jmin = 1
240 jmax = sny
241 imin = 1
242 imax = snx
243
244
245 c-- Determine the model-data difference mask
246 do bj = jtlo,jthi
247 do bi = itlo,ithi
248 do k = 1,nnzobs
249 do j = jmin,jmax
250 do i = imin,imax
251 #ifdef ECCO_CTRL_DEPRECATED
252 difmask(i,j,k,bi,bj) = cosphi(i,j,bi,bj)*
253 & localmask(i,j,k,bi,bj)
254 #else
255 difmask(i,j,k,bi,bj) = localmask(i,j,k,bi,bj)
256 #endif
257 if ( localobs(i,j,k,bi,bj) .lt. spminloc .or.
258 & localobs(i,j,k,bi,bj) .gt. spmaxloc .or.
259 & localobs(i,j,k,bi,bj) .eq. spzeroloc ) then
260 difmask(i,j,k,bi,bj) = 0. _d 0
261 endif
262 localdif(i,j,k,bi,bj) = difmask(i,j,k,bi,bj)*
263 & ( (localbar(i,j,k,bi,bj)-localbarmean(i,j,k,bi,bj))
264 & -(localobs(i,j,k,bi,bj)-localobsmean(i,j,k,bi,bj)) )
265 enddo
266 enddo
267 enddo
268 enddo
269 enddo
270
271 #endif /* ALLOW_ECCO */
272
273 RETURN
274 END
275
276 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
277 CBOP
278 C !ROUTINE: ecco_obsmsk
279 C !INTERFACE:
280 subroutine ecco_obsmsk(
281 I localbar, nnzbar, localobs, nnzobs, localmask,
282 I spminloc, spmaxloc, spzeroloc,
283 O localout, obsmask,
284 I myThid
285 & )
286
287 C !DESCRIPTION: \bv
288 C mask (model) fieds if observation is out-of-bound or missing.
289 C \ev
290
291 C !USES:
292 IMPLICIT NONE
293
294 C == global variables ==
295 #include "EEPARAMS.h"
296 #include "SIZE.h"
297 #include "PARAMS.h"
298 #ifdef ALLOW_ECCO
299 # include "ecco.h"
300 #endif
301
302 c == routine arguments ==
303
304 INTEGER myThid
305 INTEGER nnzobs, nnzbar
306
307 _RL localbar (1-olx:snx+olx,1-oly:sny+oly,nnzbar,nsx,nsy)
308 _RL localobs (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
309 _RL localmask (1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
310 _RL localout (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
311 _RL obsmask (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
312
313 _RL spminloc, spmaxloc, spzeroloc
314
315 #ifdef ALLOW_ECCO
316
317 c == local variables ==
318
319 integer bi,bj
320 integer i,j,k
321 integer itlo,ithi
322 integer jtlo,jthi
323 integer jmin,jmax
324 integer imin,imax
325
326 CEOP
327
328 jtlo = mybylo(mythid)
329 jthi = mybyhi(mythid)
330 itlo = mybxlo(mythid)
331 ithi = mybxhi(mythid)
332 jmin = 1
333 jmax = sny
334 imin = 1
335 imax = snx
336
337
338 c-- Determine the model-data difference mask
339 do bj = jtlo,jthi
340 do bi = itlo,ithi
341 do k = 1,nnzobs
342 do j = jmin,jmax
343 do i = imin,imax
344 #ifdef ECCO_CTRL_DEPRECATED
345 obsmask(i,j,k,bi,bj) = cosphi(i,j,bi,bj)*
346 & localmask(i,j,k,bi,bj)
347 #else
348 obsmask(i,j,k,bi,bj) = localmask(i,j,k,bi,bj)
349 #endif
350 if ( localobs(i,j,k,bi,bj) .lt. spminloc .or.
351 & localobs(i,j,k,bi,bj) .gt. spmaxloc .or.
352 & localobs(i,j,k,bi,bj) .eq. spzeroloc ) then
353 obsmask(i,j,k,bi,bj) = 0. _d 0
354 endif
355 localout(i,j,k,bi,bj) = obsmask(i,j,k,bi,bj)*
356 & localbar(i,j,k,bi,bj)
357 enddo
358 enddo
359 enddo
360 enddo
361 enddo
362
363 #endif /* ALLOW_ECCO */
364
365 RETURN
366 END
367
368 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
369 CBOP
370 C !ROUTINE: ecco_cp
371 C !INTERFACE:
372 subroutine ecco_cp(
373 I fldIn, nzIn, fldOut, nzOut,
374 I myThid
375 & )
376
377 C !DESCRIPTION: \bv
378 C copy a field to another array
379 C \ev
380
381 C !USES:
382 IMPLICIT NONE
383
384 C == global variables ==
385 #include "EEPARAMS.h"
386 #include "SIZE.h"
387 #include "PARAMS.h"
388 #ifdef ALLOW_ECCO
389 # include "ecco.h"
390 #endif
391
392 c == routine arguments ==
393
394 INTEGER myThid
395 INTEGER nzOut, nzIn
396
397 _RL fldIn (1-olx:snx+olx,1-oly:sny+oly,nzIn,nsx,nsy)
398 _RL fldOut (1-olx:snx+olx,1-oly:sny+oly,nzOut,nsx,nsy)
399
400 #ifdef ALLOW_ECCO
401
402 c == local variables ==
403
404 integer bi,bj
405 integer i,j,k
406 integer itlo,ithi
407 integer jtlo,jthi
408 integer jmin,jmax
409 integer imin,imax
410
411 CEOP
412
413 jtlo = mybylo(mythid)
414 jthi = mybyhi(mythid)
415 itlo = mybxlo(mythid)
416 ithi = mybxhi(mythid)
417 jmin = 1
418 jmax = sny
419 imin = 1
420 imax = snx
421
422
423 c-- Determine the model-data difference mask
424 do bj = jtlo,jthi
425 do bi = itlo,ithi
426 do k = 1,nzOut
427 do j = jmin,jmax
428 do i = imin,imax
429 fldOut(i,j,k,bi,bj) = fldIn(i,j,k,bi,bj)
430 enddo
431 enddo
432 enddo
433 enddo
434 enddo
435
436 #endif /* ALLOW_ECCO */
437
438 RETURN
439 END
440
441 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
442 CBOP
443 C !ROUTINE: ecco_cprsrl
444 C !INTERFACE:
445 subroutine ecco_cprsrl(
446 I fldIn, nzIn, fldOut, nzOut,
447 I myThid
448 & )
449
450 C !DESCRIPTION: \bv
451 C copy a field to another array, switching from _RS to _RL
452 C \ev
453
454 C !USES:
455 IMPLICIT NONE
456
457 C == global variables ==
458 #include "EEPARAMS.h"
459 #include "SIZE.h"
460 #include "PARAMS.h"
461 #ifdef ALLOW_ECCO
462 # include "ecco.h"
463 #endif
464
465 c == routine arguments ==
466
467 INTEGER myThid
468 INTEGER nzOut, nzIn
469
470 _RS fldIn (1-olx:snx+olx,1-oly:sny+oly,nzIn,nsx,nsy)
471 _RL fldOut (1-olx:snx+olx,1-oly:sny+oly,nzOut,nsx,nsy)
472
473 #ifdef ALLOW_ECCO
474
475 c == local variables ==
476
477 integer bi,bj
478 integer i,j,k
479 integer itlo,ithi
480 integer jtlo,jthi
481 integer jmin,jmax
482 integer imin,imax
483
484 CEOP
485
486 jtlo = mybylo(mythid)
487 jthi = mybyhi(mythid)
488 itlo = mybxlo(mythid)
489 ithi = mybxhi(mythid)
490 jmin = 1
491 jmax = sny
492 imin = 1
493 imax = snx
494
495
496 c-- Determine the model-data difference mask
497 do bj = jtlo,jthi
498 do bi = itlo,ithi
499 do k = 1,nzOut
500 do j = jmin,jmax
501 do i = imin,imax
502 fldOut(i,j,k,bi,bj) = fldIn(i,j,k,bi,bj)
503 enddo
504 enddo
505 enddo
506 enddo
507 enddo
508
509 #endif /* ALLOW_ECCO */
510
511 RETURN
512 END
513
514 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
515 CBOP
516 C !ROUTINE: ecco_addcost
517 C !INTERFACE:
518 subroutine ecco_addcost(
519 I localdif, localweight, difmask, nnzobs,
520 I objf_local, num_local,
521 I myThid
522 & )
523
524 C !DESCRIPTION: \bv
525 C adds to a cost function term
526 C \ev
527
528 C !USES:
529 IMPLICIT NONE
530
531 C == global variables ==
532 #include "EEPARAMS.h"
533 #include "SIZE.h"
534 #include "PARAMS.h"
535 #ifdef ALLOW_ECCO
536 # include "ecco.h"
537 #endif
538
539 c == routine arguments ==
540
541 INTEGER myThid
542 INTEGER nnzobs
543
544 _RL localdif (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
545 _RL localweight(1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
546 _RL difmask (1-olx:snx+olx,1-oly:sny+oly,nnzobs,nsx,nsy)
547
548 _RL objf_local(nsx,nsy)
549 _RL num_local(nsx,nsy)
550
551 #ifdef ALLOW_ECCO
552
553 c == local variables ==
554
555 integer bi,bj
556 integer i,j,k
557 integer itlo,ithi
558 integer jtlo,jthi
559 integer jmin,jmax
560 integer imin,imax
561
562 _RL localwww
563 _RL localcost
564 _RL junk
565
566 CEOP
567
568 jtlo = mybylo(mythid)
569 jthi = mybyhi(mythid)
570 itlo = mybxlo(mythid)
571 ithi = mybxhi(mythid)
572 jmin = 1
573 jmax = sny
574 imin = 1
575 imax = snx
576
577 localwww = 0. _d 0
578
579 c-- Compute normalized model-obs cost function
580 do bj = jtlo,jthi
581 do bi = itlo,ithi
582 localcost = 0. _d 0
583 do k = 1,nnzobs
584 do j = jmin,jmax
585 do i = imin,imax
586 localwww = localweight(i,j,k,bi,bj)
587 & * difmask(i,j,k,bi,bj)
588 junk = localdif(i,j,k,bi,bj)
589 localcost = localcost + junk*junk*localwww
590 if ( localwww .ne. 0. )
591 & num_local(bi,bj) = num_local(bi,bj) + 1. _d 0
592 enddo
593 enddo
594 enddo
595 objf_local(bi,bj) = objf_local(bi,bj) + localcost
596 enddo
597 enddo
598
599 #endif /* ALLOW_ECCO */
600
601 RETURN
602 END
603
604 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
605 CBOP
606 C !ROUTINE: ecco_add
607 C !INTERFACE:
608 subroutine ecco_add(
609 I fldIn, nzIn, fldOut, nzOut,
610 I myThid
611 & )
612
613 C !DESCRIPTION: \bv
614 C add a field to another array
615 C \ev
616
617 C !USES:
618 IMPLICIT NONE
619
620 C == global variables ==
621 #include "EEPARAMS.h"
622 #include "SIZE.h"
623 #include "PARAMS.h"
624 #ifdef ALLOW_ECCO
625 # include "ecco.h"
626 #endif
627
628 c == routine arguments ==
629
630 INTEGER myThid
631 INTEGER nzOut, nzIn
632
633 _RL fldIn (1-olx:snx+olx,1-oly:sny+oly,nzIn,nsx,nsy)
634 _RL fldOut (1-olx:snx+olx,1-oly:sny+oly,nzOut,nsx,nsy)
635
636 #ifdef ALLOW_ECCO
637
638 c == local variables ==
639
640 integer bi,bj
641 integer i,j,k
642 integer itlo,ithi
643 integer jtlo,jthi
644 integer jmin,jmax
645 integer imin,imax
646
647 CEOP
648
649 jtlo = mybylo(mythid)
650 jthi = mybyhi(mythid)
651 itlo = mybxlo(mythid)
652 ithi = mybxhi(mythid)
653 jmin = 1
654 jmax = sny
655 imin = 1
656 imax = snx
657
658
659 c-- Determine the model-data difference mask
660 do bj = jtlo,jthi
661 do bi = itlo,ithi
662 do k = 1,nzOut
663 do j = jmin,jmax
664 do i = imin,imax
665 fldOut(i,j,k,bi,bj) = fldOut(i,j,k,bi,bj)
666 & + fldIn(i,j,k,bi,bj)
667 enddo
668 enddo
669 enddo
670 enddo
671 enddo
672
673 #endif /* ALLOW_ECCO */
674
675 RETURN
676 END
677
678 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
679 CBOP
680 C !ROUTINE: ecco_addmask
681 C !INTERFACE:
682 subroutine ecco_addmask(
683 I fldIn, fldInmask, nzIn, fldOut, fldOutnum,
684 I nzOut, myThid
685 & )
686
687 C !DESCRIPTION: \bv
688 C add a field to another array only grids where the mask is non-zero.
689 C Also increase the counter by one one those girds.
690 C \ev
691
692 C !USES:
693 IMPLICIT NONE
694
695 C == global variables ==
696 #include "EEPARAMS.h"
697 #include "SIZE.h"
698 #include "PARAMS.h"
699 #ifdef ALLOW_ECCO
700 # include "ecco.h"
701 #endif
702
703 c == routine arguments ==
704
705 INTEGER myThid
706 INTEGER nzOut, nzIn
707
708 _RL fldIn (1-olx:snx+olx,1-oly:sny+oly,nzIn,nsx,nsy)
709 _RL fldInmask (1-olx:snx+olx,1-oly:sny+oly,nzIn,nsx,nsy)
710 _RL fldOut (1-olx:snx+olx,1-oly:sny+oly,nzOut,nsx,nsy)
711 _RL fldOutnum (1-olx:snx+olx,1-oly:sny+oly,nzOut,nsx,nsy)
712
713 #ifdef ALLOW_ECCO
714
715 c == local variables ==
716
717 integer bi,bj
718 integer i,j,k
719 integer itlo,ithi
720 integer jtlo,jthi
721 integer jmin,jmax
722 integer imin,imax
723
724 CEOP
725
726 jtlo = mybylo(mythid)
727 jthi = mybyhi(mythid)
728 itlo = mybxlo(mythid)
729 ithi = mybxhi(mythid)
730 jmin = 1
731 jmax = sny
732 imin = 1
733 imax = snx
734
735
736 c-- Determine the model-data difference mask
737 do bj = jtlo,jthi
738 do bi = itlo,ithi
739 do k = 1,nzOut
740 do j = jmin,jmax
741 do i = imin,imax
742 if(fldInmask(i,j,k,bi,bj) .NE. 0. _d 0) then
743 fldOut(i,j,k,bi,bj) = fldOut(i,j,k,bi,bj)
744 & + fldIn(i,j,k,bi,bj)
745 fldOutnum(i,j,k,bi,bj) = fldOutnum(i,j,k,bi,bj)
746 & + 1. _d 0
747 endif
748 enddo
749 enddo
750 enddo
751 enddo
752 enddo
753
754 #endif /* ALLOW_ECCO */
755
756 RETURN
757 END
758
759 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
760 CBOP
761 C !ROUTINE: ecco_div
762 C !INTERFACE:
763 subroutine ecco_div( fld, nnzloc, numerloc, myThid )
764 C !DESCRIPTION: \bv
765 C divide a field with RL constant
766 C \ev
767
768 C !USES:
769 IMPLICIT NONE
770
771 C == global variables ==
772 #include "EEPARAMS.h"
773 #include "SIZE.h"
774
775 c == routine arguments ==
776
777 INTEGER myThid
778 INTEGER nnzloc
779 _RL numerloc
780 _RL fld (1-olx:snx+olx,1-oly:sny+oly,nnzloc,nsx,nsy)
781
782 #ifdef ALLOW_ECCO
783
784 c == local variables ==
785
786 integer bi,bj
787 integer i,j,k
788 integer itlo,ithi
789 integer jtlo,jthi
790 integer jmin,jmax
791 integer imin,imax
792
793 CEOP
794
795 jtlo = mybylo(mythid)
796 jthi = mybyhi(mythid)
797 itlo = mybxlo(mythid)
798 ithi = mybxhi(mythid)
799 jmin = 1-oly
800 jmax = sny+oly
801 imin = 1-olx
802 imax = snx+olx
803
804 do bj = jtlo,jthi
805 do bi = itlo,ithi
806 do k = 1,nnzloc
807 do j = jmin,jmax
808 do i = imin,imax
809 fld(i,j,k,bi,bj) = fld(i,j,k,bi,bj)/numerloc
810 enddo
811 enddo
812 enddo
813 enddo
814 enddo
815
816 #endif /* ALLOW_ECCO */
817
818 RETURN
819 END
820
821 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
822 CBOP
823 C !ROUTINE: ecco_divfield
824 C !INTERFACE:
825 subroutine ecco_divfield( fld, nnzloc, flddenom, myThid )
826 C !DESCRIPTION: \bv
827 C divide a field by another field
828 C \ev
829
830 C !USES:
831 IMPLICIT NONE
832
833 C == global variables ==
834 #include "EEPARAMS.h"
835 #include "SIZE.h"
836
837 c == routine arguments ==
838
839 INTEGER myThid
840 INTEGER nnzloc
841 _RL fld (1-olx:snx+olx,1-oly:sny+oly,nnzloc,nsx,nsy)
842 _RL flddenom (1-olx:snx+olx,1-oly:sny+oly,nnzloc,nsx,nsy)
843
844 #ifdef ALLOW_ECCO
845
846 c == local variables ==
847
848 integer bi,bj
849 integer i,j,k
850 integer itlo,ithi
851 integer jtlo,jthi
852 integer jmin,jmax
853 integer imin,imax
854
855 CEOP
856
857 jtlo = mybylo(mythid)
858 jthi = mybyhi(mythid)
859 itlo = mybxlo(mythid)
860 ithi = mybxhi(mythid)
861 jmin = 1-oly
862 jmax = sny+oly
863 imin = 1-olx
864 imax = snx+olx
865
866 do bj = jtlo,jthi
867 do bi = itlo,ithi
868 do k = 1,nnzloc
869 do j = jmin,jmax
870 do i = imin,imax
871 if(flddenom(i,j,k,bi,bj) .NE. 0. _d 0) then
872 fld(i,j,k,bi,bj) = fld(i,j,k,bi,bj)/
873 & flddenom(i,j,k,bi,bj)
874 else
875 fld(i,j,k,bi,bj) = 0. _d 0
876 endif
877 enddo
878 enddo
879 enddo
880 enddo
881 enddo
882
883 #endif /* ALLOW_ECCO */
884
885 RETURN
886 END
887
888 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
889 CBOP
890 C !ROUTINE: ecco_readbar
891 C !INTERFACE:
892 subroutine ecco_readbar(
893 I active_var_file,
894 O active_var,
895 I iRec,
896 I nnzbar,
897 I dummy,
898 I myThid
899 & )
900
901 C !DESCRIPTION: \bv
902 C reads one record from averaged time series ("bar file")
903 C \ev
904
905 C !USES:
906 IMPLICIT NONE
907
908 C == global variables ==
909 #include "EEPARAMS.h"
910 #include "SIZE.h"
911 #ifdef ALLOW_ECCO
912 # include "ecco.h"
913 #endif
914
915 c == routine arguments ==
916
917 C active_var_file: filename
918 C active_var: array
919 C iRec: record number
920 CHARACTER*(*) active_var_file
921 _RL active_var(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nnzbar,nSx,nSy)
922 INTEGER iRec
923 INTEGER myThid
924 INTEGER nnzbar
925 _RL dummy
926
927 #ifdef ALLOW_ECCO
928
929 c == local variables ==
930
931 LOGICAL doglobalread
932 LOGICAL lAdInit
933
934 CEOP
935
936 doglobalread = .false.
937 ladinit = .false.
938
939 #ifdef ALLOW_AUTODIFF
940 if ( nnzbar .EQ. 1 ) then
941 call active_read_xy( active_var_file, active_var,
942 & irec, doglobalread,
943 & ladinit, eccoiter, mythid,
944 & dummy )
945 else
946 call active_read_xyz( active_var_file, active_var,
947 & irec, doglobalread,
948 & ladinit, eccoiter, mythid,
949 & dummy )
950 endif
951 #else
952 if ( nnzbar .EQ. 1 ) then
953 CALL READ_REC_XY_RL( active_var_file, active_var,
954 & iRec, 1, myThid )
955 else
956 CALL READ_REC_XYZ_RL( active_var_file, active_var,
957 & iRec, 1, myThid )
958 endif
959 #endif
960
961 #endif /* ALLOW_ECCO */
962
963 RETURN
964 END
965
966 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
967 CBOP
968 C !ROUTINE: ecco_readwei
969 C !INTERFACE:
970 subroutine ecco_readwei(
971 I localerr_file,
972 O localweight,
973 I iRec,
974 I nnzbar,
975 I myThid
976 & )
977
978 C !DESCRIPTION: \bv
979 C reads uncertainty field and compute weight as squared inverse
980 C \ev
981
982 C !USES:
983 IMPLICIT NONE
984
985 C == global variables ==
986 #include "EEPARAMS.h"
987 #include "SIZE.h"
988 #ifdef ALLOW_ECCO
989 # include "ecco.h"
990 #endif
991
992 c == routine arguments ==
993
994 C localerr_file: filename
995 C localweight: array
996 C iRec: record number
997 CHARACTER*(*) localerr_file
998 _RL localweight(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nnzbar,nSx,nSy)
999 INTEGER iRec
1000 INTEGER myThid
1001 INTEGER nnzbar
1002
1003 #ifdef ALLOW_ECCO
1004
1005 c == local variables ==
1006
1007 integer bi,bj
1008 integer i,j,k
1009 integer itlo,ithi
1010 integer jtlo,jthi
1011 integer jmin,jmax
1012 integer imin,imax
1013
1014 CEOP
1015
1016 jtlo = mybylo(mythid)
1017 jthi = mybyhi(mythid)
1018 itlo = mybxlo(mythid)
1019 ithi = mybxhi(mythid)
1020 jmin = 1-oly
1021 jmax = sny+oly
1022 imin = 1-olx
1023 imax = snx+olx
1024
1025 call mdsreadfield( localerr_file, cost_iprec,
1026 & cost_yftype, nnzbar, localweight, iRec, mythid )
1027
1028 DO bj=myByLo(myThid),myByHi(myThid)
1029 DO bi=myBxLo(myThid),myBxHi(myThid)
1030 DO j = 1-Oly,sNy+Oly
1031 DO i = 1-Olx,sNx+Olx
1032 DO k = 1,nnzbar
1033 c-- Test for missing values.
1034 if (localweight(i,j,k,bi,bj) .lt. -9900.) then
1035 localweight(i,j,k,bi,bj) = 0. _d 0
1036 endif
1037 c-- Convert to weight
1038 if (localweight(i,j,k,bi,bj) .ne. 0.) then
1039 localweight(i,j,k,bi,bj) =
1040 & 1./localweight(i,j,k,bi,bj)/
1041 & localweight(i,j,k,bi,bj)
1042 endif
1043 enddo
1044 enddo
1045 enddo
1046 enddo
1047 enddo
1048
1049 #endif /* ALLOW_ECCO */
1050
1051 RETURN
1052 END
1053
1054
1055
1056
1057

  ViewVC Help
Powered by ViewVC 1.1.22