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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90

    r4699 r6225  
    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 
     
    7671      INTEGER  ::   ib_bdy, ii, ij, ik, igrd, ib, ir, iseg ! dummy loop indices 
    7772      INTEGER  ::   icount, icountr, ibr_max, ilen1, ibm1  ! local integers 
    78       INTEGER  ::   iw, ie, is, in, inum, id_dummy         !   -       - 
     73      INTEGER  ::   iwe, ies, iso, ino, inum, id_dummy     !   -       - 
    7974      INTEGER  ::   igrd_start, igrd_end, jpbdta           !   -       - 
    8075      INTEGER  ::   jpbdtau, jpbdtas                       !   -       - 
    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: 
     
    777769!      is = mjg(1) + 1            ! if monotasking and no zoom, is=2 
    778770!      in = mjg(1) + nlcj-1 - 1   ! if monotasking and no zoom, in=jpjm1       
    779       iw = mig(1) - jpizoom + 2         ! if monotasking and no zoom, iw=2 
    780       ie = mig(1) + nlci - jpizoom - 1  ! if monotasking and no zoom, ie=jpim1 
    781       is = mjg(1) - jpjzoom + 2         ! if monotasking and no zoom, is=2 
    782       in = mjg(1) + nlcj - jpjzoom - 1  ! if monotasking and no zoom, in=jpjm1 
     771      iwe = mig(1) - jpizoom + 2         ! if monotasking and no zoom, iw=2 
     772      ies = mig(1) + nlci - jpizoom - 1  ! if monotasking and no zoom, ie=jpim1 
     773      iso = mjg(1) - jpjzoom + 2         ! if monotasking and no zoom, is=2 
     774      ino = mjg(1) + nlcj - jpjzoom - 1  ! if monotasking and no zoom, in=jpjm1 
    783775 
    784776      ALLOCATE( nbondi_bdy(nb_bdy)) 
     
    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 
     
    853845               ENDIF 
    854846               ! check if point is in local domain 
    855                IF(  nbidta(ib,igrd,ib_bdy) >= iw .AND. nbidta(ib,igrd,ib_bdy) <= ie .AND.   & 
    856                   & nbjdta(ib,igrd,ib_bdy) >= is .AND. nbjdta(ib,igrd,ib_bdy) <= in       ) THEN 
     847               IF(  nbidta(ib,igrd,ib_bdy) >= iwe .AND. nbidta(ib,igrd,ib_bdy) <= ies .AND.   & 
     848                  & nbjdta(ib,igrd,ib_bdy) >= iso .AND. nbjdta(ib,igrd,ib_bdy) <= ino      ) THEN 
    857849                  ! 
    858850                  icount = icount  + 1 
     
    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 
     884 
    892885         DO igrd = 1, jpbgrd 
    893886            icount  = 0 
     
    896889               DO ib = 1, nblendta(igrd,ib_bdy) 
    897890                  ! check if point is in local domain and equals ir 
    898                   IF(  nbidta(ib,igrd,ib_bdy) >= iw .AND. nbidta(ib,igrd,ib_bdy) <= ie .AND.   & 
    899                      & nbjdta(ib,igrd,ib_bdy) >= is .AND. nbjdta(ib,igrd,ib_bdy) <= in .AND.   & 
     891                  IF(  nbidta(ib,igrd,ib_bdy) >= iwe .AND. nbidta(ib,igrd,ib_bdy) <= ies .AND.   & 
     892                     & nbjdta(ib,igrd,ib_bdy) >= iso .AND. nbjdta(ib,igrd,ib_bdy) <= ino .AND.   & 
    900893                     & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    901894                     ! 
     
    911904                     ii = idx_bdy(ib_bdy)%nbi(icount,igrd) 
    912905                     ij = idx_bdy(ib_bdy)%nbj(icount,igrd) 
    913                      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 
    914907                        com_east = 1 
    915                      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 
    916909                        com_west = 1 
    917910                     endif  
    918                      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 
    919912                        com_south = 1 
    920                      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 
    921914                        com_north = 1 
    922915                     endif  
     
    925918                  ENDIF 
    926919                  ! check if point has to be received from a neighbour 
    927                   IF(nbondi .eq. 0) THEN 
     920                  IF(nbondi == 0) THEN 
    928921                     IF( nbidta(ib,igrd,ib_bdy) >= iw_b(1) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(1) .AND.   & 
    929922                       & nbjdta(ib,igrd,ib_bdy) >= is_b(1) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(1) .AND.   & 
    930923                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    931924                       ii = nbidta(ib,igrd,ib_bdy)- iw_b(1)+2 
    932                        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 
    933926                          ij = nbjdta(ib,igrd,ib_bdy) - is_b(1)+2 
    934                           if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 
     927                          if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    935928                            com_south = 1 
    936                           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 
    937930                            com_north = 1 
    938931                          endif 
     
    944937                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    945938                       ii = nbidta(ib,igrd,ib_bdy)- iw_b(2)+2 
    946                        if((com_east_b .ne. 1) .and. (ii .eq. 2)) then 
     939                       if((com_east_b .ne. 1) .and. (ii == 2)) then 
    947940                          ij = nbjdta(ib,igrd,ib_bdy) - is_b(2)+2 
    948                           if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 
     941                          if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    949942                            com_south = 1 
    950                           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 
    951944                            com_north = 1 
    952945                          endif 
     
    954947                       endif  
    955948                     ENDIF 
    956                   ELSEIF(nbondi .eq. 1) THEN 
     949                  ELSEIF(nbondi == 1) THEN 
    957950                     IF( nbidta(ib,igrd,ib_bdy) >= iw_b(1) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(1) .AND.   & 
    958951                       & nbjdta(ib,igrd,ib_bdy) >= is_b(1) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(1) .AND.   & 
    959952                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    960953                       ii = nbidta(ib,igrd,ib_bdy)- iw_b(1)+2 
    961                        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 
    962955                          ij = nbjdta(ib,igrd,ib_bdy) - is_b(1)+2 
    963                           if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 
     956                          if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    964957                            com_south = 1 
    965                           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 
    966959                            com_north = 1 
    967960                          endif 
     
    969962                       endif  
    970963                     ENDIF 
    971                   ELSEIF(nbondi .eq. -1) THEN 
     964                  ELSEIF(nbondi == -1) THEN 
    972965                     IF( nbidta(ib,igrd,ib_bdy) >= iw_b(2) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(2) .AND.   & 
    973966                       & nbjdta(ib,igrd,ib_bdy) >= is_b(2) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(2) .AND.   & 
    974967                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    975968                       ii = nbidta(ib,igrd,ib_bdy)- iw_b(2)+2 
    976                        if((com_east_b .ne. 1) .and. (ii .eq. 2)) then 
     969                       if((com_east_b .ne. 1) .and. (ii == 2)) then 
    977970                          ij = nbjdta(ib,igrd,ib_bdy) - is_b(2)+2 
    978                           if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 
     971                          if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    979972                            com_south = 1 
    980                           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 
    981974                            com_north = 1 
    982975                          endif 
     
    985978                     ENDIF 
    986979                  ENDIF 
    987                   IF(nbondj .eq. 0) THEN 
     980                  IF(nbondj == 0) THEN 
    988981                     IF(com_north_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(4)-1  & 
    989982                       & .OR. nbidta(ib,igrd,ib_bdy) == ie_b(4)+1) .AND. & 
     
    1000993                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    1001994                       ij = nbjdta(ib,igrd,ib_bdy)- is_b(3)+2 
    1002                        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 
    1003996                          com_south_b = 1 
    1004997                       endif  
     
    10081001                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    10091002                       ij = nbjdta(ib,igrd,ib_bdy)- is_b(4)+2 
    1010                        if((com_north_b .ne. 1) .and. (ij .eq. 2)) then 
     1003                       if((com_north_b .ne. 1) .and. (ij == 2)) then 
    10111004                          com_north_b = 1 
    10121005                       endif  
    10131006                     ENDIF 
    1014                   ELSEIF(nbondj .eq. 1) THEN 
     1007                  ELSEIF(nbondj == 1) THEN 
    10151008                     IF( com_south_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(3)-1 .OR. & 
    10161009                       & nbidta(ib,igrd,ib_bdy) == ie_b(3)+1) .AND. & 
     
    10221015                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    10231016                       ij = nbjdta(ib,igrd,ib_bdy)- is_b(3)+2 
    1024                        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 
    10251018                          com_south_b = 1 
    10261019                       endif  
    10271020                     ENDIF 
    1028                   ELSEIF(nbondj .eq. -1) THEN 
     1021                  ELSEIF(nbondj == -1) THEN 
    10291022                     IF(com_north_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(4)-1  & 
    10301023                       & .OR. nbidta(ib,igrd,ib_bdy) == ie_b(4)+1) .AND. & 
     
    10361029                       & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    10371030                       ij = nbjdta(ib,igrd,ib_bdy)- is_b(4)+2 
    1038                        if((com_north_b .ne. 1) .and. (ij .eq. 2)) then 
     1031                       if((com_north_b .ne. 1) .and. (ij == 2)) then 
    10391032                          com_north_b = 1 
    10401033                       endif  
     
    10451038         ENDDO  
    10461039 
    1047          ! definition of the i- and j- direction local boundaries arrays 
    1048          ! used for sending the boudaries 
    1049          IF((com_east .eq. 1) .and. (com_west .eq. 1)) THEN 
    1050             nbondi_bdy(ib_bdy) = 0 
    1051          ELSEIF ((com_east .eq. 1) .and. (com_west .eq. 0)) THEN 
    1052             nbondi_bdy(ib_bdy) = -1 
    1053          ELSEIF ((com_east .eq. 0) .and. (com_west .eq. 1)) THEN 
    1054             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 
    10551044         ENDIF 
    1056  
    1057          IF((com_north .eq. 1) .and. (com_south .eq. 1)) THEN 
    1058             nbondj_bdy(ib_bdy) = 0 
    1059          ELSEIF ((com_north .eq. 1) .and. (com_south .eq. 0)) THEN 
    1060             nbondj_bdy(ib_bdy) = -1 
    1061          ELSEIF ((com_north .eq. 0) .and. (com_south .eq. 1)) THEN 
    1062             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 
    10631048         ENDIF 
    10641049 
    1065          ! definition of the i- and j- direction local boundaries arrays 
    1066          ! used for receiving the boudaries 
    1067          IF((com_east_b .eq. 1) .and. (com_west_b .eq. 1)) THEN 
    1068             nbondi_bdy_b(ib_bdy) = 0 
    1069          ELSEIF ((com_east_b .eq. 1) .and. (com_west_b .eq. 0)) THEN 
    1070             nbondi_bdy_b(ib_bdy) = -1 
    1071          ELSEIF ((com_east_b .eq. 0) .and. (com_west_b .eq. 1)) THEN 
    1072             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 
    10731054         ENDIF 
    1074  
    1075          IF((com_north_b .eq. 1) .and. (com_south_b .eq. 1)) THEN 
    1076             nbondj_bdy_b(ib_bdy) = 0 
    1077          ELSEIF ((com_north_b .eq. 1) .and. (com_south_b .eq. 0)) THEN 
    1078             nbondj_bdy_b(ib_bdy) = -1 
    1079          ELSEIF ((com_north_b .eq. 0) .and. (com_south_b .eq. 1)) THEN 
    1080             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 
    10811058         ENDIF 
    10821059 
     
    10861063            DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    10871064               nbr => idx_bdy(ib_bdy)%nbr(ib,igrd) 
    1088                idx_bdy(ib_bdy)%nbw(ib,igrd) = 1.- TANH( FLOAT( nbr - 1 ) *0.5 )      ! tanh formulation 
    1089 !               idx_bdy(ib_bdy)%nbw(ib,igrd) = (FLOAT(nn_rimwidth(ib_bdy)+1-nbr)/FLOAT(nn_rimwidth(ib_bdy)))**2.  ! quadratic 
    1090 !               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 
    10911068            END DO 
    10921069         END DO  
     
    10981075               nbr => idx_bdy(ib_bdy)%nbr(ib,igrd) 
    10991076               idx_bdy(ib_bdy)%nbd(ib,igrd) = 1. / ( rn_time_dmp(ib_bdy) * rday ) &  
    1100                & *(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 
    11011078               idx_bdy(ib_bdy)%nbdout(ib,igrd) = 1. / ( rn_time_dmp_out(ib_bdy) * rday ) &  
    1102                & *(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 
    11031080            END DO 
    11041081         END DO  
     
    11211098 
    11221099         ! Derive mask on U and V grid from mask on T grid 
    1123          bdyumask(:,:) = 0.e0 
    1124          bdyvmask(:,:) = 0.e0 
     1100         bdyumask(:,:) = 0._wp 
     1101         bdyvmask(:,:) = 0._wp 
    11251102         DO ij=1, jpjm1 
    11261103            DO ii=1, jpim1 
    1127                bdyumask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii+1, ij ) 
    1128                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)   
    11291106            END DO 
    11301107         END DO 
     
    11401117                  umask(ii,ij,ik) = umask(ii,ij,ik) * bdyumask(ii,ij) 
    11411118                  vmask(ii,ij,ik) = vmask(ii,ij,ik) * bdyvmask(ii,ij) 
    1142                   bmask(ii,ij)    = bmask(ii,ij)    * bdytmask(ii,ij) 
    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  
    1156          tmask_i (:,:) = tmask(:,:,1) * tmask_i(:,:) 
    1157  
     1128         tmask_i (:,:) = ssmask(:,:) * tmask_i(:,:) 
     1129         ! 
    11581130      ENDIF ! ln_mask_file=.TRUE. 
    11591131       
    1160       bdytmask(:,:) = tmask(:,:,1) 
    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)   
     1132      bdytmask(:,:) = ssmask(:,:) 
     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 
     
    11731144      ENDIF 
    11741145 
    1175       ! bdy masks and bmask are now set to zero on boundary points: 
    1176       igrd = 1       ! In the free surface case, bmask is at T-points 
    1177       DO ib_bdy = 1, nb_bdy 
    1178         DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd)      
    1179           bmask(idx_bdy(ib_bdy)%nbi(ib,igrd), idx_bdy(ib_bdy)%nbj(ib,igrd)) = 0.e0 
    1180         ENDDO 
    1181       ENDDO 
     1146      ! bdy masks are now set to zero on boundary points: 
    11821147      ! 
    11831148      igrd = 1 
    11841149      DO ib_bdy = 1, nb_bdy 
    11851150        DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd)       
    1186           bdytmask(idx_bdy(ib_bdy)%nbi(ib,igrd), idx_bdy(ib_bdy)%nbj(ib,igrd)) = 0.e0 
    1187         ENDDO 
    1188       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 
    11891154      ! 
    11901155      igrd = 2 
    11911156      DO ib_bdy = 1, nb_bdy 
    11921157        DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    1193           bdyumask(idx_bdy(ib_bdy)%nbi(ib,igrd), idx_bdy(ib_bdy)%nbj(ib,igrd)) = 0.e0 
    1194         ENDDO 
    1195       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 
    11961161      ! 
    11971162      igrd = 3 
    11981163      DO ib_bdy = 1, nb_bdy 
    11991164        DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    1200           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 
    12011166        ENDDO 
    12021167      ENDDO 
     
    12041169      ! For the flagu/flagv calculation below we require a version of fmask without 
    12051170      ! the land boundary condition (shlat) included: 
    1206       CALL wrk_alloc(jpi,jpj,zfmask)  
     1171      CALL wrk_alloc(jpi,jpj,  zfmask )  
    12071172      DO ij = 2, jpjm1 
    12081173         DO ii = 2, jpim1 
     
    12191184      DO ib_bdy = 1, nb_bdy       ! Indices and directions of rim velocity components 
    12201185 
    1221          idx_bdy(ib_bdy)%flagu(:,:) = 0.e0 
    1222          idx_bdy(ib_bdy)%flagv(:,:) = 0.e0 
     1186         idx_bdy(ib_bdy)%flagu(:,:) = 0._wp 
     1187         idx_bdy(ib_bdy)%flagv(:,:) = 0._wp 
    12231188         icount = 0  
    12241189 
     
    12301195         DO igrd = 1,jpbgrd  
    12311196            SELECT CASE( igrd ) 
    1232                CASE( 1 ) 
    1233                   pmask => umask(:,:,1) 
    1234                   i_offset = 0 
    1235                CASE( 2 )  
    1236                   pmask => bdytmask 
    1237                   i_offset = 1 
    1238                CASE( 3 )  
    1239                   pmask => zfmask(:,:) 
    1240                   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 
    12411200            END SELECT  
    12421201            icount = 0 
     
    12691228         ! flagv =  1 : v is normal to the boundary and is direction is inward 
    12701229 
    1271          DO igrd = 1,jpbgrd  
     1230         DO igrd = 1, jpbgrd  
    12721231            SELECT CASE( igrd ) 
    1273                CASE( 1 ) 
    1274                   pmask => vmask(:,:,1) 
    1275                   j_offset = 0 
    1276                CASE( 2 ) 
    1277                   pmask => zfmask(:,:) 
    1278                   j_offset = 0 
    1279                CASE( 3 ) 
    1280                   pmask => bdytmask 
    1281                   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 
    12821235            END SELECT  
    12831236            icount = 0 
     
    12851238               nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 
    12861239               nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 
    1287                znfl = pmask(nbi,nbj+j_offset-1  ) 
    1288                zsfl = pmask(nbi,nbj+j_offset) 
     1240               znfl = pmask(nbi,nbj+j_offset-1) 
     1241               zsfl = pmask(nbi,nbj+j_offset  ) 
    12891242               ! This error check only works if you are using the bdyXmask arrays 
    12901243               IF( j_offset == 1 .and. znfl + zsfl == 2 ) THEN 
     
    13041257            ENDIF  
    13051258         END DO 
    1306  
     1259         ! 
    13071260      END DO 
    13081261 
    13091262      ! Compute total lateral surface for volume correction: 
    13101263      ! ---------------------------------------------------- 
    1311       ! JC: this must be done at each time step with key_vvl 
    1312       bdysurftot = 0.e0  
     1264      ! JC: this must be done at each time step with non-linear free surface 
     1265      bdysurftot = 0._wp  
    13131266      IF( ln_vol ) THEN   
    13141267         igrd = 2      ! Lateral surface at U-points 
     
    13181271               nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 
    13191272               flagu => idx_bdy(ib_bdy)%flagu(ib,igrd) 
    1320                bdysurftot = bdysurftot + hu     (nbi  , nbj)                           & 
     1273               bdysurftot = bdysurftot + hu_n   (nbi  , nbj)                           & 
    13211274                  &                    * e2u    (nbi  , nbj) * ABS( flagu ) & 
    13221275                  &                    * tmask_i(nbi  , nbj)                           & 
    13231276                  &                    * tmask_i(nbi+1, nbj)                    
    1324             ENDDO 
    1325          ENDDO 
     1277            END DO 
     1278         END DO 
    13261279 
    13271280         igrd=3 ! Add lateral surface at V-points 
     
    13311284               nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 
    13321285               flagv => idx_bdy(ib_bdy)%flagv(ib,igrd) 
    1333                bdysurftot = bdysurftot + hv     (nbi, nbj  )                           & 
     1286               bdysurftot = bdysurftot + hv_n   (nbi, nbj  )                           & 
    13341287                  &                    * e1v    (nbi, nbj  ) * ABS( flagv ) & 
    13351288                  &                    * tmask_i(nbi, nbj  )                           & 
    13361289                  &                    * tmask_i(nbi, nbj+1) 
    1337             ENDDO 
    1338          ENDDO 
     1290            END DO 
     1291         END DO 
    13391292         ! 
    13401293         IF( lk_mpp )   CALL mpp_sum( bdysurftot )      ! sum over the global domain 
     
    13431296      ! Tidy up 
    13441297      !-------- 
    1345       IF (nb_bdy>0) THEN 
    1346          DEALLOCATE(nbidta, nbjdta, nbrdta) 
    1347       ENDIF 
    1348  
    1349       CALL wrk_dealloc(jpi,jpj,zfmask)  
    1350  
    1351       IF( nn_timing == 1 ) CALL timing_stop('bdy_init') 
    1352  
     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      ! 
    13531304   END SUBROUTINE bdy_init 
     1305 
    13541306 
    13551307   SUBROUTINE bdy_ctl_seg 
     
    15941546            ELSE 
    15951547               ! This is a corner 
    1596                WRITE(numout,*) 'Found a South-West corner at (i,j): ', jpiwob(ib), jpjwdt(ib) 
     1548               IF(lwp) WRITE(numout,*) 'Found a South-West corner at (i,j): ', jpiwob(ib), jpjwdt(ib) 
    15971549               CALL bdy_ctl_corn(npckgw(ib), icornw(ib,1)) 
    15981550               itest=itest+1 
     
    16081560            ELSE 
    16091561               ! This is a corner 
    1610                WRITE(numout,*) 'Found a North-West corner at (i,j): ', jpiwob(ib), jpjwft(ib) 
     1562               IF(lwp) WRITE(numout,*) 'Found a North-West corner at (i,j): ', jpiwob(ib), jpjwft(ib) 
    16111563               CALL bdy_ctl_corn(npckgw(ib), icornw(ib,2)) 
    16121564               itest=itest+1 
     
    16381590            ELSE 
    16391591               ! This is a corner 
    1640                WRITE(numout,*) 'Found a South-East corner at (i,j): ', jpieob(ib)+1, jpjedt(ib) 
     1592               IF(lwp) WRITE(numout,*) 'Found a South-East corner at (i,j): ', jpieob(ib)+1, jpjedt(ib) 
    16411593               CALL bdy_ctl_corn(npckge(ib), icorne(ib,1)) 
    16421594               itest=itest+1 
     
    16521604            ELSE 
    16531605               ! This is a corner 
    1654                WRITE(numout,*) 'Found a North-East corner at (i,j): ', jpieob(ib)+1, jpjeft(ib) 
     1606               IF(lwp) WRITE(numout,*) 'Found a North-East corner at (i,j): ', jpieob(ib)+1, jpjeft(ib) 
    16551607               CALL bdy_ctl_corn(npckge(ib), icorne(ib,2)) 
    16561608               itest=itest+1 
     
    17421694      itest = 0 
    17431695 
    1744       IF (cn_dyn2d(ib1)/=cn_dyn2d(ib2)) itest = itest + 1 
    1745       IF (cn_dyn3d(ib1)/=cn_dyn3d(ib2)) itest = itest + 1 
    1746       IF (cn_tra(ib1)/=cn_tra(ib2)) itest = itest + 1 
    1747       ! 
    1748       IF (nn_dyn2d_dta(ib1)/=nn_dyn2d_dta(ib2)) itest = itest + 1 
    1749       IF (nn_dyn3d_dta(ib1)/=nn_dyn3d_dta(ib2)) itest = itest + 1 
    1750       IF (nn_tra_dta(ib1)/=nn_tra_dta(ib2)) itest = itest + 1 
    1751       ! 
    1752       IF (nn_rimwidth(ib1)/=nn_rimwidth(ib2)) itest = itest + 1    
    1753       ! 
    1754       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 
    17551707         IF(lwp) WRITE(numout,*) ' E R R O R : Segments ', ib1, 'and ', ib2 
    17561708         IF(lwp) WRITE(numout,*) ' ==========  have different open bdy schemes'                                                   
Note: See TracChangeset for help on using the changeset viewer.