Changeset 457 for trunk/NEMO/OPA_SRC/TRA/traldf_bilap.F90
- Timestamp:
- 2006-05-10T19:01:19+02:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/TRA/traldf_bilap.F90
r258 r457 50 50 !! evaluated using before fields (forward time scheme). The hor. 51 51 !! diffusive trends of temperature (idem for salinity) is given by: 52 !! * s-coordinate ('key_s_coord' defined), the vertical scale53 !! factors e3. are inside the derivatives:54 52 !! Laplacian of tb: 55 53 !! zlt = 1/(e1t*e2t*e3t) { di-1[ e2u*e3u/e1u di(tb) ] … … 61 59 !! difft = 1/(e1t*e2t*e3t) { di-1[ e2u*e3u/e1u di(zlt) ] 62 60 !! + dj-1[ e1v*e3v/e2v dj(zlt) ] } 63 !! * z-coordinate (default key), e3t=e3u=e3v, the trend becomes: 64 !! Laplacian of tb: 65 !! zlt = 1/(e1t*e2t) { di-1[ e2u/e1u di(tb) ] 66 !! + dj-1[ e1v/e2v dj(tb) ] } 67 !! Multiply by the eddy diffusivity coef. and insure lateral bc: 68 !! zlt = ahtt * zlt 69 !! call to lbc_lnk 70 !! Bilaplacian (laplacian of zlt): 71 !! difft = 1/(e1t*e2t) { di-1[ e2u/e1u di(zlt) ] 72 !! + dj-1[ e1v/e2v dj(zlt) ] } 61 !! Note: if key_zco defined, e3t=e3u=e3v, they are simplified. 73 62 !! 74 63 !! Add this trend to the general trend (ta,sa): … … 77 66 !! ** Action : - Update (ta,sa) arrays with the before iso-level 78 67 !! biharmonic mixing trend. 79 !! - Save the trends in (ztdta,ztdsa) ('key_trdtra')80 68 !! 81 69 !! History : … … 88 76 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 89 77 !! 9.0 ! 04-08 (C. Talandier) New trends organization 78 !! ! 05-11 (G. Madec) zps or sco as default option 90 79 !!---------------------------------------------------------------------- 91 80 !! * Modules used … … 98 87 !! * Local declarations 99 88 INTEGER :: ji, jj, jk ! dummy loop indices 100 #if defined key_partial_steps101 89 INTEGER :: iku, ikv ! temporary integers 102 #endif103 90 REAL(wp) :: zta, zsa ! temporary scalars 104 91 REAL(wp), DIMENSION(jpi,jpj) :: & 105 zeeu, zeev, zbtr, & ! workspace92 zeeu, zeev, zbtr, & ! 2D workspace 106 93 zlt, zls 107 94 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 108 zsu, zsv, & ! workspace arrays 109 ztdta, ztdsa 95 zsu, zsv ! 3D workspace 110 96 !!---------------------------------------------------------------------- 111 97 … … 116 102 ENDIF 117 103 118 ! Save ta and sa trends119 IF( l_trdtra ) THEN120 ztdta(:,:,:) = ta(:,:,:)121 ztdsa(:,:,:) = sa(:,:,:)122 ENDIF123 104 124 105 ! ! =============== … … 129 110 ! ---------------------------------- 130 111 131 DO jj = 1, jpjm1 132 DO ji = 1, fs_jpim1 ! vector opt. 133 #if defined key_s_coord || defined key_partial_steps 134 ! s-coordinates, vertical scale factor are used 135 zbtr(ji,jj) = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 136 zeeu(ji,jj) = e2u(ji,jj) * fse3u(ji,jj,jk) / e1u(ji,jj) * umask(ji,jj,jk) 137 zeev(ji,jj) = e1v(ji,jj) * fse3v(ji,jj,jk) / e2v(ji,jj) * vmask(ji,jj,jk) 138 #else 139 ! z-coordinates, no vertical scale factors 140 zbtr(ji,jj) = 1. / ( e1t(ji,jj)*e2t(ji,jj) ) 141 zeeu(ji,jj) = e2u(ji,jj) / e1u(ji,jj) * umask(ji,jj,jk) 142 zeev(ji,jj) = e1v(ji,jj) / e2v(ji,jj) * vmask(ji,jj,jk) 143 #endif 144 END DO 145 END DO 112 IF( lk_zco ) THEN ! z-coordinate (1D arrays): no vertical scale factors 113 DO jj = 1, jpjm1 114 DO ji = 1, fs_jpim1 ! vector opt. 115 zbtr(ji,jj) = 1. / ( e1t(ji,jj)*e2t(ji,jj) ) 116 zeeu(ji,jj) = e2u(ji,jj) / e1u(ji,jj) * umask(ji,jj,jk) 117 zeev(ji,jj) = e1v(ji,jj) / e2v(ji,jj) * vmask(ji,jj,jk) 118 END DO 119 END DO 120 ELSE ! All coordinates (3D arrays): vertical scale factor are used 121 DO jj = 1, jpjm1 122 DO ji = 1, fs_jpim1 ! vector opt. 123 zbtr(ji,jj) = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 124 zeeu(ji,jj) = e2u(ji,jj) * fse3u(ji,jj,jk) / e1u(ji,jj) * umask(ji,jj,jk) 125 zeev(ji,jj) = e1v(ji,jj) * fse3v(ji,jj,jk) / e2v(ji,jj) * vmask(ji,jj,jk) 126 END DO 127 END DO 128 ENDIF 146 129 147 130 … … 158 141 END DO 159 142 END DO 160 #if defined key_partial_steps 161 DO jj = 1, jpj-1162 DO ji = 1, jpi-1163 ! last level164 iku = MIN ( mbathy(ji,jj), mbathy(ji+1,jj ) ) - 1165 ikv = MIN ( mbathy(ji,jj), mbathy(ji ,jj+1) ) - 1166 IF( iku == jk ) THEN167 ztu(ji,jj,jk) = zeeu(ji,jj) * gtu(ji,jj)168 zsu(ji,jj,jk) = zeeu(ji,jj) * gsu(ji,jj)169 ENDIF170 IF( ikv == jk ) THEN171 ztv(ji,jj,jk) = zeev(ji,jj) * gtv(ji,jj)172 zsv(ji,jj,jk) = zeev(ji,jj) * gsv(ji,jj)173 ENDIF174 END DO175 END DO176 #endif 143 IF( ln_zps ) THEN ! set gradient at partial step level 144 DO jj = 1, jpjm1 145 DO ji = 1, jpim1 146 ! last level 147 iku = MIN ( mbathy(ji,jj), mbathy(ji+1,jj ) ) - 1 148 ikv = MIN ( mbathy(ji,jj), mbathy(ji ,jj+1) ) - 1 149 IF( iku == jk ) THEN 150 ztu(ji,jj,jk) = zeeu(ji,jj) * gtu(ji,jj) 151 zsu(ji,jj,jk) = zeeu(ji,jj) * gsu(ji,jj) 152 ENDIF 153 IF( ikv == jk ) THEN 154 ztv(ji,jj,jk) = zeev(ji,jj) * gtv(ji,jj) 155 zsv(ji,jj,jk) = zeev(ji,jj) * gsv(ji,jj) 156 ENDIF 157 END DO 158 END DO 159 ENDIF 177 160 178 161 ! Second derivative (divergence) … … 223 206 ! ! =============== 224 207 225 ! save the trends for diagnostic226 ! save the horizontal diffusive trends227 IF( l_trdtra ) THEN228 ztdta(:,:,:) = ta(:,:,:) - ztdta(:,:,:)229 ztdsa(:,:,:) = sa(:,:,:) - ztdsa(:,:,:)230 231 CALL trd_mod(ztdta, ztdsa, jpttdldf, 'TRA', kt)232 ENDIF233 234 IF(ln_ctl) THEN ! print mean trends (used for debugging)235 CALL prt_ctl(tab3d_1=ta, clinfo1=' ldf - Ta: ', mask1=tmask, &236 & tab3d_2=sa, clinfo2=' Sa: ', mask2=tmask, clinfo3='tra')237 ENDIF238 239 208 ! "zonal" mean lateral diffusive heat and salt transport 240 209 IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 241 # if defined key_s_coord || defined key_partial_steps 210 IF( lk_zco ) THEN ! z-coordinate (1D arrays): multiply by the vertical scale factor 211 DO jk = 1, jpkm1 212 DO jj = 2, jpjm1 213 DO ji = fs_2, fs_jpim1 ! vector opt. 214 ztv(ji,jj,jk) = ztv(ji,jj,jk) * fse3v(ji,jj,jk) 215 zsv(ji,jj,jk) = zsv(ji,jj,jk) * fse3v(ji,jj,jk) 216 END DO 217 END DO 218 END DO 219 ENDIF 242 220 pht_ldf(:) = ptr_vj( ztv(:,:,:) ) 243 221 pst_ldf(:) = ptr_vj( zsv(:,:,:) ) 244 # else245 DO jk = 1, jpkm1246 DO jj = 2, jpjm1247 DO ji = fs_2, fs_jpim1 ! vector opt.248 ztv(ji,jj,jk) = ztv(ji,jj,jk) * fse3v(ji,jj,jk)249 zsv(ji,jj,jk) = zsv(ji,jj,jk) * fse3v(ji,jj,jk)250 END DO251 END DO252 END DO253 pht_ldf(:) = ptr_vj( ztv(:,:,:) )254 pst_ldf(:) = ptr_vj( zsv(:,:,:) )255 # endif256 222 ENDIF 257 223
Note: See TracChangeset
for help on using the changeset viewer.