62 |
_RL zero, one, half |
_RL zero, one, half |
63 |
_RL ddRloc, ratioRm, ratioRp |
_RL ddRloc, ratioRm, ratioRp |
64 |
PARAMETER ( zero= 0. _d 0 , one= 1. _d 0 , half= .5 _d 0 ) |
PARAMETER ( zero= 0. _d 0 , one= 1. _d 0 , half= .5 _d 0 ) |
65 |
|
#ifdef NONLIN_FRSURF |
66 |
|
_RL facP, dPhiRef |
67 |
|
#endif /* NONLIN_FRSURF */ |
68 |
CEOP |
CEOP |
69 |
|
|
70 |
IF ( usingZCoords ) THEN |
IF ( usingZCoords ) THEN |
138 |
c IF ( select_rStar.GE.2 .AND. nonlinFreeSurf.GE.4 ) THEN |
c IF ( select_rStar.GE.2 .AND. nonlinFreeSurf.GE.4 ) THEN |
139 |
IF ( select_rStar.GE.1 .AND. nonlinFreeSurf.GE.4 ) THEN |
IF ( select_rStar.GE.1 .AND. nonlinFreeSurf.GE.4 ) THEN |
140 |
C- Integral of b.dr = rStarFac * Integral of b.dr* : |
C- Integral of b.dr = rStarFac * Integral of b.dr* : |
141 |
IF ( buoyancyRelation .EQ. 'ATMOSPHERIC' ) THEN |
IF ( fluidIsAir ) THEN |
142 |
C- Consistent with Phi'= Integr[ theta'.dPi ] : |
C- Consistent with Phi'= Integr[ theta'.dPi ] : |
143 |
DO j=jMin,jMax |
DO j=jMin,jMax |
144 |
DO i=iMin,iMax |
DO i=iMin,iMax |
145 |
phiHydLow(i,j,bi,bj) = phiHydLow(i,j,bi,bj) |
facP = rStarFacC(i,j,bi,bj)**atm_kappa |
146 |
& * rStarFacC(i,j,bi,bj)**atm_kappa |
dPhiRef = phiRef(2*k+1) - gravity*topoZ(i,j,bi,bj) |
147 |
|
& - phi0surf(i,j,bi,bj) |
148 |
|
phiHydLow(i,j,bi,bj) = |
149 |
|
& phiHydLow(i,j,bi,bj)*facP |
150 |
|
& + MAX( dPhiRef, zero )*( facP - 1. _d 0 ) |
151 |
|
& + phi0surf(i,j,bi,bj) |
152 |
|
ENDDO |
153 |
|
ENDDO |
154 |
|
ELSEIF ( usingPCoords ) THEN |
155 |
|
C- Note: dPhiRef*(rStarFacC -1) = 1/rho*PSo*((eta+PSo)/PSo -1) = Bo_surf*etaN |
156 |
|
C so that this expression is the same as before (same as in "ELSE" block below) |
157 |
|
DO j=jMin,jMax |
158 |
|
DO i=iMin,iMax |
159 |
|
dPhiRef = ( Ro_surf(i,j,bi,bj) - R_low(i,j,bi,bj) ) |
160 |
|
& *recip_rhoConst |
161 |
|
phiHydLow(i,j,bi,bj) = |
162 |
|
& phiHydLow(i,j,bi,bj)*rStarFacC(i,j,bi,bj) |
163 |
|
& + dPhiRef*( rStarFacC(i,j,bi,bj) - 1. _d 0 ) |
164 |
|
& + phi0surf(i,j,bi,bj) |
165 |
ENDDO |
ENDDO |
166 |
ENDDO |
ENDDO |
167 |
ELSE |
ELSE |
168 |
|
C- Note: dPhiRef*(rStarFacC -1) = g*H*((eta+H)/H -1) = Bo_surf*etaN |
169 |
|
C so that this expression is the same as before (same as in "ELSE" block below) |
170 |
DO j=jMin,jMax |
DO j=jMin,jMax |
171 |
DO i=iMin,iMax |
DO i=iMin,iMax |
172 |
phiHydLow(i,j,bi,bj) = phiHydLow(i,j,bi,bj) |
dPhiRef = ( Ro_surf(i,j,bi,bj)-R_low(i,j,bi,bj) ) |
173 |
& * rStarFacC(i,j,bi,bj) |
& *gravity |
174 |
|
phiHydLow(i,j,bi,bj) = |
175 |
|
& phiHydLow(i,j,bi,bj)*rStarFacC(i,j,bi,bj) |
176 |
|
& + dPhiRef*( rStarFacC(i,j,bi,bj) - 1. _d 0 ) |
177 |
|
& + phi0surf(i,j,bi,bj) |
178 |
ENDDO |
ENDDO |
179 |
ENDDO |
ENDDO |
180 |
ENDIF |
ENDIF |
181 |
ENDIF |
ELSE |
182 |
|
#else /* NONLIN_FRSURF */ |
183 |
|
IF ( .TRUE. ) THEN |
184 |
#endif /* NONLIN_FRSURF */ |
#endif /* NONLIN_FRSURF */ |
185 |
|
|
186 |
DO j=jMin,jMax |
DO j=jMin,jMax |
187 |
DO i=iMin,iMax |
DO i=iMin,iMax |
188 |
phiHydLow(i,j,bi,bj) = phiHydLow(i,j,bi,bj) |
phiHydLow(i,j,bi,bj) = phiHydLow(i,j,bi,bj) |
189 |
& + Bo_surf(i,j,bi,bj)*etaN(i,j,bi,bj) |
& + Bo_surf(i,j,bi,bj)*etaN(i,j,bi,bj) |
190 |
& + phi0surf(i,j,bi,bj) |
& + phi0surf(i,j,bi,bj) |
191 |
ENDDO |
ENDDO |
192 |
ENDDO |
ENDDO |
193 |
|
ENDIF |
194 |
|
|
195 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
196 |
C -- end if k=Nr. |
C -- end if k=Nr. |