/[MITgcm]/MITgcm/pkg/diagnostics/diagnostics_utils.F
ViewVC logotype

Contents of /MITgcm/pkg/diagnostics/diagnostics_utils.F

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


Revision 1.36 - (show annotations) (download)
Sun Jul 23 00:24:18 2017 UTC (6 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, HEAD
Changes since 1.35: +5 -5 lines
allows for negative "jdiag" (interpret |jdiag| instead)

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_utils.F,v 1.35 2017/05/26 08:33:03 mlosch Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 C-- File diagnostics_utils.F: General purpose support routines
7 C-- Contents:
8 C-- o DIAGNOSTICS_COUNT
9 C-- o DIAGNOSTICS_GET_DIAG
10 C-- o DIAGNOSTICS_GET_POINTERS
11 C-- o DIAGNOSTICS_SETKLEV
12 C-- o DIAGS_GET_PARMS_I (Function)
13 C-- o DIAGS_MK_UNITS (Function)
14 C-- o DIAGS_MK_TITLE (Function)
15 C-- o DIAGS_RENAMED (Function)
16
17 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
18
19 CBOP 0
20 C !ROUTINE: DIAGNOSTICS_COUNT
21 C !INTERFACE:
22 SUBROUTINE DIAGNOSTICS_COUNT( diagName,
23 I biArg, bjArg, myThid )
24
25 C !DESCRIPTION:
26 C***********************************************************************
27 C routine to increment the diagnostic counter only
28 C***********************************************************************
29 C !USES:
30 IMPLICIT NONE
31
32 C == Global variables ===
33 #include "EEPARAMS.h"
34 #include "SIZE.h"
35 #include "DIAGNOSTICS_SIZE.h"
36 #include "DIAGNOSTICS.h"
37
38 C !INPUT PARAMETERS:
39 C***********************************************************************
40 C Arguments Description
41 C ----------------------
42 C diagName :: name of diagnostic to increment the counter
43 C biArg :: X-direction tile number, or 0 if called outside bi,bj loops
44 C bjArg :: Y-direction tile number, or 0 if called outside bi,bj loops
45 C myThid :: my thread Id number
46 C***********************************************************************
47 CHARACTER*8 diagName
48 INTEGER biArg, bjArg
49 INTEGER myThid
50 CEOP
51
52 C !LOCAL VARIABLES:
53 C ===============
54 INTEGER m, n
55 INTEGER bi, bj
56 INTEGER ipt, ndId
57 c CHARACTER*(MAX_LEN_MBUF) msgBuf
58
59 IF ( biArg.EQ.0 .AND. bjArg.EQ.0 ) THEN
60 bi = myBxLo(myThid)
61 bj = myByLo(myThid)
62 ELSE
63 bi = MIN(biArg,nSx)
64 bj = MIN(bjArg,nSy)
65 ENDIF
66
67 C-- Run through list of active diagnostics to find which counter
68 C to increment (needs to be a valid & active diagnostic-counter)
69 DO n=1,nLists
70 DO m=1,nActive(n)
71 IF ( diagName.EQ.flds(m,n) .AND. idiag(m,n).GT.0 ) THEN
72 ipt = idiag(m,n)
73 IF (ndiag(ipt,bi,bj).GE.0) THEN
74 ndId = ABS(jdiag(m,n))
75 ipt = ipt + pdiag(n,bi,bj)*kdiag(ndId)
76 C- Increment the counter for the diagnostic
77 IF ( biArg.EQ.0 .AND. bjArg.EQ.0 ) THEN
78 DO bj=myByLo(myThid), myByHi(myThid)
79 DO bi=myBxLo(myThid), myBxHi(myThid)
80 ndiag(ipt,bi,bj) = ndiag(ipt,bi,bj) + 1
81 ENDDO
82 ENDDO
83 ELSE
84 ndiag(ipt,bi,bj) = ndiag(ipt,bi,bj) + 1
85 ENDIF
86 C- Increment is done
87 ENDIF
88 ENDIF
89 ENDDO
90 ENDDO
91
92 RETURN
93 END
94
95 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
96
97 CBOP 0
98 C !ROUTINE: DIAGNOSTICS_GET_DIAG
99
100 C !INTERFACE:
101 SUBROUTINE DIAGNOSTICS_GET_DIAG(
102 I kl, undefRL,
103 O qtmp,
104 I ndId, mate, ip, im, bi, bj, myThid )
105
106 C !DESCRIPTION:
107 C Retrieve time-averaged (or snap-shot) diagnostic field
108
109 C !USES:
110 IMPLICIT NONE
111 #include "EEPARAMS.h"
112 #include "SIZE.h"
113 #include "DIAGNOSTICS_SIZE.h"
114 #include "DIAGNOSTICS.h"
115
116 C !INPUT PARAMETERS:
117 C kl :: level selection: >0 : single selected lev ; =0 : all kdiag levels
118 C undefRL :: undefined "_RL" type value
119 C ndId :: diagnostic Id number (in available diagnostics list)
120 C mate :: counter diagnostic number if any ; 0 otherwise
121 C ip :: pointer to storage array location for diag.
122 C im :: pointer to storage array location for mate
123 C bi :: X-direction tile number
124 C bj :: Y-direction tile number
125 C myThid :: my thread Id number
126 INTEGER kl
127 _RL undefRL
128 INTEGER ndId, mate, ip, im
129 INTEGER bi, bj, myThid
130
131 C !OUTPUT PARAMETERS:
132 C qtmp :: time-averaged (or snap-shot) diagnostic field
133 _RL qtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,*)
134 CEOP
135
136 C !LOCAL VARIABLES:
137 _RL factor
138 INTEGER i, j, ipnt, ipCt
139 INTEGER k, kd, km, kLev
140
141 IF (ndId.GE.1) THEN
142 kLev = kdiag(ndId)
143 IF ( kl.GE.1 .AND. kl.LE.kLev ) THEN
144 kLev = 1
145 ELSEIF ( kl.NE.0 ) THEN
146 kLev = 0
147 ENDIF
148
149 DO k = 1,kLev
150 kd = k
151 IF ( kl.GE.1 ) kd = kl
152
153 IF ( mate.EQ.0 ) THEN
154 C- No counter diagnostics => average = Sum / ndiag :
155
156 ipnt = ip + kd - 1
157 factor = FLOAT(ndiag(ip,bi,bj))
158 IF (ndiag(ip,bi,bj).NE.0) factor = 1. _d 0 / factor
159
160 #ifdef ALLOW_FIZHI
161 DO j = 1,sNy+1
162 DO i = 1,sNx+1
163 IF ( qdiag(i,j,ipnt,bi,bj) .LE. undefRL ) THEN
164 qtmp(i,j,k) = qdiag(i,j,ipnt,bi,bj)*factor
165 ELSE
166 qtmp(i,j,k) = undefRL
167 ENDIF
168 ENDDO
169 ENDDO
170 #else /* ALLOW_FIZHI */
171 DO j = 1,sNy+1
172 DO i = 1,sNx+1
173 qtmp(i,j,k) = qdiag(i,j,ipnt,bi,bj)*factor
174 ENDDO
175 ENDDO
176 #endif /* ALLOW_FIZHI */
177
178 ELSE
179 C- With counter diagnostics => average = Sum / counter:
180
181 ipnt = ip + kd - 1
182 km = MIN(kd,kdiag(mate))
183 ipCt = im + km - 1
184 DO j = 1,sNy+1
185 DO i = 1,sNx+1
186 IF ( qdiag(i,j,ipCt,bi,bj) .NE. 0. ) THEN
187 qtmp(i,j,k) = qdiag(i,j,ipnt,bi,bj)
188 & / qdiag(i,j,ipCt,bi,bj)
189 ELSE
190 qtmp(i,j,k) = undefRL
191 ENDIF
192 ENDDO
193 ENDDO
194
195 ENDIF
196 ENDDO
197 ENDIF
198
199 RETURN
200 END
201
202 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
203
204 CBOP 0
205 C !ROUTINE: DIAGNOSTICS_GET_POINTERS
206 C !INTERFACE:
207 SUBROUTINE DIAGNOSTICS_GET_POINTERS(
208 I diagName, listId,
209 O ndId, ip,
210 I myThid )
211
212 C !DESCRIPTION:
213 C *================================================================*
214 C | o Returns the diagnostic Id number and diagnostic
215 C | pointer to storage array for a specified diagnostic.
216 C *================================================================*
217 C | Note: A diagnostics field can be stored multiple times
218 C | (for different output frequency,phase, ...).
219 C | operates in 2 ways:
220 C | o listId =0 => find 1 diagnostics Id & pointer which name matches.
221 C | o listId >0 => find the unique diagnostic Id & pointer with
222 C | the right name and same output time as "listId" output-list
223 C | o return ip=0 if did not find the right diagnostic;
224 C | (ndId <>0 if diagnostic exist but output time does not match)
225 C *================================================================*
226
227 C !USES:
228 IMPLICIT NONE
229 #include "EEPARAMS.h"
230 #include "SIZE.h"
231 #include "DIAGNOSTICS_SIZE.h"
232 #include "DIAGNOSTICS.h"
233
234 C !INPUT PARAMETERS:
235 C diagName :: diagnostic identificator name (8 characters long)
236 C listId :: list number that specify the output frequency
237 C myThid :: my Thread Id number
238 C !OUTPUT PARAMETERS:
239 C ndId :: diagnostics Id number (in available diagnostics list)
240 C ip :: diagnostics pointer to storage array
241
242 CHARACTER*8 diagName
243 INTEGER listId
244 INTEGER ndId, ip
245 INTEGER myThid
246 CEOP
247
248 C !LOCAL VARIABLES:
249 INTEGER n,m
250
251 ip = 0
252 ndId = 0
253
254 IF ( listId.LE.0 ) THEN
255 C-- select the 1rst one which name matches:
256
257 C- search for this diag. in the active 2D/3D diagnostics list
258 DO n=1,nLists
259 DO m=1,nActive(n)
260 IF ( ip.EQ.0 .AND. diagName.EQ.flds(m,n)
261 & .AND. idiag(m,n).NE.0 ) THEN
262 ip = ABS(idiag(m,n))
263 ndId = ABS(jdiag(m,n))
264 ENDIF
265 ENDDO
266 ENDDO
267
268 ELSEIF ( listId.LE.nLists ) THEN
269 C-- select the unique diagnostic with output-time identical to listId
270
271 C- search for this diag. in the active 2D/3D diagnostics list
272 DO n=1,nLists
273 IF ( ip.EQ.0
274 & .AND. freq(n) .EQ. freq(listId)
275 & .AND. phase(n).EQ.phase(listId)
276 & .AND. averageFreq(n) .EQ.averageFreq(listId)
277 & .AND. averagePhase(n).EQ.averagePhase(listId)
278 & .AND. averageCycle(n).EQ.averageCycle(listId)
279 & ) THEN
280 DO m=1,nActive(n)
281 IF ( ip.EQ.0 .AND. diagName.EQ.flds(m,n)
282 & .AND. idiag(m,n).NE.0 ) THEN
283 ip = ABS(idiag(m,n))
284 ndId = ABS(jdiag(m,n))
285 ENDIF
286 ENDDO
287 ELSEIF ( ip.EQ.0 ) THEN
288 DO m=1,nActive(n)
289 IF ( ip.EQ.0 .AND. diagName.EQ.flds(m,n)
290 & .AND. idiag(m,n).NE.0 ) THEN
291 ndId = ABS(jdiag(m,n))
292 ENDIF
293 ENDDO
294 ENDIF
295 ENDDO
296
297 ELSE
298 STOP 'DIAGNOSTICS_GET_POINTERS: invalid listId number'
299 ENDIF
300
301 RETURN
302 END
303
304 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
305
306 CBOP 0
307 C !ROUTINE: DIAGNOSTICS_SETKLEV
308
309 C !INTERFACE:
310 SUBROUTINE DIAGNOSTICS_SETKLEV(
311 I diagName, nLevDiag, myThid )
312
313 C !DESCRIPTION:
314 C *==========================================================*
315 C | S/R DIAGNOSTICS_SETKLEV
316 C | o Define explicitly the number of level (stored in kdiag)
317 C | of a diagnostic field. For most diagnostics, the number
318 C | of levels is derived (in S/R SET_LEVELS) from gdiag(10)
319 C | but occasionally one may want to set it explicitly.
320 C *==========================================================*
321
322 C !USES:
323 IMPLICIT NONE
324 #include "EEPARAMS.h"
325 #include "SIZE.h"
326 #include "DIAGNOSTICS_SIZE.h"
327 #include "DIAGNOSTICS.h"
328
329 C !INPUT PARAMETERS:
330 C diagName :: diagnostic identificator name (8 characters long)
331 C nLevDiag :: number of level to set for this diagnostics field
332 C myThid :: my Thread Id number
333 CHARACTER*8 diagName
334 INTEGER nLevDiag
335 INTEGER myThid
336 CEOP
337
338 C !LOCAL VARIABLES:
339 CHARACTER*(MAX_LEN_MBUF) msgBuf
340 INTEGER n, ndId
341
342 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
343
344 _BEGIN_MASTER( myThid)
345
346 C-- Check if this S/R is called from the right place ;
347 C needs to be after DIAGNOSTICS_INIT_EARLY and before DIAGNOSTICS_INIT_FIXED
348 IF ( diag_pkgStatus.NE.ready2setDiags ) THEN
349 CALL DIAGNOSTICS_STATUS_ERROR( 'DIAGNOSTICS_SETKLEV',
350 & ' ', diagName, ready2setDiags, myThid )
351 ENDIF
352
353 C-- Find this diagnostics in the list of available diag.
354 ndId = 0
355 DO n = 1,ndiagt
356 IF ( diagName.EQ.cdiag(n) ) THEN
357 ndId = n
358 ENDIF
359 ENDDO
360 IF ( ndId.EQ.0 ) THEN
361 WRITE(msgBuf,'(4A)') 'DIAGNOSTICS_SETKLEV: ',
362 & 'diagName="', diagName, '" not known.'
363 CALL PRINT_ERROR( msgBuf, myThid )
364 STOP 'ABNORMAL END: S/R DIAGNOSTICS_SETKLEV'
365 ENDIF
366
367 C- Optional level number diagnostics (X): set number of levels
368 IF ( kdiag(ndId).EQ.0
369 & .AND. gdiag(ndId)(10:10).EQ.'X' ) THEN
370 kdiag(ndId) = nLevDiag
371 ELSEIF ( kdiag(ndId).EQ.nLevDiag
372 & .AND. gdiag(ndId)(10:10).EQ.'X' ) THEN
373 C- level number already set to same value: send warning
374 WRITE(msgBuf,'(4A,I5)') '** WARNING ** DIAGNOSTICS_SETKLEV: ',
375 & 'diagName="', diagName, '" , nLevDiag=', nLevDiag
376 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
377 & SQUEEZE_RIGHT , myThid )
378 WRITE(msgBuf,'(2A,I5,A)')'** WARNING ** DIAGNOSTICS_SETKLEV:',
379 & ' level Nb (=', kdiag(ndId), ') already set.'
380 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
381 & SQUEEZE_RIGHT , myThid )
382 ELSEIF ( gdiag(ndId)(10:10).EQ.'X' ) THEN
383 C- level number already set to a different value: do not reset but stop
384 WRITE(msgBuf,'(4A,I5)') 'DIAGNOSTICS_SETKLEV: ',
385 & 'diagName="', diagName, '" , nLevDiag=', nLevDiag
386 CALL PRINT_ERROR( msgBuf, myThid )
387 WRITE(msgBuf,'(2A,I5,3A)') 'DIAGNOSTICS_SETKLEV: ',
388 & 'level Nb already set to', kdiag(ndId), ' => STOP'
389 CALL PRINT_ERROR( msgBuf, myThid )
390 ELSE
391 C- for now, do nothing but just send a warning
392 WRITE(msgBuf,'(4A,I5)') '** WARNING ** DIAGNOSTICS_SETKLEV: ',
393 & 'diagName="', diagName, '" , nLevDiag=', nLevDiag
394 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
395 & SQUEEZE_RIGHT , myThid )
396 WRITE(msgBuf,'(2A,I5,3A)') '** WARNING ** will set level Nb',
397 & ' from diagCode(ndId=', ndId, ')="', gdiag(ndId)(1:10), '"'
398 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
399 & SQUEEZE_RIGHT , myThid )
400 WRITE(msgBuf,'(4A)') '** WARNING ** DIAGNOSTICS_SETKLEV',
401 & '("', diagName, '") <== Ignore this call.'
402 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
403 & SQUEEZE_RIGHT , myThid )
404 ENDIF
405
406 _END_MASTER( myThid)
407
408 RETURN
409 END
410
411 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
412
413 CBOP 0
414 C !ROUTINE: DIAGS_GET_PARMS_I
415
416 C !INTERFACE:
417 INTEGER FUNCTION DIAGS_GET_PARMS_I(
418 I parName, myThid )
419
420 C !DESCRIPTION:
421 C *==========================================================*
422 C | FUNCTION DIAGS_GET_PARMS_I
423 C | o Return the value of integer parameter
424 C | from one of the DIAGNOSTICS.h common blocs
425 C *==========================================================*
426
427 C !USES:
428 IMPLICIT NONE
429 #include "EEPARAMS.h"
430 #include "SIZE.h"
431 #include "DIAGNOSTICS_SIZE.h"
432 #include "DIAGNOSTICS.h"
433
434 C !INPUT PARAMETERS:
435 C parName :: string used to identify which parameter to get
436 C myThid :: my Thread Id number
437 CHARACTER*(*) parName
438 INTEGER myThid
439 CEOP
440
441 C !LOCAL VARIABLES:
442 CHARACTER*(MAX_LEN_MBUF) msgBuf
443 INTEGER n
444
445 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
446
447 n = LEN(parName)
448 c write(0,'(3A,I4)')
449 c & 'DIAGS_GET_PARMS_I: parName="',parName,'" , length=',n
450
451 IF ( parName.EQ.'LAST_DIAG_ID' ) THEN
452 DIAGS_GET_PARMS_I = ndiagt
453 ELSE
454 WRITE(msgBuf,'(4A)') 'DIAGS_GET_PARMS_I: ',
455 & ' parName="', parName, '" not known.'
456 CALL PRINT_ERROR( msgBuf, myThid )
457 STOP 'ABNORMAL END: S/R DIAGS_GET_PARMS_I'
458 ENDIF
459
460 RETURN
461 END
462
463 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
464
465 CBOP 0
466 C !ROUTINE: DIAGS_MK_UNITS
467
468 C !INTERFACE:
469 CHARACTER*16 FUNCTION DIAGS_MK_UNITS(
470 I diagUnitsInPieces, myThid )
471
472 C !DESCRIPTION:
473 C *==========================================================*
474 C | FUNCTION DIAGS_MK_UNITS
475 C | o Return the diagnostic units string (16c) removing
476 C | blanks from the input string
477 C *==========================================================*
478
479 C !USES:
480 IMPLICIT NONE
481 #include "EEPARAMS.h"
482
483 C !INPUT PARAMETERS:
484 C diagUnitsInPieces :: string for diagnostic units: in several
485 C pieces, with blanks in between
486 C myThid :: my thread Id number
487 CHARACTER*(*) diagUnitsInPieces
488 INTEGER myThid
489 CEOP
490
491 C !LOCAL VARIABLES:
492 CHARACTER*(MAX_LEN_MBUF) msgBuf
493 INTEGER i,j,n,nbc
494
495 DIAGS_MK_UNITS = ' '
496 n = LEN(diagUnitsInPieces)
497
498 j = 0
499 DO i=1,n
500 IF (diagUnitsInPieces(i:i) .NE. ' ' ) THEN
501 j = j+1
502 IF ( j.LE.16 ) DIAGS_MK_UNITS(j:j) = diagUnitsInPieces(i:i)
503 ENDIF
504 ENDDO
505 nbc = j
506
507 IF ( nbc.GT.16 ) THEN
508 C- try to reduce length by changing m^2 & m^3 to m2 & m3:
509 DIAGS_MK_UNITS = ' '
510 j = 0
511 DO i=1,n
512 IF ( diagUnitsInPieces(i:i) .NE. ' ' ) THEN
513 IF ( j.GE.1 .AND. nbc.GT.16 .AND.
514 & diagUnitsInPieces(i:i).EQ.'^' ) THEN
515 IF ( diagUnitsInPieces(i-1:i-1).EQ.'m' ) THEN
516 nbc = nbc - 1
517 ELSE
518 j = j+1
519 IF ( j.LE.16 ) DIAGS_MK_UNITS(j:j) = diagUnitsInPieces(i:i)
520 ENDIF
521 ELSE
522 j = j+1
523 IF ( j.LE.16 ) DIAGS_MK_UNITS(j:j) = diagUnitsInPieces(i:i)
524 ENDIF
525 ENDIF
526 ENDDO
527 ENDIF
528
529 IF ( j.GT.16 ) THEN
530 WRITE(msgBuf,'(2A,I4,A)') '** WARNING ** ',
531 & 'DIAGS_MK_UNITS: too long (',j,' >16) input string'
532 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
533 & SQUEEZE_RIGHT , myThid)
534 WRITE(msgBuf,'(3A)') '** WARNING ** ',
535 & 'DIAGS_MK_UNITS: input=', diagUnitsInPieces
536 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
537 & SQUEEZE_RIGHT , myThid)
538 ENDIF
539
540 RETURN
541 END
542
543 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
544
545 CBOP 0
546 C !ROUTINE: DIAGS_MK_TITLE
547
548 C !INTERFACE:
549 CHARACTER*80 FUNCTION DIAGS_MK_TITLE(
550 I diagTitleInPieces, myThid )
551
552 C !DESCRIPTION:
553 C *==========================================================*
554 C | FUNCTION DIAGS_MK_TITLE
555 C | o Return the diagnostic title string (80c) removing
556 C | consecutive blanks from the input string
557 C *==========================================================*
558
559 C !USES:
560 IMPLICIT NONE
561 #include "EEPARAMS.h"
562
563 C !INPUT PARAMETERS:
564 C diagTitleInPieces :: string for diagnostic units: in several
565 C pieces, with blanks in between
566 C myThid :: my Thread Id number
567 CHARACTER*(*) diagTitleInPieces
568 INTEGER myThid
569 CEOP
570
571 C !LOCAL VARIABLES:
572 CHARACTER*(MAX_LEN_MBUF) msgBuf
573 LOGICAL flag
574 INTEGER i,j,n
575
576 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
577
578 DIAGS_MK_TITLE = ' '
579 & //' '
580 n = LEN(diagTitleInPieces)
581
582 j = 0
583 flag = .FALSE.
584 DO i=1,n
585 IF (diagTitleInPieces(i:i) .NE. ' ' ) THEN
586 IF ( flag ) THEN
587 j = j+1
588 IF (j.LE.80) DIAGS_MK_TITLE(j:j) = ' '
589 ENDIF
590 j = j+1
591 IF ( j.LE.80 ) DIAGS_MK_TITLE(j:j) = diagTitleInPieces(i:i)
592 flag = .FALSE.
593 ELSE
594 flag = j.GE.1
595 ENDIF
596 ENDDO
597
598 IF ( j.GT.80 ) THEN
599 WRITE(msgBuf,'(2A,I4,A)') '** WARNING ** ',
600 & 'DIAGS_MK_TITLE: too long (',j,' >80) input string'
601 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
602 & SQUEEZE_RIGHT , myThid)
603 WRITE(msgBuf,'(3A)') '** WARNING ** ',
604 & 'DIAGS_MK_TITLE: input=', diagTitleInPieces
605 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
606 & SQUEEZE_RIGHT , myThid)
607 ENDIF
608
609 RETURN
610 END
611
612 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
613
614 CBOP 0
615 C !ROUTINE: DIAGS_RENAMED
616
617 C !INTERFACE:
618 CHARACTER*8 FUNCTION DIAGS_RENAMED(
619 I diagName, myThid )
620
621 C !DESCRIPTION:
622 C *==========================================================*
623 C | FUNCTION DIAGS_RENAMED
624 C | o In case of an old diagnostics name,
625 C | provides the corresponding new name
626 C *==========================================================*
627
628 C !USES:
629 IMPLICIT NONE
630 #include "EEPARAMS.h"
631 #include "SIZE.h"
632 #include "PARAMS.h"
633 #include "DIAGNOSTICS_SIZE.h"
634 #include "DIAGNOSTICS.h"
635
636 C !INPUT PARAMETERS:
637 C diagName :: name of diagnostic to rename (or not)
638 C myThid :: my Thread Id number
639 CHARACTER*8 diagName
640 INTEGER myThid
641 CEOP
642
643 C !LOCAL VARIABLES:
644 CHARACTER*8 newName
645 CHARACTER*(MAX_LEN_MBUF) msgBuf
646
647 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
648
649 newName = blkName
650
651 IF ( useSEAICE ) THEN
652 IF ( diagName .EQ. 'SIfu ' ) newName = 'oceTAUX '
653 IF ( diagName .EQ. 'SIfv ' ) newName = 'oceTAUY '
654 IF ( diagName .EQ. 'SIuwind ' ) newName = 'EXFuwind'
655 IF ( diagName .EQ. 'SIvwind ' ) newName = 'EXFvwind'
656 IF ( diagName .EQ. 'SIsigI ' ) newName = 'SIsig1 '
657 IF ( diagName .EQ. 'SIsigII ' ) newName = 'SIsig2 '
658 ENDIF
659
660 IF ( newName.EQ.blkName ) THEN
661 DIAGS_RENAMED = diagName
662 ELSE
663 DIAGS_RENAMED = newName
664 WRITE(msgBuf,'(6A)') '** WARNING ** (DIAGS_RENAMED):',
665 & ' diagnostics "', diagName, '" replaced by "', newName, '"'
666 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
667 & SQUEEZE_RIGHT , myThid )
668 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
669 & SQUEEZE_RIGHT , myThid )
670 ENDIF
671
672 RETURN
673 END

  ViewVC Help
Powered by ViewVC 1.1.22