2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
#include "CPP_OPTIONS.h" |
#include "CPP_OPTIONS.h" |
5 |
|
#ifdef ALLOW_GMREDI |
6 |
|
# include "GMREDI_OPTIONS.h" |
7 |
|
#endif |
8 |
|
#ifdef ALLOW_KPP |
9 |
|
# include "KPP_OPTIONS.h" |
10 |
|
#endif |
11 |
|
|
12 |
CBOP |
CBOP |
13 |
C !ROUTINE: THERMODYNAMICS |
C !ROUTINE: THERMODYNAMICS |
157 |
INTEGER i, j |
INTEGER i, j |
158 |
INTEGER k, km1, kup, kDown |
INTEGER k, km1, kup, kDown |
159 |
|
|
|
Cjmc : add for phiHyd output <- but not working if multi tile per CPU |
|
|
c CHARACTER*(MAX_LEN_MBUF) suff |
|
|
c LOGICAL DIFFERENT_MULTIPLE |
|
|
c EXTERNAL DIFFERENT_MULTIPLE |
|
|
Cjmc(end) |
|
160 |
CEOP |
CEOP |
161 |
|
|
162 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
175 |
yA(i,j) = 0. _d 0 |
yA(i,j) = 0. _d 0 |
176 |
uTrans(i,j) = 0. _d 0 |
uTrans(i,j) = 0. _d 0 |
177 |
vTrans(i,j) = 0. _d 0 |
vTrans(i,j) = 0. _d 0 |
|
DO k=1,Nr |
|
|
phiHyd(i,j,k) = 0. _d 0 |
|
|
sigmaX(i,j,k) = 0. _d 0 |
|
|
sigmaY(i,j,k) = 0. _d 0 |
|
|
sigmaR(i,j,k) = 0. _d 0 |
|
|
ENDDO |
|
|
rhoKM1 (i,j) = 0. _d 0 |
|
178 |
rhok (i,j) = 0. _d 0 |
rhok (i,j) = 0. _d 0 |
179 |
phiSurfX(i,j) = 0. _d 0 |
phiSurfX(i,j) = 0. _d 0 |
180 |
phiSurfY(i,j) = 0. _d 0 |
phiSurfY(i,j) = 0. _d 0 |
222 |
fVerS (i,j,2) = 0. _d 0 |
fVerS (i,j,2) = 0. _d 0 |
223 |
fVerTr1(i,j,1) = 0. _d 0 |
fVerTr1(i,j,1) = 0. _d 0 |
224 |
fVerTr1(i,j,2) = 0. _d 0 |
fVerTr1(i,j,2) = 0. _d 0 |
225 |
|
rhoKM1 (i,j) = 0. _d 0 |
226 |
ENDDO |
ENDDO |
227 |
ENDDO |
ENDDO |
228 |
|
|
230 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
231 |
DO i=1-OLx,sNx+OLx |
DO i=1-OLx,sNx+OLx |
232 |
C This is currently also used by IVDC and Diagnostics |
C This is currently also used by IVDC and Diagnostics |
233 |
|
phiHyd(i,j,k) = 0. _d 0 |
234 |
|
sigmaX(i,j,k) = 0. _d 0 |
235 |
|
sigmaY(i,j,k) = 0. _d 0 |
236 |
|
sigmaR(i,j,k) = 0. _d 0 |
237 |
ConvectCount(i,j,k) = 0. |
ConvectCount(i,j,k) = 0. |
238 |
KappaRT(i,j,k) = 0. _d 0 |
KappaRT(i,j,k) = 0. _d 0 |
239 |
KappaRS(i,j,k) = 0. _d 0 |
KappaRS(i,j,k) = 0. _d 0 |
243 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
244 |
gTr1(i,j,k,bi,bj) = 0. _d 0 |
gTr1(i,j,k,bi,bj) = 0. _d 0 |
245 |
#endif |
#endif |
246 |
|
#ifdef ALLOW_GMREDI |
247 |
|
Kwx(i,j,k,bi,bj) = 0. _d 0 |
248 |
|
Kwy(i,j,k,bi,bj) = 0. _d 0 |
249 |
|
Kwz(i,j,k,bi,bj) = 0. _d 0 |
250 |
|
#ifdef GM_NON_UNITY_DIAGONAL |
251 |
|
Kux(i,j,k,bi,bj) = 0. _d 0 |
252 |
|
Kvy(i,j,k,bi,bj) = 0. _d 0 |
253 |
|
#endif |
254 |
|
#endif /* ALLOW_GMREDI */ |
255 |
#endif |
#endif |
256 |
ENDDO |
ENDDO |
257 |
ENDDO |
ENDDO |
352 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
353 |
C-- Calculate future values on open boundaries |
C-- Calculate future values on open boundaries |
354 |
IF (useOBCS) THEN |
IF (useOBCS) THEN |
355 |
CALL OBCS_CALC( bi, bj, myTime+deltaT, |
CALL OBCS_CALC( bi, bj, myTime+deltaT, myIter+1, |
356 |
I uVel, vVel, wVel, theta, salt, |
I uVel, vVel, wVel, theta, salt, |
357 |
I myThid ) |
I myThid ) |
358 |
ENDIF |
ENDIF |
378 |
#ifdef ALLOW_GMREDI |
#ifdef ALLOW_GMREDI |
379 |
|
|
380 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
381 |
CADJ STORE sigmaX(:,:,:) = comlev1, key=ikey, byte=isbyte |
CADJ STORE sigmaX(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
382 |
CADJ STORE sigmaY(:,:,:) = comlev1, key=ikey, byte=isbyte |
CADJ STORE sigmaY(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
383 |
CADJ STORE sigmaR(:,:,:) = comlev1, key=ikey, byte=isbyte |
CADJ STORE sigmaR(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
384 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
385 |
C-- Calculate iso-neutral slopes for the GM/Redi parameterisation |
C-- Calculate iso-neutral slopes for the GM/Redi parameterisation |
386 |
IF (useGMRedi) THEN |
IF (useGMRedi) THEN |
387 |
DO k=1,Nr |
CALL GMREDI_CALC_TENSOR( |
388 |
CALL GMREDI_CALC_TENSOR( |
I bi, bj, iMin, iMax, jMin, jMax, |
|
I bi, bj, iMin, iMax, jMin, jMax, k, |
|
389 |
I sigmaX, sigmaY, sigmaR, |
I sigmaX, sigmaY, sigmaR, |
390 |
I myThid ) |
I myThid ) |
|
ENDDO |
|
391 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
392 |
ELSE |
ELSE |
393 |
DO k=1, Nr |
CALL GMREDI_CALC_TENSOR_DUMMY( |
394 |
CALL GMREDI_CALC_TENSOR_DUMMY( |
I bi, bj, iMin, iMax, jMin, jMax, |
|
I bi, bj, iMin, iMax, jMin, jMax, k, |
|
395 |
I sigmaX, sigmaY, sigmaR, |
I sigmaX, sigmaY, sigmaR, |
396 |
I myThid ) |
I myThid ) |
|
ENDDO |
|
397 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
398 |
ENDIF |
ENDIF |
399 |
|
|
449 |
ENDIF |
ENDIF |
450 |
#endif /* ALLOW_AIM */ |
#endif /* ALLOW_AIM */ |
451 |
|
|
452 |
|
#ifdef ALLOW_TIMEAVE |
453 |
|
IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN |
454 |
|
CALL TIMEAVE_CUMULATE(ConvectCountTave, ConvectCount, Nr, |
455 |
|
I deltaTclock, bi, bj, myThid) |
456 |
|
ENDIF |
457 |
|
#endif /* ALLOW_TIMEAVE */ |
458 |
|
|
459 |
#ifndef DISABLE_MULTIDIM_ADVECTION |
#ifndef DISABLE_MULTIDIM_ADVECTION |
460 |
C-- Some advection schemes are better calculated using a multi-dimensional |
C-- Some advection schemes are better calculated using a multi-dimensional |
461 |
C method in the absence of any other terms and, if used, is done here. |
C method in the absence of any other terms and, if used, is done here. |