File indexing completed on 2022-04-25 05:08:44 UTC
view on githubraw file Latest commit 2e7aec99 on 2022-04-25 03:54:25 UTC
6c49d7f2f2 Jean*0001 #include "PACKAGES_CONFIG.h"
be47244872 Jean*0002 #include "CPP_OPTIONS.h"
0003
9366854e02 Chri*0004
0005
0006
6c49d7f2f2 Jean*0007 SUBROUTINE CALC_SURF_DR( etaFld,
0008 I myTime, myIter, myThid )
9366854e02 Chri*0009
0010
dff69a4ed4 Jean*0011
0012
0013
0014
9366854e02 Chri*0015
0016
be47244872 Jean*0017
9366854e02 Chri*0018
0019 IMPLICIT NONE
be47244872 Jean*0020
0021 #include "SIZE.h"
0022 #include "EEPARAMS.h"
0023 #include "PARAMS.h"
0024 #include "GRID.h"
0025 #include "SURFACE.h"
0026
9366854e02 Chri*0027
be47244872 Jean*0028
6c49d7f2f2 Jean*0029
0030
0031
0032
31a65e9638 Jean*0033 _RL etaFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
be47244872 Jean*0034 _RL myTime
0035 INTEGER myIter
0036 INTEGER myThid
0037
0038 #ifdef NONLIN_FRSURF
0039
9366854e02 Chri*0040
be47244872 Jean*0041
9366854e02 Chri*0042
0043
0044
0045
da1ba8e1fa Jean*0046
0047
9e9a4cf401 Jean*0048 INTEGER i,j,bi,bj
2e7aec9951 dngo*0049 INTEGER ks, nTmp
0050 INTEGER numbWrite, numbWrMax
dff69a4ed4 Jean*0051 _RL hFactmp, adjust_nb_pt, adjust_volum
23e0a84a0a Jean*0052 _RL rSurftmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
be47244872 Jean*0053 _RS hhm, hhp
55e9ea8a90 Jean*0054
9366854e02 Chri*0055
da1ba8e1fa Jean*0056 DATA numbWrite / 0 /
0057 numbWrMax = Nx*Ny
be47244872 Jean*0058
0059
0060
23e0a84a0a Jean*0061 adjust_nb_pt = 0.
0062 adjust_volum = 0.
0063
be47244872 Jean*0064 DO bj=myByLo(myThid), myByHi(myThid)
0065 DO bi=myBxLo(myThid), myBxHi(myThid)
6c49d7f2f2 Jean*0066
72a058b866 Gael*0067
cb905f3199 Jean*0068 DO j=1-OLy,sNy+OLy
0069 DO i=1-OLx,sNx+OLx
0070 hFac_surfNm1C(i,j,bi,bj) = hFac_surfC(i,j,bi,bj)
0071 hFac_surfNm1S(i,j,bi,bj) = hFac_surfS(i,j,bi,bj)
0072 hFac_surfNm1W(i,j,bi,bj) = hFac_surfW(i,j,bi,bj)
72a058b866 Gael*0073 ENDDO
cb905f3199 Jean*0074 ENDDO
23e0a84a0a Jean*0075
0076
6c49d7f2f2 Jean*0077
23e0a84a0a Jean*0078
0079 DO j=0,sNy+1
0080 DO i=0,sNx+1
0081 rSurftmp(i,j) = Ro_surf(i,j,bi,bj)+etaFld(i,j,bi,bj)
6c49d7f2f2 Jean*0082 ks = kSurfC(i,j,bi,bj)
be47244872 Jean*0083 IF (ks.LE.Nr) THEN
cb905f3199 Jean*0084 IF ( rSurftmp(i,j).LT.Rmin_surf(i,j,bi,bj) ) THEN
23e0a84a0a Jean*0085
872ca36aca Jean*0086 IF ( numbWrite.LE.numbWrMax .AND.
0087 & ( i.GE.1.AND.i.LE.sNx .AND.
0088 & j.GE.1.AND.j.LE.sNy ) ) THEN
55e9ea8a90 Jean*0089 numbWrite = numbWrite + 1
333081f7c0 Jean*0090 hFactmp = h0FacC(i,j,ks,bi,bj)
0091 & + ( rSurftmp(i,j) - Ro_surf(i,j,bi,bj) )*recip_drF(ks)
be47244872 Jean*0092 IF (hFactmp.LT.hFacInf) THEN
55e9ea8a90 Jean*0093 WRITE(errorMessageUnit,'(2A,6I4,I10)')
da1ba8e1fa Jean*0094 & 'WARNING: hFacC < hFacInf at:',
be47244872 Jean*0095 & ' i,j,k,bi,bj,Thid,Iter=',i,j,ks,bi,bj,myThid,myIter
23e0a84a0a Jean*0096 ELSE
55e9ea8a90 Jean*0097 WRITE(errorMessageUnit,'(2A,6I4,I10)')
da1ba8e1fa Jean*0098 & 'WARNING: hFac < hFacInf near:',
be47244872 Jean*0099 & ' i,j,k,bi,bj,Thid,Iter=',i,j,ks,bi,bj,myThid,myIter
0100 ENDIF
cb905f3199 Jean*0101 WRITE(errorMessageUnit,'(A,2F10.6,1PE14.6)')
872ca36aca Jean*0102 & ' hFac_n-1,hFac_n,eta =',
be47244872 Jean*0103 & hfacC(i,j,ks,bi,bj), hFactmp, etaFld(i,j,bi,bj)
da1ba8e1fa Jean*0104 ENDIF
23e0a84a0a Jean*0105
cb905f3199 Jean*0106
da1ba8e1fa Jean*0107
cb905f3199 Jean*0108
0109
0110 IF ( i.GE.1.AND.i.LE.sNx .AND.
0111 & j.GE.1.AND.j.LE.sNy ) THEN
0112 adjust_nb_pt = adjust_nb_pt + 1.
0113 adjust_volum = adjust_volum
23e0a84a0a Jean*0114 & + rA(i,j,bi,bj)*(Rmin_surf(i,j,bi,bj)-rSurftmp(i,j))
cb905f3199 Jean*0115 ENDIF
0116 rSurftmp(i,j) = Rmin_surf(i,j,bi,bj)
23e0a84a0a Jean*0117
0118 ENDIF
0119
0120
333081f7c0 Jean*0121 hFac_surfC(i,j,bi,bj) = h0FacC(i,j,ks,bi,bj)
0122 & + ( rSurftmp(i,j) - Ro_surf(i,j,bi,bj)
0123 & )*recip_drF(ks)*maskC(i,j,ks,bi,bj)
23e0a84a0a Jean*0124
0125
c69f1949e6 Jean*0126 IF ( numbWrite.LE.numbWrMax .AND.
0127 & hFac_surfC(i,j,bi,bj).GT.hFacSup ) THEN
55e9ea8a90 Jean*0128 numbWrite = numbWrite + 1
0129 WRITE(errorMessageUnit,'(2A,6I4,I10)')
da1ba8e1fa Jean*0130 & 'WARNING: hFacC > hFacSup at:',
23e0a84a0a Jean*0131 & ' i,j,k,bi,bj,Thid,Iter=',i,j,ks,bi,bj,myThid,myIter
55e9ea8a90 Jean*0132 WRITE(errorMessageUnit,'(A,2F10.6,1PE14.6)')
872ca36aca Jean*0133 & ' hFac_n-1,hFac_n,eta =', hfacC(i,j,ks,bi,bj),
da1ba8e1fa Jean*0134 & hFac_surfC(i,j,bi,bj), etaFld(i,j,bi,bj)
be47244872 Jean*0135 ENDIF
c69f1949e6 Jean*0136
be47244872 Jean*0137 ENDIF
23e0a84a0a Jean*0138
be47244872 Jean*0139 ENDDO
0140 ENDDO
0141
0142
0143
0144
0145 DO j=1,sNy
0146 DO i=1,sNx+1
6c49d7f2f2 Jean*0147 ks = kSurfW(i,j,bi,bj)
be47244872 Jean*0148 IF (ks.LE.Nr) THEN
cb905f3199 Jean*0149
0150
0151 hhm = rSurftmp(i-1,j)
0152 hhp = rSurftmp(i,j)
0153
0154
0155
0156
0157
31a65e9638 Jean*0158 hFac_surfW(i,j,bi,bj) = h0FacW(i,j,ks,bi,bj)
872ca36aca Jean*0159 & + ( MIN(hhm,hhp) - rSurfW(i,j,bi,bj)
31a65e9638 Jean*0160 & )*recip_drF(ks)*maskW(i,j,ks,bi,bj)
be47244872 Jean*0161 ENDIF
0162 ENDDO
0163 ENDDO
23e0a84a0a Jean*0164
be47244872 Jean*0165 DO j=1,sNy+1
0166 DO i=1,sNx
6c49d7f2f2 Jean*0167 ks = kSurfS(i,j,bi,bj)
be47244872 Jean*0168 IF (ks.LE.Nr) THEN
cb905f3199 Jean*0169
0170
0171 hhm = rSurftmp(i,j-1)
0172 hhp = rSurftmp(i,j)
0173
0174
0175
0176
0177
31a65e9638 Jean*0178 hFac_surfS(i,j,bi,bj) = h0FacS(i,j,ks,bi,bj)
872ca36aca Jean*0179 & + ( MIN(hhm,hhp) - rSurfS(i,j,bi,bj)
31a65e9638 Jean*0180 & )*recip_drF(ks)*maskS(i,j,ks,bi,bj)
be47244872 Jean*0181 ENDIF
0182 ENDDO
0183 ENDDO
23e0a84a0a Jean*0184
6c49d7f2f2 Jean*0185 #ifdef ALLOW_OBCS
0186
0187 IF ( useOBCS ) THEN
0188 CALL OBCS_APPLY_SURF_DR(
0189 I bi, bj, etaFld,
0190 U hFac_surfC, hFac_surfW, hFac_surfS,
3814debfe6 Jean*0191 I myTime, myIter, myThid )
6c49d7f2f2 Jean*0192 ENDIF
0193 #endif /* ALLOW_OBCS */
0194
23e0a84a0a Jean*0195
0196
0197
be47244872 Jean*0198 ENDDO
0199 ENDDO
0200
23e0a84a0a Jean*0201
12c8b75709 Jean*0202 _GLOBAL_SUM_RL( adjust_nb_pt , myThid )
31a65e9638 Jean*0203 IF ( adjust_nb_pt.GE.1. ) THEN
0204 _GLOBAL_SUM_RL( adjust_volum , myThid )
55e9ea8a90 Jean*0205 _BEGIN_MASTER( myThid )
2e7aec9951 dngo*0206
0207 nTmp = NINT(adjust_nb_pt)
55e9ea8a90 Jean*0208 WRITE(standardMessageUnit,'(2(A,I10),1PE16.8)')
da1ba8e1fa Jean*0209 & ' SURF_ADJUSTMENT: Iter=', myIter,
2e7aec9951 dngo*0210 & ' Nb_pts,Vol=', nTmp, adjust_volum
da1ba8e1fa Jean*0211 _END_MASTER( myThid )
23e0a84a0a Jean*0212 ENDIF
0213
12c8b75709 Jean*0214 _EXCH_XY_RS(hFac_surfC, myThid )
be47244872 Jean*0215 CALL EXCH_UV_XY_RS(hFac_surfW,hFac_surfS,.FALSE.,myThid)
0216
23e0a84a0a Jean*0217
6c49d7f2f2 Jean*0218
23e0a84a0a Jean*0219
0220
0221
be47244872 Jean*0222
37d60d46f4 Jean*0223
0224
0225
55e9ea8a90 Jean*0226
37d60d46f4 Jean*0227
be47244872 Jean*0228
0229
0230 #endif /* NONLIN_FRSURF */
0231
0232 RETURN
0233 END