- Timestamp:
- 2017-06-06T15:55:44+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90
r8093 r8143 9 9 !! 3.3 ! 2010-04 (M. Leclair, G. Madec) Forcing averaged over 2 time steps 10 10 !! 3.4 ! 2012-01 (H. Liu) Semi-implicit bottom friction 11 !! 4.0 ! 2017-05 (G. Madec) drag coef. defined at t-point (zdfdrg.F90) 11 12 !!---------------------------------------------------------------------- 12 13 … … 22 23 USE dynadv , ONLY: ln_dynadv_vec ! Momentum advection form 23 24 USE zdf_oce ! ocean vertical physics 24 !!gm new25 25 USE zdfdrg ! vertical physics: top/bottom drag coef. 26 !!gm old27 USE zdfbfr ! Bottom friction setup28 !!gm29 26 ! 30 27 USE in_out_manager ! I/O manager 31 28 USE lib_mpp ! MPP library 32 USE wrk_nemo ! Memory Allocation33 29 USE timing ! Timing 34 30 … … 65 61 !! with the following surface/top/bottom boundary condition: 66 62 !! surface: wind stress input (averaged over kt-1/2 & kt+1/2) 67 !! top & bottom : top stress (iceshelf-ocean) & bottom stress (cf zdf bfr.F)63 !! top & bottom : top stress (iceshelf-ocean) & bottom stress (cf zdfdrg.F90) 68 64 !! 69 65 !! ** Action : (ua,va) after velocity … … 76 72 REAL(wp) :: zzwi, ze3ua ! local scalars 77 73 REAL(wp) :: zzws, ze3va ! - - 78 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwi, zwd, zws74 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwi, zwd, zws 79 75 !!---------------------------------------------------------------------- 80 76 ! 81 77 IF( nn_timing == 1 ) CALL timing_start('dyn_zdf_imp') 82 !83 CALL wrk_alloc( jpi,jpj,jpk, zwi, zwd, zws )84 78 ! 85 79 IF( kt == nit000 ) THEN … … 115 109 ! column vector of the tri-diagonal matrix equation 116 110 ! 117 IF( ln_ bfrimp ) THEN111 IF( ln_drgimp ) THEN 118 112 DO jj = 2, jpjm1 119 113 DO ji = 2, jpim1 120 114 ikbu = mbku(ji,jj) ! ocean bottom level at u- and v-points 121 115 ikbv = mbkv(ji,jj) ! (deepest ocean u- and v-points) 122 !!gm old 123 avmu(ji,jj,ikbu+1) = -bfrua(ji,jj) * e3uw_n(ji,jj,ikbu+1) 124 avmv(ji,jj,ikbv+1) = -bfrva(ji,jj) * e3vw_n(ji,jj,ikbv+1) 125 !!gm new 126 ! avmu(ji,jj,ikbu+1) = -0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * e3uw_n(ji,jj,ikbu+1) 127 ! avmv(ji,jj,ikbv+1) = -0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * e3vw_n(ji,jj,ikbv+1) 128 !!gm 116 avmu(ji,jj,ikbu+1) = -0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * e3uw_n(ji,jj,ikbu+1) 117 avmv(ji,jj,ikbv+1) = -0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * e3vw_n(ji,jj,ikbv+1) 129 118 END DO 130 119 END DO … … 134 123 ikbu = miku(ji,jj) ! ocean top level at u- and v-points 135 124 ikbv = mikv(ji,jj) ! (first wet ocean u- and v-points) 136 !!gm old137 IF( ikbu >= 2 ) avmu(ji,jj,ikbu) = -tfrua(ji,jj) * e3uw_n(ji,jj,ikbu)138 IF( ikbv >= 2 ) avmv(ji,jj,ikbv) = -tfrva(ji,jj) * e3vw_n(ji,jj,ikbv)139 !!gm new140 125 ! top Cd is masked (=0 outside cavities) no need of test on mik>=2 141 ! avmu(ji,jj,ikbu) = -0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * e3uw_n(ji,jj,ikbu) 142 ! avmv(ji,jj,ikbv) = -0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * e3vw_n(ji,jj,ikbv) 143 !!gm 126 avmu(ji,jj,ikbu) = -0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * e3uw_n(ji,jj,ikbu) 127 avmv(ji,jj,ikbv) = -0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * e3vw_n(ji,jj,ikbv) 144 128 END DO 145 129 END DO … … 152 136 ! not lead to the effective stress seen over the whole barotropic loop. 153 137 ! G. Madec : in linear free surface, e3u_a = e3u_n = e3u_0, so systematic use of e3u_a 154 IF( ln_ bfrimp .AND. ln_dynspg_ts ) THEN138 IF( ln_drgimp .AND. ln_dynspg_ts ) THEN 155 139 DO jk = 1, jpkm1 ! remove barotropic velocities 156 140 ua(:,:,jk) = ( ua(:,:,jk) - ua_b(:,:) ) * umask(:,:,jk) … … 163 147 ze3ua = ( 1._wp - r_vvl ) * e3u_n(ji,jj,ikbu) + r_vvl * e3u_a(ji,jj,ikbu) 164 148 ze3va = ( 1._wp - r_vvl ) * e3v_n(ji,jj,ikbv) + r_vvl * e3v_a(ji,jj,ikbv) 165 !!gm old 166 ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * bfrua(ji,jj) * ua_b(ji,jj) / ze3ua 167 va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * bfrva(ji,jj) * va_b(ji,jj) / ze3va 168 !!gm new 169 ! ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * ua_b(ji,jj) / ze3ua 170 ! va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * va_b(ji,jj) / ze3va 171 !!gm 149 ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * ua_b(ji,jj) / ze3ua 150 va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * va_b(ji,jj) / ze3va 172 151 END DO 173 152 END DO … … 179 158 ze3ua = ( 1._wp - r_vvl ) * e3u_n(ji,jj,ikbu) + r_vvl * e3u_a(ji,jj,ikbu) 180 159 ze3va = ( 1._wp - r_vvl ) * e3v_n(ji,jj,ikbv) + r_vvl * e3v_a(ji,jj,ikbv) 181 !!gm old182 ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * tfrua(ji,jj) * ua_b(ji,jj) / ze3ua183 va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * tfrva(ji,jj) * va_b(ji,jj) / ze3va184 !!gm new185 160 ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * ua_b(ji,jj) / ze3ua 186 161 va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * va_b(ji,jj) / ze3va 187 !!gm188 162 END DO 189 163 END DO … … 342 316 END DO 343 317 END DO 344 345 ! J. Chanut: Lines below are useless ?346 !! restore bottom layer avmu(v)347 !!gm I almost sure it is !!!!348 IF( ln_bfrimp ) THEN349 DO jj = 2, jpjm1350 DO ji = 2, jpim1351 ikbu = mbku(ji,jj) ! ocean bottom level at u- and v-points352 ikbv = mbkv(ji,jj) ! (deepest ocean u- and v-points)353 avmu(ji,jj,ikbu+1) = 0._wp354 avmv(ji,jj,ikbv+1) = 0._wp355 END DO356 END DO357 IF (ln_isfcav) THEN358 DO jj = 2, jpjm1359 DO ji = 2, jpim1360 ikbu = miku(ji,jj) ! ocean top level at u- and v-points361 ikbv = mikv(ji,jj) ! (first wet ocean u- and v-points)362 IF( ikbu > 1 ) avmu(ji,jj,ikbu) = 0._wp363 IF( ikbv > 1 ) avmv(ji,jj,ikbv) = 0._wp364 END DO365 END DO366 ENDIF367 ENDIF368 !369 CALL wrk_dealloc( jpi,jpj,jpk, zwi, zwd, zws)370 318 ! 371 319 IF( nn_timing == 1 ) CALL timing_stop('dyn_zdf_imp')
Note: See TracChangeset
for help on using the changeset viewer.