Changeset 5902 for branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90
- Timestamp:
- 2015-11-20T10:58:48+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90
r5868 r5902 28 28 USE lib_mpp 29 29 USE wrk_nemo 30 USE dynspg_oce31 30 USE zdf_oce 32 31 … … 79 78 !! 80 79 INTEGER :: ji,jj,jk, j1,j2, i1,i2 81 REAL(wp) :: timeref 82 REAL(wp) :: z2dt, znugdt 83 REAL(wp) :: zrhox, zrhoy 84 REAL(wp), POINTER, DIMENSION(:,:) :: spgv1, spgu1 80 REAL(wp), POINTER, DIMENSION(:,:) :: zub, zvb 85 81 !!---------------------------------------------------------------------- 86 82 87 83 IF( Agrif_Root() ) RETURN 88 84 89 CALL wrk_alloc( jpi, jpj, spgv1, spgu1)85 CALL wrk_alloc( jpi, jpj, zub, zvb ) 90 86 91 87 Agrif_SpecialValue=0. … … 96 92 97 93 Agrif_UseSpecialValue = .FALSE. 98 99 zrhox = Agrif_Rhox() 100 zrhoy = Agrif_Rhoy() 101 102 timeref = 1. 103 ! time step: leap-frog 104 z2dt = 2. * rdt 105 ! time step: Euler if restart from rest 106 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 107 ! coefficients 108 znugdt = grav * z2dt 109 94 110 95 ! prevent smoothing in ghost cells 111 96 i1=1 … … 120 105 121 106 IF((nbondi == -1).OR.(nbondi == 2)) THEN 122 spgu(2,:) = ua_b(2,:) 123 124 DO jk=1,jpkm1 107 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 125 123 DO jj=j1,j2 126 ua(2,jj,jk) = 0.25 *(ua(1,jj,jk)+2.*ua(2,jj,jk)+ua(3,jj,jk))124 ua(2,jj,jk) = 0.25_wp*(ua(1,jj,jk)+2._wp*ua(2,jj,jk)+ua(3,jj,jk)) 127 125 ua(2,jj,jk) = ua(2,jj,jk) * umask(2,jj,jk) 128 126 END DO 129 127 END DO 130 128 131 spgu1(2,:)=0. 132 129 zub(2,:)=0._wp ! Correct transport 133 130 DO jk=1,jpkm1 134 131 DO jj=1,jpj 135 spgu1(2,jj)=spgu1(2,jj)+fse3u(2,jj,jk)*ua(2,jj,jk) 136 END DO 137 END DO 138 132 zub(2,jj) = zub(2,jj) + fse3u_a(2,jj,jk) * ua(2,jj,jk) 133 END DO 134 END DO 139 135 DO jj=1,jpj 140 IF (umask(2,jj,1).NE.0.) THEN 141 spgu1(2,jj)=spgu1(2,jj)/hu(2,jj) 142 ENDIF 143 END DO 144 145 DO jk=1,jpkm1 136 zub(2,jj) = zub(2,jj) * hur_a(2,jj) 137 END DO 138 139 DO jk=1,jpkm1 140 DO jj=1,jpj 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 154 DO jj=1,jpj 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 !------------------- 166 DO jk=1,jpkm1 167 DO jj=1,jpj 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 146 192 DO jj=j1,j2 147 ua(2,jj,jk) = (ua(2,jj,jk)+spgu(2,jj)-spgu1(2,jj))*umask(2,jj,jk) 148 END DO 149 END DO 150 151 #if defined key_dynspg_ts 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 204 DO jj=1,jpj 205 zub(nlci-2,jj) = zub(nlci-2,jj) * hur_a(nlci-2,jj) 206 END DO 207 208 DO jk=1,jpkm1 209 DO jj=1,jpj 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 152 214 ! Set tangential velocities to time splitting estimate 153 spgv1(2,:)=0. 154 DO jk=1,jpkm1 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 155 223 DO jj=1,jpj 156 spgv1(2,jj)=spgv1(2,jj)+fse3v_a(2,jj,jk)*va(2,jj,jk) 157 END DO 158 END DO 159 DO jj=1,jpj 160 spgv1(2,jj)=spgv1(2,jj)*hvr_a(2,jj) 161 END DO 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 !------------------- 162 235 DO jk=1,jpkm1 163 236 DO jj=1,jpj 164 va(2,jj,jk) = (va(2,jj,jk)+va_b(2,jj)-spgv1(2,jj))*vmask(2,jj,jk) 165 END DO 166 END DO 167 #endif 168 169 ENDIF 170 171 IF((nbondi == 1).OR.(nbondi == 2)) THEN 172 spgu(nlci-2,:) = ua_b(nlci-2,:) 173 174 DO jk=1,jpkm1 175 DO jj=j1,j2 176 ua(nlci-2,jj,jk) = 0.25*(ua(nlci-3,jj,jk)+2.*ua(nlci-2,jj,jk)+ua(nlci-1,jj,jk)) 177 178 ua(nlci-2,jj,jk) = ua(nlci-2,jj,jk) * umask(nlci-2,jj,jk) 179 180 END DO 181 END DO 182 spgu1(nlci-2,:)=0. 183 DO jk=1,jpkm1 184 DO jj=1,jpj 185 spgu1(nlci-2,jj)=spgu1(nlci-2,jj)+fse3u(nlci-2,jj,jk)*ua(nlci-2,jj,jk)*umask(nlci-2,jj,jk) 186 END DO 187 END DO 188 DO jj=1,jpj 189 IF (umask(nlci-2,jj,1).NE.0.) THEN 190 spgu1(nlci-2,jj)=spgu1(nlci-2,jj)/hu(nlci-2,jj) 191 ENDIF 192 END DO 193 DO jk=1,jpkm1 194 DO jj=j1,j2 195 ua(nlci-2,jj,jk) = (ua(nlci-2,jj,jk)+spgu(nlci-2,jj)-spgu1(nlci-2,jj))*umask(nlci-2,jj,jk) 196 END DO 197 END DO 198 199 #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 200 282 ! Set tangential velocities to time splitting estimate 201 spgv1(nlci-1,:)=0._wp 202 DO jk=1,jpkm1 203 DO jj=1,jpj 204 spgv1(nlci-1,jj)=spgv1(nlci-1,jj)+fse3v_a(nlci-1,jj,jk)*va(nlci-1,jj,jk)*vmask(nlci-1,jj,jk) 205 END DO 206 END DO 207 208 DO jj=1,jpj 209 spgv1(nlci-1,jj)=spgv1(nlci-1,jj)*hvr_a(nlci-1,jj) 210 END DO 211 212 DO jk=1,jpkm1 213 DO jj=1,jpj 214 va(nlci-1,jj,jk) = (va(nlci-1,jj,jk)+va_b(nlci-1,jj)-spgv1(nlci-1,jj))*vmask(nlci-1,jj,jk) 215 END DO 216 END DO 217 #endif 218 219 ENDIF 220 221 IF((nbondj == -1).OR.(nbondj == 2)) THEN 222 spgv(:,2)=va_b(:,2) 223 224 DO jk=1,jpkm1 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 225 329 DO ji=i1,i2 226 va(ji,2,jk)=0.25*(va(ji,1,jk)+2.*va(ji,2,jk)+va(ji,3,jk)) 227 va(ji,2,jk)=va(ji,2,jk)*vmask(ji,2,jk) 228 END DO 229 END DO 230 231 spgv1(:,2)=0. 232 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 233 336 DO jk=1,jpkm1 234 337 DO ji=1,jpi 235 spgv1(ji,2)=spgv1(ji,2)+fse3v(ji,2,jk)*va(ji,2,jk)*vmask(ji,2,jk) 236 END DO 237 END DO 238 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 239 341 DO ji=1,jpi 240 IF (vmask(ji,2,1).NE.0.) THEN 241 spgv1(ji,2)=spgv1(ji,2)/hv(ji,2) 242 ENDIF 243 END DO 244 342 zvb(ji,nlcj-2) = zvb(ji,nlcj-2) * hvr_a(ji,nlcj-2) 343 END DO 245 344 DO jk=1,jpkm1 246 345 DO ji=1,jpi 247 va(ji,2,jk) = (va(ji,2,jk)+spgv(ji,2)-spgv1(ji,2))*vmask(ji,2,jk) 248 END DO 249 END DO 250 251 #if defined key_dynspg_ts 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 252 350 ! Set tangential velocities to time splitting estimate 253 spgu1(:,2)=0._wp 254 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 255 359 DO ji=1,jpi 256 spgu1(ji,2)=spgu1(ji,2)+fse3u_a(ji,2,jk)*ua(ji,2,jk)*umask(ji,2,jk) 257 END DO 258 END DO 259 260 DO ji=1,jpi 261 spgu1(ji,2)=spgu1(ji,2)*hur_a(ji,2) 262 END DO 263 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 !------------------- 264 372 DO jk=1,jpkm1 265 373 DO ji=1,jpi 266 ua(ji,2,jk) = (ua(ji,2,jk)+ua_b(ji,2)-spgu1(ji,2))*umask(ji,2,jk) 267 END DO 268 END DO 269 #endif 270 ENDIF 271 272 IF((nbondj == 1).OR.(nbondj == 2)) THEN 273 274 spgv(:,nlcj-2)=va_b(:,nlcj-2) 275 276 DO jk=1,jpkm1 277 DO ji=i1,i2 278 va(ji,nlcj-2,jk)=0.25*(va(ji,nlcj-3,jk)+2.*va(ji,nlcj-2,jk)+va(ji,nlcj-1,jk)) 279 va(ji,nlcj-2,jk) = va(ji,nlcj-2,jk) * vmask(ji,nlcj-2,jk) 280 END DO 281 END DO 282 283 spgv1(:,nlcj-2)=0. 284 285 DO jk=1,jpkm1 286 DO ji=1,jpi 287 spgv1(ji,nlcj-2)=spgv1(ji,nlcj-2)+fse3v(ji,nlcj-2,jk)*va(ji,nlcj-2,jk) 288 END DO 289 END DO 290 291 DO ji=1,jpi 292 IF (vmask(ji,nlcj-2,1).NE.0.) THEN 293 spgv1(ji,nlcj-2)=spgv1(ji,nlcj-2)/hv(ji,nlcj-2) 294 ENDIF 295 END DO 296 297 DO jk=1,jpkm1 298 DO ji=1,jpi 299 va(ji,nlcj-2,jk) = (va(ji,nlcj-2,jk)+spgv(ji,nlcj-2)-spgv1(ji,nlcj-2))*vmask(ji,nlcj-2,jk) 300 END DO 301 END DO 302 303 #if defined key_dynspg_ts 304 ! Set tangential velocities to time splitting estimate 305 spgu1(:,nlcj-1)=0._wp 306 DO jk=1,jpkm1 307 DO ji=1,jpi 308 spgu1(ji,nlcj-1)=spgu1(ji,nlcj-1)+fse3u_a(ji,nlcj-1,jk)*ua(ji,nlcj-1,jk) 309 END DO 310 END DO 311 312 DO ji=1,jpi 313 spgu1(ji,nlcj-1)=spgu1(ji,nlcj-1)*hur_a(ji,nlcj-1) 314 END DO 315 316 DO jk=1,jpkm1 317 DO ji=1,jpi 318 ua(ji,nlcj-1,jk) = (ua(ji,nlcj-1,jk)+ua_b(ji,nlcj-1)-spgu1(ji,nlcj-1))*umask(ji,nlcj-1,jk) 319 END DO 320 END DO 321 #endif 322 323 ENDIF 324 ! 325 CALL wrk_dealloc( jpi, jpj, spgv1, spgu1 ) 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 ) 326 382 ! 327 383 END SUBROUTINE Agrif_dyn … … 594 650 END DO 595 651 END DO 652 tsa(nlci,j1:j2,k1:k2,jn) = 0._wp 596 653 ENDDO 597 654 ENDIF … … 613 670 END DO 614 671 END DO 672 tsa(i1:i2,nlcj,k1:k2,jn) = 0._wp 615 673 ENDDO 616 674 ENDIF … … 631 689 END DO 632 690 END DO 691 tsa(1,j1:j2,k1:k2,jn) = 0._wp 633 692 END DO 634 693 ENDIF … … 649 708 END DO 650 709 END DO 710 tsa(i1:i2,1,k1:k2,jn) = 0._wp 651 711 ENDDO 652 712 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.