File indexing completed on 2025-06-05 05:08:27 UTC
view on githubraw file Latest commit 6a6c83f9 on 2025-06-04 22:00:11 UTC
4e66ab0b67 Oliv*0001 #include "LONGSTEP_OPTIONS.h"
6a6c83f9ac Hajo*0002 #ifdef ALLOW_GMREDI
0003 # include "GMREDI_OPTIONS.h"
0004 #endif
4e66ab0b67 Oliv*0005
0006
0007
0008
0009 SUBROUTINE LONGSTEP_AVERAGE( myTime, myIter, myThid )
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 IMPLICIT NONE
0022
0023 #include "SIZE.h"
0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
fda3710353 Oliv*0026 #include "GRID.h"
4e66ab0b67 Oliv*0027 #include "DYNVARS.h"
0028 #include "FFIELDS.h"
fda3710353 Oliv*0029 #include "SURFACE.h"
4e66ab0b67 Oliv*0030 #include "LONGSTEP_PARAMS.h"
0031 #include "LONGSTEP.h"
0032 #ifdef ALLOW_GMREDI
0033 #include "GMREDI.h"
0034 #endif
0035 #ifdef ALLOW_KPP
0036 #include "KPP.h"
0037 #endif
0038
0039
0040
0041
0042
0043
03ff461a6c Jean*0044 _RL myTime
4e66ab0b67 Oliv*0045 INTEGER myIter
0046 INTEGER myThid
0047
0048 #ifdef ALLOW_LONGSTEP
0049
0050
0051
0052
0053
7b3defa94d Jean*0054 IF ( MOD(myIter, LS_nIter) .EQ. 0 ) THEN
4e66ab0b67 Oliv*0055
0056 CALL LONGSTEP_RESET_3D(LS_uVelCount, LS_uVel, Nr, myThid)
0057 CALL LONGSTEP_RESET_3D(LS_vVelCount, LS_vVel, Nr, myThid)
0058 CALL LONGSTEP_RESET_3D(LS_wVelCount, LS_wVel, Nr, myThid)
0059 CALL LONGSTEP_RESET_3D(LS_thetaCount,LS_theta,Nr, myThid)
0060 CALL LONGSTEP_RESET_3D(LS_saltCount, LS_salt, Nr, myThid)
0061 IF ( ivdc_kappa .NE. 0. _d 0 )
0062 & CALL LONGSTEP_RESET_3D(LS_IVDConvCountCount,
0063 & LS_IVDConvCount, Nr, myThid)
0064 #ifdef SHORTWAVE_HEATING
0065 CALL LONGSTEP_RESET_3D(LS_QswCount, LS_Qsw, 1, myThid)
0066 #endif
fda3710353 Oliv*0067 CALL LONGSTEP_RESET_3D(LS_fwFluxCount, LS_fwFlux, 1, myThid)
4e66ab0b67 Oliv*0068 #ifdef ALLOW_GMREDI
0069 IF ( useGMRedi ) THEN
0070 CALL LONGSTEP_RESET_3D(LS_KwxCount, LS_Kwx, Nr, myThid)
0071 CALL LONGSTEP_RESET_3D(LS_KwyCount, LS_Kwy, Nr, myThid)
0072 CALL LONGSTEP_RESET_3D(LS_KwzCount, LS_Kwz, Nr, myThid)
6a6c83f9ac Hajo*0073 CALL LONGSTEP_RESET_3D(LS_KuxCount, LS_Kux, Nr, myThid)
0074 CALL LONGSTEP_RESET_3D(LS_KvyCount, LS_Kvy, Nr, myThid)
0075 IF ( GM_ExtraDiag ) THEN
0076 CALL LONGSTEP_RESET_3D(LS_KuzCount, LS_Kuz, Nr, myThid)
0077 CALL LONGSTEP_RESET_3D(LS_KvzCount, LS_Kvz, Nr, myThid)
0078 ENDIF
0079 IF ( GM_AdvForm ) THEN
0080 CALL LONGSTEP_RESET_3D(LS_PsiXCount, LS_PsiX, Nr, myThid)
0081 CALL LONGSTEP_RESET_3D(LS_PsiYCount, LS_PsiY, Nr, myThid)
0082 ENDIF
4e66ab0b67 Oliv*0083 ENDIF
0084 #endif
0085 #ifdef ALLOW_KPP
0086 IF ( useKPP ) THEN
0087 CALL LONGSTEP_RESET_3D(LS_KPPdiffKzSCount,
0088 & LS_KPPdiffKzS, Nr, myThid)
0089 CALL LONGSTEP_RESET_3D(LS_KPPghatCount,
0090 & LS_KPPghat, Nr, myThid)
0091 ENDIF
0092 #endif
0093
0094 ENDIF
0095
0096
0097
fda3710353 Oliv*0098 CALL LONGSTEP_FILL_3D_FAC(LS_uVelCount, LS_uVel, uVel, hFacW,
0099 & Nr, myThid)
0100 CALL LONGSTEP_FILL_3D_FAC(LS_vVelCount, LS_vVel, vVel, hFacS,
0101 & Nr, myThid)
4e66ab0b67 Oliv*0102 CALL LONGSTEP_FILL_3D(LS_wVelCount, LS_wVel, wVel, Nr, myThid)
0103 CALL LONGSTEP_FILL_3D(LS_thetaCount, LS_theta, theta, Nr, myThid)
0104 CALL LONGSTEP_FILL_3D(LS_saltCount, LS_salt, salt, Nr, myThid)
0105 IF ( ivdc_kappa .NE. 0. _d 0 )
0106 & CALL LONGSTEP_FILL_3D(LS_IVDConvCountCount,
0107 & LS_IVDConvCount, IVDConvCount, Nr, myThid)
0108 #ifdef SHORTWAVE_HEATING
0af7e34ef5 Oliv*0109 CALL LONGSTEP_FILL_3D_RS(LS_QswCount, LS_Qsw, Qsw, 1, myThid)
4e66ab0b67 Oliv*0110 #endif
fda3710353 Oliv*0111 IF ( LS_usePmEpR ) THEN
5e3924b243 Jean*0112 CALL LONGSTEP_FILL_3D( LS_fwFluxCount,LS_fwFlux,PmEpR,1,myThid)
fda3710353 Oliv*0113 ELSE
0114 CALL LONGSTEP_FILL_3D_RS(LS_fwFluxCount,LS_fwFlux,EmPmR,1,myThid)
0115 ENDIF
4e66ab0b67 Oliv*0116 #ifdef ALLOW_GMREDI
0117 IF ( useGMRedi ) THEN
0118 CALL LONGSTEP_FILL_3D(LS_KwxCount, LS_Kwx, Kwx, Nr, myThid)
0119 CALL LONGSTEP_FILL_3D(LS_KwyCount, LS_Kwy, Kwy, Nr, myThid)
0120 CALL LONGSTEP_FILL_3D(LS_KwzCount, LS_Kwz, Kwz, Nr, myThid)
6a6c83f9ac Hajo*0121 CALL LONGSTEP_FILL_3D(LS_KuxCount, LS_Kux, Kux, Nr, myThid)
0122 CALL LONGSTEP_FILL_3D(LS_KvyCount, LS_Kvy, Kvy, Nr, myThid)
0123 #ifdef GM_EXTRA_DIAGONAL
0124 IF ( GM_ExtraDiag ) THEN
0125 CALL LONGSTEP_FILL_3D(LS_KuzCount, LS_Kuz, Kuz, Nr, myThid)
0126 CALL LONGSTEP_FILL_3D(LS_KvzCount, LS_Kvz, Kvz, Nr, myThid)
0127 ENDIF
0128 #endif
0129 #ifdef GM_BOLUS_ADVEC
0130 IF ( GM_AdvForm ) THEN
0131 CALL LONGSTEP_FILL_3D(LS_PsiXCount, LS_PsiX, GM_PsiX,
0132 & Nr, myThid)
0133 CALL LONGSTEP_FILL_3D(LS_PsiYCount, LS_PsiY, GM_PsiY,
0134 & Nr, myThid)
0135 ENDIF
0136 #endif
4e66ab0b67 Oliv*0137 ENDIF
0138 #endif
0139 #ifdef ALLOW_KPP
0140 IF ( useKPP ) THEN
0141 CALL LONGSTEP_FILL_3D(LS_KPPdiffKzSCount,
0142 & LS_KPPdiffKzS, KPPdiffKzS, Nr, myThid)
0143 CALL LONGSTEP_FILL_3D(LS_KPPghatCount,
0144 & LS_KPPghat, KPPghat, Nr, myThid)
0145 ENDIF
0146 #endif
0147
0148
7b3defa94d Jean*0149 IF ( MOD(myIter, LS_nIter) .EQ. LS_nIter-1 ) THEN
4e66ab0b67 Oliv*0150
fda3710353 Oliv*0151 CALL LONGSTEP_AVERAGE_3D_FAC(LS_uVelCount, LS_uVel, hFacW,
0152 & Nr, myThid)
0153 CALL LONGSTEP_AVERAGE_3D_FAC(LS_vVelCount, LS_vVel, hFacS,
0154 & Nr, myThid)
4e66ab0b67 Oliv*0155 CALL LONGSTEP_AVERAGE_3D(LS_wVelCount, LS_wVel, Nr, myThid)
0156 CALL LONGSTEP_AVERAGE_3D(LS_thetaCount,LS_theta,Nr, myThid)
0157 CALL LONGSTEP_AVERAGE_3D(LS_saltCount, LS_salt, Nr, myThid)
0158 IF ( ivdc_kappa .NE. 0. _d 0 )
0159 & CALL LONGSTEP_AVERAGE_3D(LS_IVDConvCountCount,
0160 & LS_IVDConvCount, Nr, myThid)
0161 #ifdef SHORTWAVE_HEATING
0162 CALL LONGSTEP_AVERAGE_3D(LS_QswCount, LS_Qsw, 1, myThid)
0163 #endif
fda3710353 Oliv*0164 CALL LONGSTEP_AVERAGE_3D(LS_fwFluxCount, LS_fwFlux, 1, myThid)
0165
4e66ab0b67 Oliv*0166 #ifdef ALLOW_GMREDI
0167 IF ( useGMRedi ) THEN
0168 CALL LONGSTEP_AVERAGE_3D(LS_KwxCount, LS_Kwx, Nr, myThid)
0169 CALL LONGSTEP_AVERAGE_3D(LS_KwyCount, LS_Kwy, Nr, myThid)
0170 CALL LONGSTEP_AVERAGE_3D(LS_KwzCount, LS_Kwz, Nr, myThid)
6a6c83f9ac Hajo*0171 CALL LONGSTEP_AVERAGE_3D(LS_KuxCount, LS_Kux, Nr, myThid)
0172 CALL LONGSTEP_AVERAGE_3D(LS_KvyCount, LS_Kvy, Nr, myThid)
0173 IF ( GM_ExtraDiag ) THEN
0174 CALL LONGSTEP_AVERAGE_3D(LS_KuzCount, LS_Kuz, Nr, myThid)
0175 CALL LONGSTEP_AVERAGE_3D(LS_KvzCount, LS_Kvz, Nr, myThid)
0176 ENDIF
0177 IF ( GM_AdvForm ) THEN
0178 CALL LONGSTEP_AVERAGE_3D(LS_PsiXCount, LS_PsiX, Nr, myThid)
0179 CALL LONGSTEP_AVERAGE_3D(LS_PsiYCount, LS_PsiY, Nr, myThid)
0180 ENDIF
4e66ab0b67 Oliv*0181 ENDIF
0182 #endif
0183 #ifdef ALLOW_KPP
0184 IF ( useKPP ) THEN
0185 CALL LONGSTEP_AVERAGE_3D(LS_KPPdiffKzSCount,
0186 & LS_KPPdiffKzS, Nr, myThid)
0187 CALL LONGSTEP_AVERAGE_3D(LS_KPPghatCount,
0188 & LS_KPPghat, Nr, myThid)
0189 ENDIF
0190 #endif
0191
0192 #if 0
0193
0194 CALL EXCH_UV_3D_RL( LS_uVel, LS_vVel, .TRUE., Nr, myThid )
0195 CALL EXCH_3D_RL( LS_wVel , Nr, myThid )
0196 CALL EXCH_3D_RL( LS_theta, Nr, myThid )
0197 CALL EXCH_3D_RL( LS_salt , Nr, myThid )
0198 IF ( ivdc_kappa .NE. 0. _d 0 )
0199 & CALL EXCH_3D_RL( LS_IVDConvCount, myThid )
0200 #ifdef SHORTWAVE_HEATING
0201 CALL EXCH_XY_RL( LS_Qsw, myThid )
0202 #endif
fda3710353 Oliv*0203 CALL EXCH_XY_RL( LS_fwFlux, myThid )
4e66ab0b67 Oliv*0204 #ifdef ALLOW_GMREDI
0205 IF ( useGMRedi ) THEN
6a6c83f9ac Hajo*0206 CALL EXCH_UV_AGRID_3D_RL( LS_Kwx, LS_Kwy, .TRUE., Nr, myThid )
4e66ab0b67 Oliv*0207 CALL EXCH_3D_RL( LS_Kwz , Nr, myThid )
6a6c83f9ac Hajo*0208 CALL EXCH_UV_3D_RL( LS_Kux, LS_Kvy, .FALSE., Nr, myThid )
0209 IF ( GM_ExtraDiag ) THEN
0210 CALL EXCH_UV_3D_RL( LS_Kuz, LS_Kvz, .TRUE., Nr, myThid )
0211 ENDIF
0212 IF ( GM_AdvForm ) THEN
0213 CALL EXCH_UV_3D_RL( LS_PsiX, LS_PsiY, .TRUE., Nr, myThid )
0214 ENDIF
4e66ab0b67 Oliv*0215 ENDIF
0216 #endif
0217 #ifdef ALLOW_KPP
0218 IF ( useKPP ) THEN
0219 CALL EXCH_3D_RL( LS_KPPdiffKzS, Nr, myThid )
0220 CALL EXCH_3D_RL( LS_KPPghat, Nr, myThid )
0221 ENDIF
0222 #endif
0223 #endif /* 0 */
0224
0225 #ifdef ALLOW_DIAGNOSTICS
0226 IF ( useDiagnostics ) THEN
0227 CALL DIAGNOSTICS_FILL(LS_uVel, 'LSuVel ',0,Nr,0,1,1,myThid)
0228 CALL DIAGNOSTICS_FILL(LS_vVel, 'LSvVel ',0,Nr,0,1,1,myThid)
0229 CALL DIAGNOSTICS_FILL(LS_wVel, 'LSwVel ',0,Nr,0,1,1,myThid)
0230 CALL DIAGNOSTICS_FILL(LS_theta,'LStheta ',0,Nr,0,1,1,myThid)
0231 CALL DIAGNOSTICS_FILL(LS_salt, 'LSsalt ',0,Nr,0,1,1,myThid)
0232 IF ( ivdc_kappa .NE. 0. _d 0 .AND. .NOT. useKPP )
0233 & CALL DIAGNOSTICS_FILL(LS_IVDConvCount,
0234 & 'LScnvAdj',0,Nr,0,1,1,myThid)
0235 #ifdef SHORTWAVE_HEATING
0236 CALL DIAGNOSTICS_FILL(LS_Qsw , 'LSqsw ',0,1 ,0,1,1,myThid)
0237 #endif
fda3710353 Oliv*0238 CALL DIAGNOSTICS_FILL(LS_fwFlux, 'LSfwFlux',0,1 ,0,1,1,myThid)
4e66ab0b67 Oliv*0239 #ifdef ALLOW_GMREDI
0240 IF ( useGMRedi ) THEN
0241 CALL DIAGNOSTICS_FILL(LS_Kwx , 'LSkwx ',0,Nr,0,1,1,myThid)
0242 CALL DIAGNOSTICS_FILL(LS_Kwy , 'LSkwy ',0,Nr,0,1,1,myThid)
0243 CALL DIAGNOSTICS_FILL(LS_Kwz , 'LSkwz ',0,Nr,0,1,1,myThid)
6a6c83f9ac Hajo*0244 CALL DIAGNOSTICS_FILL(LS_Kux , 'LSkux ',0,Nr,0,1,1,myThid)
0245 CALL DIAGNOSTICS_FILL(LS_Kvy , 'LSkvy ',0,Nr,0,1,1,myThid)
0246 IF ( GM_ExtraDiag ) THEN
0247 CALL DIAGNOSTICS_FILL(LS_Kuz, 'LSkuz ',0,Nr,0,1,1,myThid)
0248 CALL DIAGNOSTICS_FILL(LS_Kvz, 'LSkvz ',0,Nr,0,1,1,myThid)
0249 ENDIF
0250 IF ( GM_AdvForm ) THEN
0251 CALL DIAGNOSTICS_FILL(LS_PsiX, 'LS_PsiX ',0,Nr,0,1,1,myThid)
0252 CALL DIAGNOSTICS_FILL(LS_PsiY, 'LS_PsiY ',0,Nr,0,1,1,myThid)
0253 ENDIF
4e66ab0b67 Oliv*0254 ENDIF
0255 #endif
0256 #ifdef ALLOW_KPP
0257 IF ( useKPP ) THEN
0258 CALL DIAGNOSTICS_FILL(LS_KPPdiffKzs,
0259 & 'LSKPPdfS',0,Nr,0,1,1,myThid)
0260 CALL DIAGNOSTICS_FILL(LS_KPPghat,
0261 & 'LSKPPght',0,Nr,0,1,1,myThid)
0262 ENDIF
0263 #endif
0264
0265 ENDIF
0266 #endif /* ALLOW_DIAGNOSTICS */
0267
7b3defa94d Jean*0268 _BARRIER
0269 _BEGIN_MASTER(myThid)
0270
0271
0272
0273 LS_doTimeStep = .TRUE.
0274 _END_MASTER(myThid)
0275 _BARRIER
0276
0277 ELSEIF ( MOD(myIter, LS_nIter) .EQ. 0 ) THEN
0278
0279
0280 _BARRIER
0281 _BEGIN_MASTER(myThid)
0282 LS_doTimeStep = .FALSE.
0283 _END_MASTER(myThid)
0284 _BARRIER
0285
0286
4e66ab0b67 Oliv*0287 ENDIF
0288
0289 #endif /* ALLOW_LONGSTEP */
0290
0291 RETURN
0292 END
0293