File indexing completed on 2018-03-02 18:37:33 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
c04db39328 Jean*0001 #include "ATM_CPL_OPTIONS.h"
5a2fc21c93 Jean*0002
4ff1cd5702 Jean*0003
0004
0005
5a2fc21c93 Jean*0006 SUBROUTINE ATM_CPL_READ_PICKUP( myIter, myThid )
4ff1cd5702 Jean*0007
0008
5a2fc21c93 Jean*0009
0010
0011
0012
0013
4ff1cd5702 Jean*0014
0015
0016
5a2fc21c93 Jean*0017 IMPLICIT NONE
0018
0019
0020 #include "SIZE.h"
0021 #include "EEPARAMS.h"
0022 #include "PARAMS.h"
0023 #include "CPL_PARAMS.h"
0024 #include "ATMCPL.h"
0025
4ff1cd5702 Jean*0026
0027
0028
5a2fc21c93 Jean*0029 INTEGER myIter
0030 INTEGER myThid
0031
0032 #ifdef COMPONENT_MODULE
d1469cc589 Jean*0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 INTEGER fp
0046 INTEGER filePrec, nbFields
0047 INTEGER missFldDim, nMissing
0048 INTEGER j, nj, ioUnit
0049 PARAMETER( missFldDim = 18 )
ab33782b56 Jean*0050 CHARACTER*(10) suff
5a2fc21c93 Jean*0051 CHARACTER*(MAX_LEN_FNAM) fn
d1469cc589 Jean*0052 CHARACTER*(8) missFldList(missFldDim)
0053 CHARACTER*(MAX_LEN_MBUF) msgBuf
0054 INTEGER i, bi, bj
0055
5a2fc21c93 Jean*0056
d1469cc589 Jean*0057
0058
0059 IF ( pickupSuff.EQ.' ' ) THEN
ab33782b56 Jean*0060 IF ( rwSuffixType.EQ.0 ) THEN
0061 WRITE(fn,'(A,I10.10)') 'pickup_cpl.', myIter
0062 ELSE
0063 CALL RW_GET_SUFFIX( suff, startTime, myIter, myThid )
0064 WRITE(fn,'(A,A)') 'pickup_cpl.', suff
0065 ENDIF
d1469cc589 Jean*0066 ELSE
ab33782b56 Jean*0067 WRITE(fn,'(A,A10)') 'pickup_cpl.', pickupSuff
d1469cc589 Jean*0068 ENDIF
0069 fp = precFloat64
0070
0071 CALL READ_MFLDS_SET(
0072 I fn,
0073 O nbFields, filePrec,
0074 I Nr, myIter, myThid )
0075 _BEGIN_MASTER( myThid )
0076
0077 IF ( nbFields.GE.0 .AND. filePrec.NE.fp ) THEN
0078 WRITE(msgBuf,'(2A,I4)') 'ATM_CPL_READ_PICKUP: ',
0079 & 'pickup-file binary precision do not match !'
0080 CALL PRINT_ERROR( msgBuf, myThid )
0081 WRITE(msgBuf,'(A,2(A,I4))') 'ATM_CPL_READ_PICKUP: ',
0082 & 'file prec.=', filePrec, ' but expecting prec.=', fp
0083 CALL PRINT_ERROR( msgBuf, myThid )
0084 CALL ALL_PROC_DIE( 0 )
0085 STOP 'ABNORMAL END: S/R ATM_CPL_READ_PICKUP (data-prec Pb)'
0086 ENDIF
0087 _END_MASTER( myThid )
0088
0089 IF ( nbFields.LE.0 ) THEN
0090
0091 ioUnit = errorMessageUnit
0092 IF ( pickupStrictlyMatch ) THEN
0093 WRITE(msgBuf,'(4A)') 'ATM_CPL_READ_PICKUP: ',
0094 & 'no field-list found in meta-file',
0095 & ' => cannot check for strick-matching'
0096 CALL PRINT_ERROR( msgBuf, myThid )
0097 WRITE(msgBuf,'(4A)') 'ATM_CPL_READ_PICKUP: ',
0098 & 'try with " pickupStrictlyMatch=.FALSE.,"',
0099 & ' in file: "data", NameList: "PARM03"'
0100 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0101 CALL ALL_PROC_DIE( myThid )
0102 STOP 'ABNORMAL END: S/R ATM_CPL_READ_PICKUP'
0103 ELSE
0104 WRITE(msgBuf,'(4A)') 'WARNING >> ATM_CPL_READ_PICKUP: ',
0105 & ' no field-list found'
0106 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0107 IF ( nbFields.EQ.-1 ) THEN
0108
0109 WRITE(msgBuf,'(4A)') 'WARNING >> ',
0110 & ' try to read pickup as currently written'
0111 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0112 ELSE
0113
0114 WRITE(msgBuf,'(4A)') 'WARNING >> ',
0115 & ' try to read pickup as it used to be written'
0116 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0117 WRITE(msgBuf,'(4A)') 'WARNING >> ',
0118 & ' until checkpoint65r (2015 Dec 21)'
0119 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0120
0121
0122
0123
0124
0125 ENDIF
0126 ENDIF
0127 ENDIF
0128
0129
0130
0131 IF ( nbFields.EQ.0 ) THEN
0132
0133
0134
0135
0136
0137
ece6c362bf Jean*0138
d1469cc589 Jean*0139 CALL READ_REC_3D_RL( fn, fp, 1, HeatFlux , 6, myIter,myThid )
0140 CALL READ_REC_3D_RL( fn, fp, 1, qShortWave, 7, myIter,myThid )
0141 CALL READ_REC_3D_RL( fn, fp, 1, tauX , 8, myIter,myThid )
0142 CALL READ_REC_3D_RL( fn, fp, 1, tauY , 9, myIter,myThid )
0143 CALL READ_REC_3D_RL( fn, fp, 1, EvMPrFlux , 10, myIter,myThid )
0144 #ifdef ALLOW_LAND
0145 CALL READ_REC_3D_RL( fn, fp, 1, RunOffFlux, 11, myIter,myThid )
0146 CALL READ_REC_3D_RL( fn, fp, 1, RunOffEnFx, 12, myIter,myThid )
0147 #endif /* ALLOW_LAND */
0148 #ifdef ALLOW_THSICE
0149 CALL READ_REC_3D_RL( fn, fp, 1, iceSaltFlx, 13, myIter,myThid )
0150
0151 #endif /* ALLOW_THSICE */
0152 #ifdef ALLOW_AIM
0153 IF ( atm_cplExch_DIC ) THEN
0154
0155 CALL READ_REC_3D_RL( fn,fp, 1, airCO2 , 16, myIter,myThid )
0156 CALL READ_REC_3D_RL( fn,fp, 1, sWSpeed , 17, myIter,myThid )
0157 # ifdef ALLOW_THSICE
c121b6d611 Jean*0158
d1469cc589 Jean*0159 # endif /* ALLOW_THSICE */
0160 ENDIF
0161 #endif /* ALLOW_AIM */
0162
0163 ELSE
0164
0165 nj = 0
0166
0167 nj = nj*Nr
0168
0169
0170 CALL READ_MFLDS_3D_RL( 'qHeatFlx', HeatFlux,
0171 & nj, fp, 1 , myIter, myThid )
0172 CALL READ_MFLDS_3D_RL( 'qShortW ', qShortWave,
0173 & nj, fp, 1 , myIter, myThid )
0174 CALL READ_MFLDS_3D_RL( 'surfTauX', tauX,
0175 & nj, fp, 1 , myIter, myThid )
0176 CALL READ_MFLDS_3D_RL( 'surfTauY', tauY,
0177 & nj, fp, 1 , myIter, myThid )
0178 CALL READ_MFLDS_3D_RL( 'Evp-Prec', EvMPrFlux,
0179 & nj, fp, 1 , myIter, myThid )
0180 #ifdef ALLOW_LAND
0181 IF ( atm_cplExch_RunOff ) THEN
0182 CALL READ_MFLDS_3D_RL('RunOffFx', RunOffFlux,
0183 & nj, fp, 1 , myIter, myThid )
0184 CALL READ_MFLDS_3D_RL('RnOfEnFx', RunOffEnFx,
0185 & nj, fp, 1 , myIter, myThid )
0186 ENDIF
0187 #endif /* ALLOW_LAND */
0188 #ifdef ALLOW_THSICE
0189 IF ( atm_cplExch1W_sIce ) THEN
0190 CALL READ_MFLDS_3D_RL('saltFlux', iceSaltFlx,
0191 & nj, fp, 1 , myIter, myThid )
0192 ENDIF
c121b6d611 Jean*0193 IF ( atm_cplExch_SaltPl ) THEN
0194 CALL READ_MFLDS_3D_RL('sltPlmFx', saltPlmFlx_cpl,
0195 & nj, fp, 1 , myIter, myThid )
0196 ENDIF
d1469cc589 Jean*0197 #endif /* ALLOW_THSICE */
0198 #ifdef ALLOW_AIM
0199 IF ( atm_cplExch_DIC ) THEN
0200 CALL READ_MFLDS_3D_RL('atm-CO2 ', airCO2,
0201 & nj, fp, 1 , myIter, myThid )
0202 CALL READ_MFLDS_3D_RL('wndSpeed', sWSpeed,
0203 & nj, fp, 1 , myIter, myThid )
0204 ENDIF
0205 #endif /* ALLOW_AIM */
0206
0207
0208 ENDIF
0209
0210
0211 nMissing = missFldDim
0212 CALL READ_MFLDS_CHECK(
0213 O missFldList,
0214 U nMissing,
0215 I myIter, myThid )
0216 IF ( nMissing.GT.missFldDim ) THEN
0217 WRITE(msgBuf,'(2A,I4)') 'ATM_CPL_READ_PICKUP: ',
0218 & 'missing fields list has been truncated to', missFldDim
0219 CALL PRINT_ERROR( msgBuf, myThid )
0220 CALL ALL_PROC_DIE( myThid )
0221 STOP 'ABNORMAL END: S/R ATM_CPL_READ_PICKUP (list-size Pb)'
0222 ENDIF
0223 IF ( nMissing.GE.1 ) THEN
0224 ioUnit = errorMessageUnit
0225 DO j=1,nMissing
0226 WRITE(msgBuf,'(4A)') 'ATM_CPL_READ_PICKUP: ',
0227 & 'cannot restart without field "',missFldList(nj),'"'
0228 CALL PRINT_ERROR( msgBuf, myThid )
0229 ENDDO
0230 CALL ALL_PROC_DIE( myThid )
0231 STOP 'ABNORMAL END: S/R ATM_CPL_READ_PICKUP'
0232 ENDIF
0233
0234
0235
0236
d39233fbd8 Jean*0237
44ff40f0ae Jean*0238 IF ( cpl_oldPickup ) THEN
d39233fbd8 Jean*0239 _BARRIER
0240
0241 DO bj = myByLo(myThid), myByHi(myThid)
0242 DO bi = myBxLo(myThid), myBxHi(myThid)
44ff40f0ae Jean*0243 DO j=1-OLy,sNy+OLy
0244 DO i=1-OLx,sNx+OLx
d39233fbd8 Jean*0245 EvMPrFlux (i,j,bi,bj) = EvMPrFlux (i,j,bi,bj)*rhoConstFresh
d1469cc589 Jean*0246 #ifdef ALLOW_LAND
d39233fbd8 Jean*0247 RunOffFlux(i,j,bi,bj) = RunOffFlux(i,j,bi,bj)*rhoConstFresh
d1469cc589 Jean*0248 #endif /* ALLOW_LAND */
d39233fbd8 Jean*0249 ENDDO
0250 ENDDO
0251 ENDDO
0252 ENDDO
5a2fc21c93 Jean*0253 ENDIF
0254
0255 #endif /* COMPONENT_MODULE */
0256
0257 RETURN
0258 END