Changeset 3294 for trunk/NEMOGCM/NEMO/NST_SRC/agrif_opa_sponge.F90
- Timestamp:
- 2012-01-28T17:44:18+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/NST_SRC/agrif_opa_sponge.F90
r2715 r3294 8 8 USE in_out_manager 9 9 USE agrif_oce 10 USE wrk_nemo 10 11 11 12 IMPLICIT NONE 12 13 PRIVATE 13 14 14 PUBLIC Agrif_Sponge_Tra, Agrif_Sponge_Dyn, interpt n, interpsn, interpun, interpvn15 PUBLIC Agrif_Sponge_Tra, Agrif_Sponge_Dyn, interptsn, interpun, interpvn 15 16 16 17 !!---------------------------------------------------------------------- … … 27 28 !!--------------------------------------------- 28 29 #include "domzgr_substitute.h90" 29 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released30 USE wrk_nemo, ONLY: wrk_2d_131 USE wrk_nemo, ONLY: wrk_3d_1, wrk_3d_232 USE wrk_nemo, ONLY: wrk_3d_3, wrk_3d_433 USE wrk_nemo, ONLY: wrk_3d_7, wrk_3d_634 USE wrk_nemo, ONLY: wrk_3d_835 30 !! 36 INTEGER :: ji,jj,jk 31 INTEGER :: ji,jj,jk,jn 37 32 INTEGER :: spongearea 38 33 REAL(wp) :: timecoeff 39 REAL(wp) :: zt a, zsa, zabe1, zabe2, zbtr40 REAL(wp), POINTER, DIMENSION(:,: ) :: localviscsponge41 REAL(wp), POINTER, DIMENSION(:,: ,:) :: tbdiff, sbdiff42 REAL(wp), POINTER, DIMENSION(:,:,: ) :: ztu, zsu, ztv, zsv43 REAL(wp), POINTER, DIMENSION(:,:,: ) :: ztab34 REAL(wp) :: ztsa, zabe1, zabe2, zbtr 35 REAL(wp), POINTER, DIMENSION(:,: ) :: localviscsponge 36 REAL(wp), POINTER, DIMENSION(:,: ) :: ztu, ztv 37 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztab 38 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: tsbdiff 44 39 45 40 #if defined SPONGE 46 localviscsponge => wrk_2d_1 47 tbdiff => wrk_3d_1 ;sbdiff => wrk_3d_2 48 ztu => wrk_3d_3 ; zsu => wrk_3d_4 49 ztv => wrk_3d_7 ; zsv => wrk_3d_6 50 ztab => wrk_3d_8 41 CALL wrk_alloc( jpi, jpj, localviscsponge, ztu, ztv ) 42 CALL wrk_alloc( jpi, jpj, jpk, jpts, ztab, tsbdiff ) 51 43 52 44 timecoeff = REAL(Agrif_NbStepint(),wp)/Agrif_rhot() … … 55 47 Agrif_UseSpecialValue = .TRUE. 56 48 ztab = 0.e0 57 CALL Agrif_Bc_Variable(ztab, t a_id,calledweight=timecoeff,procname=interptn)49 CALL Agrif_Bc_Variable(ztab, tsa_id,calledweight=timecoeff,procname=interptsn) 58 50 Agrif_UseSpecialValue = .FALSE. 59 51 60 tbdiff(:,:,:) = tb(:,:,:) - ztab(:,:,:) 61 62 ztab = 0.e0 63 Agrif_SpecialValue=0. 64 Agrif_UseSpecialValue = .TRUE. 65 CALL Agrif_Bc_Variable(ztab, sa_id,calledweight=timecoeff,procname=interpsn) 66 Agrif_UseSpecialValue = .FALSE. 67 68 sbdiff(:,:,:) = sb(:,:,:) - ztab(:,:,:) 52 tsbdiff(:,:,:,:) = tsb(:,:,:,:) - ztab(:,:,:,:) 69 53 70 54 spongearea = 2 + 2 * Agrif_irhox() … … 137 121 ENDIF 138 122 139 DO jk = 1, jpkm1 140 DO jj = 1, jpjm1 141 DO ji = 1, jpim1 142 zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj) * fse3u(ji,jj,jk) 143 zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj) * fse3v(ji,jj,jk) 144 ztu(ji,jj,jk) = zabe1 * ( tbdiff(ji+1,jj ,jk) - tbdiff(ji,jj,jk) ) 145 zsu(ji,jj,jk) = zabe1 * ( sbdiff(ji+1,jj ,jk) - sbdiff(ji,jj,jk) ) 146 ztv(ji,jj,jk) = zabe2 * ( tbdiff(ji ,jj+1,jk) - tbdiff(ji,jj,jk) ) 147 zsv(ji,jj,jk) = zabe2 * ( sbdiff(ji ,jj+1,jk) - sbdiff(ji,jj,jk) ) 123 DO jn = 1, jpts 124 DO jk = 1, jpkm1 125 ! 126 DO jj = 1, jpjm1 127 DO ji = 1, jpim1 128 zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj) * fse3u(ji,jj,jk) 129 zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj) * fse3v(ji,jj,jk) 130 ztu(ji,jj) = zabe1 * ( tsbdiff(ji+1,jj ,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 131 ztv(ji,jj) = zabe2 * ( tsbdiff(ji ,jj+1,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 132 ENDDO 148 133 ENDDO 149 ENDDO 150 151 DO jj = 2,jpjm1 152 DO ji = 2,jpim1 153 zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 154 ! horizontal diffusive trends 155 zta = zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) & 156 & + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) 157 zsa = zbtr * ( zsu(ji,jj,jk) - zsu(ji-1,jj,jk) & 158 & + zsv(ji,jj,jk) - zsv(ji,jj-1,jk) ) 159 ! add it to the general tracer trends 160 ta(ji,jj,jk) = (ta(ji,jj,jk) + zta) 161 sa(ji,jj,jk) = (sa(ji,jj,jk) + zsa) 134 135 DO jj = 2, jpjm1 136 DO ji = 2, jpim1 137 zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 138 ! horizontal diffusive trends 139 ztsa = zbtr * ( ztu(ji,jj) - ztu(ji-1,jj ) & 140 & + ztv(ji,jj) - ztv(ji ,jj-1) ) 141 ! add it to the general tracer trends 142 tsa(ji,jj,jk,jn) = tsa(ji,jj,jk,jn) + ztsa 143 END DO 162 144 END DO 163 END DO164 145 ! 146 ENDDO 165 147 ENDDO 166 148 149 CALL wrk_dealloc( jpi, jpj, localviscsponge, ztu, ztv ) 150 CALL wrk_dealloc( jpi, jpj, jpk, jpts, ztab, tsbdiff ) 167 151 #endif 168 152 … … 174 158 !!--------------------------------------------- 175 159 #include "domzgr_substitute.h90" 176 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released177 USE wrk_nemo, ONLY: wrk_2d_1178 USE wrk_nemo, ONLY: wrk_3d_1, wrk_3d_2179 USE wrk_nemo, ONLY: wrk_3d_3, wrk_3d_4180 USE wrk_nemo, ONLY: wrk_3d_5181 160 !! 182 161 INTEGER :: ji,jj,jk … … 190 169 191 170 #if defined SPONGE 192 localviscsponge => wrk_2d_1 193 ubdiff => wrk_3d_1 ; vbdiff => wrk_3d_2 194 rotdiff => wrk_3d_3 ; hdivdiff => wrk_3d_4 195 ztab => wrk_3d_5 171 CALL wrk_alloc( jpi, jpj, localviscsponge ) 172 CALL wrk_alloc( jpi, jpj, jpk, ztab, ubdiff, vbdiff, rotdiff, hdivdiff ) 196 173 197 174 timecoeff = REAL(Agrif_NbStepint(),wp)/Agrif_rhot() … … 340 317 END DO ! End of slab 341 318 ! ! =============== 319 CALL wrk_dealloc( jpi, jpj, localviscsponge ) 320 CALL wrk_dealloc( jpi, jpj, jpk, ztab, ubdiff, vbdiff, rotdiff, hdivdiff ) 342 321 343 322 #endif … … 345 324 END SUBROUTINE Agrif_Sponge_dyn 346 325 347 SUBROUTINE interpt n(tabres,i1,i2,j1,j2,k1,k2)348 !!--------------------------------------------- 349 !! *** ROUTINE interpt n ***326 SUBROUTINE interptsn(tabres,i1,i2,j1,j2,k1,k2,n1,n2) 327 !!--------------------------------------------- 328 !! *** ROUTINE interptsn *** 350 329 !!--------------------------------------------- 351 330 # include "domzgr_substitute.h90" 352 331 353 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 354 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 355 356 tabres(i1:i2,j1:j2,k1:k2) = tn(i1:i2,j1:j2,k1:k2) 357 358 END SUBROUTINE interptn 359 360 SUBROUTINE interpsn(tabres,i1,i2,j1,j2,k1,k2) 361 !!--------------------------------------------- 362 !! *** ROUTINE interpsn *** 363 !!--------------------------------------------- 364 # include "domzgr_substitute.h90" 365 366 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 367 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 368 369 tabres(i1:i2,j1:j2,k1:k2) = sn(i1:i2,j1:j2,k1:k2) 370 371 END SUBROUTINE interpsn 332 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 333 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 334 335 tabres(i1:i2,j1:j2,k1:k2,n1:n2) = tsn(i1:i2,j1:j2,k1:k2,n1:n2) 336 337 END SUBROUTINE interptsn 372 338 373 339 SUBROUTINE interpun(tabres,i1,i2,j1,j2,k1,k2)
Note: See TracChangeset
for help on using the changeset viewer.