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 6140 for trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90 – NEMO

Ignore:
Timestamp:
2015-12-21T12:35:23+01:00 (8 years ago)
Author:
timgraham
Message:

Merge of branches/2015/dev_merge_2015 back into trunk. Merge excludes NEMOGCM/TOOLS/OBSTOOLS/ for now due to issues with the change of file type. Will sort these manually with further commits.

Branch merged as follows:
In the working copy of branch ran:
svn merge svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk@HEAD
Small conflicts due to bug fixes applied to trunk since the dev_merge_2015 was copied. Bug fixes were applied to the branch as well so these were easy to resolve.
Branch committed at this stage

In working copy run:
svn switch svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk
to switch working copy

Run:
svn merge --reintegrate svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2015/dev_merge_2015
to merge the branch into the trunk and then commit - no conflicts at this stage.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90

    r6125 r6140  
    1212   !!            3.4  !  2011     (D. Storkey) rewrite in preparation for OBC-BDY merge 
    1313   !!            3.4  !  2012     (J. Chanut) straight open boundary case update 
    14    !!            3.5  !  2012     (S. Mocavero, I. Epicoco) Updates for the  
    15    !!                             optimization of BDY communications 
     14   !!            3.5  !  2012     (S. Mocavero, I. Epicoco) optimization of BDY communications 
    1615   !!---------------------------------------------------------------------- 
    1716#if defined key_bdy 
     
    1918   !!   'key_bdy'                     Unstructured Open Boundary Conditions 
    2019   !!---------------------------------------------------------------------- 
    21    !!   bdy_init       : Initialization of unstructured open boundaries 
     20   !!   bdy_init      : Initialization of unstructured open boundaries 
    2221   !!---------------------------------------------------------------------- 
    23    USE wrk_nemo        ! Memory Allocation 
    24    USE timing          ! Timing 
    25    USE oce             ! ocean dynamics and tracers variables 
    26    USE dom_oce         ! ocean space and time domain 
    27    USE bdy_oce         ! unstructured open boundary conditions 
    28    USE in_out_manager  ! I/O units 
    29    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    30    USE lib_mpp         ! for mpp_sum   
    31    USE iom             ! I/O 
    32    USE sbctide, ONLY: lk_tide ! Tidal forcing or not 
    33    USE phycst, ONLY: rday 
     22   USE oce            ! ocean dynamics and tracers variables 
     23   USE dom_oce        ! ocean space and time domain 
     24   USE bdy_oce        ! unstructured open boundary conditions 
     25   USE sbctide  , ONLY: lk_tide ! Tidal forcing or not 
     26   USE phycst   , ONLY: rday 
     27   ! 
     28   USE in_out_manager ! I/O units 
     29   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     30   USE lib_mpp        ! for mpp_sum   
     31   USE iom            ! I/O 
     32   USE wrk_nemo       ! Memory Allocation 
     33   USE timing         ! Timing 
    3434 
    3535   IMPLICIT NONE 
     
    3838   PUBLIC   bdy_init   ! routine called in nemo_init 
    3939 
    40    INTEGER, PARAMETER          :: jp_nseg = 100 
    41    INTEGER, PARAMETER          :: nrimmax = 20 ! maximum rimwidth in structured 
     40   INTEGER, PARAMETER ::   jp_nseg = 100   !  
     41   INTEGER, PARAMETER ::   nrimmax =  20  ! maximum rimwidth in structured 
    4242                                               ! open boundary data files 
    4343   ! Straight open boundary segment parameters: 
    44    INTEGER  :: nbdysege, nbdysegw, nbdysegn, nbdysegs  
    45    INTEGER, DIMENSION(jp_nseg) :: jpieob, jpjedt, jpjeft, npckge 
    46    INTEGER, DIMENSION(jp_nseg) :: jpiwob, jpjwdt, jpjwft, npckgw 
    47    INTEGER, DIMENSION(jp_nseg) :: jpjnob, jpindt, jpinft, npckgn 
    48    INTEGER, DIMENSION(jp_nseg) :: jpjsob, jpisdt, jpisft, npckgs 
     44   INTEGER  ::   nbdysege, nbdysegw, nbdysegn, nbdysegs  
     45   INTEGER, DIMENSION(jp_nseg) ::   jpieob, jpjedt, jpjeft, npckge   ! 
     46   INTEGER, DIMENSION(jp_nseg) ::   jpiwob, jpjwdt, jpjwft, npckgw   ! 
     47   INTEGER, DIMENSION(jp_nseg) ::   jpjnob, jpindt, jpinft, npckgn   ! 
     48   INTEGER, DIMENSION(jp_nseg) ::   jpjsob, jpisdt, jpisft, npckgs   ! 
    4949   !!---------------------------------------------------------------------- 
    50    !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
     50   !! NEMO/OPA 3.7 , NEMO Consortium (2015) 
    5151   !! $Id$  
    5252   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    6666      !! ** Input   :  bdy_init.nc, input file for unstructured open boundaries 
    6767      !!----------------------------------------------------------------------       
    68       ! namelist variables 
    69       !------------------- 
    70       CHARACTER(LEN=80),DIMENSION(jpbgrd)  ::   clfile 
    71       CHARACTER(LEN=1)   ::   ctypebdy 
    72       INTEGER :: nbdyind, nbdybeg, nbdyend 
    7368 
    7469      ! local variables 
     
    8176      INTEGER  ::   ib_bdy1, ib_bdy2, ib1, ib2             !   -       - 
    8277      INTEGER  ::   i_offset, j_offset                     !   -       - 
    83       INTEGER, POINTER  ::  nbi, nbj, nbr                  ! short cuts 
     78      INTEGER , POINTER  ::  nbi, nbj, nbr                 ! short cuts 
    8479      REAL(wp), POINTER  ::  flagu, flagv                  !    -   - 
    8580      REAL(wp), POINTER, DIMENSION(:,:)       ::   pmask    ! pointer to 2D mask fields 
     
    9489      INTEGER :: iw_b(4), ie_b(4), is_b(4), in_b(4)                ! Arrays for neighbours coordinates 
    9590      REAL(wp), POINTER, DIMENSION(:,:)       ::   zfmask  ! temporary fmask array excluding coastal boundary condition (shlat) 
    96  
     91      !! 
     92      CHARACTER(LEN=80),DIMENSION(jpbgrd)  ::   clfile     ! Namelist variables 
     93      CHARACTER(LEN=1)                     ::   ctypebdy   !     -        -  
     94      INTEGER                              ::   nbdyind, nbdybeg, nbdyend 
    9795      !! 
    9896      NAMELIST/nambdy/ nb_bdy, ln_coords_file, cn_coords_file,                 & 
     
    103101         &             rn_ice_tem, rn_ice_sal, rn_ice_age,                 & 
    104102         &             ln_vol, nn_volctl, nn_rimwidth 
    105       !! 
     103         ! 
    106104      NAMELIST/nambdy_index/ ctypebdy, nbdyind, nbdybeg, nbdyend 
    107105      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    108106      !!---------------------------------------------------------------------- 
    109  
    110       IF( nn_timing == 1 ) CALL timing_start('bdy_init') 
    111  
     107      ! 
     108      IF( nn_timing == 1 )   CALL timing_start('bdy_init') 
     109      ! 
    112110      IF(lwp) WRITE(numout,*) 
    113111      IF(lwp) WRITE(numout,*) 'bdy_init : initialization of open boundaries' 
    114112      IF(lwp) WRITE(numout,*) '~~~~~~~~' 
    115113      ! 
    116  
    117114      IF( jperio /= 0 )   CALL ctl_stop( 'Cyclic or symmetric,',   & 
    118115         &                               ' and general open boundary condition are not compatible' ) 
    119116 
    120       cgrid= (/'t','u','v'/) 
     117      cgrid = (/'t','u','v'/) 
    121118       
    122119      ! ------------------------ 
    123120      ! Read namelist parameters 
    124121      ! ------------------------ 
    125  
    126122      REWIND( numnam_ref )              ! Namelist nambdy in reference namelist :Unstructured open boundaries   
    127123      READ  ( numnam_ref, nambdy, IOSTAT = ios, ERR = 901) 
    128 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy in reference namelist', lwp ) 
    129  
     124901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nambdy in reference namelist', lwp ) 
     125      ! 
    130126      REWIND( numnam_cfg )              ! Namelist nambdy in configuration namelist :Unstructured open boundaries 
    131127      READ  ( numnam_cfg, nambdy, IOSTAT = ios, ERR = 902 ) 
    132 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy in configuration namelist', lwp ) 
     128902   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nambdy in configuration namelist', lwp ) 
    133129      IF(lwm) WRITE ( numond, nambdy ) 
    134130 
     
    137133      ! ----------------------------------------- 
    138134      !                                   ! control prints 
    139       IF(lwp) WRITE(numout,*) '         nambdy' 
    140  
    141       IF( nb_bdy .eq. 0 ) THEN  
     135      IF(lwp) WRITE(numout,*) '   nambdy' 
     136 
     137      IF( nb_bdy == 0 ) THEN  
    142138        IF(lwp) WRITE(numout,*) 'nb_bdy = 0, NO OPEN BOUNDARIES APPLIED.' 
    143139      ELSE 
    144         IF(lwp) WRITE(numout,*) 'Number of open boundary sets : ',nb_bdy 
     140        IF(lwp) WRITE(numout,*) 'Number of open boundary sets : ', nb_bdy 
    145141      ENDIF 
    146142 
     
    158154        IF(lwp) WRITE(numout,*) 'Boundary conditions for barotropic solution:  ' 
    159155        SELECT CASE( cn_dyn2d(ib_bdy) )                   
    160           CASE('none')          
     156          CASE( 'none' )          
    161157             IF(lwp) WRITE(numout,*) '      no open boundary condition'         
    162158             dta_bdy(ib_bdy)%ll_ssh = .false. 
    163159             dta_bdy(ib_bdy)%ll_u2d = .false. 
    164160             dta_bdy(ib_bdy)%ll_v2d = .false. 
    165           CASE('frs')           
     161          CASE( 'frs' )           
    166162             IF(lwp) WRITE(numout,*) '      Flow Relaxation Scheme' 
    167163             dta_bdy(ib_bdy)%ll_ssh = .false. 
    168164             dta_bdy(ib_bdy)%ll_u2d = .true. 
    169165             dta_bdy(ib_bdy)%ll_v2d = .true. 
    170           CASE('flather')       
     166          CASE( 'flather' )       
    171167             IF(lwp) WRITE(numout,*) '      Flather radiation condition' 
    172168             dta_bdy(ib_bdy)%ll_ssh = .true. 
    173169             dta_bdy(ib_bdy)%ll_u2d = .true. 
    174170             dta_bdy(ib_bdy)%ll_v2d = .true. 
    175           CASE('orlanski')      
     171          CASE( 'orlanski' )      
    176172             IF(lwp) WRITE(numout,*) '      Orlanski (fully oblique) radiation condition with adaptive nudging' 
    177173             dta_bdy(ib_bdy)%ll_ssh = .false. 
    178174             dta_bdy(ib_bdy)%ll_u2d = .true. 
    179175             dta_bdy(ib_bdy)%ll_v2d = .true. 
    180           CASE('orlanski_npo')  
     176          CASE( 'orlanski_npo' )  
    181177             IF(lwp) WRITE(numout,*) '      Orlanski (NPO) radiation condition with adaptive nudging' 
    182178             dta_bdy(ib_bdy)%ll_ssh = .false. 
     
    392388      REWIND( numnam_cfg )      
    393389 
    394       !!---------------------------------------------------------------------- 
    395  
    396                
    397                 
    398390      nblendta(:,:) = 0 
    399391      nbdysege = 0 
     
    492484               nblendta(igrd,ib_bdy) = MAXVAL(kdimsz) 
    493485               jpbdtau = MAX(jpbdtau, MAXVAL(kdimsz)) 
    494             ENDDO 
     486            END DO 
    495487            CALL iom_close( inum ) 
    496  
     488            ! 
    497489         ENDIF  
    498  
    499       ENDDO ! ib_bdy 
     490         ! 
     491      END DO ! ib_bdy 
    500492 
    501493      IF (nb_bdy>0) THEN 
     
    514506      ! Now look for crossings in user (namelist) defined open boundary segments: 
    515507      !-------------------------------------------------------------------------- 
    516       IF ( icount>0 ) CALL bdy_ctl_seg 
     508      IF( icount>0 )  CALL bdy_ctl_seg 
    517509 
    518510      ! Calculate global boundary index arrays or read in from file 
     
    520512      ! 1. Read global index arrays from boundary coordinates file. 
    521513      DO ib_bdy = 1, nb_bdy 
    522  
     514         ! 
    523515         IF( ln_coords_file(ib_bdy) ) THEN 
    524  
     516            ! 
    525517            CALL iom_open( cn_coords_file(ib_bdy), inum ) 
    526518            DO igrd = 1, jpbgrd 
     
    537529                  nbrdta(ii,igrd,ib_bdy) = INT( dta_global(ii,1,1) ) 
    538530               END DO 
    539  
     531               ! 
    540532               ibr_max = MAXVAL( nbrdta(:,igrd,ib_bdy) ) 
    541533               IF(lwp) WRITE(numout,*) 
     
    546538            END DO 
    547539            CALL iom_close( inum ) 
    548  
     540            ! 
    549541         ENDIF  
    550  
    551       ENDDO       
     542         ! 
     543      END DO       
    552544     
    553545      ! 2. Now fill indices corresponding to straight open boundary arrays: 
     
    792784 
    793785      ! Work out dimensions of boundary data on each neighbour process 
    794       IF(nbondi .eq. 0) THEN 
     786      IF(nbondi == 0) THEN 
    795787         iw_b(1) = jpizoom + nimppt(nowe+1) 
    796788         ie_b(1) = jpizoom + nimppt(nowe+1)+nlcit(nowe+1)-3 
     
    802794         is_b(2) = jpjzoom + njmppt(noea+1) 
    803795         in_b(2) = jpjzoom + njmppt(noea+1)+nlcjt(noea+1)-3 
    804       ELSEIF(nbondi .eq. 1) THEN 
     796      ELSEIF(nbondi == 1) THEN 
    805797         iw_b(1) = jpizoom + nimppt(nowe+1) 
    806798         ie_b(1) = jpizoom + nimppt(nowe+1)+nlcit(nowe+1)-3 
    807799         is_b(1) = jpjzoom + njmppt(nowe+1) 
    808800         in_b(1) = jpjzoom + njmppt(nowe+1)+nlcjt(nowe+1)-3 
    809       ELSEIF(nbondi .eq. -1) THEN 
     801      ELSEIF(nbondi == -1) THEN 
    810802         iw_b(2) = jpizoom + nimppt(noea+1) 
    811803         ie_b(2) = jpizoom + nimppt(noea+1)+nlcit(noea+1)-3 
     
    814806      ENDIF 
    815807 
    816       IF(nbondj .eq. 0) THEN 
     808      IF(nbondj == 0) THEN 
    817809         iw_b(3) = jpizoom + nimppt(noso+1) 
    818810         ie_b(3) = jpizoom + nimppt(noso+1)+nlcit(noso+1)-3 
     
    824816         is_b(4) = jpjzoom + njmppt(nono+1) 
    825817         in_b(4) = jpjzoom + njmppt(nono+1)+nlcjt(nono+1)-3 
    826       ELSEIF(nbondj .eq. 1) THEN 
     818      ELSEIF(nbondj == 1) THEN 
    827819         iw_b(3) = jpizoom + nimppt(noso+1) 
    828820         ie_b(3) = jpizoom + nimppt(noso+1)+nlcit(noso+1)-3 
    829821         is_b(3) = jpjzoom + njmppt(noso+1) 
    830822         in_b(3) = jpjzoom + njmppt(noso+1)+nlcjt(noso+1)-3 
    831       ELSEIF(nbondj .eq. -1) THEN 
     823      ELSEIF(nbondj == -1) THEN 
    832824         iw_b(4) = jpizoom + nimppt(nono+1) 
    833825         ie_b(4) = jpizoom + nimppt(nono+1)+nlcit(nono+1)-3 
     
    867859         ! Allocate index arrays for this boundary set 
    868860         !-------------------------------------------- 
    869          ilen1 = MAXVAL(idx_bdy(ib_bdy)%nblen(:)) 
    870          ALLOCATE( idx_bdy(ib_bdy)%nbi(ilen1,jpbgrd) ) 
    871          ALLOCATE( idx_bdy(ib_bdy)%nbj(ilen1,jpbgrd) ) 
    872          ALLOCATE( idx_bdy(ib_bdy)%nbr(ilen1,jpbgrd) ) 
    873          ALLOCATE( idx_bdy(ib_bdy)%nbd(ilen1,jpbgrd) ) 
     861         ilen1 = MAXVAL( idx_bdy(ib_bdy)%nblen(:) ) 
     862         ALLOCATE( idx_bdy(ib_bdy)%nbi   (ilen1,jpbgrd) ) 
     863         ALLOCATE( idx_bdy(ib_bdy)%nbj   (ilen1,jpbgrd) ) 
     864         ALLOCATE( idx_bdy(ib_bdy)%nbr   (ilen1,jpbgrd) ) 
     865         ALLOCATE( idx_bdy(ib_bdy)%nbd   (ilen1,jpbgrd) ) 
    874866         ALLOCATE( idx_bdy(ib_bdy)%nbdout(ilen1,jpbgrd) ) 
    875          ALLOCATE( idx_bdy(ib_bdy)%nbmap(ilen1,jpbgrd) ) 
    876          ALLOCATE( idx_bdy(ib_bdy)%nbw(ilen1,jpbgrd) ) 
    877          ALLOCATE( idx_bdy(ib_bdy)%flagu(ilen1,jpbgrd) ) 
    878          ALLOCATE( idx_bdy(ib_bdy)%flagv(ilen1,jpbgrd) ) 
     867         ALLOCATE( idx_bdy(ib_bdy)%nbmap (ilen1,jpbgrd) ) 
     868         ALLOCATE( idx_bdy(ib_bdy)%nbw   (ilen1,jpbgrd) ) 
     869         ALLOCATE( idx_bdy(ib_bdy)%flagu (ilen1,jpbgrd) ) 
     870         ALLOCATE( idx_bdy(ib_bdy)%flagv (ilen1,jpbgrd) ) 
    879871 
    880872         ! Dispatch mapping indices and discrete distances on each processor 
    881873         ! ----------------------------------------------------------------- 
    882874 
    883          com_east = 0 
    884          com_west = 0 
     875         com_east  = 0 
     876         com_west  = 0 
    885877         com_south = 0 
    886878         com_north = 0 
    887879 
    888          com_east_b = 0 
    889          com_west_b = 0 
     880         com_east_b  = 0 
     881         com_west_b  = 0 
    890882         com_south_b = 0 
    891883         com_north_b = 0 
     
    912904                     ii = idx_bdy(ib_bdy)%nbi(icount,igrd) 
    913905                     ij = idx_bdy(ib_bdy)%nbj(icount,igrd) 
    914                      if((com_east .ne. 1) .and. (ii .eq. (nlci-1)) .and. (nbondi .le. 0)) then 
     906                     if((com_east .ne. 1) .and. (ii == (nlci-1)) .and. (nbondi .le. 0)) then 
    915907                        com_east = 1 
    916                      elseif((com_west .ne. 1) .and. (ii .eq. 2) .and. (nbondi .ge. 0) .and. (nbondi .ne. 2)) then 
     908                     elseif((com_west .ne. 1) .and. (ii == 2) .and. (nbondi .ge. 0) .and. (nbondi .ne. 2)) then 
    917909                        com_west = 1 
    918910                     endif  
    919                      if((com_south .ne. 1) .and. (ij .eq. 2) .and. (nbondj .ge. 0) .and. (nbondj .ne. 2)) then 
     911                     if((com_south .ne. 1) .and. (ij == 2) .and. (nbondj .ge. 0) .and. (nbondj .ne. 2)) then 
    920912                        com_south = 1 
    921                      elseif((com_north .ne. 1) .and. (ij .eq. (nlcj-1)) .and. (nbondj .le. 0)) then 
     913                     elseif((com_north .ne. 1) .and. (ij == (nlcj-1)) .and. (nbondj .le. 0)) then 
    922914                        com_north = 1 
    923915                     endif  
     
    926918                  ENDIF 
    927919                  ! check if point has to be received from a neighbour 
    928                   IF(nbondi .eq. 0) THEN 
     920                  IF(nbondi == 0) THEN 
    929921                     IF( nbidta(ib,igrd,ib_bdy) >= iw_b(1) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(1) .AND.   & 
    930922                       & nbjdta(ib,igrd,ib_bdy) >= is_b(1) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(1) .AND.   & 
    931923                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    932924                       ii = nbidta(ib,igrd,ib_bdy)- iw_b(1)+2 
    933                        if((com_west_b .ne. 1) .and. (ii .eq. (nlcit(nowe+1)-1))) then 
     925                       if((com_west_b .ne. 1) .and. (ii == (nlcit(nowe+1)-1))) then 
    934926                          ij = nbjdta(ib,igrd,ib_bdy) - is_b(1)+2 
    935                           if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 
     927                          if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    936928                            com_south = 1 
    937                           elseif((ij .eq. nlcjt(nowe+1)-1) .and. (nbondj .eq. 0 .or. nbondj .eq. -1)) then 
     929                          elseif((ij == nlcjt(nowe+1)-1) .and. (nbondj == 0 .or. nbondj == -1)) then 
    938930                            com_north = 1 
    939931                          endif 
     
    945937                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    946938                       ii = nbidta(ib,igrd,ib_bdy)- iw_b(2)+2 
    947                        if((com_east_b .ne. 1) .and. (ii .eq. 2)) then 
     939                       if((com_east_b .ne. 1) .and. (ii == 2)) then 
    948940                          ij = nbjdta(ib,igrd,ib_bdy) - is_b(2)+2 
    949                           if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 
     941                          if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    950942                            com_south = 1 
    951                           elseif((ij .eq. nlcjt(noea+1)-1) .and. (nbondj .eq. 0 .or. nbondj .eq. -1)) then 
     943                          elseif((ij == nlcjt(noea+1)-1) .and. (nbondj == 0 .or. nbondj == -1)) then 
    952944                            com_north = 1 
    953945                          endif 
     
    955947                       endif  
    956948                     ENDIF 
    957                   ELSEIF(nbondi .eq. 1) THEN 
     949                  ELSEIF(nbondi == 1) THEN 
    958950                     IF( nbidta(ib,igrd,ib_bdy) >= iw_b(1) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(1) .AND.   & 
    959951                       & nbjdta(ib,igrd,ib_bdy) >= is_b(1) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(1) .AND.   & 
    960952                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    961953                       ii = nbidta(ib,igrd,ib_bdy)- iw_b(1)+2 
    962                        if((com_west_b .ne. 1) .and. (ii .eq. (nlcit(nowe+1)-1))) then 
     954                       if((com_west_b .ne. 1) .and. (ii == (nlcit(nowe+1)-1))) then 
    963955                          ij = nbjdta(ib,igrd,ib_bdy) - is_b(1)+2 
    964                           if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 
     956                          if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    965957                            com_south = 1 
    966                           elseif((ij .eq. nlcjt(nowe+1)-1) .and. (nbondj .eq. 0 .or. nbondj .eq. -1)) then 
     958                          elseif((ij == nlcjt(nowe+1)-1) .and. (nbondj == 0 .or. nbondj == -1)) then 
    967959                            com_north = 1 
    968960                          endif 
     
    970962                       endif  
    971963                     ENDIF 
    972                   ELSEIF(nbondi .eq. -1) THEN 
     964                  ELSEIF(nbondi == -1) THEN 
    973965                     IF( nbidta(ib,igrd,ib_bdy) >= iw_b(2) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(2) .AND.   & 
    974966                       & nbjdta(ib,igrd,ib_bdy) >= is_b(2) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(2) .AND.   & 
    975967                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    976968                       ii = nbidta(ib,igrd,ib_bdy)- iw_b(2)+2 
    977                        if((com_east_b .ne. 1) .and. (ii .eq. 2)) then 
     969                       if((com_east_b .ne. 1) .and. (ii == 2)) then 
    978970                          ij = nbjdta(ib,igrd,ib_bdy) - is_b(2)+2 
    979                           if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 
     971                          if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    980972                            com_south = 1 
    981                           elseif((ij .eq. nlcjt(noea+1)-1) .and. (nbondj .eq. 0 .or. nbondj .eq. -1)) then 
     973                          elseif((ij == nlcjt(noea+1)-1) .and. (nbondj == 0 .or. nbondj == -1)) then 
    982974                            com_north = 1 
    983975                          endif 
     
    986978                     ENDIF 
    987979                  ENDIF 
    988                   IF(nbondj .eq. 0) THEN 
     980                  IF(nbondj == 0) THEN 
    989981                     IF(com_north_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(4)-1  & 
    990982                       & .OR. nbidta(ib,igrd,ib_bdy) == ie_b(4)+1) .AND. & 
     
    1001993                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    1002994                       ij = nbjdta(ib,igrd,ib_bdy)- is_b(3)+2 
    1003                        if((com_south_b .ne. 1) .and. (ij .eq. (nlcjt(noso+1)-1))) then 
     995                       if((com_south_b .ne. 1) .and. (ij == (nlcjt(noso+1)-1))) then 
    1004996                          com_south_b = 1 
    1005997                       endif  
     
    10091001                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    10101002                       ij = nbjdta(ib,igrd,ib_bdy)- is_b(4)+2 
    1011                        if((com_north_b .ne. 1) .and. (ij .eq. 2)) then 
     1003                       if((com_north_b .ne. 1) .and. (ij == 2)) then 
    10121004                          com_north_b = 1 
    10131005                       endif  
    10141006                     ENDIF 
    1015                   ELSEIF(nbondj .eq. 1) THEN 
     1007                  ELSEIF(nbondj == 1) THEN 
    10161008                     IF( com_south_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(3)-1 .OR. & 
    10171009                       & nbidta(ib,igrd,ib_bdy) == ie_b(3)+1) .AND. & 
     
    10231015                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    10241016                       ij = nbjdta(ib,igrd,ib_bdy)- is_b(3)+2 
    1025                        if((com_south_b .ne. 1) .and. (ij .eq. (nlcjt(noso+1)-1))) then 
     1017                       if((com_south_b .ne. 1) .and. (ij == (nlcjt(noso+1)-1))) then 
    10261018                          com_south_b = 1 
    10271019                       endif  
    10281020                     ENDIF 
    1029                   ELSEIF(nbondj .eq. -1) THEN 
     1021                  ELSEIF(nbondj == -1) THEN 
    10301022                     IF(com_north_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(4)-1  & 
    10311023                       & .OR. nbidta(ib,igrd,ib_bdy) == ie_b(4)+1) .AND. & 
     
    10371029                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    10381030                       ij = nbjdta(ib,igrd,ib_bdy)- is_b(4)+2 
    1039                        if((com_north_b .ne. 1) .and. (ij .eq. 2)) then 
     1031                       if((com_north_b .ne. 1) .and. (ij == 2)) then 
    10401032                          com_north_b = 1 
    10411033                       endif  
     
    10461038         ENDDO  
    10471039 
    1048          ! definition of the i- and j- direction local boundaries arrays 
    1049          ! used for sending the boudaries 
    1050          IF((com_east .eq. 1) .and. (com_west .eq. 1)) THEN 
    1051             nbondi_bdy(ib_bdy) = 0 
    1052          ELSEIF ((com_east .eq. 1) .and. (com_west .eq. 0)) THEN 
    1053             nbondi_bdy(ib_bdy) = -1 
    1054          ELSEIF ((com_east .eq. 0) .and. (com_west .eq. 1)) THEN 
    1055             nbondi_bdy(ib_bdy) = 1 
     1040         ! definition of the i- and j- direction local boundaries arrays used for sending the boundaries 
     1041         IF(     (com_east  == 1) .and. (com_west  == 1) ) THEN   ;   nbondi_bdy(ib_bdy) =  0 
     1042         ELSEIF( (com_east  == 1) .and. (com_west  == 0) ) THEN   ;   nbondi_bdy(ib_bdy) = -1 
     1043         ELSEIF( (com_east  == 0) .and. (com_west  == 1) ) THEN   ;   nbondi_bdy(ib_bdy) =  1 
    10561044         ENDIF 
    1057  
    1058          IF((com_north .eq. 1) .and. (com_south .eq. 1)) THEN 
    1059             nbondj_bdy(ib_bdy) = 0 
    1060          ELSEIF ((com_north .eq. 1) .and. (com_south .eq. 0)) THEN 
    1061             nbondj_bdy(ib_bdy) = -1 
    1062          ELSEIF ((com_north .eq. 0) .and. (com_south .eq. 1)) THEN 
    1063             nbondj_bdy(ib_bdy) = 1 
     1045         IF(     (com_north == 1) .and. (com_south == 1) ) THEN   ;   nbondj_bdy(ib_bdy) =  0 
     1046         ELSEIF( (com_north == 1) .and. (com_south == 0) ) THEN   ;   nbondj_bdy(ib_bdy) = -1 
     1047         ELSEIF( (com_north == 0) .and. (com_south == 1) ) THEN   ;   nbondj_bdy(ib_bdy) =  1 
    10641048         ENDIF 
    10651049 
    1066          ! definition of the i- and j- direction local boundaries arrays 
    1067          ! used for receiving the boudaries 
    1068          IF((com_east_b .eq. 1) .and. (com_west_b .eq. 1)) THEN 
    1069             nbondi_bdy_b(ib_bdy) = 0 
    1070          ELSEIF ((com_east_b .eq. 1) .and. (com_west_b .eq. 0)) THEN 
    1071             nbondi_bdy_b(ib_bdy) = -1 
    1072          ELSEIF ((com_east_b .eq. 0) .and. (com_west_b .eq. 1)) THEN 
    1073             nbondi_bdy_b(ib_bdy) = 1 
     1050         ! definition of the i- and j- direction local boundaries arrays used for receiving the boundaries 
     1051         IF(     (com_east_b  == 1) .and. (com_west_b  == 1) ) THEN   ;   nbondi_bdy_b(ib_bdy) =  0 
     1052         ELSEIF( (com_east_b  == 1) .and. (com_west_b  == 0) ) THEN   ;   nbondi_bdy_b(ib_bdy) = -1 
     1053         ELSEIF( (com_east_b  == 0) .and. (com_west_b  == 1) ) THEN   ;   nbondi_bdy_b(ib_bdy) =  1 
    10741054         ENDIF 
    1075  
    1076          IF((com_north_b .eq. 1) .and. (com_south_b .eq. 1)) THEN 
    1077             nbondj_bdy_b(ib_bdy) = 0 
    1078          ELSEIF ((com_north_b .eq. 1) .and. (com_south_b .eq. 0)) THEN 
    1079             nbondj_bdy_b(ib_bdy) = -1 
    1080          ELSEIF ((com_north_b .eq. 0) .and. (com_south_b .eq. 1)) THEN 
    1081             nbondj_bdy_b(ib_bdy) = 1 
     1055         IF(     (com_north_b == 1) .and. (com_south_b == 1) ) THEN   ;   nbondj_bdy_b(ib_bdy) =  0 
     1056         ELSEIF( (com_north_b == 1) .and. (com_south_b == 0) ) THEN   ;   nbondj_bdy_b(ib_bdy) = -1 
     1057         ELSEIF( (com_north_b == 0) .and. (com_south_b == 1) ) THEN   ;   nbondj_bdy_b(ib_bdy) =  1 
    10821058         ENDIF 
    10831059 
     
    10871063            DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    10881064               nbr => idx_bdy(ib_bdy)%nbr(ib,igrd) 
    1089                idx_bdy(ib_bdy)%nbw(ib,igrd) = 1.- TANH( FLOAT( nbr - 1 ) *0.5 )      ! tanh formulation 
    1090 !               idx_bdy(ib_bdy)%nbw(ib,igrd) = (FLOAT(nn_rimwidth(ib_bdy)+1-nbr)/FLOAT(nn_rimwidth(ib_bdy)))**2.  ! quadratic 
    1091 !               idx_bdy(ib_bdy)%nbw(ib,igrd) =  FLOAT(nn_rimwidth(ib_bdy)+1-nbr)/FLOAT(nn_rimwidth(ib_bdy))       ! linear 
     1065               idx_bdy(ib_bdy)%nbw(ib,igrd) = 1.- TANH( REAL( nbr - 1 ) *0.5 )      ! tanh formulation 
     1066!               idx_bdy(ib_bdy)%nbw(ib,igrd) = (REAL(nn_rimwidth(ib_bdy)+1-nbr)/REAL(nn_rimwidth(ib_bdy)))**2.  ! quadratic 
     1067!               idx_bdy(ib_bdy)%nbw(ib,igrd) =  REAL(nn_rimwidth(ib_bdy)+1-nbr)/REAL(nn_rimwidth(ib_bdy))       ! linear 
    10921068            END DO 
    10931069         END DO  
     
    10991075               nbr => idx_bdy(ib_bdy)%nbr(ib,igrd) 
    11001076               idx_bdy(ib_bdy)%nbd(ib,igrd) = 1. / ( rn_time_dmp(ib_bdy) * rday ) &  
    1101                & *(FLOAT(nn_rimwidth(ib_bdy)+1-nbr)/FLOAT(nn_rimwidth(ib_bdy)))**2.   ! quadratic 
     1077               & *(REAL(nn_rimwidth(ib_bdy)+1-nbr)/REAL(nn_rimwidth(ib_bdy)))**2.   ! quadratic 
    11021078               idx_bdy(ib_bdy)%nbdout(ib,igrd) = 1. / ( rn_time_dmp_out(ib_bdy) * rday ) &  
    1103                & *(FLOAT(nn_rimwidth(ib_bdy)+1-nbr)/FLOAT(nn_rimwidth(ib_bdy)))**2.   ! quadratic 
     1079               & *(REAL(nn_rimwidth(ib_bdy)+1-nbr)/REAL(nn_rimwidth(ib_bdy)))**2.   ! quadratic 
    11041080            END DO 
    11051081         END DO  
     
    11221098 
    11231099         ! Derive mask on U and V grid from mask on T grid 
    1124          bdyumask(:,:) = 0.e0 
    1125          bdyvmask(:,:) = 0.e0 
     1100         bdyumask(:,:) = 0._wp 
     1101         bdyvmask(:,:) = 0._wp 
    11261102         DO ij=1, jpjm1 
    11271103            DO ii=1, jpim1 
    1128                bdyumask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii+1, ij ) 
    1129                bdyvmask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii  ,ij+1)   
     1104               bdyumask(ii,ij) = bdytmask(ii,ij) * bdytmask(ii+1, ij ) 
     1105               bdyvmask(ii,ij) = bdytmask(ii,ij) * bdytmask(ii  ,ij+1)   
    11301106            END DO 
    11311107         END DO 
     
    11431119               END DO       
    11441120            END DO 
    1145          END DO 
    1146  
    1147          DO ik = 1, jpkm1 
    11481121            DO ij = 2, jpjm1 
    11491122               DO ii = 2, jpim1 
     
    11531126            END DO 
    11541127         END DO 
    1155  
    11561128         tmask_i (:,:) = ssmask(:,:) * tmask_i(:,:) 
    1157  
     1129         ! 
    11581130      ENDIF ! ln_mask_file=.TRUE. 
    11591131       
    11601132      bdytmask(:,:) = ssmask(:,:) 
    1161       IF( .not. ln_mask_file ) THEN 
    1162          ! If .not. ln_mask_file then we need to derive mask on U and V grid  
    1163          ! from mask on T grid here. 
    1164          bdyumask(:,:) = 0.e0 
    1165          bdyvmask(:,:) = 0.e0 
    1166          DO ij=1, jpjm1 
    1167             DO ii=1, jpim1 
    1168                bdyumask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii+1, ij ) 
    1169                bdyvmask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii  ,ij+1)   
     1133      IF( .NOT.ln_mask_file ) THEN 
     1134         ! If .not. ln_mask_file then we need to derive mask on U and V grid from mask on T grid here. 
     1135         bdyumask(:,:) = 0._wp 
     1136         bdyvmask(:,:) = 0._wp 
     1137         DO ij = 1, jpjm1 
     1138            DO ii = 1, jpim1 
     1139               bdyumask(ii,ij) = bdytmask(ii,ij) * bdytmask(ii+1, ij ) 
     1140               bdyvmask(ii,ij) = bdytmask(ii,ij) * bdytmask(ii  ,ij+1)   
    11701141            END DO 
    11711142         END DO 
     
    11781149      DO ib_bdy = 1, nb_bdy 
    11791150        DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd)       
    1180           bdytmask(idx_bdy(ib_bdy)%nbi(ib,igrd), idx_bdy(ib_bdy)%nbj(ib,igrd)) = 0.e0 
    1181         ENDDO 
    1182       ENDDO 
     1151          bdytmask(idx_bdy(ib_bdy)%nbi(ib,igrd), idx_bdy(ib_bdy)%nbj(ib,igrd)) = 0._wp 
     1152        END DO 
     1153      END DO 
    11831154      ! 
    11841155      igrd = 2 
    11851156      DO ib_bdy = 1, nb_bdy 
    11861157        DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    1187           bdyumask(idx_bdy(ib_bdy)%nbi(ib,igrd), idx_bdy(ib_bdy)%nbj(ib,igrd)) = 0.e0 
    1188         ENDDO 
    1189       ENDDO 
     1158          bdyumask(idx_bdy(ib_bdy)%nbi(ib,igrd), idx_bdy(ib_bdy)%nbj(ib,igrd)) = 0._wp 
     1159        END DO 
     1160      END DO 
    11901161      ! 
    11911162      igrd = 3 
    11921163      DO ib_bdy = 1, nb_bdy 
    11931164        DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    1194           bdyvmask(idx_bdy(ib_bdy)%nbi(ib,igrd), idx_bdy(ib_bdy)%nbj(ib,igrd)) = 0.e0 
     1165          bdyvmask(idx_bdy(ib_bdy)%nbi(ib,igrd), idx_bdy(ib_bdy)%nbj(ib,igrd)) = 0._wp 
    11951166        ENDDO 
    11961167      ENDDO 
     
    11981169      ! For the flagu/flagv calculation below we require a version of fmask without 
    11991170      ! the land boundary condition (shlat) included: 
    1200       CALL wrk_alloc(jpi,jpj,zfmask)  
     1171      CALL wrk_alloc(jpi,jpj,  zfmask )  
    12011172      DO ij = 2, jpjm1 
    12021173         DO ii = 2, jpim1 
     
    12131184      DO ib_bdy = 1, nb_bdy       ! Indices and directions of rim velocity components 
    12141185 
    1215          idx_bdy(ib_bdy)%flagu(:,:) = 0.e0 
    1216          idx_bdy(ib_bdy)%flagv(:,:) = 0.e0 
     1186         idx_bdy(ib_bdy)%flagu(:,:) = 0._wp 
     1187         idx_bdy(ib_bdy)%flagv(:,:) = 0._wp 
    12171188         icount = 0  
    12181189 
     
    12241195         DO igrd = 1,jpbgrd  
    12251196            SELECT CASE( igrd ) 
    1226                CASE( 1 ) 
    1227                   pmask => umask(:,:,1) 
    1228                   i_offset = 0 
    1229                CASE( 2 )  
    1230                   pmask => bdytmask 
    1231                   i_offset = 1 
    1232                CASE( 3 )  
    1233                   pmask => zfmask(:,:) 
    1234                   i_offset = 0 
     1197               CASE( 1 )   ;   pmask => umask   (:,:,1)   ;   i_offset = 0 
     1198               CASE( 2 )   ;   pmask => bdytmask(:,:)     ;   i_offset = 1 
     1199               CASE( 3 )   ;   pmask => zfmask  (:,:)     ;   i_offset = 0 
    12351200            END SELECT  
    12361201            icount = 0 
     
    12631228         ! flagv =  1 : v is normal to the boundary and is direction is inward 
    12641229 
    1265          DO igrd = 1,jpbgrd  
     1230         DO igrd = 1, jpbgrd  
    12661231            SELECT CASE( igrd ) 
    1267                CASE( 1 ) 
    1268                   pmask => vmask(:,:,1) 
    1269                   j_offset = 0 
    1270                CASE( 2 ) 
    1271                   pmask => zfmask(:,:) 
    1272                   j_offset = 0 
    1273                CASE( 3 ) 
    1274                   pmask => bdytmask 
    1275                   j_offset = 1 
     1232               CASE( 1 )   ;   pmask => vmask (:,:,1)   ;   j_offset = 0 
     1233               CASE( 2 )   ;   pmask => zfmask(:,:)     ;   j_offset = 0 
     1234               CASE( 3 )   ;   pmask => bdytmask        ;   j_offset = 1 
    12761235            END SELECT  
    12771236            icount = 0 
     
    12791238               nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 
    12801239               nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 
    1281                znfl = pmask(nbi,nbj+j_offset-1  ) 
    1282                zsfl = pmask(nbi,nbj+j_offset) 
     1240               znfl = pmask(nbi,nbj+j_offset-1) 
     1241               zsfl = pmask(nbi,nbj+j_offset  ) 
    12831242               ! This error check only works if you are using the bdyXmask arrays 
    12841243               IF( j_offset == 1 .and. znfl + zsfl == 2 ) THEN 
     
    12981257            ENDIF  
    12991258         END DO 
    1300  
     1259         ! 
    13011260      END DO 
    13021261 
    13031262      ! Compute total lateral surface for volume correction: 
    13041263      ! ---------------------------------------------------- 
    1305       ! JC: this must be done at each time step with key_vvl 
    1306       bdysurftot = 0.e0  
     1264      ! JC: this must be done at each time step with non-linear free surface 
     1265      bdysurftot = 0._wp  
    13071266      IF( ln_vol ) THEN   
    13081267         igrd = 2      ! Lateral surface at U-points 
     
    13121271               nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 
    13131272               flagu => idx_bdy(ib_bdy)%flagu(ib,igrd) 
    1314                bdysurftot = bdysurftot + hu     (nbi  , nbj)                           & 
     1273               bdysurftot = bdysurftot + hu_n   (nbi  , nbj)                           & 
    13151274                  &                    * e2u    (nbi  , nbj) * ABS( flagu ) & 
    13161275                  &                    * tmask_i(nbi  , nbj)                           & 
    13171276                  &                    * tmask_i(nbi+1, nbj)                    
    1318             ENDDO 
    1319          ENDDO 
     1277            END DO 
     1278         END DO 
    13201279 
    13211280         igrd=3 ! Add lateral surface at V-points 
     
    13251284               nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 
    13261285               flagv => idx_bdy(ib_bdy)%flagv(ib,igrd) 
    1327                bdysurftot = bdysurftot + hv     (nbi, nbj  )                           & 
     1286               bdysurftot = bdysurftot + hv_n   (nbi, nbj  )                           & 
    13281287                  &                    * e1v    (nbi, nbj  ) * ABS( flagv ) & 
    13291288                  &                    * tmask_i(nbi, nbj  )                           & 
    13301289                  &                    * tmask_i(nbi, nbj+1) 
    1331             ENDDO 
    1332          ENDDO 
     1290            END DO 
     1291         END DO 
    13331292         ! 
    13341293         IF( lk_mpp )   CALL mpp_sum( bdysurftot )      ! sum over the global domain 
     
    13371296      ! Tidy up 
    13381297      !-------- 
    1339       IF (nb_bdy>0) THEN 
    1340          DEALLOCATE(nbidta, nbjdta, nbrdta) 
    1341       ENDIF 
    1342  
    1343       CALL wrk_dealloc(jpi,jpj,zfmask)  
    1344  
    1345       IF( nn_timing == 1 ) CALL timing_stop('bdy_init') 
    1346  
     1298      IF( nb_bdy>0 )   DEALLOCATE( nbidta, nbjdta, nbrdta ) 
     1299      ! 
     1300      CALL wrk_dealloc(jpi,jpj,   zfmask )  
     1301      ! 
     1302      IF( nn_timing == 1 )   CALL timing_stop('bdy_init') 
     1303      ! 
    13471304   END SUBROUTINE bdy_init 
     1305 
    13481306 
    13491307   SUBROUTINE bdy_ctl_seg 
     
    17361694      itest = 0 
    17371695 
    1738       IF (cn_dyn2d(ib1)/=cn_dyn2d(ib2)) itest = itest + 1 
    1739       IF (cn_dyn3d(ib1)/=cn_dyn3d(ib2)) itest = itest + 1 
    1740       IF (cn_tra(ib1)/=cn_tra(ib2)) itest = itest + 1 
    1741       ! 
    1742       IF (nn_dyn2d_dta(ib1)/=nn_dyn2d_dta(ib2)) itest = itest + 1 
    1743       IF (nn_dyn3d_dta(ib1)/=nn_dyn3d_dta(ib2)) itest = itest + 1 
    1744       IF (nn_tra_dta(ib1)/=nn_tra_dta(ib2)) itest = itest + 1 
    1745       ! 
    1746       IF (nn_rimwidth(ib1)/=nn_rimwidth(ib2)) itest = itest + 1    
    1747       ! 
    1748       IF ( itest>0 ) THEN 
     1696      IF( cn_dyn2d(ib1) /= cn_dyn2d(ib2) )  itest = itest + 1 
     1697      IF( cn_dyn3d(ib1) /= cn_dyn3d(ib2) )  itest = itest + 1 
     1698      IF( cn_tra  (ib1) /= cn_tra  (ib2) )  itest = itest + 1 
     1699      ! 
     1700      IF( nn_dyn2d_dta(ib1) /= nn_dyn2d_dta(ib2) )  itest = itest + 1 
     1701      IF( nn_dyn3d_dta(ib1) /= nn_dyn3d_dta(ib2) )  itest = itest + 1 
     1702      IF( nn_tra_dta  (ib1) /= nn_tra_dta  (ib2) )  itest = itest + 1 
     1703      ! 
     1704      IF( nn_rimwidth(ib1) /= nn_rimwidth(ib2) )  itest = itest + 1    
     1705      ! 
     1706      IF( itest>0 ) THEN 
    17491707         IF(lwp) WRITE(numout,*) ' E R R O R : Segments ', ib1, 'and ', ib2 
    17501708         IF(lwp) WRITE(numout,*) ' ==========  have different open bdy schemes'                                                   
Note: See TracChangeset for help on using the changeset viewer.