Changeset 5948 for branches/2014/dev_r4650_UKMO12_CFL_diags_take2/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90
- Timestamp:
- 2015-11-30T11:47:24+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO12_CFL_diags_take2/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90
r5947 r5948 7 7 !! - ! 2005-11 (XXX) 8 8 !! 3.2 ! 2009-04 (R. Benshila) 9 !! 3.6 ! 2014-09 (R. Benshila) 9 10 !!---------------------------------------------------------------------- 10 11 #if defined key_agrif && ! defined key_offline … … 21 22 USE oce 22 23 USE dom_oce 23 USE sol_oce24 24 USE agrif_oce 25 25 USE phycst … … 28 28 USE lib_mpp 29 29 USE wrk_nemo 30 USE dynspg_oce31 30 USE zdf_oce 31 32 32 IMPLICIT NONE 33 33 PRIVATE 34 34 35 ! Barotropic arrays used to store open boundary data during 36 ! time-splitting loop: 37 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_w, vbdy_w, hbdy_w 38 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_e, vbdy_e, hbdy_e 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_n, vbdy_n, hbdy_n 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_s, vbdy_s, hbdy_s 41 35 INTEGER :: bdy_tinterp = 0 36 42 37 PUBLIC Agrif_tra, Agrif_dyn, Agrif_ssh, Agrif_dyn_ts, Agrif_ssh_ts, Agrif_dta_ts 43 PUBLIC interpu, interpv, interpunb, interpvnb, interpsshn 38 PUBLIC interpun, interpvn 39 PUBLIC interptsn, interpsshn 40 PUBLIC interpunb, interpvnb, interpub2b, interpvb2b 41 PUBLIC interpe3t, interpumsk, interpvmsk 42 # if defined key_zdftke 43 PUBLIC Agrif_tke, interpavm 44 # endif 44 45 45 46 # include "domzgr_substitute.h90" 46 47 # include "vectopt_loop_substitute.h90" 47 48 !!---------------------------------------------------------------------- 48 !! NEMO/NST 3. 3, NEMO Consortium (2010)49 !! NEMO/NST 3.6 , NEMO Consortium (2010) 49 50 !! $Id$ 50 51 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 51 52 !!---------------------------------------------------------------------- 52 53 53 54 54 CONTAINS 55 55 56 SUBROUTINE Agrif_tra 56 57 !!---------------------------------------------------------------------- 57 !! *** ROUTINE Agrif_Tra *** 58 !!---------------------------------------------------------------------- 59 !! 60 INTEGER :: ji, jj, jk, jn ! dummy loop indices 61 REAL(wp) :: zrhox , alpha1, alpha2, alpha3 62 REAL(wp) :: alpha4, alpha5, alpha6, alpha7 63 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztsa 58 !! *** ROUTINE Agrif_tra *** 64 59 !!---------------------------------------------------------------------- 65 60 ! 66 61 IF( Agrif_Root() ) RETURN 67 68 CALL wrk_alloc( jpi, jpj, jpk, jpts, ztsa )69 62 70 63 Agrif_SpecialValue = 0.e0 71 64 Agrif_UseSpecialValue = .TRUE. 72 ztsa(:,:,:,:) = 0.e0 73 74 CALL Agrif_Bc_variable( ztsa, tsn_id, procname=interptsn ) 65 66 CALL Agrif_Bc_variable( tsn_id, procname=interptsn ) 75 67 Agrif_UseSpecialValue = .FALSE. 76 77 zrhox = Agrif_Rhox()78 79 alpha1 = ( zrhox - 1. ) * 0.580 alpha2 = 1. - alpha181 82 alpha3 = ( zrhox - 1. ) / ( zrhox + 1. )83 alpha4 = 1. - alpha384 85 alpha6 = 2. * ( zrhox - 1. ) / ( zrhox + 1. )86 alpha7 = - ( zrhox - 1. ) / ( zrhox + 3. )87 alpha5 = 1. - alpha6 - alpha788 89 IF( nbondi == 1 .OR. nbondi == 2 ) THEN90 91 DO jn = 1, jpts92 tsa(nlci,:,:,jn) = alpha1 * ztsa(nlci,:,:,jn) + alpha2 * ztsa(nlci-1,:,:,jn)93 DO jk = 1, jpkm194 DO jj = 1, jpj95 IF( umask(nlci-2,jj,jk) == 0.e0 ) THEN96 tsa(nlci-1,jj,jk,jn) = tsa(nlci,jj,jk,jn) * tmask(nlci-1,jj,jk)97 ELSE98 tsa(nlci-1,jj,jk,jn)=(alpha4*tsa(nlci,jj,jk,jn)+alpha3*tsa(nlci-2,jj,jk,jn))*tmask(nlci-1,jj,jk)99 IF( un(nlci-2,jj,jk) > 0.e0 ) THEN100 tsa(nlci-1,jj,jk,jn)=( alpha6*tsa(nlci-2,jj,jk,jn)+alpha5*tsa(nlci,jj,jk,jn) &101 & + alpha7*tsa(nlci-3,jj,jk,jn) ) * tmask(nlci-1,jj,jk)102 ENDIF103 ENDIF104 END DO105 END DO106 ENDDO107 ENDIF108 109 IF( nbondj == 1 .OR. nbondj == 2 ) THEN110 111 DO jn = 1, jpts112 tsa(:,nlcj,:,jn) = alpha1 * ztsa(:,nlcj,:,jn) + alpha2 * ztsa(:,nlcj-1,:,jn)113 DO jk = 1, jpkm1114 DO ji = 1, jpi115 IF( vmask(ji,nlcj-2,jk) == 0.e0 ) THEN116 tsa(ji,nlcj-1,jk,jn) = tsa(ji,nlcj,jk,jn) * tmask(ji,nlcj-1,jk)117 ELSE118 tsa(ji,nlcj-1,jk,jn)=(alpha4*tsa(ji,nlcj,jk,jn)+alpha3*tsa(ji,nlcj-2,jk,jn))*tmask(ji,nlcj-1,jk)119 IF (vn(ji,nlcj-2,jk) > 0.e0 ) THEN120 tsa(ji,nlcj-1,jk,jn)=( alpha6*tsa(ji,nlcj-2,jk,jn)+alpha5*tsa(ji,nlcj,jk,jn) &121 & + alpha7*tsa(ji,nlcj-3,jk,jn) ) * tmask(ji,nlcj-1,jk)122 ENDIF123 ENDIF124 END DO125 END DO126 ENDDO127 ENDIF128 129 IF( nbondi == -1 .OR. nbondi == 2 ) THEN130 DO jn = 1, jpts131 tsa(1,:,:,jn) = alpha1 * ztsa(1,:,:,jn) + alpha2 * ztsa(2,:,:,jn)132 DO jk = 1, jpkm1133 DO jj = 1, jpj134 IF( umask(2,jj,jk) == 0.e0 ) THEN135 tsa(2,jj,jk,jn) = tsa(1,jj,jk,jn) * tmask(2,jj,jk)136 ELSE137 tsa(2,jj,jk,jn)=(alpha4*tsa(1,jj,jk,jn)+alpha3*tsa(3,jj,jk,jn))*tmask(2,jj,jk)138 IF( un(2,jj,jk) < 0.e0 ) THEN139 tsa(2,jj,jk,jn)=(alpha6*tsa(3,jj,jk,jn)+alpha5*tsa(1,jj,jk,jn)+alpha7*tsa(4,jj,jk,jn))*tmask(2,jj,jk)140 ENDIF141 ENDIF142 END DO143 END DO144 END DO145 ENDIF146 147 IF( nbondj == -1 .OR. nbondj == 2 ) THEN148 DO jn = 1, jpts149 tsa(:,1,:,jn) = alpha1 * ztsa(:,1,:,jn) + alpha2 * ztsa(:,2,:,jn)150 DO jk=1,jpk151 DO ji=1,jpi152 IF( vmask(ji,2,jk) == 0.e0 ) THEN153 tsa(ji,2,jk,jn)=tsa(ji,1,jk,jn) * tmask(ji,2,jk)154 ELSE155 tsa(ji,2,jk,jn)=(alpha4*tsa(ji,1,jk,jn)+alpha3*tsa(ji,3,jk,jn))*tmask(ji,2,jk)156 IF( vn(ji,2,jk) < 0.e0 ) THEN157 tsa(ji,2,jk,jn)=(alpha6*tsa(ji,3,jk,jn)+alpha5*tsa(ji,1,jk,jn)+alpha7*tsa(ji,4,jk,jn))*tmask(ji,2,jk)158 ENDIF159 ENDIF160 END DO161 END DO162 ENDDO163 ENDIF164 !165 CALL wrk_dealloc( jpi, jpj, jpk, jpts, ztsa )166 68 ! 167 69 END SUBROUTINE Agrif_tra … … 175 77 INTEGER, INTENT(in) :: kt 176 78 !! 177 INTEGER :: ji,jj,jk 178 REAL(wp) :: timeref 179 REAL(wp) :: z2dt, znugdt 180 REAL(wp) :: zrhox, zrhoy 181 REAL(wp), POINTER, DIMENSION(:,:,:) :: zua, zva 182 REAL(wp), POINTER, DIMENSION(:,:) :: spgv1, spgu1, zua2d, zva2d 79 INTEGER :: ji,jj,jk, j1,j2, i1,i2 80 REAL(wp), POINTER, DIMENSION(:,:) :: zub, zvb 183 81 !!---------------------------------------------------------------------- 184 82 185 83 IF( Agrif_Root() ) RETURN 186 84 187 CALL wrk_alloc( jpi, jpj, spgv1, spgu1, zua2d, zva2d ) 188 CALL wrk_alloc( jpi, jpj, jpk, zua, zva ) 189 190 zrhox = Agrif_Rhox() 191 zrhoy = Agrif_Rhoy() 192 193 timeref = 1. 194 195 ! time step: leap-frog 196 z2dt = 2. * rdt 197 ! time step: Euler if restart from rest 198 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 199 ! coefficients 200 znugdt = grav * z2dt 85 CALL wrk_alloc( jpi, jpj, zub, zvb ) 201 86 202 87 Agrif_SpecialValue=0. 203 88 Agrif_UseSpecialValue = ln_spc_dyn 204 89 205 zua = 0. 206 zva = 0. 207 CALL Agrif_Bc_variable(zua,un_id,procname=interpu) 208 CALL Agrif_Bc_variable(zva,vn_id,procname=interpv) 209 zua2d = 0. 210 zva2d = 0. 211 212 #if defined key_dynspg_flt 213 Agrif_SpecialValue=0. 214 Agrif_UseSpecialValue = ln_spc_dyn 215 CALL Agrif_Bc_variable(zua2d,e1u_id,calledweight=1.,procname=interpu2d) 216 CALL Agrif_Bc_variable(zva2d,e2v_id,calledweight=1.,procname=interpv2d) 217 #endif 90 CALL Agrif_Bc_variable(un_interp_id,procname=interpun) 91 CALL Agrif_Bc_variable(vn_interp_id,procname=interpvn) 92 218 93 Agrif_UseSpecialValue = .FALSE. 94 95 ! prevent smoothing in ghost cells 96 i1=1 97 i2=jpi 98 j1=1 99 j2=jpj 100 IF((nbondj == -1).OR.(nbondj == 2)) j1 = 3 101 IF((nbondj == +1).OR.(nbondj == 2)) j2 = nlcj-2 102 IF((nbondi == -1).OR.(nbondi == 2)) i1 = 3 103 IF((nbondi == +1).OR.(nbondi == 2)) i2 = nlci-2 219 104 220 105 221 106 IF((nbondi == -1).OR.(nbondi == 2)) THEN 222 107 223 #if defined key_dynspg_flt 108 ! Smoothing 109 ! --------- 110 IF ( .NOT.ln_dynspg_ts ) THEN ! Store transport 111 ua_b(2,:)=0._wp 112 DO jk=1,jpkm1 113 DO jj=1,jpj 114 ua_b(2,jj) = ua_b(2,jj) + fse3u_a(2,jj,jk) * ua(2,jj,jk) 115 END DO 116 END DO 117 DO jj=1,jpj 118 ua_b(2,jj) = ua_b(2,jj) * hur_a(2,jj) 119 END DO 120 ENDIF 121 122 DO jk=1,jpkm1 ! Smooth 123 DO jj=j1,j2 124 ua(2,jj,jk) = 0.25_wp*(ua(1,jj,jk)+2._wp*ua(2,jj,jk)+ua(3,jj,jk)) 125 ua(2,jj,jk) = ua(2,jj,jk) * umask(2,jj,jk) 126 END DO 127 END DO 128 129 zub(2,:)=0._wp ! Correct transport 130 DO jk=1,jpkm1 131 DO jj=1,jpj 132 zub(2,jj) = zub(2,jj) + fse3u_a(2,jj,jk) * ua(2,jj,jk) 133 END DO 134 END DO 224 135 DO jj=1,jpj 225 laplacu(2,jj) = timeref * (zua2d(2,jj)/(zrhoy*e2u(2,jj)))*umask(2,jj,1) 226 END DO 227 #endif 136 zub(2,jj) = zub(2,jj) * hur_a(2,jj) 137 END DO 228 138 229 139 DO jk=1,jpkm1 230 140 DO jj=1,jpj 231 ua(1:2,jj,jk) = (zua(1:2,jj,jk)/(zrhoy*e2u(1:2,jj))) 232 ua(1:2,jj,jk) = ua(1:2,jj,jk) / fse3u_a(1:2,jj,jk) 233 END DO 234 END DO 235 236 #if defined key_dynspg_flt 237 DO jk=1,jpkm1 141 ua(2,jj,jk) = (ua(2,jj,jk)+ua_b(2,jj)-zub(2,jj))*umask(2,jj,jk) 142 END DO 143 END DO 144 145 ! Set tangential velocities to time splitting estimate 146 !----------------------------------------------------- 147 IF ( ln_dynspg_ts) THEN 148 zvb(2,:)=0._wp 149 DO jk=1,jpkm1 150 DO jj=1,jpj 151 zvb(2,jj) = zvb(2,jj) + fse3v_a(2,jj,jk) * va(2,jj,jk) 152 END DO 153 END DO 238 154 DO jj=1,jpj 239 ua(2,jj,jk) = (ua(2,jj,jk) - z2dt * znugdt * laplacu(2,jj))*umask(2,jj,jk) 240 END DO 241 END DO 242 243 spgu(2,:)=0. 244 155 zvb(2,jj) = zvb(2,jj) * hvr_a(2,jj) 156 END DO 157 DO jk=1,jpkm1 158 DO jj=1,jpj 159 va(2,jj,jk) = (va(2,jj,jk)+va_b(2,jj)-zvb(2,jj))*vmask(2,jj,jk) 160 END DO 161 END DO 162 ENDIF 163 164 ! Mask domain edges: 165 !------------------- 245 166 DO jk=1,jpkm1 246 167 DO jj=1,jpj 247 spgu(2,jj)=spgu(2,jj)+fse3u_a(2,jj,jk)*ua(2,jj,jk) 248 END DO 249 END DO 250 168 ua(1,jj,jk) = 0._wp 169 va(1,jj,jk) = 0._wp 170 END DO 171 END DO 172 173 ENDIF 174 175 IF((nbondi == 1).OR.(nbondi == 2)) THEN 176 177 ! Smoothing 178 ! --------- 179 IF ( .NOT.ln_dynspg_ts ) THEN ! Store transport 180 ua_b(nlci-2,:)=0._wp 181 DO jk=1,jpkm1 182 DO jj=1,jpj 183 ua_b(nlci-2,jj) = ua_b(nlci-2,jj) + fse3u_a(nlci-2,jj,jk) * ua(nlci-2,jj,jk) 184 END DO 185 END DO 186 DO jj=1,jpj 187 ua_b(nlci-2,jj) = ua_b(nlci-2,jj) * hur_a(nlci-2,jj) 188 END DO 189 ENDIF 190 191 DO jk=1,jpkm1 ! Smooth 192 DO jj=j1,j2 193 ua(nlci-2,jj,jk) = 0.25_wp*(ua(nlci-3,jj,jk)+2._wp*ua(nlci-2,jj,jk)+ua(nlci-1,jj,jk)) 194 ua(nlci-2,jj,jk) = ua(nlci-2,jj,jk) * umask(nlci-2,jj,jk) 195 END DO 196 END DO 197 198 zub(nlci-2,:)=0._wp ! Correct transport 199 DO jk=1,jpkm1 200 DO jj=1,jpj 201 zub(nlci-2,jj) = zub(nlci-2,jj) + fse3u_a(nlci-2,jj,jk) * ua(nlci-2,jj,jk) 202 END DO 203 END DO 251 204 DO jj=1,jpj 252 IF (umask(2,jj,1).NE.0.) THEN 253 spgu(2,jj)=spgu(2,jj)*hur_a(2,jj) 254 ENDIF 255 END DO 256 #else 257 spgu(2,:) = ua_b(2,:) 258 #endif 205 zub(nlci-2,jj) = zub(nlci-2,jj) * hur_a(nlci-2,jj) 206 END DO 259 207 260 208 DO jk=1,jpkm1 261 209 DO jj=1,jpj 262 ua(2,jj,jk) = 0.25*(ua(1,jj,jk)+2.*ua(2,jj,jk)+ua(3,jj,jk)) 263 ua(2,jj,jk) = ua(2,jj,jk) * umask(2,jj,jk) 264 END DO 265 END DO 266 267 spgu1(2,:)=0. 268 269 DO jk=1,jpkm1 210 ua(nlci-2,jj,jk) = (ua(nlci-2,jj,jk)+ua_b(nlci-2,jj)-zub(nlci-2,jj))*umask(nlci-2,jj,jk) 211 END DO 212 END DO 213 214 ! Set tangential velocities to time splitting estimate 215 !----------------------------------------------------- 216 IF ( ln_dynspg_ts) THEN 217 zvb(nlci-1,:)=0._wp 218 DO jk=1,jpkm1 219 DO jj=1,jpj 220 zvb(nlci-1,jj) = zvb(nlci-1,jj) + fse3v_a(nlci-1,jj,jk) * va(nlci-1,jj,jk) 221 END DO 222 END DO 270 223 DO jj=1,jpj 271 spgu1(2,jj)=spgu1(2,jj)+fse3u_a(2,jj,jk)*ua(2,jj,jk) 272 END DO 273 END DO 274 275 DO jj=1,jpj 276 IF (umask(2,jj,1).NE.0.) THEN 277 spgu1(2,jj)=spgu1(2,jj)*hur_a(2,jj) 278 ENDIF 279 END DO 280 224 zvb(nlci-1,jj) = zvb(nlci-1,jj) * hvr_a(nlci-1,jj) 225 END DO 226 DO jk=1,jpkm1 227 DO jj=1,jpj 228 va(nlci-1,jj,jk) = (va(nlci-1,jj,jk)+va_b(nlci-1,jj)-zvb(nlci-1,jj))*vmask(nlci-1,jj,jk) 229 END DO 230 END DO 231 ENDIF 232 233 ! Mask domain edges: 234 !------------------- 281 235 DO jk=1,jpkm1 282 236 DO jj=1,jpj 283 ua(2,jj,jk) = (ua(2,jj,jk)+spgu(2,jj)-spgu1(2,jj))*umask(2,jj,jk) 284 END DO 285 END DO 286 287 DO jk=1,jpkm1 288 DO jj=1,jpj 289 va(2,jj,jk) = (zva(2,jj,jk)/(zrhox*e1v(2,jj)))*vmask(2,jj,jk) 290 va(2,jj,jk) = va(2,jj,jk) / fse3v_a(2,jj,jk) 291 END DO 292 END DO 293 294 #if defined key_dynspg_ts 237 ua(nlci-1,jj,jk) = 0._wp 238 va(nlci ,jj,jk) = 0._wp 239 END DO 240 END DO 241 242 ENDIF 243 244 IF((nbondj == -1).OR.(nbondj == 2)) THEN 245 246 ! Smoothing 247 ! --------- 248 IF ( .NOT.ln_dynspg_ts ) THEN ! Store transport 249 va_b(:,2)=0._wp 250 DO jk=1,jpkm1 251 DO ji=1,jpi 252 va_b(ji,2) = va_b(ji,2) + fse3v_a(ji,2,jk) * va(ji,2,jk) 253 END DO 254 END DO 255 DO ji=1,jpi 256 va_b(ji,2) = va_b(ji,2) * hvr_a(ji,2) 257 END DO 258 ENDIF 259 260 DO jk=1,jpkm1 ! Smooth 261 DO ji=i1,i2 262 va(ji,2,jk)=0.25_wp*(va(ji,1,jk)+2._wp*va(ji,2,jk)+va(ji,3,jk)) 263 va(ji,2,jk)=va(ji,2,jk)*vmask(ji,2,jk) 264 END DO 265 END DO 266 267 zvb(:,2)=0._wp ! Correct transport 268 DO jk=1,jpkm1 269 DO ji=1,jpi 270 zvb(ji,2) = zvb(ji,2) + fse3v_a(ji,2,jk) * va(ji,2,jk) * vmask(ji,2,jk) 271 END DO 272 END DO 273 DO ji=1,jpi 274 zvb(ji,2) = zvb(ji,2) * hvr_a(ji,2) 275 END DO 276 DO jk=1,jpkm1 277 DO ji=1,jpi 278 va(ji,2,jk) = (va(ji,2,jk)+va_b(ji,2)-zvb(ji,2))*vmask(ji,2,jk) 279 END DO 280 END DO 281 295 282 ! Set tangential velocities to time splitting estimate 296 spgv1(2,:)=0. 297 DO jk=1,jpkm1 298 DO jj=1,jpj 299 spgv1(2,jj)=spgv1(2,jj)+fse3v_a(2,jj,jk)*va(2,jj,jk) 300 END DO 301 END DO 302 303 DO jj=1,jpj 304 spgv1(2,jj)=spgv1(2,jj)*hvr_a(2,jj) 305 END DO 306 307 DO jk=1,jpkm1 308 DO jj=1,jpj 309 va(2,jj,jk) = (va(2,jj,jk)+va_b(2,jj)-spgv1(2,jj))*vmask(2,jj,jk) 310 END DO 311 END DO 312 #endif 313 314 ENDIF 315 316 IF((nbondi == 1).OR.(nbondi == 2)) THEN 317 #if defined key_dynspg_flt 318 DO jj=1,jpj 319 laplacu(nlci-2,jj) = timeref * (zua2d(nlci-2,jj)/(zrhoy*e2u(nlci-2,jj))) 320 END DO 321 #endif 322 323 DO jk=1,jpkm1 324 DO jj=1,jpj 325 ua(nlci-2:nlci-1,jj,jk) = (zua(nlci-2:nlci-1,jj,jk)/(zrhoy*e2u(nlci-2:nlci-1,jj))) 326 ua(nlci-2:nlci-1,jj,jk) = ua(nlci-2:nlci-1,jj,jk) / fse3u_a(nlci-2:nlci-1,jj,jk) 327 END DO 328 END DO 329 330 #if defined key_dynspg_flt 331 DO jk=1,jpkm1 332 DO jj=1,jpj 333 ua(nlci-2,jj,jk) = (ua(nlci-2,jj,jk)- z2dt * znugdt * laplacu(nlci-2,jj))*umask(nlci-2,jj,jk) 334 END DO 335 END DO 336 337 338 spgu(nlci-2,:)=0. 339 340 do jk=1,jpkm1 341 do jj=1,jpj 342 spgu(nlci-2,jj)=spgu(nlci-2,jj)+fse3u_a(nlci-2,jj,jk)*ua(nlci-2,jj,jk) 343 enddo 344 enddo 345 346 DO jj=1,jpj 347 IF (umask(nlci-2,jj,1).NE.0.) THEN 348 spgu(nlci-2,jj)=spgu(nlci-2,jj)*hur_a(nlci-2,jj) 349 ENDIF 350 END DO 351 #else 352 spgu(nlci-2,:) = ua_b(nlci-2,:) 353 #endif 354 355 DO jk=1,jpkm1 356 DO jj=1,jpj 357 ua(nlci-2,jj,jk) = 0.25*(ua(nlci-3,jj,jk)+2.*ua(nlci-2,jj,jk)+ua(nlci-1,jj,jk)) 358 359 ua(nlci-2,jj,jk) = ua(nlci-2,jj,jk) * umask(nlci-2,jj,jk) 360 361 END DO 362 END DO 363 364 spgu1(nlci-2,:)=0. 365 366 DO jk=1,jpkm1 367 DO jj=1,jpj 368 spgu1(nlci-2,jj)=spgu1(nlci-2,jj)+fse3u_a(nlci-2,jj,jk)*ua(nlci-2,jj,jk)*umask(nlci-2,jj,jk) 369 END DO 370 END DO 371 372 DO jj=1,jpj 373 IF (umask(nlci-2,jj,1).NE.0.) THEN 374 spgu1(nlci-2,jj)=spgu1(nlci-2,jj)*hur_a(nlci-2,jj) 375 ENDIF 376 END DO 377 378 DO jk=1,jpkm1 379 DO jj=1,jpj 380 ua(nlci-2,jj,jk) = (ua(nlci-2,jj,jk)+spgu(nlci-2,jj)-spgu1(nlci-2,jj))*umask(nlci-2,jj,jk) 381 END DO 382 END DO 383 384 DO jk=1,jpkm1 385 DO jj=1,jpj-1 386 va(nlci-1,jj,jk) = (zva(nlci-1,jj,jk)/(zrhox*e1v(nlci-1,jj)))*vmask(nlci-1,jj,jk) 387 va(nlci-1,jj,jk) = va(nlci-1,jj,jk) / fse3v_a(nlci-1,jj,jk) 388 END DO 389 END DO 390 391 #if defined key_dynspg_ts 283 !----------------------------------------------------- 284 IF ( ln_dynspg_ts ) THEN 285 zub(:,2)=0._wp 286 DO jk=1,jpkm1 287 DO ji=1,jpi 288 zub(ji,2) = zub(ji,2) + fse3u_a(ji,2,jk) * ua(ji,2,jk) * umask(ji,2,jk) 289 END DO 290 END DO 291 DO ji=1,jpi 292 zub(ji,2) = zub(ji,2) * hur_a(ji,2) 293 END DO 294 295 DO jk=1,jpkm1 296 DO ji=1,jpi 297 ua(ji,2,jk) = (ua(ji,2,jk)+ua_b(ji,2)-zub(ji,2))*umask(ji,2,jk) 298 END DO 299 END DO 300 ENDIF 301 302 ! Mask domain edges: 303 !------------------- 304 DO jk=1,jpkm1 305 DO ji=1,jpi 306 ua(ji,1,jk) = 0._wp 307 va(ji,1,jk) = 0._wp 308 END DO 309 END DO 310 311 ENDIF 312 313 IF((nbondj == 1).OR.(nbondj == 2)) THEN 314 ! Smoothing 315 ! --------- 316 IF ( .NOT.ln_dynspg_ts ) THEN ! Store transport 317 va_b(:,nlcj-2)=0._wp 318 DO jk=1,jpkm1 319 DO ji=1,jpi 320 va_b(ji,nlcj-2) = va_b(ji,nlcj-2) + fse3v_a(ji,nlcj-2,jk) * va(ji,nlcj-2,jk) 321 END DO 322 END DO 323 DO ji=1,jpi 324 va_b(ji,nlcj-2) = va_b(ji,nlcj-2) * hvr_a(ji,nlcj-2) 325 END DO 326 ENDIF 327 328 DO jk=1,jpkm1 ! Smooth 329 DO ji=i1,i2 330 va(ji,nlcj-2,jk)=0.25_wp*(va(ji,nlcj-3,jk)+2._wp*va(ji,nlcj-2,jk)+va(ji,nlcj-1,jk)) 331 va(ji,nlcj-2,jk)=va(ji,nlcj-2,jk)*vmask(ji,nlcj-2,jk) 332 END DO 333 END DO 334 335 zvb(:,nlcj-2)=0._wp ! Correct transport 336 DO jk=1,jpkm1 337 DO ji=1,jpi 338 zvb(ji,nlcj-2) = zvb(ji,nlcj-2) + fse3v_a(ji,nlcj-2,jk) * va(ji,nlcj-2,jk) * vmask(ji,nlcj-2,jk) 339 END DO 340 END DO 341 DO ji=1,jpi 342 zvb(ji,nlcj-2) = zvb(ji,nlcj-2) * hvr_a(ji,nlcj-2) 343 END DO 344 DO jk=1,jpkm1 345 DO ji=1,jpi 346 va(ji,nlcj-2,jk) = (va(ji,nlcj-2,jk)+va_b(ji,nlcj-2)-zvb(ji,nlcj-2))*vmask(ji,nlcj-2,jk) 347 END DO 348 END DO 349 392 350 ! Set tangential velocities to time splitting estimate 393 spgv1(nlci-1,:)=0._wp 394 DO jk=1,jpkm1 395 DO jj=1,jpj 396 spgv1(nlci-1,jj)=spgv1(nlci-1,jj)+fse3v_a(nlci-1,jj,jk)*va(nlci-1,jj,jk)*vmask(nlci-1,jj,jk) 397 END DO 398 END DO 399 400 DO jj=1,jpj 401 spgv1(nlci-1,jj)=spgv1(nlci-1,jj)*hvr_a(nlci-1,jj) 402 END DO 403 404 DO jk=1,jpkm1 405 DO jj=1,jpj 406 va(nlci-1,jj,jk) = (va(nlci-1,jj,jk)+va_b(nlci-1,jj)-spgv1(nlci-1,jj))*vmask(nlci-1,jj,jk) 407 END DO 408 END DO 409 #endif 410 411 ENDIF 412 413 IF((nbondj == -1).OR.(nbondj == 2)) THEN 414 415 #if defined key_dynspg_flt 416 DO ji=1,jpi 417 laplacv(ji,2) = timeref * (zva2d(ji,2)/(zrhox*e1v(ji,2))) 418 END DO 419 #endif 420 421 DO jk=1,jpkm1 351 !----------------------------------------------------- 352 IF ( ln_dynspg_ts ) THEN 353 zub(:,nlcj-1)=0._wp 354 DO jk=1,jpkm1 355 DO ji=1,jpi 356 zub(ji,nlcj-1) = zub(ji,nlcj-1) + fse3u_a(ji,nlcj-1,jk) * ua(ji,nlcj-1,jk) * umask(ji,nlcj-1,jk) 357 END DO 358 END DO 422 359 DO ji=1,jpi 423 va(ji,1:2,jk) = (zva(ji,1:2,jk)/(zrhox*e1v(ji,1:2))) 424 va(ji,1:2,jk) = va(ji,1:2,jk) / fse3v_a(ji,1:2,jk) 425 END DO 426 END DO 427 428 #if defined key_dynspg_flt 360 zub(ji,nlcj-1) = zub(ji,nlcj-1) * hur_a(ji,nlcj-1) 361 END DO 362 363 DO jk=1,jpkm1 364 DO ji=1,jpi 365 ua(ji,nlcj-1,jk) = (ua(ji,nlcj-1,jk)+ua_b(ji,nlcj-1)-zub(ji,nlcj-1))*umask(ji,nlcj-1,jk) 366 END DO 367 END DO 368 ENDIF 369 370 ! Mask domain edges: 371 !------------------- 429 372 DO jk=1,jpkm1 430 373 DO ji=1,jpi 431 va(ji,2,jk) = (va(ji,2,jk) - z2dt * znugdt * laplacv(ji,2))*vmask(ji,2,jk) 432 END DO 433 END DO 434 435 spgv(:,2)=0. 436 437 DO jk=1,jpkm1 438 DO ji=1,jpi 439 spgv(ji,2)=spgv(ji,2)+fse3v_a(ji,2,jk)*va(ji,2,jk) 440 END DO 441 END DO 442 443 DO ji=1,jpi 444 IF (vmask(ji,2,1).NE.0.) THEN 445 spgv(ji,2)=spgv(ji,2)*hvr_a(ji,2) 446 ENDIF 447 END DO 448 #else 449 spgv(:,2)=va_b(:,2) 450 #endif 451 452 DO jk=1,jpkm1 453 DO ji=1,jpi 454 va(ji,2,jk)=0.25*(va(ji,1,jk)+2.*va(ji,2,jk)+va(ji,3,jk)) 455 va(ji,2,jk)=va(ji,2,jk)*vmask(ji,2,jk) 456 END DO 457 END DO 458 459 spgv1(:,2)=0. 460 461 DO jk=1,jpkm1 462 DO ji=1,jpi 463 spgv1(ji,2)=spgv1(ji,2)+fse3v_a(ji,2,jk)*va(ji,2,jk)*vmask(ji,2,jk) 464 END DO 465 END DO 466 467 DO ji=1,jpi 468 IF (vmask(ji,2,1).NE.0.) THEN 469 spgv1(ji,2)=spgv1(ji,2)*hvr_a(ji,2) 470 ENDIF 471 END DO 472 473 DO jk=1,jpkm1 474 DO ji=1,jpi 475 va(ji,2,jk) = (va(ji,2,jk)+spgv(ji,2)-spgv1(ji,2))*vmask(ji,2,jk) 476 END DO 477 END DO 478 479 DO jk=1,jpkm1 480 DO ji=1,jpi 481 ua(ji,2,jk) = (zua(ji,2,jk)/(zrhoy*e2u(ji,2)))*umask(ji,2,jk) 482 ua(ji,2,jk) = ua(ji,2,jk) / fse3u_a(ji,2,jk) 483 END DO 484 END DO 485 486 #if defined key_dynspg_ts 487 ! Set tangential velocities to time splitting estimate 488 spgu1(:,2)=0._wp 489 DO jk=1,jpkm1 490 DO ji=1,jpi 491 spgu1(ji,2)=spgu1(ji,2)+fse3u_a(ji,2,jk)*ua(ji,2,jk)*umask(ji,2,jk) 492 END DO 493 END DO 494 495 DO ji=1,jpi 496 spgu1(ji,2)=spgu1(ji,2)*hur_a(ji,2) 497 END DO 498 499 DO jk=1,jpkm1 500 DO ji=1,jpi 501 ua(ji,2,jk) = (ua(ji,2,jk)+ua_b(ji,2)-spgu1(ji,2))*umask(ji,2,jk) 502 END DO 503 END DO 504 #endif 505 ENDIF 506 507 IF((nbondj == 1).OR.(nbondj == 2)) THEN 508 509 #if defined key_dynspg_flt 510 DO ji=1,jpi 511 laplacv(ji,nlcj-2) = timeref * (zva2d(ji,nlcj-2)/(zrhox*e1v(ji,nlcj-2))) 512 END DO 513 #endif 514 515 DO jk=1,jpkm1 516 DO ji=1,jpi 517 va(ji,nlcj-2:nlcj-1,jk) = (zva(ji,nlcj-2:nlcj-1,jk)/(zrhox*e1v(ji,nlcj-2:nlcj-1))) 518 va(ji,nlcj-2:nlcj-1,jk) = va(ji,nlcj-2:nlcj-1,jk) / fse3v_a(ji,nlcj-2:nlcj-1,jk) 519 END DO 520 END DO 521 522 #if defined key_dynspg_flt 523 DO jk=1,jpkm1 524 DO ji=1,jpi 525 va(ji,nlcj-2,jk) = (va(ji,nlcj-2,jk)-z2dt * znugdt * laplacv(ji,nlcj-2))*vmask(ji,nlcj-2,jk) 526 END DO 527 END DO 528 529 spgv(:,nlcj-2)=0. 530 531 DO jk=1,jpkm1 532 DO ji=1,jpi 533 spgv(ji,nlcj-2)=spgv(ji,nlcj-2)+fse3v_a(ji,nlcj-2,jk)*va(ji,nlcj-2,jk) 534 END DO 535 END DO 536 537 DO ji=1,jpi 538 IF (vmask(ji,nlcj-2,1).NE.0.) THEN 539 spgv(ji,nlcj-2)=spgv(ji,nlcj-2)*hvr_a(ji,nlcj-2) 540 ENDIF 541 END DO 542 #else 543 spgv(:,nlcj-2)=va_b(:,nlcj-2) 544 #endif 545 546 DO jk=1,jpkm1 547 DO ji=1,jpi 548 va(ji,nlcj-2,jk)=0.25*(va(ji,nlcj-3,jk)+2.*va(ji,nlcj-2,jk)+va(ji,nlcj-1,jk)) 549 va(ji,nlcj-2,jk) = va(ji,nlcj-2,jk) * vmask(ji,nlcj-2,jk) 550 END DO 551 END DO 552 553 spgv1(:,nlcj-2)=0. 554 555 DO jk=1,jpkm1 556 DO ji=1,jpi 557 spgv1(ji,nlcj-2)=spgv1(ji,nlcj-2)+fse3v_a(ji,nlcj-2,jk)*va(ji,nlcj-2,jk) 558 END DO 559 END DO 560 561 DO ji=1,jpi 562 IF (vmask(ji,nlcj-2,1).NE.0.) THEN 563 spgv1(ji,nlcj-2)=spgv1(ji,nlcj-2)*hvr_a(ji,nlcj-2) 564 ENDIF 565 END DO 566 567 DO jk=1,jpkm1 568 DO ji=1,jpi 569 va(ji,nlcj-2,jk) = (va(ji,nlcj-2,jk)+spgv(ji,nlcj-2)-spgv1(ji,nlcj-2))*vmask(ji,nlcj-2,jk) 570 END DO 571 END DO 572 573 DO jk=1,jpkm1 574 DO ji=1,jpi 575 ua(ji,nlcj-1,jk) = (zua(ji,nlcj-1,jk)/(zrhoy*e2u(ji,nlcj-1)))*umask(ji,nlcj-1,jk) 576 ua(ji,nlcj-1,jk) = ua(ji,nlcj-1,jk) / fse3u_a(ji,nlcj-1,jk) 577 END DO 578 END DO 579 580 #if defined key_dynspg_ts 581 ! Set tangential velocities to time splitting estimate 582 spgu1(:,nlcj-1)=0._wp 583 DO jk=1,jpkm1 584 DO ji=1,jpi 585 spgu1(ji,nlcj-1)=spgu1(ji,nlcj-1)+fse3u_a(ji,nlcj-1,jk)*ua(ji,nlcj-1,jk) 586 END DO 587 END DO 588 589 DO ji=1,jpi 590 spgu1(ji,nlcj-1)=spgu1(ji,nlcj-1)*hur_a(ji,nlcj-1) 591 END DO 592 593 DO jk=1,jpkm1 594 DO ji=1,jpi 595 ua(ji,nlcj-1,jk) = (ua(ji,nlcj-1,jk)+ua_b(ji,nlcj-1)-spgu1(ji,nlcj-1))*umask(ji,nlcj-1,jk) 596 END DO 597 END DO 598 #endif 599 600 ENDIF 601 ! 602 CALL wrk_dealloc( jpi, jpj, spgv1, spgu1, zua2d, zva2d ) 603 CALL wrk_dealloc( jpi, jpj, jpk, zua, zva ) 374 ua(ji,nlcj ,jk) = 0._wp 375 va(ji,nlcj-1,jk) = 0._wp 376 END DO 377 END DO 378 379 ENDIF 380 ! 381 CALL wrk_dealloc( jpi, jpj, zub, zvb ) 604 382 ! 605 383 END SUBROUTINE Agrif_dyn … … 620 398 DO jj=1,jpj 621 399 va_e(2,jj) = vbdy_w(jj) * hvr_e(2,jj) 622 ! Specified fluxes:400 ! Specified fluxes: 623 401 ua_e(2,jj) = ubdy_w(jj) * hur_e(2,jj) 624 ! Characteristics method:625 !alt ua_e(2,jj) = 0.5_wp * ( ubdy_w(jj) * hur_e(2,jj) + ua_e(3,jj) &626 !alt & - sqrt(grav * hur_e(2,jj)) * (sshn_e(3,jj) - hbdy_w(jj)) )402 ! Characteristics method: 403 !alt ua_e(2,jj) = 0.5_wp * ( ubdy_w(jj) * hur_e(2,jj) + ua_e(3,jj) & 404 !alt & - sqrt(grav * hur_e(2,jj)) * (sshn_e(3,jj) - hbdy_w(jj)) ) 627 405 END DO 628 406 ENDIF … … 631 409 DO jj=1,jpj 632 410 va_e(nlci-1,jj) = vbdy_e(jj) * hvr_e(nlci-1,jj) 633 ! Specified fluxes:411 ! Specified fluxes: 634 412 ua_e(nlci-2,jj) = ubdy_e(jj) * hur_e(nlci-2,jj) 635 ! Characteristics method:636 !alt ua_e(nlci-2,jj) = 0.5_wp * ( ubdy_e(jj) * hur_e(nlci-2,jj) + ua_e(nlci-3,jj) &637 !alt & + sqrt(grav * hur_e(nlci-2,jj)) * (sshn_e(nlci-2,jj) - hbdy_e(jj)) )413 ! Characteristics method: 414 !alt ua_e(nlci-2,jj) = 0.5_wp * ( ubdy_e(jj) * hur_e(nlci-2,jj) + ua_e(nlci-3,jj) & 415 !alt & + sqrt(grav * hur_e(nlci-2,jj)) * (sshn_e(nlci-2,jj) - hbdy_e(jj)) ) 638 416 END DO 639 417 ENDIF … … 642 420 DO ji=1,jpi 643 421 ua_e(ji,2) = ubdy_s(ji) * hur_e(ji,2) 644 ! Specified fluxes:422 ! Specified fluxes: 645 423 va_e(ji,2) = vbdy_s(ji) * hvr_e(ji,2) 646 ! Characteristics method:647 !alt va_e(ji,2) = 0.5_wp * ( vbdy_s(ji) * hvr_e(ji,2) + va_e(ji,3) &648 !alt & - sqrt(grav * hvr_e(ji,2)) * (sshn_e(ji,3) - hbdy_s(ji)) )424 ! Characteristics method: 425 !alt va_e(ji,2) = 0.5_wp * ( vbdy_s(ji) * hvr_e(ji,2) + va_e(ji,3) & 426 !alt & - sqrt(grav * hvr_e(ji,2)) * (sshn_e(ji,3) - hbdy_s(ji)) ) 649 427 END DO 650 428 ENDIF … … 653 431 DO ji=1,jpi 654 432 ua_e(ji,nlcj-1) = ubdy_n(ji) * hur_e(ji,nlcj-1) 655 ! Specified fluxes:433 ! Specified fluxes: 656 434 va_e(ji,nlcj-2) = vbdy_n(ji) * hvr_e(ji,nlcj-2) 657 ! Characteristics method:658 !alt va_e(ji,nlcj-2) = 0.5_wp * ( vbdy_n(ji) * hvr_e(ji,nlcj-2) + va_e(ji,nlcj-3) &659 !alt & + sqrt(grav * hvr_e(ji,nlcj-2)) * (sshn_e(ji,nlcj-2) - hbdy_n(ji)) )435 ! Characteristics method: 436 !alt va_e(ji,nlcj-2) = 0.5_wp * ( vbdy_n(ji) * hvr_e(ji,nlcj-2) + va_e(ji,nlcj-3) & 437 !alt & + sqrt(grav * hvr_e(ji,nlcj-2)) * (sshn_e(ji,nlcj-2) - hbdy_n(ji)) ) 660 438 END DO 661 439 ENDIF … … 672 450 INTEGER :: ji, jj 673 451 LOGICAL :: ll_int_cons 674 REAL(wp) :: zrhox, zrhoy, zrhot, zt 675 REAL(wp) :: zaa, zab, zat 676 REAL(wp) :: zt0, zt1 677 REAL(wp), POINTER, DIMENSION(:,:) :: zunb, zvnb, zsshn 678 REAL(wp), POINTER, DIMENSION(:,:) :: zuab, zvab, zubb, zvbb, zutn, zvtn 452 REAL(wp) :: zrhot, zt 679 453 !!---------------------------------------------------------------------- 680 454 … … 682 456 683 457 ll_int_cons = ln_bt_fw ! Assume conservative temporal integration in 684 ! the forward case only 685 686 zrhox = Agrif_Rhox() 687 zrhoy = Agrif_Rhoy() 458 ! the forward case only 459 688 460 zrhot = Agrif_rhot() 689 690 IF ( kt==nit000 ) THEN ! Allocate boundary data arrays691 ALLOCATE( ubdy_w(jpj), vbdy_w(jpj), hbdy_w(jpj))692 ALLOCATE( ubdy_e(jpj), vbdy_e(jpj), hbdy_e(jpj))693 ALLOCATE( ubdy_n(jpi), vbdy_n(jpi), hbdy_n(jpi))694 ALLOCATE( ubdy_s(jpi), vbdy_s(jpi), hbdy_s(jpi))695 ENDIF696 697 CALL wrk_alloc( jpi, jpj, zunb, zvnb, zsshn )698 461 699 462 ! "Central" time index for interpolation: … … 707 470 Agrif_SpecialValue = 0.e0 708 471 Agrif_UseSpecialValue = .TRUE. 709 CALL Agrif_Bc_variable( zsshn,sshn_id,calledweight=zt, procname=interpsshn )472 CALL Agrif_Bc_variable(sshn_id,calledweight=zt, procname=interpsshn ) 710 473 Agrif_UseSpecialValue = .FALSE. 711 474 … … 715 478 716 479 IF (ll_int_cons) THEN ! Conservative interpolation 717 CALL wrk_alloc( jpi, jpj, zuab, zvab, zubb, zvbb, zutn, zvtn ) 718 zuab(:,:) = 0._wp ; zvab(:,:) = 0._wp 719 zubb(:,:) = 0._wp ; zvbb(:,:) = 0._wp 720 zutn(:,:) = 0._wp ; zvtn(:,:) = 0._wp 721 CALL Agrif_Bc_variable(zubb,unb_id ,calledweight=0._wp, procname=interpunb) ! Before 722 CALL Agrif_Bc_variable(zvbb,vnb_id ,calledweight=0._wp, procname=interpvnb) 723 CALL Agrif_Bc_variable(zuab,unb_id ,calledweight=1._wp, procname=interpunb) ! After 724 CALL Agrif_Bc_variable(zvab,vnb_id ,calledweight=1._wp, procname=interpvnb) 725 CALL Agrif_Bc_variable(zutn,ub2b_id,calledweight=1._wp, procname=interpub2b)! Time integrated 726 CALL Agrif_Bc_variable(zvtn,vb2b_id,calledweight=1._wp, procname=interpvb2b) 727 480 ! orders matters here !!!!!! 481 CALL Agrif_Bc_variable(ub2b_interp_id,calledweight=1._wp, procname=interpub2b) ! Time integrated 482 CALL Agrif_Bc_variable(vb2b_interp_id,calledweight=1._wp, procname=interpvb2b) 483 bdy_tinterp = 1 484 CALL Agrif_Bc_variable(unb_id ,calledweight=1._wp, procname=interpunb) ! After 485 CALL Agrif_Bc_variable(vnb_id ,calledweight=1._wp, procname=interpvnb) 486 bdy_tinterp = 2 487 CALL Agrif_Bc_variable(unb_id ,calledweight=0._wp, procname=interpunb) ! Before 488 CALL Agrif_Bc_variable(vnb_id ,calledweight=0._wp, procname=interpvnb) 489 ELSE ! Linear interpolation 490 bdy_tinterp = 0 491 ubdy_w(:) = 0.e0 ; vbdy_w(:) = 0.e0 492 ubdy_e(:) = 0.e0 ; vbdy_e(:) = 0.e0 493 ubdy_n(:) = 0.e0 ; vbdy_n(:) = 0.e0 494 ubdy_s(:) = 0.e0 ; vbdy_s(:) = 0.e0 495 CALL Agrif_Bc_variable(unb_id,calledweight=zt, procname=interpunb) 496 CALL Agrif_Bc_variable(vnb_id,calledweight=zt, procname=interpvnb) 497 ENDIF 498 Agrif_UseSpecialValue = .FALSE. 499 ! 500 END SUBROUTINE Agrif_dta_ts 501 502 SUBROUTINE Agrif_ssh( kt ) 503 !!---------------------------------------------------------------------- 504 !! *** ROUTINE Agrif_DYN *** 505 !!---------------------------------------------------------------------- 506 INTEGER, INTENT(in) :: kt 507 !! 508 !!---------------------------------------------------------------------- 509 510 IF( Agrif_Root() ) RETURN 511 512 IF((nbondi == -1).OR.(nbondi == 2)) THEN 513 ssha(2,:)=ssha(3,:) 514 sshn(2,:)=sshn(3,:) 515 ENDIF 516 517 IF((nbondi == 1).OR.(nbondi == 2)) THEN 518 ssha(nlci-1,:)=ssha(nlci-2,:) 519 sshn(nlci-1,:)=sshn(nlci-2,:) 520 ENDIF 521 522 IF((nbondj == -1).OR.(nbondj == 2)) THEN 523 ssha(:,2)=ssha(:,3) 524 sshn(:,2)=sshn(:,3) 525 ENDIF 526 527 IF((nbondj == 1).OR.(nbondj == 2)) THEN 528 ssha(:,nlcj-1)=ssha(:,nlcj-2) 529 sshn(:,nlcj-1)=sshn(:,nlcj-2) 530 ENDIF 531 532 END SUBROUTINE Agrif_ssh 533 534 SUBROUTINE Agrif_ssh_ts( jn ) 535 !!---------------------------------------------------------------------- 536 !! *** ROUTINE Agrif_ssh_ts *** 537 !!---------------------------------------------------------------------- 538 INTEGER, INTENT(in) :: jn 539 !! 540 INTEGER :: ji,jj 541 !!---------------------------------------------------------------------- 542 543 IF((nbondi == -1).OR.(nbondi == 2)) THEN 544 DO jj=1,jpj 545 ssha_e(2,jj) = hbdy_w(jj) 546 END DO 547 ENDIF 548 549 IF((nbondi == 1).OR.(nbondi == 2)) THEN 550 DO jj=1,jpj 551 ssha_e(nlci-1,jj) = hbdy_e(jj) 552 END DO 553 ENDIF 554 555 IF((nbondj == -1).OR.(nbondj == 2)) THEN 556 DO ji=1,jpi 557 ssha_e(ji,2) = hbdy_s(ji) 558 END DO 559 ENDIF 560 561 IF((nbondj == 1).OR.(nbondj == 2)) THEN 562 DO ji=1,jpi 563 ssha_e(ji,nlcj-1) = hbdy_n(ji) 564 END DO 565 ENDIF 566 567 END SUBROUTINE Agrif_ssh_ts 568 569 # if defined key_zdftke 570 SUBROUTINE Agrif_tke 571 !!---------------------------------------------------------------------- 572 !! *** ROUTINE Agrif_tke *** 573 !!---------------------------------------------------------------------- 574 REAL(wp) :: zalpha 575 ! 576 zalpha = REAL( Agrif_NbStepint() + Agrif_IRhot() - 1, wp ) / REAL( Agrif_IRhot(), wp ) 577 IF( zalpha > 1. ) zalpha = 1. 578 579 Agrif_SpecialValue = 0.e0 580 Agrif_UseSpecialValue = .TRUE. 581 582 CALL Agrif_Bc_variable(avm_id ,calledweight=zalpha, procname=interpavm) 583 584 Agrif_UseSpecialValue = .FALSE. 585 ! 586 END SUBROUTINE Agrif_tke 587 # endif 588 589 SUBROUTINE interptsn(ptab,i1,i2,j1,j2,k1,k2,n1,n2,before,nb,ndir) 590 !!--------------------------------------------- 591 !! *** ROUTINE interptsn *** 592 !!--------------------------------------------- 593 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: ptab 594 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 595 LOGICAL, INTENT(in) :: before 596 INTEGER, INTENT(in) :: nb , ndir 597 ! 598 INTEGER :: ji, jj, jk, jn ! dummy loop indices 599 INTEGER :: imin, imax, jmin, jmax 600 REAL(wp) :: zrhox , zalpha1, zalpha2, zalpha3 601 REAL(wp) :: zalpha4, zalpha5, zalpha6, zalpha7 602 LOGICAL :: western_side, eastern_side,northern_side,southern_side 603 604 IF (before) THEN 605 ptab(i1:i2,j1:j2,k1:k2,n1:n2) = tsn(i1:i2,j1:j2,k1:k2,n1:n2) 606 ELSE 607 ! 608 western_side = (nb == 1).AND.(ndir == 1) 609 eastern_side = (nb == 1).AND.(ndir == 2) 610 southern_side = (nb == 2).AND.(ndir == 1) 611 northern_side = (nb == 2).AND.(ndir == 2) 612 ! 613 zrhox = Agrif_Rhox() 614 ! 615 zalpha1 = ( zrhox - 1. ) * 0.5 616 zalpha2 = 1. - zalpha1 617 ! 618 zalpha3 = ( zrhox - 1. ) / ( zrhox + 1. ) 619 zalpha4 = 1. - zalpha3 620 ! 621 zalpha6 = 2. * ( zrhox - 1. ) / ( zrhox + 1. ) 622 zalpha7 = - ( zrhox - 1. ) / ( zrhox + 3. ) 623 zalpha5 = 1. - zalpha6 - zalpha7 624 ! 625 imin = i1 626 imax = i2 627 jmin = j1 628 jmax = j2 629 ! 630 ! Remove CORNERS 631 IF((nbondj == -1).OR.(nbondj == 2)) jmin = 3 632 IF((nbondj == +1).OR.(nbondj == 2)) jmax = nlcj-2 633 IF((nbondi == -1).OR.(nbondi == 2)) imin = 3 634 IF((nbondi == +1).OR.(nbondi == 2)) imax = nlci-2 635 ! 636 IF( eastern_side) THEN 637 DO jn = 1, jpts 638 tsa(nlci,j1:j2,k1:k2,jn) = zalpha1 * ptab(nlci,j1:j2,k1:k2,jn) + zalpha2 * ptab(nlci-1,j1:j2,k1:k2,jn) 639 DO jk = 1, jpkm1 640 DO jj = jmin,jmax 641 IF( umask(nlci-2,jj,jk) == 0.e0 ) THEN 642 tsa(nlci-1,jj,jk,jn) = tsa(nlci,jj,jk,jn) * tmask(nlci-1,jj,jk) 643 ELSE 644 tsa(nlci-1,jj,jk,jn)=(zalpha4*tsa(nlci,jj,jk,jn)+zalpha3*tsa(nlci-2,jj,jk,jn))*tmask(nlci-1,jj,jk) 645 IF( un(nlci-2,jj,jk) > 0.e0 ) THEN 646 tsa(nlci-1,jj,jk,jn)=( zalpha6*tsa(nlci-2,jj,jk,jn)+zalpha5*tsa(nlci,jj,jk,jn) & 647 + zalpha7*tsa(nlci-3,jj,jk,jn) ) * tmask(nlci-1,jj,jk) 648 ENDIF 649 ENDIF 650 END DO 651 END DO 652 tsa(nlci,j1:j2,k1:k2,jn) = 0._wp 653 ENDDO 654 ENDIF 655 ! 656 IF( northern_side ) THEN 657 DO jn = 1, jpts 658 tsa(i1:i2,nlcj,k1:k2,jn) = zalpha1 * ptab(i1:i2,nlcj,k1:k2,jn) + zalpha2 * ptab(i1:i2,nlcj-1,k1:k2,jn) 659 DO jk = 1, jpkm1 660 DO ji = imin,imax 661 IF( vmask(ji,nlcj-2,jk) == 0.e0 ) THEN 662 tsa(ji,nlcj-1,jk,jn) = tsa(ji,nlcj,jk,jn) * tmask(ji,nlcj-1,jk) 663 ELSE 664 tsa(ji,nlcj-1,jk,jn)=(zalpha4*tsa(ji,nlcj,jk,jn)+zalpha3*tsa(ji,nlcj-2,jk,jn))*tmask(ji,nlcj-1,jk) 665 IF (vn(ji,nlcj-2,jk) > 0.e0 ) THEN 666 tsa(ji,nlcj-1,jk,jn)=( zalpha6*tsa(ji,nlcj-2,jk,jn)+zalpha5*tsa(ji,nlcj,jk,jn) & 667 + zalpha7*tsa(ji,nlcj-3,jk,jn) ) * tmask(ji,nlcj-1,jk) 668 ENDIF 669 ENDIF 670 END DO 671 END DO 672 tsa(i1:i2,nlcj,k1:k2,jn) = 0._wp 673 ENDDO 674 ENDIF 675 ! 676 IF( western_side) THEN 677 DO jn = 1, jpts 678 tsa(1,j1:j2,k1:k2,jn) = zalpha1 * ptab(1,j1:j2,k1:k2,jn) + zalpha2 * ptab(2,j1:j2,k1:k2,jn) 679 DO jk = 1, jpkm1 680 DO jj = jmin,jmax 681 IF( umask(2,jj,jk) == 0.e0 ) THEN 682 tsa(2,jj,jk,jn) = tsa(1,jj,jk,jn) * tmask(2,jj,jk) 683 ELSE 684 tsa(2,jj,jk,jn)=(zalpha4*tsa(1,jj,jk,jn)+zalpha3*tsa(3,jj,jk,jn))*tmask(2,jj,jk) 685 IF( un(2,jj,jk) < 0.e0 ) THEN 686 tsa(2,jj,jk,jn)=(zalpha6*tsa(3,jj,jk,jn)+zalpha5*tsa(1,jj,jk,jn)+zalpha7*tsa(4,jj,jk,jn))*tmask(2,jj,jk) 687 ENDIF 688 ENDIF 689 END DO 690 END DO 691 tsa(1,j1:j2,k1:k2,jn) = 0._wp 692 END DO 693 ENDIF 694 ! 695 IF( southern_side ) THEN 696 DO jn = 1, jpts 697 tsa(i1:i2,1,k1:k2,jn) = zalpha1 * ptab(i1:i2,1,k1:k2,jn) + zalpha2 * ptab(i1:i2,2,k1:k2,jn) 698 DO jk=1,jpk 699 DO ji=imin,imax 700 IF( vmask(ji,2,jk) == 0.e0 ) THEN 701 tsa(ji,2,jk,jn)=tsa(ji,1,jk,jn) * tmask(ji,2,jk) 702 ELSE 703 tsa(ji,2,jk,jn)=(zalpha4*tsa(ji,1,jk,jn)+zalpha3*tsa(ji,3,jk,jn))*tmask(ji,2,jk) 704 IF( vn(ji,2,jk) < 0.e0 ) THEN 705 tsa(ji,2,jk,jn)=(zalpha6*tsa(ji,3,jk,jn)+zalpha5*tsa(ji,1,jk,jn)+zalpha7*tsa(ji,4,jk,jn))*tmask(ji,2,jk) 706 ENDIF 707 ENDIF 708 END DO 709 END DO 710 tsa(i1:i2,1,k1:k2,jn) = 0._wp 711 ENDDO 712 ENDIF 713 ! 714 ! Treatment of corners 715 ! 716 ! East south 717 IF ((eastern_side).AND.((nbondj == -1).OR.(nbondj == 2))) THEN 718 tsa(nlci-1,2,:,:) = ptab(nlci-1,2,:,:) 719 ENDIF 720 ! East north 721 IF ((eastern_side).AND.((nbondj == 1).OR.(nbondj == 2))) THEN 722 tsa(nlci-1,nlcj-1,:,:) = ptab(nlci-1,nlcj-1,:,:) 723 ENDIF 724 ! West south 725 IF ((western_side).AND.((nbondj == -1).OR.(nbondj == 2))) THEN 726 tsa(2,2,:,:) = ptab(2,2,:,:) 727 ENDIF 728 ! West north 729 IF ((western_side).AND.((nbondj == 1).OR.(nbondj == 2))) THEN 730 tsa(2,nlcj-1,:,:) = ptab(2,nlcj-1,:,:) 731 ENDIF 732 ! 733 ENDIF 734 ! 735 END SUBROUTINE interptsn 736 737 SUBROUTINE interpsshn(ptab,i1,i2,j1,j2,before,nb,ndir) 738 !!---------------------------------------------------------------------- 739 !! *** ROUTINE interpsshn *** 740 !!---------------------------------------------------------------------- 741 INTEGER, INTENT(in) :: i1,i2,j1,j2 742 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: ptab 743 LOGICAL, INTENT(in) :: before 744 INTEGER, INTENT(in) :: nb , ndir 745 LOGICAL :: western_side, eastern_side,northern_side,southern_side 746 !!---------------------------------------------------------------------- 747 ! 748 IF( before) THEN 749 ptab(i1:i2,j1:j2) = sshn(i1:i2,j1:j2) 750 ELSE 751 western_side = (nb == 1).AND.(ndir == 1) 752 eastern_side = (nb == 1).AND.(ndir == 2) 753 southern_side = (nb == 2).AND.(ndir == 1) 754 northern_side = (nb == 2).AND.(ndir == 2) 755 IF(western_side) hbdy_w(j1:j2) = ptab(i1,j1:j2) * tmask(i1,j1:j2,1) 756 IF(eastern_side) hbdy_e(j1:j2) = ptab(i1,j1:j2) * tmask(i1,j1:j2,1) 757 IF(southern_side) hbdy_s(i1:i2) = ptab(i1:i2,j1) * tmask(i1:i2,j1,1) 758 IF(northern_side) hbdy_n(i1:i2) = ptab(i1:i2,j1) * tmask(i1:i2,j1,1) 759 ENDIF 760 ! 761 END SUBROUTINE interpsshn 762 763 SUBROUTINE interpun(ptab,i1,i2,j1,j2,k1,k2, before) 764 !!--------------------------------------------- 765 !! *** ROUTINE interpun *** 766 !!--------------------------------------------- 767 !! 768 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 769 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab 770 LOGICAL, INTENT(in) :: before 771 !! 772 INTEGER :: ji,jj,jk 773 REAL(wp) :: zrhoy 774 !!--------------------------------------------- 775 ! 776 IF (before) THEN 777 DO jk=1,jpk 778 DO jj=j1,j2 779 DO ji=i1,i2 780 ptab(ji,jj,jk) = e2u(ji,jj) * un(ji,jj,jk) 781 ptab(ji,jj,jk) = ptab(ji,jj,jk) * fse3u(ji,jj,jk) 782 END DO 783 END DO 784 END DO 785 ELSE 786 zrhoy = Agrif_Rhoy() 787 DO jk=1,jpkm1 788 DO jj=j1,j2 789 ua(i1:i2,jj,jk) = (ptab(i1:i2,jj,jk)/(zrhoy*e2u(i1:i2,jj))) 790 ua(i1:i2,jj,jk) = ua(i1:i2,jj,jk) / fse3u(i1:i2,jj,jk) 791 END DO 792 END DO 793 ENDIF 794 ! 795 END SUBROUTINE interpun 796 797 SUBROUTINE interpvn(ptab,i1,i2,j1,j2,k1,k2, before) 798 !!--------------------------------------------- 799 !! *** ROUTINE interpvn *** 800 !!--------------------------------------------- 801 ! 802 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 803 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab 804 LOGICAL, INTENT(in) :: before 805 ! 806 INTEGER :: ji,jj,jk 807 REAL(wp) :: zrhox 808 !!--------------------------------------------- 809 ! 810 IF (before) THEN 811 !interpv entre 1 et k2 et interpv2d en jpkp1 812 DO jk=k1,jpk 813 DO jj=j1,j2 814 DO ji=i1,i2 815 ptab(ji,jj,jk) = e1v(ji,jj) * vn(ji,jj,jk) 816 ptab(ji,jj,jk) = ptab(ji,jj,jk) * fse3v(ji,jj,jk) 817 END DO 818 END DO 819 END DO 820 ELSE 821 zrhox= Agrif_Rhox() 822 DO jk=1,jpkm1 823 DO jj=j1,j2 824 va(i1:i2,jj,jk) = (ptab(i1:i2,jj,jk)/(zrhox*e1v(i1:i2,jj))) 825 va(i1:i2,jj,jk) = va(i1:i2,jj,jk) / fse3v(i1:i2,jj,jk) 826 END DO 827 END DO 828 ENDIF 829 ! 830 END SUBROUTINE interpvn 831 832 SUBROUTINE interpunb(ptab,i1,i2,j1,j2,before,nb,ndir) 833 !!---------------------------------------------------------------------- 834 !! *** ROUTINE interpunb *** 835 !!---------------------------------------------------------------------- 836 INTEGER, INTENT(in) :: i1,i2,j1,j2 837 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: ptab 838 LOGICAL, INTENT(in) :: before 839 INTEGER, INTENT(in) :: nb , ndir 840 !! 841 INTEGER :: ji,jj 842 REAL(wp) :: zrhoy, zrhot, zt0, zt1, ztcoeff 843 LOGICAL :: western_side, eastern_side,northern_side,southern_side 844 !!---------------------------------------------------------------------- 845 ! 846 IF (before) THEN 847 DO jj=j1,j2 848 DO ji=i1,i2 849 ptab(ji,jj) = un_b(ji,jj) * e2u(ji,jj) * hu(ji,jj) 850 END DO 851 END DO 852 ELSE 853 western_side = (nb == 1).AND.(ndir == 1) 854 eastern_side = (nb == 1).AND.(ndir == 2) 855 southern_side = (nb == 2).AND.(ndir == 1) 856 northern_side = (nb == 2).AND.(ndir == 2) 857 zrhoy = Agrif_Rhoy() 858 zrhot = Agrif_rhot() 859 ! Time indexes bounds for integration 860 zt0 = REAL(Agrif_NbStepint() , wp) / zrhot 861 zt1 = REAL(Agrif_NbStepint()+1, wp) / zrhot 862 ! Polynomial interpolation coefficients: 863 IF( bdy_tinterp == 1 ) THEN 864 ztcoeff = zrhot * ( zt1**2._wp * ( zt1 - 1._wp) & 865 & - zt0**2._wp * ( zt0 - 1._wp) ) 866 ELSEIF( bdy_tinterp == 2 ) THEN 867 ztcoeff = zrhot * ( zt1 * ( zt1 - 1._wp)**2._wp & 868 & - zt0 * ( zt0 - 1._wp)**2._wp ) 869 870 ELSE 871 ztcoeff = 1 872 ENDIF 873 ! 874 IF(western_side) THEN 875 ubdy_w(j1:j2) = ubdy_w(j1:j2) + ztcoeff * ptab(i1,j1:j2) 876 ENDIF 877 IF(eastern_side) THEN 878 ubdy_e(j1:j2) = ubdy_e(j1:j2) + ztcoeff * ptab(i1,j1:j2) 879 ENDIF 880 IF(southern_side) THEN 881 ubdy_s(i1:i2) = ubdy_s(i1:i2) + ztcoeff * ptab(i1:i2,j1) 882 ENDIF 883 IF(northern_side) THEN 884 ubdy_n(i1:i2) = ubdy_n(i1:i2) + ztcoeff * ptab(i1:i2,j1) 885 ENDIF 886 ! 887 IF( bdy_tinterp == 0 .OR. bdy_tinterp == 2) THEN 888 IF(western_side) THEN 889 ubdy_w(j1:j2) = ubdy_w(j1:j2) / (zrhoy*e2u(i1,j1:j2)) & 890 & * umask(i1,j1:j2,1) 891 ENDIF 892 IF(eastern_side) THEN 893 ubdy_e(j1:j2) = ubdy_e(j1:j2) / (zrhoy*e2u(i1,j1:j2)) & 894 & * umask(i1,j1:j2,1) 895 ENDIF 896 IF(southern_side) THEN 897 ubdy_s(i1:i2) = ubdy_s(i1:i2) / (zrhoy*e2u(i1:i2,j1)) & 898 & * umask(i1:i2,j1,1) 899 ENDIF 900 IF(northern_side) THEN 901 ubdy_n(i1:i2) = ubdy_n(i1:i2) / (zrhoy*e2u(i1:i2,j1)) & 902 & * umask(i1:i2,j1,1) 903 ENDIF 904 ENDIF 905 ENDIF 906 ! 907 END SUBROUTINE interpunb 908 909 SUBROUTINE interpvnb(ptab,i1,i2,j1,j2,before,nb,ndir) 910 !!---------------------------------------------------------------------- 911 !! *** ROUTINE interpvnb *** 912 !!---------------------------------------------------------------------- 913 INTEGER, INTENT(in) :: i1,i2,j1,j2 914 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: ptab 915 LOGICAL, INTENT(in) :: before 916 INTEGER, INTENT(in) :: nb , ndir 917 !! 918 INTEGER :: ji,jj 919 REAL(wp) :: zrhox, zrhot, zt0, zt1, ztcoeff 920 LOGICAL :: western_side, eastern_side,northern_side,southern_side 921 !!---------------------------------------------------------------------- 922 ! 923 IF (before) THEN 924 DO jj=j1,j2 925 DO ji=i1,i2 926 ptab(ji,jj) = vn_b(ji,jj) * e1v(ji,jj) * hv(ji,jj) 927 END DO 928 END DO 929 ELSE 930 western_side = (nb == 1).AND.(ndir == 1) 931 eastern_side = (nb == 1).AND.(ndir == 2) 932 southern_side = (nb == 2).AND.(ndir == 1) 933 northern_side = (nb == 2).AND.(ndir == 2) 934 zrhox = Agrif_Rhox() 935 zrhot = Agrif_rhot() 936 ! Time indexes bounds for integration 937 zt0 = REAL(Agrif_NbStepint() , wp) / zrhot 938 zt1 = REAL(Agrif_NbStepint()+1, wp) / zrhot 939 IF( bdy_tinterp == 1 ) THEN 940 ztcoeff = zrhot * ( zt1**2._wp * ( zt1 - 1._wp) & 941 & - zt0**2._wp * ( zt0 - 1._wp) ) 942 ELSEIF( bdy_tinterp == 2 ) THEN 943 ztcoeff = zrhot * ( zt1 * ( zt1 - 1._wp)**2._wp & 944 & - zt0 * ( zt0 - 1._wp)**2._wp ) 945 946 ELSE 947 ztcoeff = 1 948 ENDIF 949 ! 950 IF(western_side) THEN 951 vbdy_w(j1:j2) = vbdy_w(j1:j2) + ztcoeff * ptab(i1,j1:j2) 952 ENDIF 953 IF(eastern_side) THEN 954 vbdy_e(j1:j2) = vbdy_e(j1:j2) + ztcoeff * ptab(i1,j1:j2) 955 ENDIF 956 IF(southern_side) THEN 957 vbdy_s(i1:i2) = vbdy_s(i1:i2) + ztcoeff * ptab(i1:i2,j1) 958 ENDIF 959 IF(northern_side) THEN 960 vbdy_n(i1:i2) = vbdy_n(i1:i2) + ztcoeff * ptab(i1:i2,j1) 961 ENDIF 962 ! 963 IF( bdy_tinterp == 0 .OR. bdy_tinterp == 2) THEN 964 IF(western_side) THEN 965 vbdy_w(j1:j2) = vbdy_w(j1:j2) / (zrhox*e1v(i1,j1:j2)) & 966 & * vmask(i1,j1:j2,1) 967 ENDIF 968 IF(eastern_side) THEN 969 vbdy_e(j1:j2) = vbdy_e(j1:j2) / (zrhox*e1v(i1,j1:j2)) & 970 & * vmask(i1,j1:j2,1) 971 ENDIF 972 IF(southern_side) THEN 973 vbdy_s(i1:i2) = vbdy_s(i1:i2) / (zrhox*e1v(i1:i2,j1)) & 974 & * vmask(i1:i2,j1,1) 975 ENDIF 976 IF(northern_side) THEN 977 vbdy_n(i1:i2) = vbdy_n(i1:i2) / (zrhox*e1v(i1:i2,j1)) & 978 & * vmask(i1:i2,j1,1) 979 ENDIF 980 ENDIF 981 ENDIF 982 ! 983 END SUBROUTINE interpvnb 984 985 SUBROUTINE interpub2b(ptab,i1,i2,j1,j2,before,nb,ndir) 986 !!---------------------------------------------------------------------- 987 !! *** ROUTINE interpub2b *** 988 !!---------------------------------------------------------------------- 989 INTEGER, INTENT(in) :: i1,i2,j1,j2 990 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: ptab 991 LOGICAL, INTENT(in) :: before 992 INTEGER, INTENT(in) :: nb , ndir 993 !! 994 INTEGER :: ji,jj 995 REAL(wp) :: zrhot, zt0, zt1,zat 996 LOGICAL :: western_side, eastern_side,northern_side,southern_side 997 !!---------------------------------------------------------------------- 998 IF( before ) THEN 999 DO jj=j1,j2 1000 DO ji=i1,i2 1001 ptab(ji,jj) = ub2_b(ji,jj) * e2u(ji,jj) 1002 END DO 1003 END DO 1004 ELSE 1005 western_side = (nb == 1).AND.(ndir == 1) 1006 eastern_side = (nb == 1).AND.(ndir == 2) 1007 southern_side = (nb == 2).AND.(ndir == 1) 1008 northern_side = (nb == 2).AND.(ndir == 2) 1009 zrhot = Agrif_rhot() 728 1010 ! Time indexes bounds for integration 729 1011 zt0 = REAL(Agrif_NbStepint() , wp) / zrhot 730 1012 zt1 = REAL(Agrif_NbStepint()+1, wp) / zrhot 731 732 1013 ! Polynomial interpolation coefficients: 733 zaa = zrhot * ( zt1**2._wp * ( zt1 - 1._wp) &734 & - zt0**2._wp * ( zt0 - 1._wp) )735 zab = zrhot * ( zt1 * ( zt1 - 1._wp)**2._wp &736 & - zt0 * ( zt0 - 1._wp)**2._wp )737 1014 zat = zrhot * ( zt1**2._wp * (-2._wp*zt1 + 3._wp) & 738 & - zt0**2._wp * (-2._wp*zt0 + 3._wp) ) 739 740 ! Do time interpolation 741 IF((nbondi == -1).OR.(nbondi == 2)) THEN 742 DO jj=1,jpj 743 zunb(2,jj) = zaa * zuab(2,jj) + zab * zubb(2,jj) + zat * zutn(2,jj) 744 zvnb(2,jj) = zaa * zvab(2,jj) + zab * zvbb(2,jj) + zat * zvtn(2,jj) 745 END DO 746 ENDIF 747 IF((nbondi == 1).OR.(nbondi == 2)) THEN 748 DO jj=1,jpj 749 zunb(nlci-2,jj) = zaa * zuab(nlci-2,jj) + zab * zubb(nlci-2,jj) + zat * zutn(nlci-2,jj) 750 zvnb(nlci-1,jj) = zaa * zvab(nlci-1,jj) + zab * zvbb(nlci-1,jj) + zat * zvtn(nlci-1,jj) 751 END DO 752 ENDIF 753 IF((nbondj == -1).OR.(nbondj == 2)) THEN 754 DO ji=1,jpi 755 zunb(ji,2) = zaa * zuab(ji,2) + zab * zubb(ji,2) + zat * zutn(ji,2) 756 zvnb(ji,2) = zaa * zvab(ji,2) + zab * zvbb(ji,2) + zat * zvtn(ji,2) 757 END DO 758 ENDIF 759 IF((nbondj == 1).OR.(nbondj == 2)) THEN 760 DO ji=1,jpi 761 zunb(ji,nlcj-1) = zaa * zuab(ji,nlcj-1) + zab * zubb(ji,nlcj-1) + zat * zutn(ji,nlcj-1) 762 zvnb(ji,nlcj-2) = zaa * zvab(ji,nlcj-2) + zab * zvbb(ji,nlcj-2) + zat * zvtn(ji,nlcj-2) 763 END DO 764 ENDIF 765 CALL wrk_dealloc( jpi, jpj, zuab, zvab, zubb, zvbb, zutn, zvtn ) 766 767 ELSE ! Linear interpolation 768 zunb(:,:) = 0._wp ; zvnb(:,:) = 0._wp 769 CALL Agrif_Bc_variable(zunb,unb_id,calledweight=zt, procname=interpunb) 770 CALL Agrif_Bc_variable(zvnb,vnb_id,calledweight=zt, procname=interpvnb) 771 ENDIF 772 Agrif_UseSpecialValue = .FALSE. 773 774 ! Fill boundary data arrays: 775 IF((nbondi == -1).OR.(nbondi == 2)) THEN 776 DO jj=1,jpj 777 ubdy_w(jj) = (zunb(2,jj)/(zrhoy*e2u(2,jj))) * umask(2,jj,1) 778 vbdy_w(jj) = (zvnb(2,jj)/(zrhox*e1v(2,jj))) * vmask(2,jj,1) 779 hbdy_w(jj) = zsshn(2,jj) * tmask(2,jj,1) 780 END DO 781 ENDIF 782 783 IF((nbondi == 1).OR.(nbondi == 2)) THEN 784 DO jj=1,jpj 785 ubdy_e(jj) = zunb(nlci-2,jj)/(zrhoy*e2u(nlci-2,jj)) * umask(nlci-2,jj,1) 786 vbdy_e(jj) = zvnb(nlci-1,jj)/(zrhox*e1v(nlci-1,jj)) * vmask(nlci-1,jj,1) 787 hbdy_e(jj) = zsshn(nlci-1,jj) * tmask(nlci-1,jj,1) 788 END DO 789 ENDIF 790 791 IF((nbondj == -1).OR.(nbondj == 2)) THEN 792 DO ji=1,jpi 793 ubdy_s(ji) = zunb(ji,2)/(zrhoy*e2u(ji,2)) * umask(ji,2,1) 794 vbdy_s(ji) = zvnb(ji,2)/(zrhox*e1v(ji,2)) * vmask(ji,2,1) 795 hbdy_s(ji) = zsshn(ji,2) * tmask(ji,2,1) 796 END DO 797 ENDIF 798 799 IF((nbondj == 1).OR.(nbondj == 2)) THEN 800 DO ji=1,jpi 801 ubdy_n(ji) = zunb(ji,nlcj-1)/(zrhoy*e2u(ji,nlcj-1)) * umask(ji,nlcj-1,1) 802 vbdy_n(ji) = zvnb(ji,nlcj-2)/(zrhox*e1v(ji,nlcj-2)) * vmask(ji,nlcj-2,1) 803 hbdy_n(ji) = zsshn(ji,nlcj-1) * tmask(ji,nlcj-1,1) 804 END DO 805 ENDIF 806 807 CALL wrk_dealloc( jpi, jpj, zunb, zvnb, zsshn ) 808 809 END SUBROUTINE Agrif_dta_ts 810 811 SUBROUTINE Agrif_ssh( kt ) 812 !!---------------------------------------------------------------------- 813 !! *** ROUTINE Agrif_DYN *** 814 !!---------------------------------------------------------------------- 815 INTEGER, INTENT(in) :: kt 816 !! 817 !!---------------------------------------------------------------------- 818 819 IF( Agrif_Root() ) RETURN 820 821 822 IF((nbondi == -1).OR.(nbondi == 2)) THEN 823 ssha(2,:)=ssha(3,:) 824 sshn(2,:)=sshn(3,:) 825 ENDIF 826 827 IF((nbondi == 1).OR.(nbondi == 2)) THEN 828 ssha(nlci-1,:)=ssha(nlci-2,:) 829 sshn(nlci-1,:)=sshn(nlci-2,:) 830 ENDIF 831 832 IF((nbondj == -1).OR.(nbondj == 2)) THEN 833 ssha(:,2)=ssha(:,3) 834 sshn(:,2)=sshn(:,3) 835 ENDIF 836 837 IF((nbondj == 1).OR.(nbondj == 2)) THEN 838 ssha(:,nlcj-1)=ssha(:,nlcj-2) 839 sshn(:,nlcj-1)=sshn(:,nlcj-2) 840 ENDIF 841 842 END SUBROUTINE Agrif_ssh 843 844 SUBROUTINE Agrif_ssh_ts( jn ) 845 !!---------------------------------------------------------------------- 846 !! *** ROUTINE Agrif_ssh_ts *** 847 !!---------------------------------------------------------------------- 848 INTEGER, INTENT(in) :: jn 1015 & - zt0**2._wp * (-2._wp*zt0 + 3._wp) ) 1016 ! 1017 IF(western_side ) ubdy_w(j1:j2) = zat * ptab(i1,j1:j2) 1018 IF(eastern_side ) ubdy_e(j1:j2) = zat * ptab(i1,j1:j2) 1019 IF(southern_side) ubdy_s(i1:i2) = zat * ptab(i1:i2,j1) 1020 IF(northern_side) ubdy_n(i1:i2) = zat * ptab(i1:i2,j1) 1021 ENDIF 1022 ! 1023 END SUBROUTINE interpub2b 1024 1025 SUBROUTINE interpvb2b(ptab,i1,i2,j1,j2,before,nb,ndir) 1026 !!---------------------------------------------------------------------- 1027 !! *** ROUTINE interpvb2b *** 1028 !!---------------------------------------------------------------------- 1029 INTEGER, INTENT(in) :: i1,i2,j1,j2 1030 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: ptab 1031 LOGICAL, INTENT(in) :: before 1032 INTEGER, INTENT(in) :: nb , ndir 849 1033 !! 850 1034 INTEGER :: ji,jj 851 !!---------------------------------------------------------------------- 852 853 IF((nbondi == -1).OR.(nbondi == 2)) THEN 854 DO jj=1,jpj 855 ssha_e(2,jj) = hbdy_w(jj) 856 END DO 857 ENDIF 858 859 IF((nbondi == 1).OR.(nbondi == 2)) THEN 860 DO jj=1,jpj 861 ssha_e(nlci-1,jj) = hbdy_e(jj) 862 END DO 863 ENDIF 864 865 IF((nbondj == -1).OR.(nbondj == 2)) THEN 866 DO ji=1,jpi 867 ssha_e(ji,2) = hbdy_s(ji) 868 END DO 869 ENDIF 870 871 IF((nbondj == 1).OR.(nbondj == 2)) THEN 872 DO ji=1,jpi 873 ssha_e(ji,nlcj-1) = hbdy_n(ji) 874 END DO 875 ENDIF 876 877 END SUBROUTINE Agrif_ssh_ts 878 879 SUBROUTINE interpsshn(tabres,i1,i2,j1,j2) 880 !!---------------------------------------------------------------------- 881 !! *** ROUTINE interpsshn *** 882 !!---------------------------------------------------------------------- 883 INTEGER, INTENT(in) :: i1,i2,j1,j2 884 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 885 !! 886 INTEGER :: ji,jj 887 !!---------------------------------------------------------------------- 888 889 tabres(i1:i2,j1:j2) = sshn(i1:i2,j1:j2) 890 891 END SUBROUTINE interpsshn 892 893 SUBROUTINE interpu(tabres,i1,i2,j1,j2,k1,k2) 894 !!---------------------------------------------------------------------- 895 !! *** ROUTINE interpu *** 896 !!---------------------------------------------------------------------- 897 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 898 REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 899 !! 900 INTEGER :: ji,jj,jk 901 !!---------------------------------------------------------------------- 902 903 DO jk=k1,k2 1035 REAL(wp) :: zrhot, zt0, zt1,zat 1036 LOGICAL :: western_side, eastern_side,northern_side,southern_side 1037 !!---------------------------------------------------------------------- 1038 ! 1039 IF( before ) THEN 904 1040 DO jj=j1,j2 905 1041 DO ji=i1,i2 906 tabres(ji,jj,jk) = e2u(ji,jj) * un(ji,jj,jk) 907 tabres(ji,jj,jk) = tabres(ji,jj,jk) * fse3u_n(ji,jj,jk) 908 END DO 909 END DO 910 END DO 911 END SUBROUTINE interpu 912 913 914 SUBROUTINE interpu2d(tabres,i1,i2,j1,j2) 915 !!---------------------------------------------------------------------- 916 !! *** ROUTINE interpu2d *** 917 !!---------------------------------------------------------------------- 918 INTEGER, INTENT(in) :: i1,i2,j1,j2 919 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 920 !! 921 INTEGER :: ji,jj 922 !!---------------------------------------------------------------------- 923 924 DO jj=j1,j2 925 DO ji=i1,i2 926 tabres(ji,jj) = e2u(ji,jj) * ((gcx(ji+1,jj) - gcx(ji,jj))/e1u(ji,jj)) & 927 * umask(ji,jj,1) 928 END DO 929 END DO 930 931 END SUBROUTINE interpu2d 932 933 934 SUBROUTINE interpv(tabres,i1,i2,j1,j2,k1,k2) 935 !!---------------------------------------------------------------------- 936 !! *** ROUTINE interpv *** 937 !!---------------------------------------------------------------------- 1042 ptab(ji,jj) = vb2_b(ji,jj) * e1v(ji,jj) 1043 END DO 1044 END DO 1045 ELSE 1046 western_side = (nb == 1).AND.(ndir == 1) 1047 eastern_side = (nb == 1).AND.(ndir == 2) 1048 southern_side = (nb == 2).AND.(ndir == 1) 1049 northern_side = (nb == 2).AND.(ndir == 2) 1050 zrhot = Agrif_rhot() 1051 ! Time indexes bounds for integration 1052 zt0 = REAL(Agrif_NbStepint() , wp) / zrhot 1053 zt1 = REAL(Agrif_NbStepint()+1, wp) / zrhot 1054 ! Polynomial interpolation coefficients: 1055 zat = zrhot * ( zt1**2._wp * (-2._wp*zt1 + 3._wp) & 1056 & - zt0**2._wp * (-2._wp*zt0 + 3._wp) ) 1057 ! 1058 IF(western_side ) vbdy_w(j1:j2) = zat * ptab(i1,j1:j2) 1059 IF(eastern_side ) vbdy_e(j1:j2) = zat * ptab(i1,j1:j2) 1060 IF(southern_side) vbdy_s(i1:i2) = zat * ptab(i1:i2,j1) 1061 IF(northern_side) vbdy_n(i1:i2) = zat * ptab(i1:i2,j1) 1062 ENDIF 1063 ! 1064 END SUBROUTINE interpvb2b 1065 1066 SUBROUTINE interpe3t(ptab,i1,i2,j1,j2,k1,k2,before,nb,ndir) 1067 !!---------------------------------------------------------------------- 1068 !! *** ROUTINE interpe3t *** 1069 !!---------------------------------------------------------------------- 1070 ! 938 1071 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 939 REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 940 !! 1072 REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab 1073 LOGICAL :: before 1074 INTEGER, INTENT(in) :: nb , ndir 1075 ! 941 1076 INTEGER :: ji, jj, jk 942 !!---------------------------------------------------------------------- 943 944 DO jk=k1,k2 945 DO jj=j1,j2 946 DO ji=i1,i2 947 tabres(ji,jj,jk) = e1v(ji,jj) * vn(ji,jj,jk) 948 tabres(ji,jj,jk) = tabres(ji,jj,jk) * fse3v_n(ji,jj,jk) 949 END DO 950 END DO 951 END DO 952 953 END SUBROUTINE interpv 954 955 956 SUBROUTINE interpv2d(tabres,i1,i2,j1,j2) 957 !!---------------------------------------------------------------------- 958 !! *** ROUTINE interpu2d *** 959 !!---------------------------------------------------------------------- 960 INTEGER, INTENT(in) :: i1,i2,j1,j2 961 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 962 !! 963 INTEGER :: ji,jj 964 !!---------------------------------------------------------------------- 965 966 DO jj=j1,j2 967 DO ji=i1,i2 968 tabres(ji,jj) = e1v(ji,jj) * ((gcx(ji,jj+1) - gcx(ji,jj))/e2v(ji,jj)) & 969 * vmask(ji,jj,1) 970 END DO 971 END DO 972 973 END SUBROUTINE interpv2d 974 975 SUBROUTINE interpunb(tabres,i1,i2,j1,j2) 976 !!---------------------------------------------------------------------- 977 !! *** ROUTINE interpunb *** 978 !!---------------------------------------------------------------------- 979 INTEGER, INTENT(in) :: i1,i2,j1,j2 980 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 981 !! 982 INTEGER :: ji,jj 983 !!---------------------------------------------------------------------- 984 985 DO jj=j1,j2 986 DO ji=i1,i2 987 tabres(ji,jj) = un_b(ji,jj) * e2u(ji,jj) * hu(ji,jj) 988 END DO 989 END DO 990 991 END SUBROUTINE interpunb 992 993 SUBROUTINE interpvnb(tabres,i1,i2,j1,j2) 994 !!---------------------------------------------------------------------- 995 !! *** ROUTINE interpvnb *** 996 !!---------------------------------------------------------------------- 997 INTEGER, INTENT(in) :: i1,i2,j1,j2 998 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 999 !! 1000 INTEGER :: ji,jj 1001 !!---------------------------------------------------------------------- 1002 1003 DO jj=j1,j2 1004 DO ji=i1,i2 1005 tabres(ji,jj) = vn_b(ji,jj) * e1v(ji,jj) * hv(ji,jj) 1006 END DO 1007 END DO 1008 1009 END SUBROUTINE interpvnb 1010 1011 SUBROUTINE interpub2b(tabres,i1,i2,j1,j2) 1012 !!---------------------------------------------------------------------- 1013 !! *** ROUTINE interpub2b *** 1014 !!---------------------------------------------------------------------- 1015 INTEGER, INTENT(in) :: i1,i2,j1,j2 1016 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 1017 !! 1018 INTEGER :: ji,jj 1019 !!---------------------------------------------------------------------- 1020 1021 DO jj=j1,j2 1022 DO ji=i1,i2 1023 tabres(ji,jj) = ub2_b(ji,jj) * e2u(ji,jj) 1024 END DO 1025 END DO 1026 1027 END SUBROUTINE interpub2b 1028 1029 SUBROUTINE interpvb2b(tabres,i1,i2,j1,j2) 1030 !!---------------------------------------------------------------------- 1031 !! *** ROUTINE interpvb2b *** 1032 !!---------------------------------------------------------------------- 1033 INTEGER, INTENT(in) :: i1,i2,j1,j2 1034 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 1035 !! 1036 INTEGER :: ji,jj 1037 !!---------------------------------------------------------------------- 1038 1039 DO jj=j1,j2 1040 DO ji=i1,i2 1041 tabres(ji,jj) = vb2_b(ji,jj) * e1v(ji,jj) 1042 END DO 1043 END DO 1044 1045 END SUBROUTINE interpvb2b 1077 LOGICAL :: western_side, eastern_side, northern_side, southern_side 1078 REAL(wp) :: ztmpmsk 1079 !!---------------------------------------------------------------------- 1080 ! 1081 IF (before) THEN 1082 DO jk=k1,k2 1083 DO jj=j1,j2 1084 DO ji=i1,i2 1085 ptab(ji,jj,jk) = tmask(ji,jj,jk) * e3t_0(ji,jj,jk) 1086 END DO 1087 END DO 1088 END DO 1089 ELSE 1090 western_side = (nb == 1).AND.(ndir == 1) 1091 eastern_side = (nb == 1).AND.(ndir == 2) 1092 southern_side = (nb == 2).AND.(ndir == 1) 1093 northern_side = (nb == 2).AND.(ndir == 2) 1094 1095 DO jk=k1,k2 1096 DO jj=j1,j2 1097 DO ji=i1,i2 1098 ! Get velocity mask at boundary edge points: 1099 IF (western_side) ztmpmsk = umask(ji ,jj ,1) 1100 IF (eastern_side) ztmpmsk = umask(nlci-2,jj ,1) 1101 IF (northern_side) ztmpmsk = vmask(ji ,nlcj-2,1) 1102 IF (southern_side) ztmpmsk = vmask(ji ,2 ,1) 1103 1104 IF (ABS(ptab(ji,jj,jk) - tmask(ji,jj,jk) * e3t_0(ji,jj,jk))*ztmpmsk > 1.D-2) THEN 1105 IF (western_side) THEN 1106 WRITE(numout,*) 'ERROR bathymetry merge at the western border ji,jj,jk ', ji+nimpp-1,jj+njmpp-1,jk 1107 ELSEIF (eastern_side) THEN 1108 WRITE(numout,*) 'ERROR bathymetry merge at the eastern border ji,jj,jk ', ji+nimpp-1,jj+njmpp-1,jk 1109 ELSEIF (southern_side) THEN 1110 WRITE(numout,*) 'ERROR bathymetry merge at the southern border ji,jj,jk', ji+nimpp-1,jj+njmpp-1,jk 1111 ELSEIF (northern_side) THEN 1112 WRITE(numout,*) 'ERROR bathymetry merge at the northen border ji,jj,jk', ji+nimpp-1,jj+njmpp-1,jk 1113 ENDIF 1114 WRITE(numout,*) ' ptab(ji,jj,jk), fse3t(ji,jj,jk) ', ptab(ji,jj,jk), e3t_0(ji,jj,jk) 1115 kindic_agr = kindic_agr + 1 1116 ENDIF 1117 END DO 1118 END DO 1119 END DO 1120 1121 ENDIF 1122 ! 1123 END SUBROUTINE interpe3t 1124 1125 SUBROUTINE interpumsk(ptab,i1,i2,j1,j2,k1,k2,before,nb,ndir) 1126 !!---------------------------------------------------------------------- 1127 !! *** ROUTINE interpumsk *** 1128 !!---------------------------------------------------------------------- 1129 ! 1130 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 1131 REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab 1132 LOGICAL :: before 1133 INTEGER, INTENT(in) :: nb , ndir 1134 ! 1135 INTEGER :: ji, jj, jk 1136 LOGICAL :: western_side, eastern_side 1137 !!---------------------------------------------------------------------- 1138 ! 1139 IF (before) THEN 1140 DO jk=k1,k2 1141 DO jj=j1,j2 1142 DO ji=i1,i2 1143 ptab(ji,jj,jk) = umask(ji,jj,jk) 1144 END DO 1145 END DO 1146 END DO 1147 ELSE 1148 1149 western_side = (nb == 1).AND.(ndir == 1) 1150 eastern_side = (nb == 1).AND.(ndir == 2) 1151 DO jk=k1,k2 1152 DO jj=j1,j2 1153 DO ji=i1,i2 1154 ! Velocity mask at boundary edge points: 1155 IF (ABS(ptab(ji,jj,jk) - umask(ji,jj,jk)) > 1.D-2) THEN 1156 IF (western_side) THEN 1157 WRITE(numout,*) 'ERROR with umask at the western border ji,jj,jk ', ji+nimpp-1,jj+njmpp-1,jk 1158 WRITE(numout,*) ' masks: parent, child ', ptab(ji,jj,jk), umask(ji,jj,jk) 1159 kindic_agr = kindic_agr + 1 1160 ELSEIF (eastern_side) THEN 1161 WRITE(numout,*) 'ERROR with umask at the eastern border ji,jj,jk ', ji+nimpp-1,jj+njmpp-1,jk 1162 WRITE(numout,*) ' masks: parent, child ', ptab(ji,jj,jk), umask(ji,jj,jk) 1163 kindic_agr = kindic_agr + 1 1164 ENDIF 1165 ENDIF 1166 END DO 1167 END DO 1168 END DO 1169 1170 ENDIF 1171 ! 1172 END SUBROUTINE interpumsk 1173 1174 SUBROUTINE interpvmsk(ptab,i1,i2,j1,j2,k1,k2,before,nb,ndir) 1175 !!---------------------------------------------------------------------- 1176 !! *** ROUTINE interpvmsk *** 1177 !!---------------------------------------------------------------------- 1178 ! 1179 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 1180 REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab 1181 LOGICAL :: before 1182 INTEGER, INTENT(in) :: nb , ndir 1183 ! 1184 INTEGER :: ji, jj, jk 1185 LOGICAL :: northern_side, southern_side 1186 !!---------------------------------------------------------------------- 1187 ! 1188 IF (before) THEN 1189 DO jk=k1,k2 1190 DO jj=j1,j2 1191 DO ji=i1,i2 1192 ptab(ji,jj,jk) = vmask(ji,jj,jk) 1193 END DO 1194 END DO 1195 END DO 1196 ELSE 1197 1198 southern_side = (nb == 2).AND.(ndir == 1) 1199 northern_side = (nb == 2).AND.(ndir == 2) 1200 DO jk=k1,k2 1201 DO jj=j1,j2 1202 DO ji=i1,i2 1203 ! Velocity mask at boundary edge points: 1204 IF (ABS(ptab(ji,jj,jk) - vmask(ji,jj,jk)) > 1.D-2) THEN 1205 IF (southern_side) THEN 1206 WRITE(numout,*) 'ERROR with vmask at the southern border ji,jj,jk ', ji+nimpp-1,jj+njmpp-1,jk 1207 WRITE(numout,*) ' masks: parent, child ', ptab(ji,jj,jk), vmask(ji,jj,jk) 1208 kindic_agr = kindic_agr + 1 1209 ELSEIF (northern_side) THEN 1210 WRITE(numout,*) 'ERROR with vmask at the northern border ji,jj,jk ', ji+nimpp-1,jj+njmpp-1,jk 1211 WRITE(numout,*) ' masks: parent, child ', ptab(ji,jj,jk), vmask(ji,jj,jk) 1212 kindic_agr = kindic_agr + 1 1213 ENDIF 1214 ENDIF 1215 END DO 1216 END DO 1217 END DO 1218 1219 ENDIF 1220 ! 1221 END SUBROUTINE interpvmsk 1222 1223 # if defined key_zdftke 1224 1225 SUBROUTINE interpavm(ptab,i1,i2,j1,j2,k1,k2,before) 1226 !!---------------------------------------------------------------------- 1227 !! *** ROUTINE interavm *** 1228 !!---------------------------------------------------------------------- 1229 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 1230 REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab 1231 LOGICAL, INTENT(in) :: before 1232 !!---------------------------------------------------------------------- 1233 ! 1234 IF( before) THEN 1235 ptab (i1:i2,j1:j2,k1:k2) = avm_k(i1:i2,j1:j2,k1:k2) 1236 ELSE 1237 avm_k(i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2) 1238 ENDIF 1239 ! 1240 END SUBROUTINE interpavm 1241 1242 # endif /* key_zdftke */ 1046 1243 1047 1244 #else
Note: See TracChangeset
for help on using the changeset viewer.