- Timestamp:
- 2013-10-22T16:47:27+02:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn2d.F90
r3680 r4105 6 6 !! History : 3.4 ! 2011 (D. Storkey) new module as part of BDY rewrite 7 7 !! 3.5 ! 2012 (S. Mocavero, I. Epicoco) Optimization of BDY communications 8 !! 3.5 ! 2013-07 (J. Chanut) Compliant with time splitting changes 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_bdy … … 27 28 28 29 PUBLIC bdy_dyn2d ! routine called in dynspg_ts and bdy_dyn 30 PUBLIC bdy_ssh ! routine called in dynspg_ts or sshwzv 29 31 30 32 !!---------------------------------------------------------------------- … … 135 137 REAL(wp) :: zcorr ! Flather correction 136 138 REAL(wp) :: zforc ! temporary scalar 139 REAL(wp) :: zflag, z1_2 ! " " 137 140 !!---------------------------------------------------------------------- 138 141 139 142 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn2d_fla') 143 144 z1_2 = 0.5_wp 140 145 141 146 ! ---------------------------------! … … 147 152 ! Fill temporary array with ssh data (here spgu): 148 153 igrd = 1 149 spgu(:,:) = 0. 0154 spgu(:,:) = 0._wp 150 155 DO jb = 1, idx%nblenrim(igrd) 151 156 ii = idx%nbi(jb,igrd) … … 164 169 ! 165 170 zcorr = - idx%flagu(jb) * SQRT( grav * phur(ii, ij) ) * ( pssh(iim1, ij) - spgu(iip1,ij) ) 166 zforc = dta%u2d(jb) 167 pu2d(ii,ij) = zforc + zcorr * umask(ii,ij,1) 171 ! bg jchanut tschanges: Set zflag to 0 below to revert to Flather scheme 172 !! zforc = dta%u2d(jb) 173 zflag = ABS(idx%flagu(jb)) 174 iim1 = ii + idx%flagu(jb) 175 zforc = dta%u2d(jb) * (1._wp - z1_2*zflag) + z1_2 * zflag * pu2d(iim1,ij) 176 pu2d(ii,ij) = zforc + (1._wp - z1_2*zflag) * zcorr * umask(ii,ij,1) 177 ! end jchanut tschanges 168 178 END DO 169 179 ! … … 177 187 ! 178 188 zcorr = - idx%flagv(jb) * SQRT( grav * phvr(ii, ij) ) * ( pssh(ii, ijm1) - spgu(ii,ijp1) ) 179 zforc = dta%v2d(jb) 180 pv2d(ii,ij) = zforc + zcorr * vmask(ii,ij,1) 189 ! bg jchanut tschanges: Set zflag to 0 below to revert to std Flather scheme 190 !! zforc = dta%v2d(jb) 191 zflag = ABS(idx%flagv(jb)) 192 ijm1 = ij + idx%flagv(jb) 193 zforc = dta%v2d(jb) * (1._wp - z1_2*zflag) + z1_2 * zflag * pv2d(ii,ijm1) 194 pv2d(ii,ij) = zforc + (1._wp - z1_2*zflag) * zcorr * vmask(ii,ij,1) 195 ! end jchanut tschanges 181 196 END DO 182 197 CALL lbc_bdy_lnk( pu2d, 'U', -1., ib_bdy ) ! Boundary points should be updated … … 186 201 ! 187 202 END SUBROUTINE bdy_dyn2d_fla 203 204 SUBROUTINE bdy_ssh( zssh ) 205 !!---------------------------------------------------------------------- 206 !! *** SUBROUTINE bdy_ssh *** 207 !! 208 !! ** Purpose : Duplicate sea level across open boundaries 209 !! 210 !!---------------------------------------------------------------------- 211 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: zssh ! Sea level 212 !! 213 INTEGER :: ib_bdy, ib, igrd ! local integers 214 INTEGER :: ii, ij, zcoef, zcoef1, zcoef2, ip, jp ! " " 215 216 igrd = 1 ! Everything is at T-points here 217 218 DO ib_bdy = 1, nb_bdy 219 DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 220 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 221 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 222 ! Set gradient direction: 223 zcoef1 = bdytmask(ii-1,ij ) + bdytmask(ii+1,ij ) 224 zcoef2 = bdytmask(ii ,ij-1) + bdytmask(ii ,ij+1) 225 IF ( zcoef1+zcoef2 == 0 ) THEN 226 ! corner 227 ! zcoef = tmask(ii-1,ij,1) + tmask(ii+1,ij,1) + tmask(ii,ij-1,1) + tmask(ii,ij+1,1) 228 ! zssh(ii,ij) = zssh(ii-1,ij ) * tmask(ii-1,ij ,1) + & 229 ! & zssh(ii+1,ij ) * tmask(ii+1,ij ,1) + & 230 ! & zssh(ii ,ij-1) * tmask(ii ,ij-1,1) + & 231 ! & zssh(ii ,ij+1) * tmask(ii ,ij+1,1) 232 zcoef = bdytmask(ii-1,ij) + bdytmask(ii+1,ij) + bdytmask(ii,ij-1) + bdytmask(ii,ij+1) 233 zssh(ii,ij) = zssh(ii-1,ij ) * bdytmask(ii-1,ij ) + & 234 & zssh(ii+1,ij ) * bdytmask(ii+1,ij ) + & 235 & zssh(ii ,ij-1) * bdytmask(ii ,ij-1) + & 236 & zssh(ii ,ij+1) * bdytmask(ii ,ij+1) 237 zssh(ii,ij) = ( zssh(ii,ij) / MAX( 1, zcoef) ) * tmask(ii,ij,1) 238 ELSE 239 ip = bdytmask(ii+1,ij ) - bdytmask(ii-1,ij ) 240 jp = bdytmask(ii ,ij+1) - bdytmask(ii ,ij-1) 241 zssh(ii,ij) = zssh(ii+ip,ij+jp) * tmask(ii+ip,ij+jp,1) 242 ENDIF 243 END DO 244 245 ! Boundary points should be updated 246 CALL lbc_bdy_lnk( zssh(:,:), 'T', 1., ib_bdy ) 247 END DO 248 249 END SUBROUTINE bdy_ssh 188 250 #else 189 251 !!---------------------------------------------------------------------- … … 192 254 CONTAINS 193 255 SUBROUTINE bdy_dyn2d( kt ) ! Empty routine 194 WRITE(*,*) 'bdy_dyn_frs: You should not have seen this print! error?', kt 256 INTEGER, intent(in) :: kt 257 WRITE(*,*) 'bdy_dyn2d: You should not have seen this print! error?', kt 195 258 END SUBROUTINE bdy_dyn2d 196 259 #endif
Note: See TracChangeset
for help on using the changeset viewer.