File indexing completed on 2024-12-17 18:35:39 UTC
view on githubraw file Latest commit 68e980b1 on 2023-02-08 16:27:53 UTC
52a73f04fb Step*0001 #include "GCHEM_OPTIONS.h"
3f30a61ce1 Davi*0002 #ifdef ALLOW_DIC
0b2b69e236 Jean*0003 # include "DIC_OPTIONS.h"
0004 #endif
0005 #ifdef ALLOW_BLING
0006 # include "BLING_OPTIONS.h"
3f30a61ce1 Davi*0007 #endif
5dae554984 Oliv*0008 #ifdef ALLOW_DARWIN
0b2b69e236 Jean*0009 # include "DARWIN_OPTIONS.h"
5dae554984 Oliv*0010 #endif
0011
8120bbf77d Step*0012
969f3d7839 Mart*0013
52a73f04fb Step*0014
e1fb02e8f0 Jean*0015 SUBROUTINE GCHEM_FORCING_SEP( myTime, myIter, myThid )
52a73f04fb Step*0016
8120bbf77d Step*0017
969f3d7839 Mart*0018
0019
847df67610 Jean*0020
0021
969f3d7839 Mart*0022
8120bbf77d Step*0023
0024
52a73f04fb Step*0025 IMPLICIT NONE
0026 #include "SIZE.h"
0027 #include "EEPARAMS.h"
0028 #include "PARAMS.h"
d652e84639 Jean*0029 #include "GRID.h"
0030 #include "DYNVARS.h"
862edcc91c Jean*0031 #include "PTRACERS_SIZE.h"
d652e84639 Jean*0032 #include "PTRACERS_PARAMS.h"
847df67610 Jean*0033 #include "PTRACERS_FIELDS.h"
5dae554984 Oliv*0034 #include "GCHEM.h"
9217bf430c Step*0035 #ifdef ALLOW_DIC
0b2b69e236 Jean*0036 # include "DIC_VARS.h"
969f3d7839 Mart*0037 #endif /* ALLOW_DIC */
0b2b69e236 Jean*0038 #ifdef ALLOW_BLING
0039 # include "BLING_VARS.h"
0040 #endif /* ALLOW_BLING */
312383bc20 Step*0041 #ifdef ALLOW_DARWIN
0b2b69e236 Jean*0042 # include "DARWIN_SIZE.h"
bb66933431 Oliv*0043 # include "DARWIN_INDICES.h"
0044 # include "DARWIN_FLUX.h"
312383bc20 Step*0045 #endif
52a73f04fb Step*0046
0047
0048
0049 _RL myTime
e1fb02e8f0 Jean*0050 INTEGER myIter, myThid
8120bbf77d Step*0051
52a73f04fb Step*0052
0053 #ifdef ALLOW_GCHEM
bdb0f70f18 Mart*0054 #ifdef GCHEM_SEPARATE_FORCING
52a73f04fb Step*0055
e1fb02e8f0 Jean*0056
0057
0058
0059
0060 INTEGER bi,bj,iMin,iMax,jMin,jMax
0061
5979b35251 Jean*0062 PARAMETER( iMin = 1 , iMax = sNx )
0063 PARAMETER( jMin = 1 , jMax = sNy )
6967cafe86 Jean*0064 #if (defined ALLOW_OBCS) || (defined ALLOW_DIAGNOSTICS)
d652e84639 Jean*0065 INTEGER iTr
6967cafe86 Jean*0066 #endif
0067 #ifdef ALLOW_DIAGNOSTICS
d652e84639 Jean*0068 CHARACTER*8 diagName
0069 #endif /* ALLOW_DIAGNOSTICS */
0070
5979b35251 Jean*0071 #ifdef ALLOW_DEBUG
0072 IF (debugMode) CALL DEBUG_ENTER('GCHEM_FORCING_SEP',myThid)
0073 #endif
0074
d652e84639 Jean*0075 #ifdef ALLOW_DIAGNOSTICS
0076 IF ( useDiagnostics ) THEN
0077
3c00322f26 Jean*0078 DO iTr = 1,gchem_sepFTr_num
d652e84639 Jean*0079 diagName = ' '
0080 WRITE(diagName,'(A5,A2)') 'GC_Tr', PTRACERS_ioLabel(iTr)
0081 CALL DIAGNOSTICS_FILL( pTracer(1-OLx,1-OLy,1,1,1,iTr), diagName,
0082 & 0, Nr, 0, 1, 1, myThid )
0083 ENDDO
0084 ENDIF
0085 #endif /* ALLOW_DIAGNOSTICS */
e1fb02e8f0 Jean*0086
52a73f04fb Step*0087
0088
0089
bb66933431 Oliv*0090 #ifdef ALLOW_DARWIN
0091 IF ( useDARWIN ) THEN
0092 CALL DARWIN_CONSERVE_SURFACE( myTime, myIter, myThid )
9a7312b062 Oliv*0093 CALL DARWIN_CONS( 1, myTime, myIter, myThid )
5e411acc9e Oliv*0094 CALL DARWIN_CONS_RESET( myThid )
bb66933431 Oliv*0095 ENDIF
0096 #endif
0097
04d6738595 Davi*0098 #ifdef ALLOW_OLD_VIRTUALFLUX
312383bc20 Step*0099 #ifdef ALLOW_DIC
e3c76005ea Jean*0100 # ifdef ALLOW_AUTODIFF
3de72b607c Jean*0101 IF ( .NOT.useDIC ) STOP 'ABNORMAL END: S/R GCHEM_FORCING_SEP (1)'
e3c76005ea Jean*0102 # else /* ALLOW_AUTODIFF */
0103 IF ( useDIC ) THEN
0104 # endif /* ALLOW_AUTODIFF */
52a73f04fb Step*0105
71ebe3095c Davi*0106 gsm_s = 0. _d 0
0107 gsm_dic = 0. _d 0
0108 gsm_alk = 0. _d 0
7f498da5b5 Oliv*0109 CALL GCHEM_SURFMEAN(salt,gsm_s,myThid)
0110 CALL GCHEM_SURFMEAN(
35050126c6 Oliv*0111 & pTracer(1-OLx,1-OLy,1,1,1,1), gsm_dic, myThid )
7f498da5b5 Oliv*0112 CALL GCHEM_SURFMEAN(
35050126c6 Oliv*0113 & pTracer(1-OLx,1-OLy,1,1,1,2), gsm_alk, myThid )
e3c76005ea Jean*0114 # ifndef ALLOW_AUTODIFF
0115 ENDIF
0116 # endif /* ALLOW_AUTODIFF */
6967cafe86 Jean*0117 #endif /* ALLOW_DIC */
312383bc20 Step*0118 #ifdef ALLOW_DARWIN
6967cafe86 Jean*0119
312383bc20 Step*0120
0121 gsm_s = 0. _d 0
0122 gsm_dic = 0. _d 0
0123 gsm_alk = 0. _d 0
7f498da5b5 Oliv*0124 CALL GCHEM_SURFMEAN(salt,gsm_s,myThid)
0125 CALL GCHEM_SURFMEAN(
35050126c6 Oliv*0126 & pTracer(1-OLx,1-OLy,1,1,1,iDIC), gsm_dic, myThid )
7f498da5b5 Oliv*0127 CALL GCHEM_SURFMEAN(
35050126c6 Oliv*0128 & pTracer(1-OLx,1-OLy,1,1,1,iALK), gsm_alk, myThid )
6967cafe86 Jean*0129
312383bc20 Step*0130 #endif
52a73f04fb Step*0131
f54a5bbe52 Jean*0132 #endif /* ALLOW_OLD_VIRTUALFLUX */
52a73f04fb Step*0133
0134
0135
0136
f4faabd05a Step*0137
6967cafe86 Jean*0138 DO bj=myByLo(myThid),myByHi(myThid)
f4faabd05a Step*0139
6967cafe86 Jean*0140 DO bi=myBxLo(myThid),myBxHi(myThid)
52a73f04fb Step*0141
0142
fd9adddc17 Step*0143 #ifdef ALLOW_DIC
e3c76005ea Jean*0144 # ifdef ALLOW_AUTODIFF
3de72b607c Jean*0145 IF (.NOT.useDIC) STOP 'ABNORMAL END: S/R GCHEM_FORCING_SEP (2)'
e3c76005ea Jean*0146 # else /* ALLOW_AUTODIFF */
0147 IF ( useDIC ) THEN
0148 # endif /* ALLOW_AUTODIFF */
5979b35251 Jean*0149 #ifdef ALLOW_DEBUG
0150 IF (debugMode) CALL DEBUG_CALL('DIC_BIOTIC_FORCING',myThid)
0151 #endif
52a73f04fb Step*0152 #ifdef ALLOW_FE
e1fb02e8f0 Jean*0153 CALL DIC_BIOTIC_FORCING( pTracer(1-OLx,1-OLy,1,bi,bj,1),
0154 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
0155 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
0156 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
0157 & pTracer(1-OLx,1-OLy,1,bi,bj,5),
0158 & pTracer(1-OLx,1-OLy,1,bi,bj,6),
8a77e77698 Jean*0159 & bi, bj, iMin, iMax, jMin, jMax,
2e3e8c330d Jona*0160 & myTime, myIter, myThid )
52a73f04fb Step*0161 #else
25bac1e456 Step*0162 #ifdef ALLOW_O2
8a77e77698 Jean*0163 CALL DIC_BIOTIC_FORCING( pTracer(1-OLx,1-OLy,1,bi,bj,1),
e1fb02e8f0 Jean*0164 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
0165 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
0166 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
0167 & pTracer(1-OLx,1-OLy,1,bi,bj,5),
8a77e77698 Jean*0168 & bi, bj, iMin, iMax, jMin, jMax,
2e3e8c330d Jona*0169 & myTime, myIter, myThid )
25bac1e456 Step*0170 #else
8a77e77698 Jean*0171 CALL DIC_BIOTIC_FORCING( pTracer(1-OLx,1-OLy,1,bi,bj,1),
e1fb02e8f0 Jean*0172 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
0173 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
0174 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
8a77e77698 Jean*0175 & bi, bj, iMin, iMax, jMin, jMax,
2e3e8c330d Jona*0176 & myTime, myIter, myThid )
25bac1e456 Step*0177 #endif
52a73f04fb Step*0178 #endif
e3c76005ea Jean*0179 # ifndef ALLOW_AUTODIFF
0180 ENDIF
0181 # endif /* ALLOW_AUTODIFF */
6967cafe86 Jean*0182 #endif /* ALLOW_DIC */
52a73f04fb Step*0183
6967cafe86 Jean*0184
0b2b69e236 Jean*0185
0186 #ifdef ALLOW_BLING
39016d5e45 Matt*0187 IF ( useBLING ) THEN
a284455135 Matt*0188 # ifndef USE_BLING_V1
e0f9a7ba0b Matt*0189 # ifdef USE_SIBLING
0b2b69e236 Jean*0190 CALL BLING_MAIN( pTracer(1-OLx,1-OLy,1,bi,bj,1),
0191 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
0192 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
0193 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
0194 & pTracer(1-OLx,1-OLy,1,bi,bj,5),
0195 & pTracer(1-OLx,1-OLy,1,bi,bj,6),
0196 & pTracer(1-OLx,1-OLy,1,bi,bj,7),
0197 & pTracer(1-OLx,1-OLy,1,bi,bj,8),
0198 & pTracer(1-OLx,1-OLy,1,bi,bj,9),
e0f9a7ba0b Matt*0199 # ifdef ADVECT_PHYTO
0200 & pTracer(1-OLx,1-OLy,1,bi,bj,10),
0201 # endif
0b2b69e236 Jean*0202 & bi, bj, iMin, iMax, jMin, jMax,
e0f9a7ba0b Matt*0203 & myTime, myIter, myThid )
0204 # else /* USE_SIBLING */
0205 CALL BLING_MAIN( pTracer(1-OLx,1-OLy,1,bi,bj,1),
0206 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
0207 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
0208 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
0209 & pTracer(1-OLx,1-OLy,1,bi,bj,5),
0210 & pTracer(1-OLx,1-OLy,1,bi,bj,6),
0211 & pTracer(1-OLx,1-OLy,1,bi,bj,7),
0212 & pTracer(1-OLx,1-OLy,1,bi,bj,8),
0213 # ifdef ADVECT_PHYTO
0214 & pTracer(1-OLx,1-OLy,1,bi,bj,9),
0215 # endif
0216 & bi, bj, iMin, iMax, jMin, jMax,
0217 & myTime, myIter, myThid )
0218 # endif /* USE_SIBLING */
0219 # else /* USE_BLING_v1 */
0220 CALL BLING_MAIN( pTracer(1-OLx,1-OLy,1,bi,bj,1),
0221 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
0222 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
0223 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
0224 & pTracer(1-OLx,1-OLy,1,bi,bj,5),
0225 & pTracer(1-OLx,1-OLy,1,bi,bj,6),
0226 # ifdef ADVECT_PHYTO
0227 & pTracer(1-OLx,1-OLy,1,bi,bj,7),
0228 # endif
0229 & bi, bj, iMin, iMax, jMin, jMax,
0230 & myTime, myIter, myThid )
0231 # endif /* USE_BLING_v1 */
39016d5e45 Matt*0232 ENDIF
0b2b69e236 Jean*0233 #endif /* ALLOW_BLING */
0234
0235
bb66933431 Oliv*0236
5dae554984 Oliv*0237 #ifdef ALLOW_DARWIN
6967cafe86 Jean*0238 IF ( useDARWIN ) THEN
5dae554984 Oliv*0239 #ifdef NUT_SUPPLY
0240
5979b35251 Jean*0241 #ifdef ALLOW_DEBUG
0242 IF (debugMode) CALL DEBUG_CALL('DARWIN_NUT_SUPPLY',myThid)
0243 #endif
bb66933431 Oliv*0244 CALL DARWIN_NUT_SUPPLY( pTracer(1-OLx,1-OLy,1,bi,bj,iPO4),
8a77e77698 Jean*0245 & bi, bj, iMin, iMax, jMin, jMax,
0246 & myIter, myTime, myThid )
bb66933431 Oliv*0247 CALL DARWIN_NUT_SUPPLY( pTracer(1-OLx,1-OLy,1,bi,bj,iNO3),
8a77e77698 Jean*0248 & bi, bj, iMin, iMax, jMin, jMax,
0249 & myIter, myTime, myThid )
bb66933431 Oliv*0250 CALL DARWIN_NUT_SUPPLY( pTracer(1-OLx,1-OLy,1,bi,bj,iFeT),
8a77e77698 Jean*0251 & bi, bj, iMin, iMax, jMin, jMax,
0252 & myIter, myTime, myThid )
bb66933431 Oliv*0253 CALL DARWIN_NUT_SUPPLY( pTracer(1-OLx,1-OLy,1,bi,bj,iSiO2),
8a77e77698 Jean*0254 & bi, bj, iMin, iMax, jMin, jMax,
0255 & myIter, myTime, myThid )
5dae554984 Oliv*0256 #endif
0257
0258
0259
5979b35251 Jean*0260 #ifdef ALLOW_DEBUG
0261 IF (debugMode) CALL DEBUG_CALL('DARWIN_FORCING',myThid)
0262 #endif
bb66933431 Oliv*0263 CALL TIMER_START('DARWIN_FORCING [GCHEM_FORCING_SEP]',myThid)
e1fb02e8f0 Jean*0264 CALL DARWIN_FORCING( pTracer(1-OLx,1-OLy,1,1,1,1),
8a77e77698 Jean*0265 & bi, bj, iMin, iMax, jMin, jMax,
0266 & myIter, myTime, myThid )
bb66933431 Oliv*0267 CALL TIMER_STOP ('DARWIN_FORCING [GCHEM_FORCING_SEP]',myThid)
6967cafe86 Jean*0268 ENDIF
3f64833ab3 Oliv*0269 #endif /* ALLOW_DARWIN */
bb66933431 Oliv*0270
3a785bc7ce Step*0271
6967cafe86 Jean*0272 #ifdef ALLOW_OBCS
0273
0274
0275
0276
8a77e77698 Jean*0277 IF ( useOBCS .AND. .NOT.useDIC ) THEN
5979b35251 Jean*0278 #ifdef ALLOW_DEBUG
0279 IF (debugMode) CALL DEBUG_CALL('OBCS_APPLY_PTRACER',myThid)
0280 #endif
3c00322f26 Jean*0281 DO iTr = 1,gchem_sepFTr_num
6967cafe86 Jean*0282 CALL OBCS_APPLY_PTRACER(
0283 I bi, bj, 0, iTr,
0284 U pTracer(1-OLx,1-OLy,1,bi,bj,iTr),
0285 I myThid )
0286 ENDDO
0287 ENDIF
0288 #endif /* ALLOW_OBCS */
0289
bb66933431 Oliv*0290
52a73f04fb Step*0291 ENDDO
6967cafe86 Jean*0292 ENDDO
52a73f04fb Step*0293
3f64833ab3 Oliv*0294 #ifdef ALLOW_DARWIN
6967cafe86 Jean*0295 IF ( useDARWIN ) THEN
9a7312b062 Oliv*0296 CALL DARWIN_CONS( 2, myTime, myIter, myThid )
bb66933431 Oliv*0297 CALL DARWIN_ATMOS( myTime, myIter, myThid )
6967cafe86 Jean*0298 ENDIF
3f64833ab3 Oliv*0299 #endif /* ALLOW_DARWIN */
0300
3771641ead Step*0301 #ifdef ALLOW_DIC
3de72b607c Jean*0302 # ifdef ALLOW_AUTODIFF
0303 IF ( .NOT.useDIC ) STOP 'ABNORMAL END: S/R GCHEM_FORCING_SEP (3)'
0304 # else /* ALLOW_AUTODIFF */
6967cafe86 Jean*0305 IF ( useDIC ) THEN
3de72b607c Jean*0306 # endif /* ALLOW_AUTODIFF */
5979b35251 Jean*0307 #ifdef ALLOW_DEBUG
0308 IF (debugMode) CALL DEBUG_CALL('DIC_ATMOS',myThid)
0309 #endif
3de72b607c Jean*0310 CALL DIC_ATMOS( myTime, myIter, myThid )
6967cafe86 Jean*0311 # ifdef COMPONENT_MODULE
cdaaeac08c Davi*0312 CALL DIC_STORE_FLUXCO2( myTime, myIter, myThid )
6967cafe86 Jean*0313 # endif
0314 # ifdef ALLOW_COST
21a58cf9c9 Patr*0315 CALL DIC_COST( myTime, myIter, myThid )
6967cafe86 Jean*0316 # endif
3de72b607c Jean*0317 # ifndef ALLOW_AUTODIFF
6967cafe86 Jean*0318 ENDIF
3de72b607c Jean*0319 # endif /* ALLOW_AUTODIFF */
e5e08e2882 Jean*0320 #endif /* ALLOW_DIC */
21a58cf9c9 Patr*0321
5979b35251 Jean*0322 #ifdef ALLOW_DEBUG
0323 IF (debugMode) CALL DEBUG_LEAVE('GCHEM_FORCING_SEP',myThid)
0324 #endif
0325
bdb0f70f18 Mart*0326 #endif /* GCHEM_SEPARATE_FORCING */
52a73f04fb Step*0327 #endif /* ALLOW_GCHEM */
0328
0329 RETURN
0330 END