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

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

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


Revision 1.1 - (hide annotations) (download)
Mon Dec 13 21:43:54 2004 UTC (19 years, 4 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 jmc 1.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