73 |
C localTr :: local copy of tracer (for Non-Lin Adv.Scheme) |
C localTr :: local copy of tracer (for Non-Lin Adv.Scheme) |
74 |
C diagonalNumber :: number of non-zero diagonals in the matrix |
C diagonalNumber :: number of non-zero diagonals in the matrix |
75 |
C errCode :: > 0 if singular matrix |
C errCode :: > 0 if singular matrix |
76 |
|
C msgBuf :: Informational/error message buffer |
77 |
INTEGER iMin,iMax,jMin,jMax |
INTEGER iMin,iMax,jMin,jMax |
78 |
PARAMETER( iMin = 1, iMax = sNx ) |
PARAMETER( iMin = 1, iMax = sNx ) |
79 |
PARAMETER( jMin = 1, jMax = sNy ) |
PARAMETER( jMin = 1, jMax = sNy ) |
95 |
_RL af (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL af (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
96 |
_RL div(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL div(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
97 |
_RL flx(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL flx(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
98 |
#endif |
# ifdef SOLVE_DIAGONAL_LOWMEMORY |
99 |
|
CHARACTER*(MAX_LEN_MBUF) msgBuf |
100 |
|
# endif /* SOLVE_DIAGONAL_LOWMEMORY */ |
101 |
|
#endif /* ALLOW_DIAGNOSTICS */ |
102 |
CEOP |
CEOP |
103 |
|
|
104 |
C-- no need to solve anything with only 1 level: |
C-- no need to solve anything with only 1 level: |
301 |
flx(i,j) = 0. _d 0 |
flx(i,j) = 0. _d 0 |
302 |
ENDDO |
ENDDO |
303 |
ENDDO |
ENDDO |
304 |
|
C-- start diagnostics k loop |
305 |
DO k= Nr,1,-1 |
DO k= Nr,1,-1 |
306 |
|
|
307 |
IF ( implicitDiffusion .AND. k.GE.2 ) THEN |
IF ( implicitDiffusion .AND. k.GE.2 ) THEN |
308 |
DO j=jMin,jMax |
DO j=jMin,jMax |
309 |
DO i=iMin,iMax |
DO i=iMin,iMax |
326 |
ENDDO |
ENDDO |
327 |
ENDDO |
ENDDO |
328 |
ENDIF |
ENDIF |
329 |
|
|
330 |
C- Note: Needs to explicitly increment counter (call DIAGNOSTICS_COUNT) |
C- Note: Needs to explicitly increment counter (call DIAGNOSTICS_COUNT) |
331 |
C since skipping k=1 DIAGNOSTICS_FILL call. |
C since skipping k=1 DIAGNOSTICS_FILL call. |
332 |
IF ( diagDif .AND. k.GE.2 ) THEN |
IF ( diagDif .AND. k.GE.2 ) THEN |
340 |
ENDIF |
ENDIF |
341 |
#endif /* ALLOW_LAYERS */ |
#endif /* ALLOW_LAYERS */ |
342 |
ENDIF |
ENDIF |
343 |
|
|
344 |
IF ( diagAdv ) THEN |
IF ( diagAdv ) THEN |
345 |
|
#ifdef SOLVE_DIAGONAL_LOWMEMORY |
346 |
|
diagName = 'ADVr'//diagSufx |
347 |
|
WRITE(msgBuf,'(4A)') 'GAD_IMPLICIT_R: ', |
348 |
|
& 'unable to compute Diagnostic "', diagName, '" with' |
349 |
|
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, |
350 |
|
& SQUEEZE_RIGHT, myThid ) |
351 |
|
WRITE(msgBuf,'(4A)') 'GAD_IMPLICIT_R: ', |
352 |
|
& '#define SOLVE_DIAGONAL_LOWMEMORY (in CPP_OPTIONS.h)' |
353 |
|
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, |
354 |
|
& SQUEEZE_RIGHT, myThid ) |
355 |
|
STOP 'ABNORMAL END: S/R GAD_IMPLICIT_R' |
356 |
|
#endif /* SOLVE_DIAGONAL_LOWMEMORY */ |
357 |
km1=MAX(1,k-1) |
km1=MAX(1,k-1) |
358 |
km2=MAX(1,k-2) |
km2=MAX(1,k-2) |
359 |
kp1=MIN(Nr,k+1) |
kp1=MIN(Nr,k+1) |
438 |
ENDIF |
ENDIF |
439 |
#endif /* ALLOW_LAYERS */ |
#endif /* ALLOW_LAYERS */ |
440 |
ENDIF |
ENDIF |
441 |
|
|
442 |
|
C-- end diagnostics k loop |
443 |
ENDDO |
ENDDO |
444 |
ENDIF |
ENDIF |
445 |
ENDIF |
ENDIF |