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

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

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


Revision 1.2 - (show annotations) (download)
Sun Jun 26 16:51:49 2005 UTC (18 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57t_post, checkpoint57o_post, checkpoint57m_post, checkpoint57s_post, checkpoint57k_post, checkpoint57y_post, checkpoint57y_pre, checkpoint57v_post, checkpoint57r_post, checkpoint58, checkpoint57x_post, checkpoint57n_post, checkpoint57w_post, checkpoint57p_post, checkpint57u_post, checkpoint57q_post, checkpoint57z_post, checkpoint57j_post, checkpoint57l_post
Changes since 1.1: +34 -28 lines
change pointers so that 1 diag. can be used several times (with # freq.)

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagstats_set_pointers.F,v 1.1 2005/05/20 07:28:52 jmc Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: DIAGSTATS_SET_POINTERS
8 C !INTERFACE:
9 SUBROUTINE DIAGSTATS_SET_POINTERS( myThid )
10
11 C !DESCRIPTION: \bv
12 C *==================================================================
13 C | S/R DIAGSTATS_SET_POINTERS
14 C | o set pointers for active statistics 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 md,ld,nd
37 INTEGER mm, mate, nActiveMax
38 INTEGER j, k, l
39 LOGICAL found, addMate2List, inList
40 CHARACTER*(MAX_LEN_MBUF) msgBuf
41
42
43 _BEGIN_MASTER( myThid)
44
45 C-- Initialize pointer arrays to zero:
46 DO ld=1,numlists
47 DO md=1,numperlist
48 iSdiag(md,ld) = 0
49 jSdiag(md,ld) = 0
50 mSdiag(md,ld) = 0
51 ENDDO
52 ENDDO
53
54 C-- Calculate pointers for diagnostics set to non-zero frequency
55
56 ndiagcount = 0
57 nActiveMax = 0
58 DO ld=1,diagSt_nbLists
59 diagSt_nbActv(ld) = diagSt_nbFlds(ld)
60 DO md=1,diagSt_nbFlds(ld)
61
62 found = .FALSE.
63 C Search all possible model diagnostics
64 DO nd=1,ndiagt
65 IF ( diagSt_Flds(md,ld).EQ.cdiag(nd) ) THEN
66 CALL DIAGSTATS_SETDIAG(mate,ndiagcount,md,ld,nd,myThid)
67 found = .TRUE.
68 jSdiag(md,ld) = nd
69 ENDIF
70 ENDDO
71 IF ( .NOT.found ) THEN
72 WRITE(msgBuf,'(3A)') 'DIAGSTATS_SET_POINTERS: ',
73 & diagSt_Flds(md,ld),' is not a Diagnostic'
74 CALL PRINT_ERROR( msgBuf , myThid )
75 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_POINTERS'
76 ENDIF
77 IF ( found .AND. mate.LE.-1 ) THEN
78 C- add this fields to the active list in case regions are differents:
79 addMate2List = .FALSE.
80 DO l=1,ld-1
81 inList = .FALSE.
82 DO k=1,diagSt_nbActv(l)
83 IF ( diagSt_Flds(k,l).EQ.cdiag(-mate) ) inList=.TRUE.
84 ENDDO
85 IF ( inList ) THEN
86 DO j=0,nRegions
87 addMate2List = addMate2List
88 & .OR. (diagSt_region(j,l).LT.diagSt_region(j,ld))
89 ENDDO
90 ENDIF
91 ENDDO
92 IF ( .NOT.addMate2List ) mate = 0
93 ENDIF
94 IF ( found .AND. mate.NE.0 ) THEN
95 mm = diagSt_nbActv(ld) + 1
96 IF ( mm.LE.numperlist ) THEN
97 iSdiag(mm,ld) = SIGN(mSdiag(md,ld),mate)
98 mate = ABS(mate)
99 jSdiag(mm,ld) = mate
100 diagSt_Flds(mm,ld) = cdiag(mate)
101 ENDIF
102 diagSt_nbActv(ld) = mm
103 ENDIF
104
105 ENDDO
106 nActiveMax = MAX(diagSt_nbActv(ld),nActiveMax)
107 ENDDO
108
109 IF ( ndiagcount.LE.diagSt_size .AND.
110 & nActiveMax.LE.numperlist ) THEN
111 WRITE(msgBuf,'(A,I6,A)')
112 & ' space allocated for all stats-diags:',
113 & ndiagcount, ' levels'
114 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
115 & SQUEEZE_RIGHT , myThid)
116 ELSE
117 IF ( ndiagcount.GT.diagSt_size ) THEN
118 WRITE(msgBuf,'(2A)')
119 & 'DIAGSTATS_SET_POINTERS: Not enough space',
120 & ' for all active stats-diags (from data.diagnostics)'
121 CALL PRINT_ERROR( msgBuf , myThid )
122 WRITE(msgBuf,'(A,I6,A,I6)')
123 & 'DIAGSTATS_SET_POINTERS: diagSt_size=', diagSt_size,
124 & ' but needs at least', ndiagcount
125 CALL PRINT_ERROR( msgBuf , myThid )
126 ENDIF
127 IF ( nActiveMax.GT.numperlist ) THEN
128 WRITE(msgBuf,'(2A)')
129 & 'DIAGSTATS_SET_POINTERS: Not enough space',
130 & ' for all active stats-diags (from data.diagnostics)'
131 CALL PRINT_ERROR( msgBuf , myThid )
132 WRITE(msgBuf,'(A,I6,A,I6)')
133 & 'DIAGSTATS_SET_POINTERS: numperlist=', numperlist,
134 & ' but needs at least', nActiveMax
135 CALL PRINT_ERROR( msgBuf , myThid )
136 ENDIF
137 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_POINTERS'
138 ENDIF
139
140 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
141 C-- Set list of regions to write
142 C- Need to check that all selected regions are actually defined
143
144 WRITE(msgBuf,'(A)') 'DIAGSTATS_SET_POINTERS: done'
145 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
146 & SQUEEZE_RIGHT , myThid)
147 WRITE(msgBuf,'(2A)')
148 & '------------------------------------------------------------'
149 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
150 & SQUEEZE_RIGHT , myThid)
151
152 _END_MASTER( myThid )
153
154 RETURN
155 END

  ViewVC Help
Powered by ViewVC 1.1.22