- Timestamp:
- 2012-04-25T12:21:21+02:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_r3327_MERCATOR1_BDY/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn3d.F90
r3294 r3367 19 19 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 20 20 USE in_out_manager ! 21 Use phycst 21 22 22 23 IMPLICIT NONE … … 24 25 25 26 PUBLIC bdy_dyn3d ! routine called by bdy_dyn 27 PUBLIC bdy_dyn3d_dmp ! routine called by step 26 28 27 29 !!---------------------------------------------------------------------- … … 55 57 CASE(jp_frs) 56 58 CALL bdy_dyn3d_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 59 CASE(2) 60 CALL bdy_dyn3d_spe( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 61 CASE(3) 62 CALL bdy_dyn3d_zro( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 57 63 CASE DEFAULT 58 64 CALL ctl_stop( 'bdy_dyn3d : unrecognised option for open boundaries for baroclinic velocities' ) … … 62 68 END SUBROUTINE bdy_dyn3d 63 69 70 SUBROUTINE bdy_dyn3d_spe( idx, dta, kt ) 71 !!---------------------------------------------------------------------- 72 !! *** SUBROUTINE bdy_dyn3d_spe *** 73 !! 74 !! ** Purpose : - Apply a specified value for baroclinic velocities 75 !! at open boundaries. 76 !! 77 !!---------------------------------------------------------------------- 78 INTEGER :: kt 79 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 80 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 81 !! 82 INTEGER :: jb, jk ! dummy loop indices 83 INTEGER :: ii, ij, igrd ! local integers 84 REAL(wp) :: zwgt ! boundary weight 85 !!---------------------------------------------------------------------- 86 ! 87 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn3d_spe') 88 ! 89 igrd = 2 ! Relaxation of zonal velocity 90 DO jb = 1, idx%nblenrim(igrd) 91 DO jk = 1, jpkm1 92 ii = idx%nbi(jb,igrd) 93 ij = idx%nbj(jb,igrd) 94 ua(ii,ij,jk) = dta%u3d(jb,jk) * umask(ii,ij,jk) 95 END DO 96 END DO 97 ! 98 igrd = 3 ! Relaxation of meridional velocity 99 DO jb = 1, idx%nblenrim(igrd) 100 DO jk = 1, jpkm1 101 ii = idx%nbi(jb,igrd) 102 ij = idx%nbj(jb,igrd) 103 va(ii,ij,jk) = dta%v3d(jb,jk) * vmask(ii,ij,jk) 104 END DO 105 END DO 106 CALL lbc_lnk( ua, 'U', -1. ) ; CALL lbc_lnk( va, 'V', -1. ) ! Boundary points should be updated 107 ! 108 IF( kt .eq. nit000 ) CLOSE( unit = 102 ) 109 110 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn3d_spe') 111 112 END SUBROUTINE bdy_dyn3d_spe 113 114 SUBROUTINE bdy_dyn3d_zro( idx, dta, kt ) 115 !!---------------------------------------------------------------------- 116 !! *** SUBROUTINE bdy_dyn3d_zro *** 117 !! 118 !! ** Purpose : - baroclinic velocities = 0. at open boundaries. 119 !! 120 !!---------------------------------------------------------------------- 121 INTEGER :: kt 122 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 123 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 124 !! 125 INTEGER :: ib, ik ! dummy loop indices 126 INTEGER :: ii, ij, igrd, zcoef ! local integers 127 REAL(wp) :: zwgt ! boundary weight 128 !!---------------------------------------------------------------------- 129 ! 130 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn3d_zro') 131 ! 132 igrd = 2 ! Everything is at T-points here 133 DO ib = 1, idx%nblenrim(igrd) 134 ii = idx%nbi(ib,igrd) 135 ij = idx%nbj(ib,igrd) 136 DO ik = 1, jpkm1 137 ua(ii,ij,ik) = 0._wp 138 END DO 139 END DO 140 141 igrd = 3 ! Everything is at T-points here 142 DO ib = 1, idx%nblenrim(igrd) 143 ii = idx%nbi(ib,igrd) 144 ij = idx%nbj(ib,igrd) 145 DO ik = 1, jpkm1 146 va(ii,ij,ik) = 0._wp 147 END DO 148 END DO 149 ! 150 CALL lbc_lnk( ua, 'U', -1. ) ; CALL lbc_lnk( va, 'V', -1. ) ! Boundary points should be updated 151 ! 152 IF( kt .eq. nit000 ) CLOSE( unit = 102 ) 153 154 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn3d_zro') 155 156 END SUBROUTINE bdy_dyn3d_zro 157 64 158 SUBROUTINE bdy_dyn3d_frs( idx, dta, kt ) 65 159 !!---------------------------------------------------------------------- … … 111 205 END SUBROUTINE bdy_dyn3d_frs 112 206 207 SUBROUTINE bdy_dyn3d_dmp( kt ) 208 !!---------------------------------------------------------------------- 209 !! *** SUBROUTINE bdy_dyn3d_dmp *** 210 !! 211 !! ** Purpose : Apply damping for baroclinic velocities at open boundaries. 212 !! 213 !!---------------------------------------------------------------------- 214 INTEGER :: kt 215 !! 216 INTEGER :: jb, jk ! dummy loop indices 217 INTEGER :: ii, ij, igrd ! local integers 218 REAL(wp) :: zwgt ! boundary weight 219 INTEGER :: ib_bdy ! loop index 220 !!---------------------------------------------------------------------- 221 ! 222 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn3d_dmp') 223 ! 224 DO ib_bdy=1, nb_bdy 225 IF ( ln_dyn3d_dmp(ib_bdy).and.nn_dyn3d(ib_bdy).gt.0 ) THEN 226 igrd = 2 ! Relaxation of zonal velocity 227 DO jb = 1, idx_bdy(ib_bdy)%nblen(igrd) 228 ii = idx_bdy(ib_bdy)%nbi(jb,igrd) 229 ij = idx_bdy(ib_bdy)%nbj(jb,igrd) 230 zwgt = idx_bdy(ib_bdy)%nbw(jb,igrd) / ( rn_time_dmp(ib_bdy) * rday ) 231 DO jk = 1, jpkm1 232 ua(ii,ij,jk) = ( ua(ii,ij,jk) + zwgt * ( dta_bdy(ib_bdy)%u3d(jb,jk) - ub(ii,ij,jk) ) ) * umask(ii,ij,jk) 233 END DO 234 END DO 235 ! 236 igrd = 3 ! Relaxation of meridional velocity 237 DO jb = 1, idx_bdy(ib_bdy)%nblen(igrd) 238 ii = idx_bdy(ib_bdy)%nbi(jb,igrd) 239 ij = idx_bdy(ib_bdy)%nbj(jb,igrd) 240 zwgt = idx_bdy(ib_bdy)%nbw(jb,igrd) / ( rn_time_dmp(ib_bdy) * rday ) 241 DO jk = 1, jpkm1 242 va(ii,ij,jk) = ( va(ii,ij,jk) + zwgt * ( dta_bdy(ib_bdy)%v3d(jb,jk) - vb(ii,ij,jk) ) ) * vmask(ii,ij,jk) 243 END DO 244 END DO 245 ENDIF 246 ENDDO 247 ! 248 CALL lbc_lnk( ua, 'U', -1. ) ; CALL lbc_lnk( va, 'V', -1. ) ! Boundary points should be updated 249 ! 250 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn3d_dmp') 251 252 END SUBROUTINE bdy_dyn3d_dmp 113 253 114 254 #else
Note: See TracChangeset
for help on using the changeset viewer.