58 |
C nLevOutp :: number of levels to write in output file |
C nLevOutp :: number of levels to write in output file |
59 |
C |
C |
60 |
C-- COMMON /LOCAL_DIAGNOSTICS_OUT/ local common block (for multi-threaded) |
C-- COMMON /LOCAL_DIAGNOSTICS_OUT/ local common block (for multi-threaded) |
61 |
C qtmp1 :: thread-shared temporary array (needs to be in common block): |
C qtmp1 :: temporary array; used to store a copy of diag. output field. |
62 |
C to write a diagnostic field to file, copy it first from (big) |
C qtmp2 :: temporary array; used to store a copy of a 2nd diag. field. |
63 |
C diagnostic storage qdiag into it. |
C- Note: local common block no longer needed. |
64 |
COMMON /LOCAL_DIAGNOSTICS_OUT/ qtmp1 |
c COMMON /LOCAL_DIAGNOSTICS_OUT/ qtmp1 |
65 |
_RL qtmp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy) |
_RL qtmp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy) |
66 |
|
_RL qtmp2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy) |
67 |
|
|
68 |
INTEGER i, j, k, lm |
INTEGER i, j, k, lm |
69 |
INTEGER bi, bj |
INTEGER bi, bj |
70 |
INTEGER md, ndId, ip, im |
INTEGER md, ndId, ip, im |
71 |
INTEGER mate, mVec |
INTEGER mate, mVec |
72 |
CHARACTER*10 gcode |
CHARACTER*10 gcode |
73 |
_RL undef |
_RL undefRL |
74 |
_RL tmpLev |
INTEGER nLevOutp, kLev |
|
INTEGER iLen |
|
|
INTEGER nLevOutp |
|
75 |
|
|
76 |
|
INTEGER iLen |
77 |
INTEGER ioUnit |
INTEGER ioUnit |
78 |
CHARACTER*(MAX_LEN_FNAM) fn |
CHARACTER*(MAX_LEN_FNAM) fn |
79 |
CHARACTER*(MAX_LEN_MBUF) suff |
CHARACTER*(MAX_LEN_MBUF) suff |
80 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
81 |
INTEGER prec, nRec, nTimRec |
INTEGER prec, nRec, nTimRec |
82 |
_RL timeRec(2) |
_RL timeRec(2) |
83 |
|
_RL tmpLoc |
84 |
#ifdef ALLOW_MDSIO |
#ifdef ALLOW_MDSIO |
85 |
LOGICAL glf |
LOGICAL glf |
86 |
#endif |
#endif |
95 |
|
|
96 |
C--- set file properties |
C--- set file properties |
97 |
ioUnit= standardMessageUnit |
ioUnit= standardMessageUnit |
98 |
undef = UNSET_RL |
undefRL = UNSET_RL |
99 |
#ifdef ALLOW_FIZHI |
#ifdef ALLOW_FIZHI |
100 |
IF ( useFIZHI ) undef = getcon('UNDEF') |
IF ( useFIZHI ) undefRL = getcon('UNDEF') |
101 |
#endif |
#endif |
102 |
WRITE(suff,'(I10.10)') myIter |
WRITE(suff,'(I10.10)') myIter |
103 |
iLen = ILNBLNK(fnames(listId)) |
iLen = ILNBLNK(fnames(listId)) |
127 |
timeRec(1) = (timeRec(1)-phase(listId))/freq(listId) |
timeRec(1) = (timeRec(1)-phase(listId))/freq(listId) |
128 |
i = INT( timeRec(1) ) |
i = INT( timeRec(1) ) |
129 |
IF ( timeRec(1).LT.0. ) THEN |
IF ( timeRec(1).LT.0. ) THEN |
130 |
tmpLev = FLOAT(i) |
tmpLoc = FLOAT(i) |
131 |
IF ( timeRec(1).NE.tmpLev ) i = i - 1 |
IF ( timeRec(1).NE.tmpLoc ) i = i - 1 |
132 |
ENDIF |
ENDIF |
133 |
timeRec(1) = phase(listId) + freq(listId)*FLOAT(i) |
timeRec(1) = phase(listId) + freq(listId)*FLOAT(i) |
134 |
c if ( listId.eq.2 ) write(0,*) 'f',i,timeRec(1)/deltaTClock |
c if ( listId.eq.2 ) write(0,*) 'f',i,timeRec(1)/deltaTClock |
138 |
timeRec(1) = (timeRec(1)-baseTime)/deltaTClock |
timeRec(1) = (timeRec(1)-baseTime)/deltaTClock |
139 |
i = NINT( timeRec(1) ) |
i = NINT( timeRec(1) ) |
140 |
C if just half way, NINT will return the next time-step: correct this |
C if just half way, NINT will return the next time-step: correct this |
141 |
tmpLev = FLOAT(i) - 0.5 _d 0 |
tmpLoc = FLOAT(i) - 0.5 _d 0 |
142 |
IF ( timeRec(1).EQ.tmpLev ) i = i - 1 |
IF ( timeRec(1).EQ.tmpLoc ) i = i - 1 |
143 |
timeRec(1) = baseTime + deltaTClock*FLOAT(i) |
timeRec(1) = baseTime + deltaTClock*FLOAT(i) |
144 |
c if ( listId.eq.2 ) write(0,*) i,timeRec(1)/deltaTClock |
c if ( listId.eq.2 ) write(0,*) i,timeRec(1)/deltaTClock |
145 |
ENDIF |
ENDIF |
162 |
DO jj=1,jjMx |
DO jj=1,jjMx |
163 |
|
|
164 |
IF (useMNC .AND. diag_mnc) THEN |
IF (useMNC .AND. diag_mnc) THEN |
165 |
misValLoc = undef |
misValLoc = undefRL |
166 |
IF ( misvalFlt(listId).NE.UNSET_RL ) |
IF ( misvalFlt(listId).NE.UNSET_RL ) |
167 |
& misValLoc = misvalFlt(listId) |
& misValLoc = misvalFlt(listId) |
168 |
CALL DIAGNOSTICS_MNC_SET( |
CALL DIAGNOSTICS_MNC_SET( |
267 |
ENDIF |
ENDIF |
268 |
ENDIF |
ENDIF |
269 |
|
|
270 |
IF ( fflags(listId)(2:2).NE.' ' ) THEN |
IF ( fflags(listId)(2:2).EQ.' ' ) THEN |
271 |
C- get all the levels (for vertical post-processing) |
C- get only selected levels: |
272 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
273 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
274 |
DO k = 1,kdiag(ndId) |
DO k = 1,nlevels(listId) |
275 |
tmpLev = k |
kLev = NINT(levs(k,listId)) |
276 |
CALL GETDIAG( |
CALL DIAGNOSTICS_GET_DIAG( |
277 |
I tmpLev,undef, |
I kLev, undefRL, |
278 |
O qtmp1(1-OLx,1-OLy,k,bi,bj), |
O qtmp1(1-OLx,1-OLy,k,bi,bj), |
279 |
I ndId,mate,ip,im,bi,bj,myThid) |
I ndId,mate,ip,im,bi,bj,myThid) |
280 |
ENDDO |
ENDDO |
281 |
ENDDO |
ENDDO |
282 |
ENDDO |
ENDDO |
283 |
ELSE |
ELSE |
284 |
C- get only selected levels: |
C- get all the levels (for vertical post-processing) |
285 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
286 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
287 |
DO k = 1,nlevels(listId) |
CALL DIAGNOSTICS_GET_DIAG( |
288 |
CALL GETDIAG( |
I 0, undefRL, |
289 |
I levs(k,listId),undef, |
O qtmp1(1-OLx,1-OLy,1,bi,bj), |
|
O qtmp1(1-OLx,1-OLy,k,bi,bj), |
|
290 |
I ndId,mate,ip,im,bi,bj,myThid) |
I ndId,mate,ip,im,bi,bj,myThid) |
|
ENDDO |
|
291 |
ENDDO |
ENDDO |
292 |
ENDDO |
ENDDO |
293 |
ENDIF |
ENDIF |
301 |
C jmc: for now, this can only work in an atmospheric set-up (fluidIsAir); |
C jmc: for now, this can only work in an atmospheric set-up (fluidIsAir); |
302 |
CALL DIAGNOSTICS_INTERP_VERT( |
CALL DIAGNOSTICS_INTERP_VERT( |
303 |
I listId, md, ndId, ip, im, lm, |
I listId, md, ndId, ip, im, lm, |
304 |
U qtmp1, |
U qtmp1, qtmp2, |
305 |
I undef, myTime, myIter, myThid ) |
I undefRL, myTime, myIter, myThid ) |
306 |
ELSE |
ELSE |
307 |
WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_OUT: ', |
WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_OUT: ', |
308 |
& 'INTERP_VERT not allowed in this config' |
& 'INTERP_VERT not allowed in this config' |
315 |
CALL DIAGNOSTICS_SUM_LEVELS( |
CALL DIAGNOSTICS_SUM_LEVELS( |
316 |
I listId, md, ndId, ip, im, lm, |
I listId, md, ndId, ip, im, lm, |
317 |
U qtmp1, |
U qtmp1, |
318 |
I undef, myTime, myIter, myThid ) |
I undefRL, myTime, myIter, myThid ) |
319 |
ENDIF |
ENDIF |
320 |
|
|
321 |
C-- End of empty diag / not-empty diag block |
C-- End of empty diag / not-empty diag block |