File indexing completed on 2025-09-11 05:13:14 UTC
view on githubraw file Latest commit d4a066fa on 2025-09-10 18:05:35 UTC
89992793c5 Jean*0001 #include "LAND_OPTIONS.h"
0002
0003
439d922c37 Jean*0004
89992793c5 Jean*0005
439d922c37 Jean*0006 SUBROUTINE LAND_OUTPUT( myTime, myIter, myThid )
89992793c5 Jean*0007
0008
439d922c37 Jean*0009
0010
0011
0012
0013
89992793c5 Jean*0014
0015
0016
0017
0018 IMPLICIT NONE
0019
0020
0021 #include "LAND_SIZE.h"
0022 #include "EEPARAMS.h"
0023 #include "PARAMS.h"
0024 #include "LAND_PARAMS.h"
439d922c37 Jean*0025 #include "LAND_VARS.h"
89992793c5 Jean*0026 #include "LAND_TAVE.h"
0027 #ifdef ALLOW_AIM
0028 #include "AIM_FFIELDS.h"
0029 #endif
0030
0031
d4a066fa68 Jean*0032
0033
0034
89992793c5 Jean*0035 _RL myTime
0036 INTEGER myIter
0037 INTEGER myThid
0038
0039 #ifdef ALLOW_LAND
233fabd09d Jean*0040
94a46dfe0d Jean*0041 LOGICAL DIFFERENT_MULTIPLE
0042 EXTERNAL DIFFERENT_MULTIPLE
89992793c5 Jean*0043
233fabd09d Jean*0044
d4a066fa68 Jean*0045 CHARACTER*(10) suff
0046 #ifdef ALLOW_LAND_TAVE
e024b9fa7f Jean*0047 INTEGER bi, bj, k
439d922c37 Jean*0048 CHARACTER*(MAX_LEN_MBUF) msgBuf
d4a066fa68 Jean*0049 #endif
0050 #if ( defined ALLOW_LAND_TAVE || defined ALLOW_MNC )
439d922c37 Jean*0051 CHARACTER*(MAX_LEN_FNAM) fn
d4a066fa68 Jean*0052 #endif
439d922c37 Jean*0053 #ifdef ALLOW_MNC
b22b541fe9 Ed H*0054 CHARACTER*(1) pf
439d922c37 Jean*0055 #endif
d4a066fa68 Jean*0056
89992793c5 Jean*0057
0058 #ifdef ALLOW_AIM
59c106d641 Jean*0059 IF ( land_monFreq.NE.0. ) THEN
89992793c5 Jean*0060 CALL LAND_MONITOR( aim_landFr, myTime, myIter, myThid )
0061 ENDIF
0062 #endif
0063
439d922c37 Jean*0064
0065
e024b9fa7f Jean*0066 IF (
439d922c37 Jean*0067 & DIFFERENT_MULTIPLE( land_diagFreq, myTime, land_deltaT )
0068 & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
0069 & myTime.EQ.startTime )
0070 & ) THEN
0071
e024b9fa7f Jean*0072
439d922c37 Jean*0073
0074
0075 IF ( land_snapshot_mdsio ) THEN
0076
df5a9764ba Jean*0077 IF ( rwSuffixType.EQ.0 ) THEN
0078 WRITE(suff,'(I10.10)') myIter
0079 ELSE
0080 CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
0081 ENDIF
439d922c37 Jean*0082
0083
e024b9fa7f Jean*0084 CALL WRITE_FLD_3D_RL( 'land_groundT.', suff, land_nLev,
439d922c37 Jean*0085 & land_groundT, myIter, myThid )
e024b9fa7f Jean*0086 CALL WRITE_FLD_3D_RL( 'land_enthalp.', suff, land_nLev,
439d922c37 Jean*0087 & land_enthalp, myIter, myThid )
e024b9fa7f Jean*0088 CALL WRITE_FLD_3D_RL( 'land_groundW.', suff, land_nLev,
439d922c37 Jean*0089 & land_groundW, myIter, myThid )
0090
0091 CALL WRITE_FLD_XY_RL(
e024b9fa7f Jean*0092 & 'land_skinT.', suff, land_skinT, myIter, myThid )
439d922c37 Jean*0093 CALL WRITE_FLD_XY_RL(
e024b9fa7f Jean*0094 & 'land_hSnow.', suff, land_hSnow, myIter, myThid )
439d922c37 Jean*0095 CALL WRITE_FLD_XY_RL(
e024b9fa7f Jean*0096 & 'land_snAge.', suff, land_snowAge, myIter, myThid )
439d922c37 Jean*0097
0098 IF ( myIter.NE.nIter0 ) THEN
0099
0100 CALL WRITE_FLD_XY_RL(
e024b9fa7f Jean*0101 & 'land_RunOff.', suff, land_runOff, myIter, myThid )
439d922c37 Jean*0102 CALL WRITE_FLD_XY_RL(
e024b9fa7f Jean*0103 & 'land_enRnOf.', suff, land_enRnOf, myIter, myThid )
439d922c37 Jean*0104 CALL WRITE_FLD_XY_RL(
e024b9fa7f Jean*0105 & 'land_HeatFx.', suff, land_HeatFlx, myIter, myThid )
439d922c37 Jean*0106 CALL WRITE_FLD_XY_RL(
e024b9fa7f Jean*0107 & 'land_frWaFx.', suff, land_Pr_m_Ev, myIter, myThid )
439d922c37 Jean*0108 CALL WRITE_FLD_XY_RL(
e024b9fa7f Jean*0109 & 'land_EnWaFx.', suff, land_EnWFlux, myIter, myThid )
439d922c37 Jean*0110 ENDIF
0111
0112 ENDIF
0113
0114 #ifdef ALLOW_MNC
0115 IF ( land_snapshot_mnc ) THEN
233fabd09d Jean*0116 _BARRIER
439d922c37 Jean*0117
0118 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
0119 pf(1:1) = 'D'
0120 ELSE
0121 pf(1:1) = 'R'
0122 ENDIF
204b79e930 Jean*0123 WRITE(fn,'(A)') 'land_snapshot'
0124 CALL MNC_CW_SET_UDIM(fn, -1, myThid)
0125 CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
0126 CALL MNC_CW_SET_UDIM(fn, 0, myThid)
0127 CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
439d922c37 Jean*0128
204b79e930 Jean*0129 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0130 & 'land_groundT', land_groundT, myThid)
204b79e930 Jean*0131 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0132 & 'land_enthalp', land_enthalp, myThid)
204b79e930 Jean*0133 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0134 & 'land_groundW', land_groundW, myThid)
0135
204b79e930 Jean*0136 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0137 & 'land_skinT', land_skinT, myThid)
204b79e930 Jean*0138 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0139 & 'land_hSnow', land_hSnow, myThid)
204b79e930 Jean*0140 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0141 & 'land_snAge', land_snowAge, myThid)
204b79e930 Jean*0142 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0143 & 'land_RunOff', land_runOff, myThid)
204b79e930 Jean*0144 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0145 & 'land_enRnOf', land_enRnOf, myThid)
0146
204b79e930 Jean*0147 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0148 & 'land_HeatFx', land_HeatFlx, myThid)
204b79e930 Jean*0149 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0150 & 'land_frWaFx', land_Pr_m_Ev, myThid)
204b79e930 Jean*0151 CALL MNC_CW_RL_W(pf,fn,0,0,
439d922c37 Jean*0152 & 'land_EnWaFx', land_EnWFlux, myThid)
0153
233fabd09d Jean*0154 _BARRIER
439d922c37 Jean*0155 ENDIF
0156 #endif
0157
0158 ENDIF
89992793c5 Jean*0159
0160
0161
439d922c37 Jean*0162 #ifdef ALLOW_LAND_TAVE
0163
89992793c5 Jean*0164 IF (land_taveFreq.LE.0.) RETURN
0165
0166 IF ( myIter.EQ.nIter0 ) THEN
0167
0168 DO bj = myByLo(myThid), myByHi(myThid)
0169 DO bi = myBxLo(myThid), myBxHi(myThid)
0170 CALL TIMEAVE_RESET(land_grTtave,land_nLev, bi, bj, myThid)
0171 CALL TIMEAVE_RESET(land_entave, land_nLev, bi, bj, myThid)
0172 CALL TIMEAVE_RESET(land_grWtave,land_nLev, bi, bj, myThid)
0173 CALL TIMEAVE_RESET(land_sTtave, 1, bi, bj, myThid)
0174 CALL TIMEAVE_RESET(land_hStave, 1, bi, bj, myThid)
0175 CALL TIMEAVE_RESET(land_sAtave, 1, bi, bj, myThid)
0176 CALL TIMEAVE_RESET(land_ROftave, 1, bi, bj, myThid)
0177 CALL TIMEAVE_RESET(land_eROtave, 1, bi, bj, myThid)
0bff449f75 Jean*0178 land_timeAve(bi,bj) = 0.
89992793c5 Jean*0179 ENDDO
0180 ENDDO
0181
0182
e024b9fa7f Jean*0183 ELSEIF (
439d922c37 Jean*0184 & DIFFERENT_MULTIPLE( land_taveFreq, myTime, land_deltaT )
89992793c5 Jean*0185 & ) THEN
0186
0187
0188 DO bj = myByLo(myThid), myByHi(myThid)
0189 DO bi = myBxLo(myThid), myBxHi(myThid)
0bff449f75 Jean*0190 CALL TIMEAVE_NORMALIZE( land_grTtave, land_timeAve,
0191 & land_nLev, bi, bj, myThid )
0192 CALL TIMEAVE_NORMALIZE( land_entave, land_timeAve,
0193 & land_nLev, bi, bj, myThid )
0194 CALL TIMEAVE_NORMALIZE( land_grWtave, land_timeAve,
0195 & land_nLev, bi, bj, myThid )
0196 CALL TIMEAVE_NORMALIZE( land_sTtave, land_timeAve,
0197 & 1, bi, bj, myThid )
0198 CALL TIMEAVE_NORMALIZE( land_hStave, land_timeAve,
0199 & 1, bi, bj, myThid )
0200 CALL TIMEAVE_NORMALIZE( land_sAtave, land_timeAve,
0201 & 1, bi, bj, myThid )
0202 CALL TIMEAVE_NORMALIZE( land_ROftave, land_timeAve,
0203 & 1, bi, bj, myThid )
0204 CALL TIMEAVE_NORMALIZE( land_eROtave, land_timeAve,
0205 & 1, bi, bj, myThid )
89992793c5 Jean*0206 ENDDO
0207 ENDDO
0208
3f81645eae Ed H*0209 IF ( land_timeave_mdsio ) THEN
0210
df5a9764ba Jean*0211 IF ( rwSuffixType.EQ.0 ) THEN
0212 WRITE(suff,'(I10.10)') myIter
0213 ELSE
0214 CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
0215 ENDIF
0216 WRITE(fn,'(2A)') 'land_tave.', suff
e024b9fa7f Jean*0217 CALL WRITE_REC_3D_RL( fn, writeBinaryPrec, land_nLev,
0218 & land_grTtave, 1, myIter, myThid )
0219 CALL WRITE_REC_3D_RL( fn, writeBinaryPrec, land_nLev,
0220 & land_entave, 2, myIter, myThid )
0221 CALL WRITE_REC_3D_RL( fn, writeBinaryPrec, land_nLev,
0222 & land_grWtave, 3, myIter, myThid )
0223 k = 3*land_nLev
0224 CALL WRITE_REC_XY_RL( fn, land_sTtave, k+1, myIter, myThid )
0225 CALL WRITE_REC_XY_RL( fn, land_hStave, k+2, myIter, myThid )
0226 CALL WRITE_REC_XY_RL( fn, land_sAtave, k+3, myIter, myThid )
0227 CALL WRITE_REC_XY_RL( fn, land_ROftave, k+4, myIter, myThid )
0228 CALL WRITE_REC_XY_RL( fn, land_eROtave, k+5, myIter, myThid )
89992793c5 Jean*0229
3f81645eae Ed H*0230 ENDIF
0231
0232 #ifdef ALLOW_MNC
0233 IF ( land_timeave_mnc ) THEN
0bff449f75 Jean*0234 _BARRIER
e024b9fa7f Jean*0235
439d922c37 Jean*0236 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
0237 pf(1:1) = 'D'
0238 ELSE
0239 pf(1:1) = 'R'
0240 ENDIF
204b79e930 Jean*0241 WRITE(fn,'(A)') 'land_tave'
3f81645eae Ed H*0242 CALL MNC_CW_SET_UDIM(fn, -1, myThid)
0243 CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
0244 CALL MNC_CW_SET_UDIM(fn, 0, myThid)
0245 CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
b22b541fe9 Ed H*0246 CALL MNC_CW_RL_W(pf,fn,0,0,
3f81645eae Ed H*0247 & 'land_groundT', land_grTtave, myThid)
b22b541fe9 Ed H*0248 CALL MNC_CW_RL_W(pf,fn,0,0,
3f81645eae Ed H*0249 & 'land_enthalp', land_entave, myThid)
b22b541fe9 Ed H*0250 CALL MNC_CW_RL_W(pf,fn,0,0,
3f81645eae Ed H*0251 & 'land_groundW', land_grWtave, myThid)
e024b9fa7f Jean*0252
b22b541fe9 Ed H*0253 CALL MNC_CW_RL_W(pf,fn,0,0,
3f81645eae Ed H*0254 & 'land_skinT', land_sTtave, myThid)
b22b541fe9 Ed H*0255 CALL MNC_CW_RL_W(pf,fn,0,0,
3f81645eae Ed H*0256 & 'land_hSnow', land_hStave, myThid)
b22b541fe9 Ed H*0257 CALL MNC_CW_RL_W(pf,fn,0,0,
3f81645eae Ed H*0258 & 'land_snAge', land_sAtave, myThid)
b22b541fe9 Ed H*0259 CALL MNC_CW_RL_W(pf,fn,0,0,
3f81645eae Ed H*0260 & 'land_RunOff', land_ROftave, myThid)
b22b541fe9 Ed H*0261 CALL MNC_CW_RL_W(pf,fn,0,0,
3f81645eae Ed H*0262 & 'land_enRnOf', land_eROtave, myThid)
e024b9fa7f Jean*0263
0bff449f75 Jean*0264 _BARRIER
3f81645eae Ed H*0265 ENDIF
0266 #endif
0267
e024b9fa7f Jean*0268 WRITE(msgBuf,'(A,I10)')
0269 & '// Land Time-average written, t-step', myIter
0270 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0271 & SQUEEZE_RIGHT, myThid )
0272 WRITE(msgBuf,'(A)') ' '
0273 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0274 & SQUEEZE_RIGHT, myThid )
0275
89992793c5 Jean*0276
0277 DO bj = myByLo(myThid), myByHi(myThid)
0278 DO bi = myBxLo(myThid), myBxHi(myThid)
0279 CALL TIMEAVE_RESET(land_grTtave,land_nLev, bi, bj, myThid)
0280 CALL TIMEAVE_RESET(land_entave, land_nLev, bi, bj, myThid)
0281 CALL TIMEAVE_RESET(land_grWtave,land_nLev, bi, bj, myThid)
0282 CALL TIMEAVE_RESET(land_sTtave, 1, bi, bj, myThid)
0283 CALL TIMEAVE_RESET(land_hStave, 1, bi, bj, myThid)
0284 CALL TIMEAVE_RESET(land_sAtave, 1, bi, bj, myThid)
0285 CALL TIMEAVE_RESET(land_ROftave, 1, bi, bj, myThid)
0286 CALL TIMEAVE_RESET(land_eROtave, 1, bi, bj, myThid)
0bff449f75 Jean*0287 land_timeAve(bi,bj) = 0.
89992793c5 Jean*0288 ENDDO
0289 ENDDO
0290
0291 ENDIF
0292
0293 #endif /* ALLOW_LAND_TAVE */
0294
0295 #endif /* ALLOW_LAND */
0296
0297 RETURN
0298 END