File indexing completed on 2026-01-13 06:08:38 UTC
view on githubraw file Latest commit 8e1c4076 on 2026-01-09 17:53:56 UTC
508ee73e24 Mart*0001 #include "GCHEM_OPTIONS.h"
9780f1e2f5 Jean*0002 #undef GCHEM_REPORT_UNUSED_PARAMS
508ee73e24 Mart*0003
e46e994325 Jean*0004
0005
0006
508ee73e24 Mart*0007 SUBROUTINE GCHEM_CHECK( myThid )
e46e994325 Jean*0008
5c5997ced8 Jean*0009
0010
0011
a6c1c05757 Jean*0012
5c5997ced8 Jean*0013
e46e994325 Jean*0014
508ee73e24 Mart*0015
e46e994325 Jean*0016
0017 IMPLICIT NONE
508ee73e24 Mart*0018
0019 #include "SIZE.h"
0020 #include "EEPARAMS.h"
0021 #include "PARAMS.h"
96e2a5a610 Davi*0022 #include "GCHEM.h"
e46e994325 Jean*0023 #ifdef ALLOW_CFC
0024 # include "CFC_SIZE.h"
0025 #endif
0026 #ifdef ALLOW_SPOIL
0027 # include "SPOIL_SIZE.h"
0028 #endif
0029 #include "GCHEM_SIZE.h"
0030 #ifdef ALLOW_PTRACERS
0031 # include "PTRACERS_SIZE.h"
0032 # include "PTRACERS_PARAMS.h"
0033 #endif
2a2b7d0c36 Mart*0034 #ifdef ALLOW_CAL
0035 # include "cal.h"
0036 #endif
508ee73e24 Mart*0037
e46e994325 Jean*0038
0039
508ee73e24 Mart*0040 INTEGER myThid
0041
0042 #ifdef ALLOW_GCHEM
2a2b7d0c36 Mart*0043
8e1c407622 Jean*0044 #ifdef ALLOW_CAL
2a2b7d0c36 Mart*0045 INTEGER ILNBLNK
0046 EXTERNAL ILNBLNK
8e1c407622 Jean*0047 #endif
2a2b7d0c36 Mart*0048
e46e994325 Jean*0049
5c5997ced8 Jean*0050
508ee73e24 Mart*0051 CHARACTER*(MAX_LEN_MBUF) msgBuf
e46e994325 Jean*0052 INTEGER errCount
0053 INTEGER nb_tendTr
2a2b7d0c36 Mart*0054 INTEGER ioUnit
8e1c407622 Jean*0055 #ifdef ALLOW_CAL
0056 INTEGER IL
0057 #endif
9780f1e2f5 Jean*0058 #ifdef GCHEM_REPORT_UNUSED_PARAMS
8e1c407622 Jean*0059 INTEGER k
2a2b7d0c36 Mart*0060 INTEGER gchem_int(5)
0061 _RL gchem_rl(5)
0062 CHARACTER*(MAX_LEN_FNAM) gchem_fileName(5)
0063 CHARACTER*(10) varName
9780f1e2f5 Jean*0064 #endif
e46e994325 Jean*0065
0066
0067
508ee73e24 Mart*0068
6b9e7a8805 Jean*0069 _BEGIN_MASTER(myThid)
e46e994325 Jean*0070 errCount = 0
6b9e7a8805 Jean*0071
e46e994325 Jean*0072 WRITE(msgBuf,'(2A)') 'GCHEM_CHECK ',
0073 & ' --> Starts to check GCHEM set-up'
508ee73e24 Mart*0074 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
e46e994325 Jean*0075 & SQUEEZE_RIGHT, myThid )
508ee73e24 Mart*0076
e46e994325 Jean*0077
0078
0079 #ifndef GCHEM_ADD2TR_TENDENCY
5c5997ced8 Jean*0080 IF ( useCFC ) THEN
e46e994325 Jean*0081 WRITE(msgBuf,'(A)') 'GCHEM_ADD2TR_TENDENCY needed to use CFC'
0082 CALL PRINT_ERROR( msgBuf, myThid )
0083 errCount = errCount + 1
5c5997ced8 Jean*0084 ENDIF
e46e994325 Jean*0085 #endif /* ndef GCHEM_ADD2TR_TENDENCY */
0086
0087 #ifndef GCHEM_SEPARATE_FORCING
8d459f0cbe Jean*0088 IF ( useDIC ) THEN
0089 WRITE(msgBuf,'(A)') 'GCHEM_SEPARATE_FORCING needed to use DIC'
e46e994325 Jean*0090 CALL PRINT_ERROR( msgBuf, myThid )
0091 errCount = errCount + 1
0092 ENDIF
0093 IF ( useBLING ) THEN
0094 WRITE(msgBuf,'(A)')
0095 & 'GCHEM_SEPARATE_FORCING needed to use BLING'
0096 CALL PRINT_ERROR( msgBuf, myThid )
0097 errCount = errCount + 1
8d459f0cbe Jean*0098 ENDIF
0099 IF ( useDARWIN ) THEN
e46e994325 Jean*0100 WRITE(msgBuf,'(A)')
0101 & 'GCHEM_SEPARATE_FORCING needed to use DARWIN'
0102 CALL PRINT_ERROR( msgBuf, myThid )
0103 errCount = errCount + 1
8d459f0cbe Jean*0104 ENDIF
e46e994325 Jean*0105 #endif /* ndef GCHEM_SEPARATE_FORCING */
5c5997ced8 Jean*0106
508ee73e24 Mart*0107
0108 IF ( .NOT.usePTRACERS) THEN
8d459f0cbe Jean*0109 WRITE(msgBuf,'(A)') 'usePTRACERS has to be .TRUE. for GCHEM'
e46e994325 Jean*0110 CALL PRINT_ERROR( msgBuf, myThid )
0111 errCount = errCount + 1
508ee73e24 Mart*0112 ENDIF
0113
e46e994325 Jean*0114
0115 IF ( useBLING .AND. useDIC ) THEN
0116 WRITE(msgBuf,'(A)')
0117 & 'useBLING and useDIC cannot both be .TRUE.'
0118 CALL PRINT_ERROR( msgBuf, myThid )
0119 errCount = errCount + 1
96e2a5a610 Davi*0120 ENDIF
0121
e46e994325 Jean*0122
0123 IF ( useBLING .AND. useDARWIN ) THEN
0124 WRITE(msgBuf,'(A)')
0125 & 'useBLING and useDARWIN cannot both be .TRUE.'
0126 CALL PRINT_ERROR( msgBuf, myThid )
0127 errCount = errCount + 1
0128 ENDIF
0129
0130
5dae554984 Oliv*0131 IF ( useDARWIN .AND. useDIC ) THEN
e46e994325 Jean*0132 WRITE(msgBuf,'(A)')
0133 & 'useDARWIN and useDIC cannot both be .TRUE.'
0134 CALL PRINT_ERROR( msgBuf, myThid )
0135 errCount = errCount + 1
5dae554984 Oliv*0136 ENDIF
0137
e46e994325 Jean*0138 nb_tendTr = gchem_Tracer_num - gchem_sepFTr_num
0139 IF ( nb_tendTr.GT.GCHEM_tendTr_num ) THEN
0140 WRITE(msgBuf,'(2A,I5,A)') 'GCHEM_CHECK: ',
0141 & 'Number of tendency-tracers: nb_tendTr=', nb_tendTr
5dae554984 Oliv*0142 CALL PRINT_ERROR( msgBuf , myThid )
e46e994325 Jean*0143 WRITE(msgBuf,'(2A,I5,A)') 'GCHEM_CHECK: ',
0144 & 'Exceeds GCHEM_tendTr_num=', GCHEM_tendTr_num,
0145 & ' (from GCHEM_SIZE.h)'
0146 CALL PRINT_ERROR( msgBuf, myThid )
0147 errCount = errCount + 1
0148 ENDIF
0149 IF ( gchem_Tracer_num.GT.PTRACERS_numInUse ) THEN
0150 WRITE(msgBuf,'(2A,I5,A)') 'GCHEM_CHECK: ',
0151 & 'Number of GCHEM tracers: gchem_Tracer_num =', gchem_Tracer_num
0152 CALL PRINT_ERROR( msgBuf, myThid )
0153 WRITE(msgBuf,'(2A,I5,A)') 'GCHEM_CHECK: ',
0154 & ' exceeds number of pTr: PTRACERS_numInUse =',PTRACERS_numInUse
0155
0156 CALL PRINT_ERROR( msgBuf, myThid )
0157 errCount = errCount + 1
5dae554984 Oliv*0158 ENDIF
0159
e46e994325 Jean*0160 IF ( errCount.GE.1 ) THEN
0161 WRITE(msgBuf,'(A,I3,A)')
75c5b64bda Jean*0162 & 'GCHEM_CHECK: detected', errCount,' fatal error(s)'
e46e994325 Jean*0163 CALL PRINT_ERROR( msgBuf, myThid )
0164 CALL ALL_PROC_DIE( 0 )
0165 STOP 'ABNORMAL END: S/R GCHEM_CHECK'
0166 ENDIF
2a2b7d0c36 Mart*0167
0168
0169
0170
0171 ioUnit = errorMessageUnit
0172 #ifdef ALLOW_CAL
0173 IF ( useCAL ) THEN
0174 errCount = 0
0175 IF ( usingGregorianCalendar .AND.
0176 & gchem_secondsPeryear .NE. 365.25 _d 0*86400. _d 0 ) THEN
0177 errCount = errCount + 1
0178 ELSEIF ( .NOT. usingGregorianCalendar .AND.
0179 & gchem_secondsPerYear .NE. nDaysNoLeap*86400. _d 0 ) THEN
0180 errCount = errCount + 1
0181 ENDIF
0182 IF ( errCount .GT. 0 ) THEN
0183 IL = ILNBLNK(theCalendar)
0184 WRITE(msgBuf,'(A,F13.1,3A)')
0185 & '** warning ** GCHEM_CHECK: gchem_secondsPeryear=',
0186 & gchem_secondsPerYear,
0187 & ' is not consistent with theCalendar= "',
0188 & theCalendar(1:IL),'"'
0189 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0190 WRITE(msgBuf,'(A)')
0191 & '** warning ** GCHEM_CHECK: Is this intentional ?'
0192 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0193 ENDIF
0194 ENDIF
0195 #endif
0196 IF ( periodicExternalForcing ) THEN
0197 errCount = 0
0198 IF ( gchem_ForcingCycle .EQ. externForcingCycle .AND.
0199 & gchem_secondsPeryear .NE. externForcingCycle ) THEN
0200 WRITE(msgBuf,'(2(A,F13.1))')
0201 & '** warning ** GCHEM_CHECK: gchem_secondsPeryear=',
0202 & gchem_secondsPerYear,
0203 & ' is different from externForcingCycle=',
0204 & externForcingCycle
0205 errCount = errCount + 1
0206 ELSEIF ( gchem_secondsPeryear .NE. gchem_ForcingCycle ) THEN
0207 WRITE(msgBuf,'(2(A,F13.1))')
0208 & '** warning ** GCHEM_CHECK: gchem_secondsPeryear=',
0209 & gchem_secondsPerYear,
0210 & ' is different from gchem_ForcingCycle=',
0211 & gchem_ForcingCycle
0212 errCount = errCount + 1
0213 ENDIF
0214 IF ( errCount .GT. 0 ) THEN
0215 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0216 WRITE(msgBuf,'(A)')
0217 & '** warning ** GCHEM_CHECK: Is this intentional ?'
0218 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0219 ENDIF
0220 ENDIF
0221
8d459f0cbe Jean*0222 _END_MASTER(myThid)
0223
e46e994325 Jean*0224
0225
0226
0227
a6c1c05757 Jean*0228 #ifdef ALLOW_CFC
e46e994325 Jean*0229
a6c1c05757 Jean*0230 IF ( useCFC ) THEN
0231 CALL CFC_CHECK( myThid )
0232 ENDIF
0233 #endif
0234
5dae554984 Oliv*0235 #ifdef ALLOW_DARWIN
e46e994325 Jean*0236
5dae554984 Oliv*0237 IF ( useDARWIN ) THEN
0238 CALL DARWIN_CHECK( myThid )
0239 ENDIF
0240 #endif
0241
2a2b7d0c36 Mart*0242
0243
e46e994325 Jean*0244 _BEGIN_MASTER(myThid)
2a2b7d0c36 Mart*0245 ioUnit = standardMessageUnit
0246
0247 WRITE(msgBuf,'(A)')
0248 &'// ======================================================='
0249 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0250 WRITE(msgBuf,'(A)') '// pkg/gchem configuration'
0251 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0252 WRITE(msgBuf,'(A)')
0253 &'// ======================================================='
0254 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0255
0256 WRITE(msgBuf,'(A)') '// '
0257 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0258
0259 CALL WRITE_0D_L( useCFC, INDEX_NONE,
0260 & 'useCFC =', ' /* use pkg/cfc */')
0261 CALL WRITE_0D_L( useDIC, INDEX_NONE,
0262 & 'useDIC =', ' /* use pkg/dic */')
0263 CALL WRITE_0D_L( useBLING, INDEX_NONE,
0264 & 'useBLING =', ' /* use pkg/bling */')
0265 CALL WRITE_0D_L( useSPOIL, INDEX_NONE,
0266 & 'useSPOIL =', ' /* use pkg/spoil */')
0267 CALL WRITE_0D_L( useDARWIN, INDEX_NONE,
0268 & 'useDARWIN =', ' /* use pkg/darwin */')
0269 CALL WRITE_0D_I( nsubtime, INDEX_NONE, 'nsubtime =',
0270 & ' /* number of sub-timesteps withing bgc-module */')
9780f1e2f5 Jean*0271 #ifdef GCHEM_REPORT_UNUSED_PARAMS
2a2b7d0c36 Mart*0272 gchem_int = (/gchem_int1,gchem_int2,
0273 & gchem_int3,gchem_int4,gchem_int5/)
0274 gchem_rl = (/gchem_rl1,gchem_rl2,
0275 & gchem_rl3,gchem_rl4,gchem_rl5/)
0276 gchem_fileName = (/fileName1,fileName2,
0277 & fileName3,fileName4,fileName5/)
0278 DO k = 1, 5
0279 varName = ' '
0280 IF ( gchem_fileName(k) .NE. ' ' ) THEN
0281 WRITE(varName,'(A,I1)') 'fileName',k
0282 CALL WRITE_0D_C( gchem_fileName(k), -1, INDEX_NONE,
0283 & varName(1:9)//' =', ' /* generic file name parameter */')
0284 ENDIF
0285 IF ( gchem_int(k) .NE. 0 ) THEN
0286 WRITE(varName,'(A,I1)') 'gchem_int',k
0287 CALL WRITE_0D_I( gchem_int(k), INDEX_NONE,
0288 & varName(1:10)//' =', ' /* generic INTEGER parameter */')
0289 ENDIF
0290 IF ( gchem_rl(k) .NE. 0. _d 0 ) THEN
0291 WRITE(varName,'(A,I1)') 'gchem_rl',k
0292 CALL WRITE_0D_RL( gchem_rl(k), INDEX_NONE,
0293 & varName(1:9)//' =', ' /* generic REAL*8 parameter */')
0294 ENDIF
0295 ENDDO
9780f1e2f5 Jean*0296 #endif
2a2b7d0c36 Mart*0297 CALL WRITE_0D_RL( gchem_ForcingPeriod, INDEX_NONE,
0298 & 'gchem_ForcingPeriod =', ' /* gchem forcing period (s) */')
0299 CALL WRITE_0D_RL( gchem_ForcingCycle, INDEX_NONE,
0300 & 'gchem_ForcingCycle =',
0301 & ' /* period of gchem forcing cycle (s) */')
0302 CALL WRITE_0D_RL( gchem_secondsPerYear, INDEX_NONE,
0303 & 'gchem_secondsPerYear =',
0304 & ' /* second in a year for light computations */')
0305
0306 WRITE(msgBuf,'(A)')
0307 &'// ======================================================='
0308 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0309 WRITE(msgBuf,'(A)') '// End of pkg/gchem config. summary'
0310 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0311 WRITE(msgBuf,'(A)')
0312 &'// ======================================================='
0313 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0314 WRITE(msgBuf,'(A)') ' '
0315 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
0316
0317 WRITE(msgBuf,'(2A)') 'GCHEM_CHECK ', ' <-- Ends Normally'
0318 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
e46e994325 Jean*0319 WRITE(msgBuf,'(2A)') ' '
2a2b7d0c36 Mart*0320 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
e46e994325 Jean*0321
0322 _END_MASTER(myThid)
2a2b7d0c36 Mart*0323
e46e994325 Jean*0324
0325
508ee73e24 Mart*0326 #endif /* ALLOW_GCHEM */
0327
6b9e7a8805 Jean*0328 RETURN
0329 END