File indexing completed on 2022-01-06 06:13:24 UTC
view on githubraw file Latest commit 9f5240b5 on 2022-01-05 15:24:45 UTC
0c3d35c9cd Gael*0001 #include "SMOOTH_OPTIONS.h"
0002
0003 SUBROUTINE SMOOTH_IMPLDIFF( bi, bj, iMin, iMax, jMin, jMax,
0004 I deltaTX, KappaRX, recip_hFac,
0005 U gXNm1,
0006 I myThid )
0007
0008
0009
0010
0011
0012
0013
0014
0015 IMPLICIT NONE
0016
0017 #include "SIZE.h"
0018 #include "EEPARAMS.h"
0019 #include "PARAMS.h"
0020 #include "GRID.h"
0021
0022
9f5240b52a Jean*0023 INTEGER bi, bj, iMin, iMax, jMin, jMax
0024 _RL deltaTX
0025 _RL KappaRX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0026 _RS recip_hFac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0027 _RL gXnm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0c3d35c9cd Gael*0028 INTEGER myThid
0029
0030
0031 INTEGER i,j,k
9f5240b52a Jean*0032 _RL gYnm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0033 _RL a(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0034 _RL b(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0035 _RL c(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0036 _RL bet(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0037 _RL gam(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0c3d35c9cd Gael*0038
0039
0040
0041 DO k=1,Nr
0042 DO j=jMin,jMax
0043 DO i=iMin,iMax
0044 gYNm1(i,j,k,bi,bj) = 0. _d 0
0045 ENDDO
0046 ENDDO
0047 ENDDO
0048
0049
0050 DO j=jMin,jMax
0051 DO i=iMin,iMax
f3ec8d3513 Jean*0052 a(i,j,1) = 0. _d 0
0c3d35c9cd Gael*0053 ENDDO
0054 ENDDO
0055 DO k=2,Nr
0056 DO j=jMin,jMax
0057 DO i=iMin,iMax
0058 a(i,j,k) = -deltaTX*recip_hFac(i,j,k,bi,bj)*recip_drF(k)
0059 & *recip_deepFac2C(k)*recip_rhoFacC(k)
0060 & *KappaRX(i,j, k )*recip_drC( k )
0061 & *deepFac2F(k)*rhoFacF(k)
0062 IF (recip_hFac(i,j,k-1,bi,bj).EQ.0.) a(i,j,k)=0.
0063 ENDDO
0064 ENDDO
0065 ENDDO
0066
0067
0068 DO k=1,Nr-1
0069 DO j=jMin,jMax
0070 DO i=iMin,iMax
0071 c(i,j,k) = -deltaTX*recip_hFac(i,j,k,bi,bj)*recip_drF(k)
0072 & *recip_deepFac2C(k)*recip_rhoFacC(k)
0073 & *KappaRX(i,j,k+1)*recip_drC(k+1)
0074 & *deepFac2F(k+1)*rhoFacF(k+1)
0075 IF (recip_hFac(i,j,k+1,bi,bj).EQ.0.) c(i,j,k)=0.
0076 ENDDO
0077 ENDDO
0078 ENDDO
0079 DO j=jMin,jMax
0080 DO i=iMin,iMax
0081 c(i,j,Nr) = 0. _d 0
0082 ENDDO
0083 ENDDO
0084
0085
0086 DO k=1,Nr
0087 DO j=jMin,jMax
0088 DO i=iMin,iMax
0089 b(i,j,k) = 1. _d 0 - c(i,j,k) - a(i,j,k)
0090 ENDDO
0091 ENDDO
0092 ENDDO
0093
0094
0095 DO k=1,Nr
0096 DO j=jMin,jMax
0097 DO i=iMin,iMax
0098 bet(i,j,k) = 1. _d 0
0099 gam(i,j,k) = 0. _d 0
0100 ENDDO
0101 ENDDO
0102 ENDDO
0103
0104
0105 IF (Nr.GT.1) THEN
0106
0107 k = 1
0108
0109 DO j=jMin,jMax
0110 DO i=iMin,iMax
0111 IF (b(i,j,1).NE.0.) bet(i,j,1) = 1. _d 0 / b(i,j,1)
0112 ENDDO
0113 ENDDO
0114
0115 ENDIF
0116
0117
0118 IF (Nr.GE.2) THEN
0119
0120
0121 DO k=2,Nr
0122
0123 DO j=jMin,jMax
0124 DO i=iMin,iMax
0125 gam(i,j,k) = c(i,j,k-1)*bet(i,j,k-1)
f3ec8d3513 Jean*0126 IF ( ( b(i,j,k) - a(i,j,k)*gam(i,j,k) ) .NE. 0.)
0c3d35c9cd Gael*0127 & bet(i,j,k) = 1. _d 0 / ( b(i,j,k) - a(i,j,k)*gam(i,j,k) )
0128 ENDDO
0129 ENDDO
0130
0131 ENDDO
0132
0133 ENDIF
0134
0135 DO j=jMin,jMax
0136 DO i=iMin,iMax
0137 gYNm1(i,j,1,bi,bj) = gXNm1(i,j,1,bi,bj)*bet(i,j,1)
0138 ENDDO
0139 ENDDO
0140 DO k=2,Nr
0141 DO j=jMin,jMax
0142 DO i=iMin,iMax
0143 gYnm1(i,j,k,bi,bj) = bet(i,j,k)*
0144 & (gXnm1(i,j,k,bi,bj) - a(i,j,k)*gYnm1(i,j,k-1,bi,bj))
0145 ENDDO
0146 ENDDO
0147 ENDDO
0148
0149
0150
0151 DO k=Nr-1,1,-1
0152 DO j=jMin,jMax
0153 DO i=iMin,iMax
0154 gYnm1(i,j,k,bi,bj)=gYnm1(i,j,k,bi,bj)
0155 & -gam(i,j,k+1)*gYnm1(i,j,k+1,bi,bj)
0156 ENDDO
0157 ENDDO
0158 ENDDO
0159
0160 DO k=1,Nr
0161 DO j=jMin,jMax
0162 DO i=iMin,iMax
0163 gXnm1(i,j,k,bi,bj)=gYnm1(i,j,k,bi,bj)
0164 ENDDO
0165 ENDDO
0166 ENDDO
0167
0168 RETURN
0169 END