83 |
# include "tamc.h" |
# include "tamc.h" |
84 |
# include "tamc_keys.h" |
# include "tamc_keys.h" |
85 |
# include "FFIELDS.h" |
# include "FFIELDS.h" |
86 |
|
# include "EOS.h" |
87 |
# ifdef ALLOW_KPP |
# ifdef ALLOW_KPP |
88 |
# include "KPP.h" |
# include "KPP.h" |
89 |
# endif |
# endif |
165 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
166 |
C-- dummy statement to end declaration part |
C-- dummy statement to end declaration part |
167 |
ikey = 1 |
ikey = 1 |
168 |
|
itdkey = 1 |
169 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
170 |
|
|
171 |
C-- Set up work arrays with valid (i.e. not NaN) values |
C-- Set up work arrays with valid (i.e. not NaN) values |
211 |
act3 = myThid - 1 |
act3 = myThid - 1 |
212 |
max3 = nTx*nTy |
max3 = nTx*nTy |
213 |
act4 = ikey_dynamics - 1 |
act4 = ikey_dynamics - 1 |
214 |
ikey = (act1 + 1) + act2*max1 |
itdkey = (act1 + 1) + act2*max1 |
215 |
& + act3*max1*max2 |
& + act3*max1*max2 |
216 |
& + act4*max1*max2*max3 |
& + act4*max1*max2*max3 |
217 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
234 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
235 |
DO i=1-OLx,sNx+OLx |
DO i=1-OLx,sNx+OLx |
236 |
C This is currently also used by IVDC and Diagnostics |
C This is currently also used by IVDC and Diagnostics |
237 |
phiHyd(i,j,k) = 0. _d 0 |
phiHyd(i,j,k) = 0. _d 0 |
238 |
sigmaX(i,j,k) = 0. _d 0 |
sigmaX(i,j,k) = 0. _d 0 |
239 |
sigmaY(i,j,k) = 0. _d 0 |
sigmaY(i,j,k) = 0. _d 0 |
240 |
sigmaR(i,j,k) = 0. _d 0 |
sigmaR(i,j,k) = 0. _d 0 |
241 |
ConvectCount(i,j,k) = 0. |
ConvectCount(i,j,k) = 0. |
242 |
KappaRT(i,j,k) = 0. _d 0 |
KappaRT(i,j,k) = 0. _d 0 |
243 |
KappaRS(i,j,k) = 0. _d 0 |
KappaRS(i,j,k) = 0. _d 0 |
244 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
245 |
gT(i,j,k,bi,bj) = 0. _d 0 |
cph all the following init. are necessary for TAF |
246 |
gS(i,j,k,bi,bj) = 0. _d 0 |
cph although some of these are re-initialised later. |
247 |
#ifdef ALLOW_PASSIVE_TRACER |
gT(i,j,k,bi,bj) = 0. _d 0 |
248 |
|
gS(i,j,k,bi,bj) = 0. _d 0 |
249 |
|
# ifdef ALLOW_PASSIVE_TRACER |
250 |
gTr1(i,j,k,bi,bj) = 0. _d 0 |
gTr1(i,j,k,bi,bj) = 0. _d 0 |
251 |
#endif |
# endif |
252 |
#ifdef ALLOW_GMREDI |
# ifdef ALLOW_GMREDI |
253 |
Kwx(i,j,k,bi,bj) = 0. _d 0 |
Kwx(i,j,k,bi,bj) = 0. _d 0 |
254 |
Kwy(i,j,k,bi,bj) = 0. _d 0 |
Kwy(i,j,k,bi,bj) = 0. _d 0 |
255 |
Kwz(i,j,k,bi,bj) = 0. _d 0 |
Kwz(i,j,k,bi,bj) = 0. _d 0 |
256 |
#ifdef GM_NON_UNITY_DIAGONAL |
# ifdef GM_NON_UNITY_DIAGONAL |
257 |
Kux(i,j,k,bi,bj) = 0. _d 0 |
Kux(i,j,k,bi,bj) = 0. _d 0 |
258 |
Kvy(i,j,k,bi,bj) = 0. _d 0 |
Kvy(i,j,k,bi,bj) = 0. _d 0 |
259 |
#endif |
# endif |
260 |
#endif /* ALLOW_GMREDI */ |
# ifdef GM_EXTRA_DIAGONAL |
261 |
#endif |
Kuz(i,j,k,bi,bj) = 0. _d 0 |
262 |
|
Kvz(i,j,k,bi,bj) = 0. _d 0 |
263 |
|
# endif |
264 |
|
# ifdef GM_BOLUS_ADVEC |
265 |
|
GM_PsiX(i,j,k,bi,bj) = 0. _d 0 |
266 |
|
GM_PsiY(i,j,k,bi,bj) = 0. _d 0 |
267 |
|
# endif |
268 |
|
# endif /* ALLOW_GMREDI */ |
269 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
270 |
ENDDO |
ENDDO |
271 |
ENDDO |
ENDDO |
272 |
ENDDO |
ENDDO |
278 |
|
|
279 |
|
|
280 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
281 |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
282 |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
283 |
#ifdef ALLOW_KPP |
#ifdef ALLOW_KPP |
284 |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
285 |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
286 |
#endif |
#endif |
287 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
288 |
|
|
294 |
C? Do we still need this? |
C? Do we still need this? |
295 |
cph kkey formula corrected. |
cph kkey formula corrected. |
296 |
cph Needed for rhok, rhokm1, in the case useGMREDI. |
cph Needed for rhok, rhokm1, in the case useGMREDI. |
297 |
kkey = (ikey-1)*Nr + k |
kkey = (itdkey-1)*Nr + k |
|
CADJ STORE rhokm1(:,:) = comlev1_bibj_k , key=kkey, byte=isbyte |
|
|
CADJ STORE rhok (:,:) = comlev1_bibj_k , key=kkey, byte=isbyte |
|
298 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
299 |
|
|
300 |
C-- Integrate continuity vertically for vertical velocity |
C-- Integrate continuity vertically for vertical velocity |
323 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
324 |
CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
325 |
CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
326 |
|
CADJ STORE pressure(:,:,k,bi,bj) = |
327 |
|
CADJ & comlev1_bibj_k, key=kkey, byte=isbyte |
328 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
329 |
CALL FIND_RHO( |
CALL FIND_RHO( |
330 |
I bi, bj, iMin, iMax, jMin, jMax, k, k, |
I bi, bj, iMin, iMax, jMin, jMax, k, k, |
331 |
I theta, salt, |
I theta, salt, |
332 |
O rhoK, |
O rhoK, |
333 |
I myThid ) |
I myThid ) |
334 |
|
|
335 |
IF (k.GT.1) THEN |
IF (k.GT.1) THEN |
336 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
337 |
CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
338 |
CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
339 |
|
CADJ STORE pressure(:,:,k-1,bi,bj) = |
340 |
|
CADJ & comlev1_bibj_k, key=kkey, byte=isbyte |
341 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
342 |
CALL FIND_RHO( |
CALL FIND_RHO( |
343 |
I bi, bj, iMin, iMax, jMin, jMax, k-1, k, |
I bi, bj, iMin, iMax, jMin, jMax, k-1, k, |
352 |
I myThid ) |
I myThid ) |
353 |
ENDIF |
ENDIF |
354 |
|
|
355 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
356 |
|
CADJ STORE rhok (:,:) = comlev1_bibj_k , key=kkey, byte=isbyte |
357 |
|
CADJ STORE rhokm1 (:,:) = comlev1_bibj_k , key=kkey, byte=isbyte |
358 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
359 |
C-- Implicit Vertical Diffusion for Convection |
C-- Implicit Vertical Diffusion for Convection |
360 |
c ==> should use sigmaR !!! |
c ==> should use sigmaR !!! |
361 |
IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN |
IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN |
373 |
|
|
374 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
375 |
cph avoids recomputation of integrate_for_w |
cph avoids recomputation of integrate_for_w |
376 |
CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
377 |
|
CADJ STORE pressure (:,:,:,bi,bj) = |
378 |
|
CADJ & comlev1_bibj, key=itdkey, byte=isbyte |
379 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
380 |
|
|
381 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
395 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
396 |
cph needed for KPP |
cph needed for KPP |
397 |
CADJ STORE surfacetendencyU(:,:,bi,bj) |
CADJ STORE surfacetendencyU(:,:,bi,bj) |
398 |
CADJ & = comlev1_bibj, key=ikey, byte=isbyte |
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
399 |
CADJ STORE surfacetendencyV(:,:,bi,bj) |
CADJ STORE surfacetendencyV(:,:,bi,bj) |
400 |
CADJ & = comlev1_bibj, key=ikey, byte=isbyte |
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
401 |
CADJ STORE surfacetendencyS(:,:,bi,bj) |
CADJ STORE surfacetendencyS(:,:,bi,bj) |
402 |
CADJ & = comlev1_bibj, key=ikey, byte=isbyte |
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
403 |
CADJ STORE surfacetendencyT(:,:,bi,bj) |
CADJ STORE surfacetendencyT(:,:,bi,bj) |
404 |
CADJ & = comlev1_bibj, key=ikey, byte=isbyte |
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
405 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
406 |
|
|
407 |
C-- Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h |
C-- Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h |
431 |
ENDIF |
ENDIF |
432 |
|
|
433 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
434 |
CADJ STORE Kwx(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE Kwx(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
435 |
CADJ STORE Kwy(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE Kwy(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
436 |
CADJ STORE Kwz(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE Kwz(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
437 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
438 |
|
|
439 |
#endif /* ALLOW_GMREDI */ |
#endif /* ALLOW_GMREDI */ |
455 |
CADJ & , KPPdiffKzT(:,:,:,bi,bj) |
CADJ & , KPPdiffKzT(:,:,:,bi,bj) |
456 |
CADJ & , KPPdiffKzS(:,:,:,bi,bj) |
CADJ & , KPPdiffKzS(:,:,:,bi,bj) |
457 |
CADJ & , KPPfrac (:,: ,bi,bj) |
CADJ & , KPPfrac (:,: ,bi,bj) |
458 |
CADJ & = comlev1_bibj, key=ikey, byte=isbyte |
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
459 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
460 |
|
|
461 |
#endif /* ALLOW_KPP */ |
#endif /* ALLOW_KPP */ |
462 |
|
|
463 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
464 |
CADJ STORE KappaRT(:,:,:) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE KappaRT(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte |
465 |
CADJ STORE KappaRS(:,:,:) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE KappaRS(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte |
466 |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
467 |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
468 |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
469 |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
470 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
471 |
CADJ STORE tr1 (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
CADJ STORE tr1 (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
472 |
#endif |
#endif |
473 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
474 |
|
|
526 |
C? Patrick Is this formula correct? |
C? Patrick Is this formula correct? |
527 |
cph Yes, but I rewrote it. |
cph Yes, but I rewrote it. |
528 |
cph Also, the KappaR? need the index and subscript k! |
cph Also, the KappaR? need the index and subscript k! |
529 |
kkey = (ikey-1)*Nr + k |
kkey = (itdkey-1)*Nr + k |
530 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
531 |
|
|
532 |
C-- km1 Points to level above k (=k-1) |
C-- km1 Points to level above k (=k-1) |
651 |
|
|
652 |
IF (tempStepping) THEN |
IF (tempStepping) THEN |
653 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
654 |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
655 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
656 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
657 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
662 |
|
|
663 |
IF (saltStepping) THEN |
IF (saltStepping) THEN |
664 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
665 |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
666 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
667 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
668 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
674 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
675 |
IF (tr1Stepping) THEN |
IF (tr1Stepping) THEN |
676 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
677 |
CADJ STORE gTr1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
CADJ STORE gTr1(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
678 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
679 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
680 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |