/[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.2 - (show annotations) (download)
Wed Dec 15 00:18:39 2004 UTC (19 years, 5 months ago) by jmc
Branch: MAIN
Changes since 1.1: +11 -5 lines
write the list of all available diagnostics to an ascii file

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_set_pointers.F,v 1.1 2004/12/13 21:43:54 jmc Exp $
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,'(A)') 'DIAGNOSTICS_SET_POINTERS: done'
81 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
82 & SQUEEZE_RIGHT , myThid)
83 WRITE(msgBuf,'(A,I6,A)')
84 & ' space allocated for all diagnostics:',
85 & ndiagcount, ' levels'
86 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
87 & SQUEEZE_RIGHT , myThid)
88 WRITE(msgBuf,'(2A)')
89 & '------------------------------------------------------------'
90 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
91 & SQUEEZE_RIGHT , myThid)
92 ELSE
93 IF ( ndiagcount.GT.numdiags ) THEN
94 WRITE(msgBuf,'(2A)')
95 & 'DIAGNOSTICS_SET_POINTERS: Not enough space',
96 & ' for all active diagnostics (from data.diagnostics)'
97 CALL PRINT_ERROR( msgBuf , myThid )
98 WRITE(msgBuf,'(A,I6,A,I6)')
99 & 'DIAGNOSTICS_SET_POINTERS: numdiags=', numdiags,
100 & ' but needs at least', ndiagcount
101 CALL PRINT_ERROR( msgBuf , myThid )
102 ENDIF
103 IF ( nActiveMax.GT.numperlist ) THEN
104 WRITE(msgBuf,'(2A)')
105 & 'DIAGNOSTICS_SET_POINTERS: Not enough space',
106 & ' for all active diagnostics (from data.diagnostics)'
107 CALL PRINT_ERROR( msgBuf , myThid )
108 WRITE(msgBuf,'(A,I6,A,I6)')
109 & 'DIAGNOSTICS_SET_POINTERS: numperlist=', numperlist,
110 & ' but needs at least', nActiveMax
111 CALL PRINT_ERROR( msgBuf , myThid )
112 ENDIF
113 STOP 'ABNORMAL END: S/R DIAGNOSTICS_SET_POINTERS'
114 ENDIF
115
116 _END_MASTER( myThid )
117
118 RETURN
119 END

  ViewVC Help
Powered by ViewVC 1.1.22