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

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

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


Revision 1.1 - (show annotations) (download)
Mon Dec 13 21:43:54 2004 UTC (19 years, 5 months ago) by jmc
Branch: MAIN
re-arrange diagnostics pkg initialization:
 allow each package to extend the available diagnostics list
 add some checking and fix small problems (multi-threaded, ...)

1 C $Header: $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: DIAGNOSTICS_SET_POINTERS
8 C !INTERFACE:
9 SUBROUTINE DIAGNOSTICS_SET_POINTERS( myThid )
10
11 C !DESCRIPTION: \bv
12 C *==================================================================
13 C | S/R DIAGNOSTICS_SET_POINTERS
14 C | o set pointers for active diagnostics
15 C *==================================================================
16 C \ev
17
18 C !USES:
19 IMPLICIT NONE
20
21 C == Global variables ===
22 #include "EEPARAMS.h"
23 #include "SIZE.h"
24 #include "DIAGNOSTICS_SIZE.h"
25 #include "DIAGNOSTICS.h"
26
27 C !INPUT/OUTPUT PARAMETERS:
28 C == Routine arguments ==
29 C myThid - Thread number for this instance of the routine.
30 INTEGER myThid
31 CEOP
32
33 C !LOCAL VARIABLES:
34 C == Local variables ==
35 INTEGER ndiagcount
36 INTEGER m,mm,n
37 INTEGER mate, nActiveMax
38 LOGICAL found
39 CHARACTER*(MAX_LEN_MBUF) msgBuf
40
41 C-- Calculate pointers for diagnostics set to non-zero frequency
42
43 _BEGIN_MASTER( myThid)
44
45 ndiagcount = 0
46 nActiveMax = 0
47 DO n=1,nlists
48 nActive(n) = nfields(n)
49 DO m=1,nfields(n)
50
51 found = .FALSE.
52 C Search all possible model diagnostics
53 DO mm=1,ndiagt
54 IF ( flds(m,n).EQ.cdiag(mm) ) THEN
55 CALL DIAGNOSTICS_SETDIAG (mate,ndiagcount,mm,myThid)
56 found = .TRUE.
57 jdiag(m,n) = mm
58 ENDIF
59 ENDDO
60 IF ( .NOT.found ) THEN
61 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_SET_POINTERS: ',
62 & flds(m,n),' is not a Diagnostic'
63 CALL PRINT_ERROR( msgBuf , myThid )
64 STOP 'ABNORMAL END: S/R DIAGNOSTICS_SET_POINTERS'
65 ENDIF
66 IF ( found .AND. mate.GE.1 ) THEN
67 nActive(n) = nActive(n) + 1
68 IF ( nActive(n).LE.numperlist ) THEN
69 jdiag(nActive(n),n) = mate
70 flds( nActive(n),n) = cdiag(mate)
71 ENDIF
72 ENDIF
73
74 ENDDO
75 nActiveMax = MAX(nActive(n),nActiveMax)
76 ENDDO
77
78 IF ( ndiagcount.LE.numdiags .AND.
79 & nActiveMax.LE.numperlist ) THEN
80 WRITE(msgBuf,'(2A,I6,A)')
81 & 'DIAGNOSTICS_SET_POINTERS: ',
82 & 'space allocated for all diagnostics:',
83 & ndiagcount, ' levels'
84 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
85 & SQUEEZE_RIGHT , myThid)
86 ELSE
87 IF ( ndiagcount.GT.numdiags ) THEN
88 WRITE(msgBuf,'(2A)')
89 & 'DIAGNOSTICS_SET_POINTERS: Not enough space',
90 & ' for all active diagnostics (from data.diagnostics)'
91 CALL PRINT_ERROR( msgBuf , myThid )
92 WRITE(msgBuf,'(A,I6,A,I6)')
93 & 'DIAGNOSTICS_SET_POINTERS: numdiags=', numdiags,
94 & ' but needs at least', ndiagcount
95 CALL PRINT_ERROR( msgBuf , myThid )
96 ENDIF
97 IF ( nActiveMax.GT.numperlist ) THEN
98 WRITE(msgBuf,'(2A)')
99 & 'DIAGNOSTICS_SET_POINTERS: Not enough space',
100 & ' for all active diagnostics (from data.diagnostics)'
101 CALL PRINT_ERROR( msgBuf , myThid )
102 WRITE(msgBuf,'(A,I6,A,I6)')
103 & 'DIAGNOSTICS_SET_POINTERS: numperlist=', numperlist,
104 & ' but needs at least', nActiveMax
105 CALL PRINT_ERROR( msgBuf , myThid )
106 ENDIF
107 STOP 'ABNORMAL END: S/R DIAGNOSTICS_SET_POINTERS'
108 ENDIF
109
110 _END_MASTER( myThid )
111
112 RETURN
113 END

  ViewVC Help
Powered by ViewVC 1.1.22