File indexing completed on 2024-09-20 05:10:19 UTC
view on githubraw file Latest commit e6e223b2 on 2024-09-19 22:01:15 UTC
6d54cf9ca1 Ed H*0001 #include "PACKAGES_CONFIG.h"
73470161ee Alis*0002 #include "CPP_OPTIONS.h"
924557e60a Chri*0003
9366854e02 Chri*0004
0005
0006
924557e60a Chri*0007 SUBROUTINE INI_CG2D( myThid )
0008
9366854e02 Chri*0009
0010
9155c64ca4 Jean*0011
0012
9366854e02 Chri*0013
9155c64ca4 Jean*0014
0015
9366854e02 Chri*0016
0017
0018
0019
0020 IMPLICIT NONE
924557e60a Chri*0021
0022 #include "SIZE.h"
0023 #include "EEPARAMS.h"
0024 #include "PARAMS.h"
0025 #include "GRID.h"
71c6a09c16 Jean*0026 #include "SURFACE.h"
aea29c8517 Alis*0027 #include "CG2D.h"
924557e60a Chri*0028
9366854e02 Chri*0029
924557e60a Chri*0030
0031
0032 INTEGER myThid
0033
9366854e02 Chri*0034
924557e60a Chri*0035
4606c28752 Jean*0036
63f3ae4253 Jean*0037
7cf1bc4c9a Jean*0038
0039
924557e60a Chri*0040 CHARACTER*(MAX_LEN_MBUF) msgBuf
0041 INTEGER bi, bj
63f3ae4253 Jean*0042 INTEGER i, j, k, ks
5c76561bf0 Chri*0043 _RL faceArea
e6e223b277 Jean*0044 _RL cg2dTolerance
e7217683b5 Chri*0045 _RS myNorm
4606c28752 Jean*0046 _RS aC, aCw, aCs
9366854e02 Chri*0047
924557e60a Chri*0048
4606c28752 Jean*0049
9e9a4cf401 Jean*0050
0051 DO bj=myByLo(myThid),myByHi(myThid)
0052 DO bi=myBxLo(myThid),myBxHi(myThid)
63f3ae4253 Jean*0053 DO j=1-OLy,sNy+OLy
0054 DO i=1-OLx,sNx+OLx
0055 aW2d(i,j,bi,bj) = 0. _d 0
0056 aS2d(i,j,bi,bj) = 0. _d 0
0057 aC2d(i,j,bi,bj) = 0. _d 0
0058 pW(i,j,bi,bj) = 0. _d 0
0059 pS(i,j,bi,bj) = 0. _d 0
0060 pC(i,j,bi,bj) = 0. _d 0
9e9a4cf401 Jean*0061 ENDDO
0062 ENDDO
0063 ENDDO
0064 ENDDO
0065
81f3a86735 Patr*0066
e6e223b277 Jean*0067 _BEGIN_MASTER(myThid)
81f3a86735 Patr*0068 cg2dNorm = 0. _d 0
0069 cg2dNormaliseRHS = .FALSE.
e6e223b277 Jean*0070 cg2dTolerance_sq = 0. _d 0
0071 _END_MASTER(myThid)
81f3a86735 Patr*0072
924557e60a Chri*0073
0074
0075
0076 myNorm = 0. _d 0
0077 DO bj=myByLo(myThid),myByHi(myThid)
0078 DO bi=myBxLo(myThid),myBxHi(myThid)
63f3ae4253 Jean*0079 DO j=1,sNy
0080 DO i=1,sNx
0081 aW2d(i,j,bi,bj) = 0. _d 0
0082 aS2d(i,j,bi,bj) = 0. _d 0
924557e60a Chri*0083 ENDDO
0084 ENDDO
63f3ae4253 Jean*0085 DO k=1,Nr
0086 DO j=1,sNy
0087 DO i=1,sNx
4606c28752 Jean*0088
63f3ae4253 Jean*0089 faceArea = _dyG(i,j,bi,bj)*drF(k)
0090 & *_hFacW(i,j,k,bi,bj)
0091 aW2d(i,j,bi,bj) = aW2d(i,j,bi,bj)
4606c28752 Jean*0092 & + implicSurfPress*implicDiv2DFlow
63f3ae4253 Jean*0093 & *faceArea*recip_dxC(i,j,bi,bj)
0094 faceArea = _dxG(i,j,bi,bj)*drF(k)
0095 & *_hFacS(i,j,k,bi,bj)
0096 aS2d(i,j,bi,bj) = aS2d(i,j,bi,bj)
4606c28752 Jean*0097 & + implicSurfPress*implicDiv2DFlow
63f3ae4253 Jean*0098 & *faceArea*recip_dyC(i,j,bi,bj)
924557e60a Chri*0099 ENDDO
0100 ENDDO
0101 ENDDO
63f3ae4253 Jean*0102 DO j=1,sNy
0103 DO i=1,sNx
7cf1bc4c9a Jean*0104 #ifdef ALLOW_OBCS
0105 aW2d(i,j,bi,bj) = aW2d(i,j,bi,bj)
0106 & *maskInC(i,j,bi,bj)*maskInC(i-1,j,bi,bj)
0107 aS2d(i,j,bi,bj) = aS2d(i,j,bi,bj)
0108 & *maskInC(i,j,bi,bj)*maskInC(i,j-1,bi,bj)
0109 #endif /* ALLOW_OBCS */
0110 myNorm = MAX(ABS(aW2d(i,j,bi,bj)),myNorm)
0111 myNorm = MAX(ABS(aS2d(i,j,bi,bj)),myNorm)
924557e60a Chri*0112 ENDDO
0113 ENDDO
0114 ENDDO
0115 ENDDO
12c8b75709 Jean*0116 _GLOBAL_MAX_RS( myNorm, myThid )
e6e223b277 Jean*0117 IF ( myNorm .NE. zeroRS ) THEN
78c96bee2f Alis*0118 myNorm = 1. _d 0/myNorm
924557e60a Chri*0119 ELSE
0120 myNorm = 1. _d 0
0121 ENDIF
0122 DO bj=myByLo(myThid),myByHi(myThid)
0123 DO bi=myBxLo(myThid),myBxHi(myThid)
63f3ae4253 Jean*0124 DO j=1,sNy
0125 DO i=1,sNx
0126 aW2d(i,j,bi,bj) = aW2d(i,j,bi,bj)*myNorm
0127 aS2d(i,j,bi,bj) = aS2d(i,j,bi,bj)*myNorm
924557e60a Chri*0128 ENDDO
0129 ENDDO
0130 ENDDO
0131 ENDDO
4606c28752 Jean*0132
924557e60a Chri*0133
0134
42bd47f06f Chri*0135
0136
924557e60a Chri*0137
9155c64ca4 Jean*0138 CALL EXCH_UV_XY_RS( aW2d, aS2d, .FALSE., myThid )
924557e60a Chri*0139
88830be691 Alis*0140
0141
924557e60a Chri*0142
0143
06bb0cec77 Jean*0144 _BEGIN_MASTER(myThid)
0145
0146 cg2dNorm = myNorm
aea29c8517 Alis*0147
e6e223b277 Jean*0148 cg2dNormaliseRHS = cg2dTargetResWunit.LE.zeroRL
aea29c8517 Alis*0149 IF (cg2dNormaliseRHS) THEN
0150
0151 cg2dTolerance = cg2dTargetResidual
0152 ELSE
0153
0154 cg2dTolerance = cg2dNorm * cg2dTargetResWunit
aa6b2555c8 Jean*0155 & * globalArea / deltaTMom
aea29c8517 Alis*0156 ENDIF
e6e223b277 Jean*0157 cg2dTolerance_sq = cg2dTolerance*cg2dTolerance
06bb0cec77 Jean*0158 _END_MASTER(myThid)
0417f72e5a Jean*0159
0160
0161 _BEGIN_MASTER( myThid )
0162 WRITE(msgBuf,'(2A,1PE23.16)') 'INI_CG2D: ',
0163 & 'CG2D normalisation factor = ', cg2dNorm
0164 CALL PRINT_MESSAGE( msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0165 IF (.NOT.cg2dNormaliseRHS) THEN
0166 WRITE(msgBuf,'(2A,1PE22.15,A,1PE16.10,A)') 'INI_CG2D: ',
0167 & 'cg2dTolerance =', cg2dTolerance, ' (Area=',globalArea,')'
0168 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0169 ENDIF
0170 WRITE(msgBuf,*) ' '
0171 CALL PRINT_MESSAGE( msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0172 _END_MASTER( myThid )
0173
4606c28752 Jean*0174
924557e60a Chri*0175
181bb5586b Chri*0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
924557e60a Chri*0189 DO bj=myByLo(myThid),myByHi(myThid)
0190 DO bi=myBxLo(myThid),myBxHi(myThid)
63f3ae4253 Jean*0191
aa6b2555c8 Jean*0192 DO j=0,sNy
0193 DO i=0,sNx
0194 ks = kSurfC(i,j,bi,bj)
63f3ae4253 Jean*0195 aC2d(i,j,bi,bj) = -(
0196 & aW2d(i,j,bi,bj) + aW2d(i+1,j, bi,bj)
0197 & +aS2d(i,j,bi,bj) + aS2d( i,j+1,bi,bj)
0198 & +freeSurfFac*myNorm*recip_Bo(i,j,bi,bj)*deepFac2F(ks)
aa6b2555c8 Jean*0199 & *rA(i,j,bi,bj)/deltaTMom/deltaTFreeSurf
63f3ae4253 Jean*0200 & )
0201 ENDDO
0202 ENDDO
0203 DO j=1,sNy
0204 DO i=1,sNx
0205 aC = aC2d( i, j, bi,bj)
0206 aCs = aC2d( i,j-1,bi,bj)
0207 aCw = aC2d(i-1,j, bi,bj)
e6e223b277 Jean*0208 IF ( aC .EQ. zeroRS ) THEN
63f3ae4253 Jean*0209 pC(i,j,bi,bj) = 1. _d 0
0210 ELSE
0211 pC(i,j,bi,bj) = 1. _d 0 / aC
0212 ENDIF
e6e223b277 Jean*0213 IF ( aC + aCw .EQ. zeroRS ) THEN
63f3ae4253 Jean*0214 pW(i,j,bi,bj) = 0.
0215 ELSE
0216 pW(i,j,bi,bj) =
0217 & -aW2d(i,j,bi,bj)/((cg2dpcOffDFac *(aCw+aC))**2 )
0218 ENDIF
e6e223b277 Jean*0219 IF ( aC + aCs .EQ. zeroRS ) THEN
63f3ae4253 Jean*0220 pS(i,j,bi,bj) = 0.
0221 ELSE
0222 pS(i,j,bi,bj) =
0223 & -aS2d(i,j,bi,bj)/((cg2dpcOffDFac *(aCs+aC))**2 )
0224 ENDIF
0225
0226
0227
924557e60a Chri*0228 ENDDO
0229 ENDDO
0230 ENDDO
0231 ENDDO
0232
9155c64ca4 Jean*0233 CALL EXCH_XY_RS( pC, myThid )
0234 CALL EXCH_UV_XY_RS( pW, pS, .FALSE., myThid )
255afb6daa Chri*0235
88830be691 Alis*0236
0237
0238
255afb6daa Chri*0239
924557e60a Chri*0240
0241 RETURN
0242 END