- Timestamp:
- 2013-12-11T15:38:42+01:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r3909 r4332 96 96 & nn_dyn3d, nn_dyn3d_dta, nn_tra, nn_tra_dta, & 97 97 & ln_tra_dmp, ln_dyn3d_dmp, rn_time_dmp, & 98 #if defined key_lim299 & nn_ice_lim 2, nn_ice_lim2_dta, &98 #if ( defined key_lim2 || defined key_lim3 ) 99 & nn_ice_lim, nn_ice_lim_dta, & 100 100 #endif 101 101 & ln_vol, nn_volctl, nn_rimwidth … … 137 137 ln_dyn3d_dmp(:) = .false. 138 138 rn_time_dmp(:) = 1. 139 #if defined key_lim2140 nn_ice_lim 2(:) = 0141 nn_ice_lim 2_dta(:)= -1 ! uninitialised flag139 #if ( defined key_lim2 || defined key_lim3 ) 140 nn_ice_lim(:) = 0 141 nn_ice_lim_dta(:)= -1 ! uninitialised flag 142 142 #endif 143 143 ln_vol = .false. … … 161 161 162 162 DO ib_bdy = 1,nb_bdy 163 icount = 0 ! flag to set max rimwidth to 1 if no relaxation 163 164 IF(lwp) WRITE(numout,*) ' ' 164 165 IF(lwp) WRITE(numout,*) '------ Open boundary data set ',ib_bdy,'------' … … 175 176 CASE(jp_none) ; IF(lwp) WRITE(numout,*) ' no open boundary condition' 176 177 CASE(jp_frs) ; IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 178 icount = icount + 1 177 179 CASE(jp_flather) ; IF(lwp) WRITE(numout,*) ' Flather radiation condition' 178 180 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_dyn2d' ) … … 196 198 CASE(jp_none) ; IF(lwp) WRITE(numout,*) ' no open boundary condition' 197 199 CASE(jp_frs) ; IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 200 icount = icount + 1 198 201 CASE( 2 ) ; IF(lwp) WRITE(numout,*) ' Specified value' 199 202 CASE( 3 ) ; IF(lwp) WRITE(numout,*) ' Zero baroclinic velocities (runoff case)' … … 215 218 CALL ctl_stop( 'Use FRS OR relaxation' ) 216 219 ELSE 220 icount = icount + 1 217 221 IF(lwp) WRITE(numout,*) ' + baroclinic velocities relaxation zone' 218 222 IF(lwp) WRITE(numout,*) ' Damping time scale: ',rn_time_dmp(ib_bdy),' days' … … 228 232 CASE(jp_none) ; IF(lwp) WRITE(numout,*) ' no open boundary condition' 229 233 CASE(jp_frs) ; IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 234 icount = icount + 1 230 235 CASE( 2 ) ; IF(lwp) WRITE(numout,*) ' Specified value' 231 236 CASE( 3 ) ; IF(lwp) WRITE(numout,*) ' Neumann conditions' … … 248 253 CALL ctl_stop( 'Use FRS OR relaxation' ) 249 254 ELSE 255 icount = icount + 1 250 256 IF(lwp) WRITE(numout,*) ' + T/S relaxation zone' 251 257 IF(lwp) WRITE(numout,*) ' Damping time scale: ',rn_time_dmp(ib_bdy),' days' … … 257 263 IF(lwp) WRITE(numout,*) 258 264 259 #if defined key_lim2265 #if ( defined key_lim2 || defined key_lim3 ) 260 266 IF(lwp) WRITE(numout,*) 'Boundary conditions for sea ice: ' 261 SELECT CASE( nn_ice_lim 2(ib_bdy) )267 SELECT CASE( nn_ice_lim(ib_bdy) ) 262 268 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' no open boundary condition' 263 269 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 270 icount = icount + 1 264 271 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_tra' ) 265 272 END SELECT 266 IF( nn_ice_lim 2(ib_bdy) .gt. 0 ) THEN267 SELECT CASE( nn_ice_lim 2_dta(ib_bdy) ) !273 IF( nn_ice_lim(ib_bdy) .gt. 0 ) THEN 274 SELECT CASE( nn_ice_lim_dta(ib_bdy) ) ! 268 275 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' initial state used for bdy data' 269 276 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' boundary data taken from file' 270 CASE DEFAULT ; CALL ctl_stop( 'nn_ice_lim 2_dta must be 0 or 1' )277 CASE DEFAULT ; CALL ctl_stop( 'nn_ice_lim_dta must be 0 or 1' ) 271 278 END SELECT 272 279 ENDIF 273 280 IF(lwp) WRITE(numout,*) 274 281 #endif 275 276 IF(lwp) WRITE(numout,*) ' Width of relaxation zone = ', nn_rimwidth(ib_bdy) 277 IF(lwp) WRITE(numout,*) 282 IF ( icount>0 ) THEN 283 IF(lwp) WRITE(numout,*) ' Width of relaxation zone = ', nn_rimwidth(ib_bdy) 284 IF(lwp) WRITE(numout,*) 285 ELSE 286 nn_rimwidth(ib_bdy) = 1 ! no relaxation 287 ENDIF 278 288 279 289 ENDDO … … 387 397 DO igrd = 1, jpbgrd 388 398 id_dummy = iom_varid( inum, 'nbi'//cgrid(igrd), kdimsz=kdimsz ) 389 nblendta(igrd,ib_bdy) = kdimsz(1) 390 jpbdtau = MAX(jpbdtau, kdimsz(1)) 399 !clem nblendta(igrd,ib_bdy) = kdimsz(1) 400 !clem jpbdtau = MAX(jpbdtau, kdimsz(1)) 401 nblendta(igrd,ib_bdy) = MAXVAL(kdimsz) 402 jpbdtau = MAX(jpbdtau, MAXVAL(kdimsz)) 391 403 ENDDO 392 404 CALL iom_close( inum ) 393 394 405 ENDIF 395 406 … … 398 409 IF (nb_bdy>0) THEN 399 410 jpbdta = MAXVAL(nblendta(1:jpbgrd,1:nb_bdy)) 400 401 411 ! Allocate arrays 402 412 !--------------- … … 446 456 ENDIF 447 457 448 ENDDO 458 ENDDO 449 459 450 460 ! 2. Now fill indices corresponding to straight open boundary arrays: … … 752 762 ! check if point is in local domain 753 763 IF( nbidta(ib,igrd,ib_bdy) >= iw .AND. nbidta(ib,igrd,ib_bdy) <= ie .AND. & 754 & nbjdta(ib,igrd,ib_bdy) >= is .AND. nbjdta(ib,igrd,ib_bdy) <= in ) THEN 764 & nbjdta(ib,igrd,ib_bdy) >= is .AND. nbjdta(ib,igrd,ib_bdy) <= in .AND. & 765 & nbrdta(ib,igrd,ib_bdy) <= nn_rimwidth(ib_bdy) ) THEN 755 766 ! 756 767 icount = icount + 1 … … 765 776 ! Allocate index arrays for this boundary set 766 777 !-------------------------------------------- 767 ilen1 = MAXVAL(idx_bdy(ib_bdy)%nblen(:)) 778 779 ilen1 = MAXVAL(idx_bdy(ib_bdy)%nblen(1:jpbgrd)) 780 ilen1 = MAX(1,ilen1) 768 781 ALLOCATE( idx_bdy(ib_bdy)%nbi(ilen1,jpbgrd) ) 769 782 ALLOCATE( idx_bdy(ib_bdy)%nbj(ilen1,jpbgrd) ) … … 773 786 ALLOCATE( idx_bdy(ib_bdy)%nbw(ilen1,jpbgrd) ) 774 787 ALLOCATE( idx_bdy(ib_bdy)%flagu(ilen1) ) 775 ALLOCATE( idx_bdy(ib_bdy)%flagv(ilen1) ) 788 ALLOCATE( idx_bdy(ib_bdy)%flagv(ilen1) ) 776 789 777 790 ! Dispatch mapping indices and discrete distances on each processor … … 1008 1021 ! bdytmask = 1 on the computational domain AND on open boundaries 1009 1022 ! = 0 elsewhere 1010 1023 bdytmask(:,:) = 1.e0 1024 bdyumask(:,:) = 1.e0 1025 bdyvmask(:,:) = 1.e0 1026 1011 1027 IF( ln_mask_file ) THEN 1012 1028 CALL iom_open( cn_mask_file, inum ) … … 1053 1069 1054 1070 bdytmask(:,:) = tmask(:,:,1) 1055 IF( .not. ln_mask_file ) THEN1056 ! If .not. ln_mask_file then we need to derive mask on U and V grid1057 ! from mask on T grid here.1058 bdyumask(:,:) = 0.e01059 bdyvmask(:,:) = 0.e01060 DO ij=1, jpjm11061 DO ii=1, jpim11062 bdyumask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii+1, ij )1063 bdyvmask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii ,ij+1)1064 END DO1065 END DO1066 CALL lbc_lnk( bdyumask(:,:), 'U', 1. ) ; CALL lbc_lnk( bdyvmask(:,:), 'V', 1. ) ! Lateral boundary cond.1067 ENDIF1068 1071 1069 1072 ! bdy masks and bmask are now set to zero on boundary points:
Note: See TracChangeset
for help on using the changeset viewer.