16 |
C !INTERFACE: |
C !INTERFACE: |
17 |
SUBROUTINE DIAGNOSTICS_MNC_SET( |
SUBROUTINE DIAGNOSTICS_MNC_SET( |
18 |
I nLevOutp, listId, lm, |
I nLevOutp, listId, lm, |
19 |
O diag_mnc_bn, useMissingValue, |
O diag_mnc_bn, missingValFillsMask, |
20 |
I misValLoc, myTime, myIter, myThid ) |
I misValLoc, myTime, myIter, myThid ) |
21 |
|
|
22 |
C !DESCRIPTION: |
C !DESCRIPTION: |
32 |
#include "DIAGNOSTICS.h" |
#include "DIAGNOSTICS.h" |
33 |
|
|
34 |
|
|
35 |
C !INPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
36 |
C nLevOutp :: number of levels to write in output file |
C nLevOutp :: number of levels to write in output file |
37 |
C listId :: Diagnostics list number being written |
C listId :: Diagnostics list number being written |
38 |
C lm :: loop index (averageCycle) |
C lm :: loop index (averageCycle) |
39 |
C myIter :: current iteration number |
C diag_mnc_bn :: NetCDF output file name |
40 |
C myTime :: current time of simulation (s) |
C missingValFillsMask :: fill output-field with Missing-Value where mask=0 |
41 |
C myThid :: my Thread Id number |
C misValLoc :: local Missing Value |
42 |
|
C myTime :: current time of simulation (s) |
43 |
|
C myIter :: current iteration number |
44 |
|
C myThid :: my Thread Id number |
45 |
INTEGER nLevOutp |
INTEGER nLevOutp |
46 |
INTEGER listId, lm |
INTEGER listId, lm |
47 |
CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn |
CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn |
48 |
LOGICAL useMissingValue |
LOGICAL missingValFillsMask |
49 |
REAL*8 misValLoc |
_RL misValLoc |
50 |
_RL myTime |
_RL myTime |
51 |
INTEGER myIter, myThid |
INTEGER myIter, myThid |
52 |
CEOP |
CEOP |
57 |
EXTERNAL ILNBLNK |
EXTERNAL ILNBLNK |
58 |
|
|
59 |
C !LOCAL VARIABLES: |
C !LOCAL VARIABLES: |
|
INTEGER NrMax |
|
|
PARAMETER( NrMax = numLevels ) |
|
|
|
|
60 |
_RL tmpLev |
_RL tmpLev |
61 |
INTEGER iLen |
INTEGER iLen |
62 |
|
|
70 |
c CHARACTER*(NLEN) d_cw_name |
c CHARACTER*(NLEN) d_cw_name |
71 |
c CHARACTER*(NLEN) dn_blnk |
c CHARACTER*(NLEN) dn_blnk |
72 |
#ifdef DIAG_MNC_COORD_NEEDSWORK |
#ifdef DIAG_MNC_COORD_NEEDSWORK |
73 |
|
INTEGER NrMax |
74 |
|
PARAMETER( NrMax = numLevels ) |
75 |
INTEGER i, j |
INTEGER i, j |
76 |
CHARACTER*(5) ctmp |
CHARACTER*(5) ctmp |
77 |
_RS ztmp(NrMax) |
_RS ztmp(NrMax) |
85 |
c IF (useMNC .AND. diag_mnc) THEN |
c IF (useMNC .AND. diag_mnc) THEN |
86 |
|
|
87 |
C Handle missing value attribute (land points) |
C Handle missing value attribute (land points) |
88 |
useMissingValue = .FALSE. |
missingValFillsMask = .FALSE. |
89 |
#ifdef DIAGNOSTICS_MISSING_VALUE |
#ifdef DIAGNOSTICS_MISSING_VALUE |
90 |
useMissingValue = .TRUE. |
missingValFillsMask = .TRUE. |
91 |
#endif /* DIAGNOSTICS_MISSING_VALUE */ |
#endif /* DIAGNOSTICS_MISSING_VALUE */ |
92 |
C Defaults to UNSET_I |
C Defaults to UNSET_I |
93 |
misvalIntLoc = misvalInt(listId) |
misvalIntLoc = misvalInt(listId) |
131 |
& 'Idicies of vertical levels within the source arrays', |
& 'Idicies of vertical levels within the source arrays', |
132 |
& myThid) |
& myThid) |
133 |
C suppress the missing value attribute (iflag = 0) |
C suppress the missing value attribute (iflag = 0) |
134 |
IF (useMissingValue) |
CALL MNC_CW_VATTR_MISSING('diag_levels', 0, |
|
& CALL MNC_CW_VATTR_MISSING('diag_levels', 0, |
|
135 |
I misval_r8, misval_r4, misval_int, myThid ) |
I misval_r8, misval_r4, misval_int, myThid ) |
136 |
|
|
137 |
CALL MNC_CW_RL_W('D',diag_mnc_bn,0,0, |
CALL MNC_CW_RL_W('D',diag_mnc_bn,0,0, |
192 |
& myThid) |
& myThid) |
193 |
ENDIF |
ENDIF |
194 |
C suppress the missing value attribute (iflag = 0) |
C suppress the missing value attribute (iflag = 0) |
195 |
IF (useMissingValue) |
IF (missingValFillsMask) |
196 |
& CALL MNC_CW_VATTR_MISSING(dn(1), 0, |
& CALL MNC_CW_VATTR_MISSING(dn(1), 0, |
197 |
I misval_r8, misval_r4, misval_int, myThid ) |
I misval_r8, misval_r4, misval_int, myThid ) |
198 |
CALL MNC_CW_RS_W('D',diag_mnc_bn,0,0, dn(1), ztmp, myThid) |
CALL MNC_CW_RS_W('D',diag_mnc_bn,0,0, dn(1), ztmp, myThid) |
213 |
|
|
214 |
C !INTERFACE: |
C !INTERFACE: |
215 |
SUBROUTINE DIAGNOSTICS_MNC_OUT( |
SUBROUTINE DIAGNOSTICS_MNC_OUT( |
216 |
I NrMax, nLevOutp, listId, ndId, |
I NrMax, nLevOutp, listId, ndId, mate, |
217 |
I diag_mnc_bn, |
I diag_mnc_bn, |
218 |
I useMissingValue, misValLoc, |
I missingValFillsMask, misValLoc, |
219 |
I qtmp, |
I qtmp, |
220 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
221 |
|
|
232 |
#include "DIAGNOSTICS.h" |
#include "DIAGNOSTICS.h" |
233 |
|
|
234 |
C !INPUT PARAMETERS: |
C !INPUT PARAMETERS: |
235 |
C nLevOutp :: number of levels to write in output file |
C NrMax :: 3rd dimension of output-field array to write |
236 |
C listId :: Diagnostics list number being written |
C nLevOutp :: number of levels to write in output file |
237 |
C ndId :: diagnostics Id number (in available diagnostics list) |
C listId :: Diagnostics list number being written |
238 |
C myTime :: current time of simulation (s) |
C ndId :: diagnostics Id number (in available diagnostics list) |
239 |
C myIter :: current iteration number |
C mate :: counter diagnostic number if any ; 0 otherwise |
240 |
C myThid :: my Thread Id number |
C diag_mnc_bn :: NetCDF output file name |
241 |
|
C missingValFillsMask :: fill output-field with Missing-Value where mask=0 |
242 |
|
C misValLoc :: local Missing Value |
243 |
|
C qtmp :: output-field array to write |
244 |
|
C myTime :: current time of simulation (s) |
245 |
|
C myIter :: current iteration number |
246 |
|
C myThid :: my Thread Id number |
247 |
INTEGER NrMax |
INTEGER NrMax |
248 |
INTEGER nLevOutp |
INTEGER nLevOutp |
249 |
INTEGER listId |
INTEGER listId, ndId, mate |
|
INTEGER ndId |
|
250 |
CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn |
CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn |
251 |
LOGICAL useMissingValue |
LOGICAL missingValFillsMask |
252 |
REAL*8 misValLoc |
_RL misValLoc |
253 |
_RL qtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy) |
_RL qtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy) |
254 |
_RL myTime |
_RL myTime |
255 |
INTEGER myIter, myThid |
INTEGER myIter, myThid |
256 |
CEOP |
CEOP |
257 |
|
|
258 |
|
#ifdef ALLOW_MNC |
259 |
C !FUNCTIONS: |
C !FUNCTIONS: |
260 |
c INTEGER ILNBLNK |
c INTEGER ILNBLNK |
261 |
c EXTERNAL ILNBLNK |
c EXTERNAL ILNBLNK |
267 |
INTEGER bi, bj |
INTEGER bi, bj |
268 |
|
|
269 |
c CHARACTER*(MAX_LEN_MBUF) msgBuf |
c CHARACTER*(MAX_LEN_MBUF) msgBuf |
|
#ifdef ALLOW_MNC |
|
270 |
c INTEGER ll, llMx, jj, jjMx |
c INTEGER ll, llMx, jj, jjMx |
271 |
INTEGER ii, klev |
INTEGER ii, klev |
272 |
INTEGER CW_DIMS, NLEN |
INTEGER CW_DIMS, NLEN |
366 |
CALL MNC_CW_ADD_VATTR_TEXT( cdiag(ndId),'units', |
CALL MNC_CW_ADD_VATTR_TEXT( cdiag(ndId),'units', |
367 |
& udiag(ndId), myThid ) |
& udiag(ndId), myThid ) |
368 |
|
|
369 |
C Missing values only for scalar diagnostics at mass points (so far) |
useMisValForThisDiag = mate.GT.0 |
370 |
useMisValForThisDiag = useMissingValue |
C Use the missing values for masking out the land points: |
371 |
& .AND.gdiag(ndId)(1:2).EQ.'SM' |
C only for scalar diagnostics at mass points (so far) |
372 |
IF ( useMisValForThisDiag ) THEN |
IF ( missingValFillsMask.AND.gdiag(ndId)(1:2).EQ.'SM' ) THEN |
373 |
C assign missing values and set flag for adding the netCDF atttibute |
useMisValForThisDiag = .TRUE. |
|
CALL MNC_CW_VATTR_MISSING(cdiag(ndId), 2, |
|
|
I misval_r8, misval_r4, misval_int, myThid ) |
|
|
C and now use the missing values for masking out the land points |
|
374 |
C note: better to use 2-D mask if kdiag <> Nr or vert.integral |
C note: better to use 2-D mask if kdiag <> Nr or vert.integral |
375 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
376 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
386 |
ENDDO |
ENDDO |
387 |
ENDDO |
ENDDO |
388 |
ENDDO |
ENDDO |
389 |
|
ENDIF |
390 |
|
IF ( useMisValForThisDiag ) THEN |
391 |
|
C assign missing values and set flag for adding the netCDF atttibute |
392 |
|
CALL MNC_CW_VATTR_MISSING(cdiag(ndId), 2, |
393 |
|
I misval_r8, misval_r4, misval_int, myThid ) |
394 |
ELSE |
ELSE |
395 |
C suppress the missing value attribute (iflag = 0) |
C suppress the missing value attribute (iflag = 0) |
396 |
C Note: We have to call the following subroutine for each mnc that has |
C Note: We have to call the following subroutine for each mnc that has |