New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 4332 for branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90 – NEMO

Ignore:
Timestamp:
2013-12-11T15:38:42+01:00 (10 years ago)
Author:
clem
Message:

update LIM3 to fix remaining bugs. Now working in global and regional config.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90

    r3909 r4332  
    9696         &             nn_dyn3d, nn_dyn3d_dta, nn_tra, nn_tra_dta,         &   
    9797         &             ln_tra_dmp, ln_dyn3d_dmp, rn_time_dmp,              & 
    98 #if defined key_lim2 
    99          &             nn_ice_lim2, nn_ice_lim2_dta,                       & 
     98#if ( defined key_lim2 || defined key_lim3 ) 
     99         &             nn_ice_lim, nn_ice_lim_dta,                       & 
    100100#endif 
    101101         &             ln_vol, nn_volctl, nn_rimwidth 
     
    137137      ln_dyn3d_dmp(:)   = .false. 
    138138      rn_time_dmp(:)    = 1. 
    139 #if defined key_lim2 
    140       nn_ice_lim2(:)    = 0 
    141       nn_ice_lim2_dta(:)= -1  ! uninitialised flag 
     139#if ( defined key_lim2 || defined key_lim3 ) 
     140      nn_ice_lim(:)    = 0 
     141      nn_ice_lim_dta(:)= -1  ! uninitialised flag 
    142142#endif 
    143143      ln_vol            = .false. 
     
    161161 
    162162      DO ib_bdy = 1,nb_bdy 
     163        icount = 0 ! flag to set max rimwidth to 1 if no relaxation 
    163164        IF(lwp) WRITE(numout,*) ' '  
    164165        IF(lwp) WRITE(numout,*) '------ Open boundary data set ',ib_bdy,'------'  
     
    175176          CASE(jp_none)         ;   IF(lwp) WRITE(numout,*) '      no open boundary condition'         
    176177          CASE(jp_frs)          ;   IF(lwp) WRITE(numout,*) '      Flow Relaxation Scheme' 
     178          icount = icount + 1 
    177179          CASE(jp_flather)      ;   IF(lwp) WRITE(numout,*) '      Flather radiation condition' 
    178180          CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_dyn2d' ) 
     
    196198          CASE(jp_none)  ;   IF(lwp) WRITE(numout,*) '      no open boundary condition'         
    197199          CASE(jp_frs)   ;   IF(lwp) WRITE(numout,*) '      Flow Relaxation Scheme' 
     200          icount = icount + 1 
    198201          CASE( 2 )      ;   IF(lwp) WRITE(numout,*) '      Specified value' 
    199202          CASE( 3 )      ;   IF(lwp) WRITE(numout,*) '      Zero baroclinic velocities (runoff case)' 
     
    215218              CALL ctl_stop( 'Use FRS OR relaxation' ) 
    216219           ELSE 
     220              icount = icount + 1 
    217221              IF(lwp) WRITE(numout,*) '      + baroclinic velocities relaxation zone' 
    218222              IF(lwp) WRITE(numout,*) '      Damping time scale: ',rn_time_dmp(ib_bdy),' days' 
     
    228232          CASE(jp_none)  ;   IF(lwp) WRITE(numout,*) '      no open boundary condition'         
    229233          CASE(jp_frs)   ;   IF(lwp) WRITE(numout,*) '      Flow Relaxation Scheme' 
     234          icount = icount + 1 
    230235          CASE( 2 )      ;   IF(lwp) WRITE(numout,*) '      Specified value' 
    231236          CASE( 3 )      ;   IF(lwp) WRITE(numout,*) '      Neumann conditions' 
     
    248253              CALL ctl_stop( 'Use FRS OR relaxation' ) 
    249254           ELSE 
     255              icount = icount + 1 
    250256              IF(lwp) WRITE(numout,*) '      + T/S relaxation zone' 
    251257              IF(lwp) WRITE(numout,*) '      Damping time scale: ',rn_time_dmp(ib_bdy),' days' 
     
    257263        IF(lwp) WRITE(numout,*) 
    258264 
    259 #if defined key_lim2 
     265#if ( defined key_lim2 || defined key_lim3 ) 
    260266        IF(lwp) WRITE(numout,*) 'Boundary conditions for sea ice:  ' 
    261         SELECT CASE( nn_ice_lim2(ib_bdy) )                   
     267        SELECT CASE( nn_ice_lim(ib_bdy) )                   
    262268          CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '      no open boundary condition'         
    263269          CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '      Flow Relaxation Scheme' 
     270          icount = icount + 1 
    264271          CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_tra' ) 
    265272        END SELECT 
    266         IF( nn_ice_lim2(ib_bdy) .gt. 0 ) THEN  
    267            SELECT CASE( nn_ice_lim2_dta(ib_bdy) )                   !  
     273        IF( nn_ice_lim(ib_bdy) .gt. 0 ) THEN  
     274           SELECT CASE( nn_ice_lim_dta(ib_bdy) )                   !  
    268275              CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '      initial state used for bdy data'         
    269276              CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '      boundary data taken from file' 
    270               CASE DEFAULT   ;   CALL ctl_stop( 'nn_ice_lim2_dta must be 0 or 1' ) 
     277              CASE DEFAULT   ;   CALL ctl_stop( 'nn_ice_lim_dta must be 0 or 1' ) 
    271278           END SELECT 
    272279        ENDIF 
    273280        IF(lwp) WRITE(numout,*) 
    274281#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 
    278288 
    279289      ENDDO 
     
    387397            DO igrd = 1, jpbgrd 
    388398               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)) 
    391403            ENDDO 
    392404            CALL iom_close( inum ) 
    393  
    394405         ENDIF  
    395406 
     
    398409      IF (nb_bdy>0) THEN 
    399410         jpbdta = MAXVAL(nblendta(1:jpbgrd,1:nb_bdy)) 
    400  
    401411         ! Allocate arrays 
    402412         !--------------- 
     
    446456         ENDIF  
    447457 
    448       ENDDO       
     458      ENDDO      
    449459     
    450460      ! 2. Now fill indices corresponding to straight open boundary arrays: 
     
    752762               ! check if point is in local domain 
    753763               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       
    755766                  ! 
    756767                  icount = icount  + 1 
     
    765776         ! Allocate index arrays for this boundary set 
    766777         !-------------------------------------------- 
    767          ilen1 = MAXVAL(idx_bdy(ib_bdy)%nblen(:)) 
     778 
     779         ilen1 = MAXVAL(idx_bdy(ib_bdy)%nblen(1:jpbgrd)) 
     780         ilen1 = MAX(1,ilen1) 
    768781         ALLOCATE( idx_bdy(ib_bdy)%nbi(ilen1,jpbgrd) ) 
    769782         ALLOCATE( idx_bdy(ib_bdy)%nbj(ilen1,jpbgrd) ) 
     
    773786         ALLOCATE( idx_bdy(ib_bdy)%nbw(ilen1,jpbgrd) ) 
    774787         ALLOCATE( idx_bdy(ib_bdy)%flagu(ilen1) ) 
    775          ALLOCATE( idx_bdy(ib_bdy)%flagv(ilen1) ) 
     788         ALLOCATE( idx_bdy(ib_bdy)%flagv(ilen1) )       
    776789 
    777790         ! Dispatch mapping indices and discrete distances on each processor 
     
    10081021      ! bdytmask = 1  on the computational domain AND on open boundaries 
    10091022      !          = 0  elsewhere    
    1010   
     1023      bdytmask(:,:) = 1.e0 
     1024      bdyumask(:,:) = 1.e0 
     1025      bdyvmask(:,:) = 1.e0 
     1026 
    10111027      IF( ln_mask_file ) THEN 
    10121028         CALL iom_open( cn_mask_file, inum ) 
     
    10531069       
    10541070      bdytmask(:,:) = tmask(:,:,1) 
    1055       IF( .not. ln_mask_file ) THEN 
    1056          ! If .not. ln_mask_file then we need to derive mask on U and V grid  
    1057          ! from mask on T grid here. 
    1058          bdyumask(:,:) = 0.e0 
    1059          bdyvmask(:,:) = 0.e0 
    1060          DO ij=1, jpjm1 
    1061             DO ii=1, jpim1 
    1062                bdyumask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii+1, ij ) 
    1063                bdyvmask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii  ,ij+1)   
    1064             END DO 
    1065          END DO 
    1066          CALL lbc_lnk( bdyumask(:,:), 'U', 1. )   ;   CALL lbc_lnk( bdyvmask(:,:), 'V', 1. )      ! Lateral boundary cond. 
    1067       ENDIF 
    10681071 
    10691072      ! bdy masks and bmask are now set to zero on boundary points: 
Note: See TracChangeset for help on using the changeset viewer.