Changeset 8758


Ignore:
Timestamp:
2017-11-20T17:29:54+01:00 (3 years ago)
Author:
acc
Message:

Branch 2017/dev_r8126_ROBUST08_no_ghost. Changes to eliminate ghost rows and columns. Currently the halo width is still fixed as 1 but a single variable (nn_hls) has been introduced for the halo-size in preparation for allowing this to vary. nn_hls replaces jpreci and jprecj. These changes have passed full SETTE tests but iceberg exchanges across the north-fold remain untested (SETTE tests only release bergs in the SO) and will require further attention. Note layout.dat now reports the jpi and jpj values for the reporting processor only.

Location:
branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/NST_SRC/agrif_user.F90

    r7761 r8758  
    2828      jpiglo  = nbcellsx + 2 + 2*nbghostcells 
    2929      jpjglo  = nbcellsy + 2 + 2*nbghostcells 
    30       jpi     = ( jpiglo-2*jpreci + (jpni-1+0) ) / jpni + 2*jpreci 
    31       jpj     = ( jpjglo-2*jprecj + (jpnj-1+0) ) / jpnj + 2*jprecj 
     30      jpi     = ( jpiglo-2*nn_hls + (jpni-1+0) ) / jpni + 2*nn_hls 
     31      jpj     = ( jpjglo-2*nn_hls + (jpnj-1+0) ) / jpnj + 2*nn_hls 
    3232! JC: change to allow for different vertical levels 
    3333!     jpk is already set 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OFF_SRC/nemogcm.F90

    r8314 r8758  
    150150      !! ** Purpose :   initialization of the nemo model in off-line mode 
    151151      !!---------------------------------------------------------------------- 
    152       INTEGER ::   ji            ! dummy loop indices 
    153       INTEGER ::   ilocal_comm   ! local integer 
    154       INTEGER ::   ios, inum 
     152      INTEGER  ::   ji                 ! dummy loop indices 
     153      INTEGER  ::   ilocal_comm        ! local integer 
     154      INTEGER  ::   ios, inum          ! local integers 
     155      INTEGER  ::   iiarea, ijarea     ! local integers 
     156      INTEGER  ::   iirest, ijrest     ! local integers 
    155157      REAL(wp) ::   ziglo, zjglo, zkglo, zperio   ! local scalars 
    156158      CHARACTER(len=120), DIMENSION(30) ::   cltxt, cltxt2, clnam 
     
    198200         CALL usr_def_nam( cltxt2, clnam, cn_cfg, nn_cfg, jpiglo, jpjglo, jpkglo, jperio ) 
    199201      ENDIF 
    200       jpk    = jpkglo 
    201202      ! 
    202203      ! 
     
    246247      END IF 
    247248 
    248       ! Calculate domain dimensions given calculated jpni and jpnj 
    249       ! This used to be done in par_oce.F90 when they were parameters rather 
    250       ! than variables 
    251       jpi = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci   ! first  dim. 
    252       jpj = ( jpjglo-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj   ! second dim. 
     249      iiarea = 1 + MOD( narea - 1 , jpni ) 
     250      ijarea = 1 + ( narea - 1 ) / jpni 
     251      iirest = 1 + MOD( jpiglo - 2*nn_hls - 1 , jpni ) 
     252      ijrest = 1 + MOD( jpjglo - 2*nn_hls - 1 , jpnj ) 
     253#if defined key_nemocice_decomp 
     254      jpi = ( nx_global+2-2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     255      jpj = ( ny_global+2-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim.  
     256      jpimax  = jpi 
     257      jpjmax  = jpj 
     258      IF( iiarea == jpni ) jpi = jpiglo - (jpni - 1) * (jpi - 2*nn_hls) 
     259      IF( ijarea == jpnj ) jpj = jpjglo - (jpnj - 1) * (jpj - 2*nn_hls) 
     260#else 
     261      jpi = ( jpiglo     -2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     262      jpj = ( jpjglo     -2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim. 
     263      jpimax  = jpi 
     264      jpjmax  = jpj 
     265      IF( iiarea > iirest ) jpi = jpi - 1 
     266      IF( ijarea > ijrest ) jpj = jpj - 1 
     267#endif 
     268 
     269      jpk   = jpkglo                                           ! third dim 
     270 
    253271      jpim1 = jpi-1                                            ! inner domain indices 
    254272      jpjm1 = jpj-1                                            !   "           " 
    255       jpkm1 = jpk-1                                            !   "           " 
     273      jpkm1 = MAX( 1, jpk-1 )                                  !   "           " 
    256274      jpij  = jpi*jpj                                          !  jpi x j 
     275 
    257276 
    258277 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/CRS/crsdom.F90

    r7646 r8758  
    18951895      jpjglo_crsm1 = jpjglo_crs - 1   
    18961896 
    1897       jpi_crs = ( jpiglo_crs   - 2 * jpreci + (jpni-1) ) / jpni + 2 * jpreci 
    1898       jpj_crs = ( jpjglo_crsm1 - 2 * jprecj + (jpnj-1) ) / jpnj + 2 * jprecj    
     1897      jpi_crs = ( jpiglo_crs   - 2 * nn_hls + (jpni-1) ) / jpni + 2 * nn_hls 
     1898      jpj_crs = ( jpjglo_crsm1 - 2 * nn_hls + (jpnj-1) ) / jpnj + 2 * nn_hls    
    18991899               
    19001900      IF( noso < 0 ) jpj_crs = jpj_crs + 1    ! add a local band on southern processors   
     
    19401940              CASE ( -1 ) 
    19411941                IF( MOD( jpjglo - njmppt(jn), nn_facty) > 0 )  nlejt_crs(jn) = nlejt_crs(jn) + 1 
    1942                 nlcjt_crs(jn) = nlejt_crs(jn) + jprecj 
     1942                nlcjt_crs(jn) = nlejt_crs(jn) + nn_hls 
    19431943                nldjt_crs(jn) = nldjt(jn) 
    19441944               
     
    19471947                nldjt_crs(jn) = nldjt(jn) 
    19481948                IF( nldjt(jn) == 1 )  nlejt_crs(jn) = nlejt_crs(jn) + 1 
    1949                 nlejt_crs(jn) = nlejt_crs(jn) + jprecj 
    1950                 nlcjt_crs(jn) = nlejt_crs(jn) + jprecj 
     1949                nlejt_crs(jn) = nlejt_crs(jn) + nn_hls 
     1950                nlcjt_crs(jn) = nlejt_crs(jn) + nn_hls 
    19511951                 
    19521952              CASE ( 1, 2 ) 
    19531953               
    1954                 nlejt_crs(jn) = nlejt_crs(jn) + jprecj 
     1954                nlejt_crs(jn) = nlejt_crs(jn) + nn_hls 
    19551955                nlcjt_crs(jn) = nlejt_crs(jn) 
    19561956                nldjt_crs(jn) = nldjt(jn) 
     
    19901990           SELECT CASE( ibonit(jn) ) 
    19911991              CASE ( -1 ) 
    1992                  nleit_crs(jn) = nleit_crs(jn) + jpreci            
    1993                  nlcit_crs(jn) = nleit_crs(jn) + jpreci 
     1992                 nleit_crs(jn) = nleit_crs(jn) + nn_hls            
     1993                 nlcit_crs(jn) = nleit_crs(jn) + nn_hls 
    19941994                 nldit_crs(jn) = nldit(jn)  
    19951995               
    19961996              CASE ( 0 ) 
    1997                  nleit_crs(jn) = nleit_crs(jn) + jpreci 
    1998                  nlcit_crs(jn) = nleit_crs(jn) + jpreci 
     1997                 nleit_crs(jn) = nleit_crs(jn) + nn_hls 
     1998                 nlcit_crs(jn) = nleit_crs(jn) + nn_hls 
    19991999                 nldit_crs(jn) = nldit(jn)  
    20002000                 
    20012001              CASE ( 1, 2 ) 
    20022002                 IF( MOD( jpiglo - nimppt(jn), nn_factx) > 0 )  nleit_crs(jn) = nleit_crs(jn) + 1 
    2003                  nleit_crs(jn) = nleit_crs(jn) + jpreci 
     2003                 nleit_crs(jn) = nleit_crs(jn) + nn_hls 
    20042004                 nlcit_crs(jn) = nleit_crs(jn) 
    20052005                 nldit_crs(jn) = nldit(jn)  
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/CRS/crsdomwri.F90

    r6140 r8758  
    133133       
    134134      tmask_i_crs(:,:) = tmask_crs(:,:,1) 
    135       iif = jpreci 
    136       iil = nlci_crs - jpreci + 1 
    137       ijf = jpreci 
    138       ijl = nlcj_crs - jprecj + 1 
     135      iif = nn_hls 
     136      iil = nlci_crs - nn_hls + 1 
     137      ijf = nn_hls 
     138      ijl = nlcj_crs - nn_hls + 1 
    139139      
    140140      tmask_i_crs( 1:iif ,    :  ) = 0._wp 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90

    r7822 r8758  
    9898         WRITE(numout,cform) '       ' ,'   jpij    : ', jpij 
    9999         WRITE(numout,*)     '      mpp local domain info (mpp):' 
    100          WRITE(numout,*)     '              jpni    : ', jpni, '   jpreci  : ', jpreci 
    101          WRITE(numout,*)     '              jpnj    : ', jpnj, '   jprecj  : ', jprecj 
     100         WRITE(numout,*)     '              jpni    : ', jpni, '   nn_hls  : ', nn_hls 
     101         WRITE(numout,*)     '              jpnj    : ', jpnj, '   nn_hls  : ', nn_hls 
    102102         WRITE(numout,*)     '              jpnij   : ', jpnij 
    103103         WRITE(numout,*)     '      lateral boundary of the Global domain : jperio  = ', jperio 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90

    r7753 r8758  
    212212      ! -------------------- 
    213213      ! 
    214       iif = jpreci   ;   iil = nlci - jpreci + 1 
    215       ijf = jprecj   ;   ijl = nlcj - jprecj + 1 
     214      iif = nn_hls   ;   iil = nlci - nn_hls + 1 
     215      ijf = nn_hls   ;   ijl = nlcj - nn_hls + 1 
    216216      ! 
    217217      !                          ! halo mask : 0 on the halo and 1 elsewhere 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/IOM/prtctl.F90

    r5025 r8758  
    441441 
    442442#if defined key_nemocice_decomp 
    443       ijpi = ( nx_global+2-2*jpreci + (isplt-1) ) / isplt + 2*jpreci 
    444       ijpj = ( ny_global+2-2*jprecj + (jsplt-1) ) / jsplt + 2*jprecj  
     443      ijpi = ( nx_global+2-2*nn_hls + (isplt-1) ) / isplt + 2*nn_hls 
     444      ijpj = ( ny_global+2-2*nn_hls + (jsplt-1) ) / jsplt + 2*nn_hls  
    445445#else 
    446       ijpi = ( jpiglo-2*jpreci + (isplt-1) ) / isplt + 2*jpreci 
    447       ijpj = ( jpjglo-2*jprecj + (jsplt-1) ) / jsplt + 2*jprecj 
     446      ijpi = ( jpiglo-2*nn_hls + (isplt-1) ) / isplt + 2*nn_hls 
     447      ijpj = ( jpjglo-2*nn_hls + (jsplt-1) ) / jsplt + 2*nn_hls 
    448448#endif 
    449449 
    450450 
    451       nrecil  = 2 * jpreci 
    452       nrecjl  = 2 * jprecj 
     451      nrecil  = 2 * nn_hls 
     452      nrecjl  = 2 * nn_hls 
    453453      irestil = MOD( jpiglo - nrecil , isplt ) 
    454454      irestjl = MOD( jpjglo - nrecjl , jsplt ) 
     
    563563         ibonitl(jn) = nbondil 
    564564          
    565          nldil =  1   + jpreci 
    566          nleil = nlcil - jpreci 
     565         nldil =  1   + nn_hls 
     566         nleil = nlcil - nn_hls 
    567567         IF( nbondil == -1 .OR. nbondil == 2 )   nldil = 1 
    568568         IF( nbondil ==  1 .OR. nbondil == 2 )   nleil = nlcil 
    569          nldjl =  1   + jprecj 
    570          nlejl = nlcjl - jprecj 
     569         nldjl =  1   + nn_hls 
     570         nlejl = nlcjl - nn_hls 
    571571         IF( nbondjl == -1 .OR. nbondjl == 2 )   nldjl = 1 
    572572         IF( nbondjl ==  1 .OR. nbondjl == 2 )   nlejl = nlcjl 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r8186 r8758  
    535535      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    536536      !! 
    537       REAL(wp), DIMENSION(1-jpri:jpi+jpri,jprecj+jprj,2) :: r2dns 
    538       REAL(wp), DIMENSION(1-jpri:jpi+jpri,jprecj+jprj,2) :: r2dsn 
    539       REAL(wp), DIMENSION(1-jprj:jpj+jprj,jpreci+jpri,2) :: r2dwe 
    540       REAL(wp), DIMENSION(1-jprj:jpj+jprj,jpreci+jpri,2) :: r2dew 
    541       !!---------------------------------------------------------------------- 
    542  
    543       ipreci = jpreci + jpri      ! take into account outer extra 2D overlap area 
    544       iprecj = jprecj + jprj 
     537      REAL(wp), DIMENSION(1-jpri:jpi+jpri,nn_hls+jprj,2) :: r2dns 
     538      REAL(wp), DIMENSION(1-jpri:jpi+jpri,nn_hls+jprj,2) :: r2dsn 
     539      REAL(wp), DIMENSION(1-jprj:jpj+jprj,nn_hls+jpri,2) :: r2dwe 
     540      REAL(wp), DIMENSION(1-jprj:jpj+jprj,nn_hls+jpri,2) :: r2dew 
     541      !!---------------------------------------------------------------------- 
     542 
     543      ipreci = nn_hls + jpri      ! take into account outer extra 2D overlap area 
     544      iprecj = nn_hls + jprj 
    545545 
    546546 
     
    553553         pt2d(:, jpj   :jpj+jprj) = pt2d ( :, 2         :2+jprj) 
    554554      ELSE                                   !* closed 
    555          IF( .NOT. cd_type == 'F' )   pt2d(:,  1-jprj   :  jprecj  ) = 0._wp     ! south except at F-point 
    556                                       pt2d(:,nlcj-jprecj+1:jpj+jprj) = 0._wp     ! north 
     555         IF( .NOT. cd_type == 'F' )   pt2d(:,  1-jprj   :  nn_hls  ) = 0._wp     ! south except at F-point 
     556                                      pt2d(:,nlcj-nn_hls+1:jpj+jprj) = 0._wp     ! north 
    557557      ENDIF 
    558558      !                                !== East-West boundaries 
     
    562562         pt2d(   jpi  :jpi+jpri,:) = pt2d(     2      :2+jpri,:)              ! west 
    563563      ELSE                                   !* closed 
    564          IF( .NOT. cd_type == 'F' )   pt2d(  1-jpri   :jpreci    ,:) = 0._wp  ! south except at F-point 
    565                                       pt2d(nlci-jpreci+1:jpi+jpri,:) = 0._wp  ! north 
     564         IF( .NOT. cd_type == 'F' )   pt2d(  1-jpri   :nn_hls    ,:) = 0._wp  ! south except at F-point 
     565                                      pt2d(nlci-nn_hls+1:jpi+jpri,:) = 0._wp  ! north 
    566566      ENDIF 
    567567      ! 
     
    585585         iihom = nlci-nreci-jpri 
    586586         DO jl = 1, ipreci 
    587             r2dew(:,jl,1) = pt2d(jpreci+jl,:) 
     587            r2dew(:,jl,1) = pt2d(nn_hls+jl,:) 
    588588            r2dwe(:,jl,1) = pt2d(iihom +jl,:) 
    589589         END DO 
     
    612612      ! 
    613613      !                           ! Write Dirichlet lateral conditions 
    614       iihom = nlci - jpreci 
     614      iihom = nlci - nn_hls 
    615615      ! 
    616616      SELECT CASE ( nbondi ) 
     
    638638         DO jl = 1, iprecj 
    639639            r2dsn(:,jl,1) = pt2d(:,ijhom +jl) 
    640             r2dns(:,jl,1) = pt2d(:,jprecj+jl) 
     640            r2dns(:,jl,1) = pt2d(:,nn_hls+jl) 
    641641         END DO 
    642642      ENDIF 
     
    664664      ! 
    665665      !                           ! Write Dirichlet lateral conditions 
    666       ijhom = nlcj - jprecj 
     666      ijhom = nlcj - nn_hls 
    667667      ! 
    668668      SELECT CASE ( nbondj ) 
     
    17391739      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    17401740      !! 
    1741       REAL(wp), DIMENSION(1-jpri:jpi+jpri,jprecj+jprj,2) ::   r2dns, r2dsn 
    1742       REAL(wp), DIMENSION(1-jprj:jpj+jprj,jpreci+jpri,2) ::   r2dwe, r2dew 
    1743       !!---------------------------------------------------------------------- 
    1744  
    1745       ipreci = jpreci + jpri      ! take into account outer extra 2D overlap area 
    1746       iprecj = jprecj + jprj 
     1741      REAL(wp), DIMENSION(1-jpri:jpi+jpri,nn_hls+jprj,2) ::   r2dns, r2dsn 
     1742      REAL(wp), DIMENSION(1-jprj:jpj+jprj,nn_hls+jpri,2) ::   r2dwe, r2dew 
     1743      !!---------------------------------------------------------------------- 
     1744 
     1745      ipreci = nn_hls + jpri      ! take into account outer extra 2D overlap area 
     1746      iprecj = nn_hls + jprj 
    17471747 
    17481748 
     
    17581758         ! 
    17591759      ELSE                                        !* closed 
    1760          IF( .NOT. cd_type == 'F' )   pt2d(  1-jpri   :jpreci    ,:) = 0._wp    ! south except at F-point 
    1761                                       pt2d(nlci-jpreci+1:jpi+jpri,:) = 0._wp    ! north 
     1760         IF( .NOT. cd_type == 'F' )   pt2d(  1-jpri   :nn_hls    ,:) = 0._wp    ! south except at F-point 
     1761                                      pt2d(nlci-nn_hls+1:jpi+jpri,:) = 0._wp    ! north 
    17621762      ENDIF 
    17631763      ! 
     
    17821782         iihom = nlci-nreci-jpri 
    17831783         DO jl = 1, ipreci 
    1784             r2dew(:,jl,1) = pt2d(jpreci+jl,:) 
     1784            r2dew(:,jl,1) = pt2d(nn_hls+jl,:) 
    17851785            r2dwe(:,jl,1) = pt2d(iihom +jl,:) 
    17861786         END DO 
     
    18091809      ! 
    18101810      !                           ! Write Dirichlet lateral conditions 
    1811       iihom = nlci - jpreci 
     1811      iihom = nlci - nn_hls 
    18121812      ! 
    18131813      SELECT CASE ( nbondi ) 
     
    18361836         DO jl = 1, iprecj 
    18371837            r2dsn(:,jl,1) = pt2d(:,ijhom +jl) 
    1838             r2dns(:,jl,1) = pt2d(:,jprecj+jl) 
     1838            r2dns(:,jl,1) = pt2d(:,nn_hls+jl) 
    18391839         END DO 
    18401840      ENDIF 
     
    18621862      ! 
    18631863      !                           ! Write Dirichlet lateral conditions 
    1864       ijhom = nlcj - jprecj 
     1864      ijhom = nlcj - nn_hls 
    18651865      ! 
    18661866      SELECT CASE ( nbondj ) 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/LBC/mpp_bdy_generic.h90

    r8591 r8758  
    9393      ipf = F_SIZE(ptab)   ! 5th    -      use in "multi" case (array of pointers) 
    9494      !       
    95       ALLOCATE( zt3ns(jpi,jprecj,ipk,ipl,ipf,2), zt3sn(jpi,jprecj,ipk,ipl,ipf,2),   & 
    96          &      zt3ew(jpj,jpreci,ipk,ipl,ipf,2), zt3we(jpj,jpreci,ipk,ipl,ipf,2)  ) 
     95      ALLOCATE( zt3ns(jpi,nn_hls,ipk,ipl,ipf,2), zt3sn(jpi,nn_hls,ipk,ipl,ipf,2),   & 
     96         &      zt3ew(jpj,nn_hls,ipk,ipl,ipf,2), zt3we(jpj,nn_hls,ipk,ipl,ipf,2)  ) 
    9797 
    9898      zland = 0._wp 
     
    111111               ARRAY_IN(jpi,:,:,:,jf) = ARRAY_IN(  2  ,:,:,:,jf) 
    112112            ELSE                                   !* Closed 
    113                IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(     1       :jpreci,:,:,:,jf) = zland  ! east except F-point 
    114                                                ARRAY_IN(nlci-jpreci+1:jpi   ,:,:,:,jf) = zland  ! west 
     113               IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(     1       :nn_hls,:,:,:,jf) = zland  ! east except F-point 
     114                                               ARRAY_IN(nlci-nn_hls+1:jpi   ,:,:,:,jf) = zland  ! west 
    115115            ENDIF 
    116116         ELSEIF(nbondi == -1) THEN              ! subdomain to the east only 
    117             IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(1:jpreci,:,:,:,jf) = zland     ! south except F-point 
     117            IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(1:nn_hls,:,:,:,jf) = zland     ! south except F-point 
    118118            ! 
    119119         ELSEIF(nbondi == 1) THEN               ! subdomain to the west only 
    120             ARRAY_IN(nlci-jpreci+1:jpi,:,:,:,jf) = zland    ! north 
     120            ARRAY_IN(nlci-nn_hls+1:jpi,:,:,:,jf) = zland    ! north 
    121121         ENDIF 
    122122         !                                ! North-South boundaries 
    123123         ! 
    124124         IF (nbondj == 2 .OR. nbondj == -1) THEN      !* closed 
    125            IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(:,1:jprecj,:,:,jf) = zland            ! south except F-point 
     125           IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(:,1:nn_hls,:,:,jf) = zland            ! south except F-point 
    126126         ELSEIF (nbondj == 2 .OR. nbondj == 1) THEN 
    127                                            ARRAY_IN(:,nlcj-jprecj+1:jpj,:,:,jf) = zland   ! north 
     127                                           ARRAY_IN(:,nlcj-nn_hls+1:jpj,:,:,jf) = zland   ! north 
    128128         ENDIF 
    129129      END DO 
     
    140140               DO jl = 1, ipl 
    141141                  DO jk = 1, ipk 
    142                      DO jh = 1, jpreci 
    143                         zt3ew(:,jh,jk,jl,jf,1) = ARRAY_IN(jpreci+jh,:,jk,jl,jf) 
     142                     DO jh = 1, nn_hls 
     143                        zt3ew(:,jh,jk,jl,jf,1) = ARRAY_IN(nn_hls+jh,:,jk,jl,jf) 
    144144                        zt3we(:,jh,jk,jl,jf,1) = ARRAY_IN(iihom +jh,:,jk,jl,jf) 
    145145                     END DO 
     
    149149         ! 
    150150         !                           ! Migrations 
    151 !!gm      imigr = jpreci * jpj * ipk * ipl * ipf 
    152          imigr = jpreci * jpj * ipk * ipl 
     151!!gm      imigr = nn_hls * jpj * ipk * ipl * ipf 
     152         imigr = nn_hls * jpj * ipk * ipl 
    153153         ! 
    154154         SELECT CASE ( nbondi_bdy(IBD_IN(jf)) ) 
     
    171171         ! 
    172172         !                           ! Write Dirichlet lateral conditions 
    173          iihom = nlci-jpreci 
     173         iihom = nlci-nn_hls 
    174174         ! 
    175175         ! 
     
    178178            DO jl = 1, ipl 
    179179               DO jk = 1, ipk 
    180                   DO jh = 1, jpreci 
     180                  DO jh = 1, nn_hls 
    181181                     ARRAY_IN(iihom+jh,:,jk,jl,jf) = zt3ew(:,jh,jk,jl,jf,2) 
    182182                  END DO 
     
    186186            DO jl = 1, ipl 
    187187               DO jk = 1, ipk 
    188                   DO jh = 1, jpreci 
     188                  DO jh = 1, nn_hls 
    189189                     ARRAY_IN(jh      ,:,jk,jl,jf) = zt3we(:,jh,jk,jl,jf,2) 
    190190                     ARRAY_IN(iihom+jh,:,jk,jl,jf) = zt3ew(:,jh,jk,jl,jf,2) 
     
    195195            DO jl = 1, ipl 
    196196               DO jk = 1, ipk 
    197                   DO jh = 1, jpreci 
     197                  DO jh = 1, nn_hls 
    198198                     ARRAY_IN(jh      ,:,jk,jl,jf) = zt3we(:,jh,jk,jl,jf,2) 
    199199                  END DO 
     
    213213            DO jl = 1, ipl 
    214214               DO jk = 1, ipk 
    215                   DO jh = 1, jprecj 
     215                  DO jh = 1, nn_hls 
    216216                     zt3sn(:,jh,jk,jl,jf,1) = ARRAY_IN(:,ijhom +jh,jk,jl,jf) 
    217                      zt3ns(:,jh,jk,jl,jf,1) = ARRAY_IN(:,jprecj+jh,jk,jl,jf) 
     217                     zt3ns(:,jh,jk,jl,jf,1) = ARRAY_IN(:,nn_hls+jh,jk,jl,jf) 
    218218                  END DO 
    219219               END DO 
     
    222222         ! 
    223223         !                           ! Migrations 
    224 !!gm      imigr = jprecj * jpi * ipk * ipl * ipf 
    225          imigr = jprecj * jpi * ipk * ipl 
     224!!gm      imigr = nn_hls * jpi * ipk * ipl * ipf 
     225         imigr = nn_hls * jpi * ipk * ipl 
    226226         ! 
    227227         SELECT CASE ( nbondj_bdy(IBD_IN(jf)) ) 
     
    244244         ! 
    245245         !                           ! Write Dirichlet lateral conditions 
    246          ijhom = nlcj-jprecj 
     246         ijhom = nlcj-nn_hls 
    247247         ! 
    248248         SELECT CASE ( nbondj_bdy_b(IBD_IN(jf)) ) 
     
    250250            DO jl = 1, ipl 
    251251               DO jk = 1, ipk 
    252                   DO jh = 1, jprecj 
     252                  DO jh = 1, nn_hls 
    253253                     ARRAY_IN(:,ijhom+jh,jk,jl,jf) = zt3ns(:,jh,jk,jl,jf,2) 
    254254                  END DO 
     
    258258            DO jl = 1, ipl 
    259259               DO jk = 1, ipk 
    260                   DO jh = 1, jprecj 
     260                  DO jh = 1, nn_hls 
    261261                     ARRAY_IN(:,      jh,jk,jl,jf) = zt3sn(:,jh,jk,jl,jf,2) 
    262262                     ARRAY_IN(:,ijhom+jh,jk,jl,jf) = zt3ns(:,jh,jk,jl,jf,2) 
     
    267267            DO jl = 1, ipl 
    268268               DO jk = 1, ipk 
    269                   DO jh = 1, jprecj 
     269                  DO jh = 1, nn_hls 
    270270                     ARRAY_IN(:,jh,jk,jl,jf) = zt3sn(:,jh,jk,jl,jf,2) 
    271271                  END DO 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/LBC/mpp_lnk_generic.h90

    r8591 r8758  
    7272      ipf = F_SIZE(ptab)   ! 5th    -      use in "multi" case (array of pointers) 
    7373      ! 
    74       ALLOCATE( zt3ns(jpi,jprecj,ipk,ipl,ipf,2), zt3sn(jpi,jprecj,ipk,ipl,ipf,2),   & 
    75          &      zt3ew(jpj,jpreci,ipk,ipl,ipf,2), zt3we(jpj,jpreci,ipk,ipl,ipf,2)  ) 
     74      ALLOCATE( zt3ns(jpi,nn_hls,ipk,ipl,ipf,2), zt3sn(jpi,nn_hls,ipk,ipl,ipf,2),   & 
     75         &      zt3ew(jpj,nn_hls,ipk,ipl,ipf,2), zt3we(jpj,nn_hls,ipk,ipl,ipf,2)  ) 
    7676      ! 
    7777      ll_Iperio = nbondi == 2 .AND. (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) 
     
    116116               ARRAY_IN(jpi,:,:,:,jf) = ARRAY_IN(  2  ,:,:,:,jf) 
    117117            ELSE                                   !* closed 
    118                IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(     1       :jpreci,:,:,:,jf) = zland    ! east except F-point 
    119                                                ARRAY_IN(nlci-jpreci+1:jpi   ,:,:,:,jf) = zland    ! west 
     118               IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(     1       :nn_hls,:,:,:,jf) = zland    ! east except F-point 
     119                                               ARRAY_IN(nlci-nn_hls+1:jpi   ,:,:,:,jf) = zland    ! west 
    120120            ENDIF 
    121121            !                                ! North-South boundaries 
     
    124124               ARRAY_IN(:,jpj,:,:,jf) = ARRAY_IN(:,   2  ,:,:,jf) 
    125125            ELSE                                   !* closed 
    126                IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(:,     1       :jprecj,:,:,jf) = zland    ! south except F-point 
    127                                                ARRAY_IN(:,nlcj-jprecj+1:jpj   ,:,:,jf) = zland    ! north 
     126               IF( .NOT. NAT_IN(jf) == 'F' )   ARRAY_IN(:,     1       :nn_hls,:,:,jf) = zland    ! south except F-point 
     127                                               ARRAY_IN(:,nlcj-nn_hls+1:jpj   ,:,:,jf) = zland    ! north 
    128128            ENDIF 
    129129         END DO 
     
    142142            DO jl = 1, ipl 
    143143               DO jk = 1, ipk 
    144                   DO jh = 1, jpreci 
    145                      zt3ew(:,jh,jk,jl,jf,1) = ARRAY_IN(jpreci+jh,:,jk,jl,jf) 
     144                  DO jh = 1, nn_hls 
     145                     zt3ew(:,jh,jk,jl,jf,1) = ARRAY_IN(nn_hls+jh,:,jk,jl,jf) 
    146146                     zt3we(:,jh,jk,jl,jf,1) = ARRAY_IN(iihom +jh,:,jk,jl,jf) 
    147147                  END DO 
     
    152152      ! 
    153153      !                           ! Migrations 
    154       imigr = jpreci * jpj * ipk * ipl * ipf 
     154      imigr = nn_hls * jpj * ipk * ipl * ipf 
    155155      ! 
    156156      SELECT CASE ( nbondi ) 
     
    173173      ! 
    174174      !                           ! Write Dirichlet lateral conditions 
    175       iihom = nlci-jpreci 
     175      iihom = nlci-nn_hls 
    176176      ! 
    177177      SELECT CASE ( nbondi ) 
     
    180180            DO jl = 1, ipl 
    181181               DO jk = 1, ipk 
    182                   DO jh = 1, jpreci 
     182                  DO jh = 1, nn_hls 
    183183                     ARRAY_IN(iihom+jh,:,jk,jl,jf) = zt3ew(:,jh,jk,jl,jf,2) 
    184184                  END DO 
     
    190190            DO jl = 1, ipl 
    191191               DO jk = 1, ipk 
    192                   DO jh = 1, jpreci 
     192                  DO jh = 1, nn_hls 
    193193                     ARRAY_IN(jh      ,:,jk,jl,jf) = zt3we(:,jh,jk,jl,jf,2) 
    194194                     ARRAY_IN(iihom+jh,:,jk,jl,jf) = zt3ew(:,jh,jk,jl,jf,2) 
     
    201201            DO jl = 1, ipl 
    202202               DO jk = 1, ipk 
    203                   DO jh = 1, jpreci 
     203                  DO jh = 1, nn_hls 
    204204                     ARRAY_IN(jh      ,:,jk,jl,jf) = zt3we(:,jh,jk,jl,jf,2) 
    205205                  END DO 
     
    218218            DO jl = 1, ipl 
    219219               DO jk = 1, ipk 
    220                   DO jh = 1, jprecj 
     220                  DO jh = 1, nn_hls 
    221221                     zt3sn(:,jh,jk,jl,jf,1) = ARRAY_IN(:,ijhom +jh,jk,jl,jf) 
    222                      zt3ns(:,jh,jk,jl,jf,1) = ARRAY_IN(:,jprecj+jh,jk,jl,jf) 
     222                     zt3ns(:,jh,jk,jl,jf,1) = ARRAY_IN(:,nn_hls+jh,jk,jl,jf) 
    223223                  END DO 
    224224               END DO 
     
    228228      ! 
    229229      !                           ! Migrations 
    230       imigr = jprecj * jpi * ipk * ipl * ipf 
     230      imigr = nn_hls * jpi * ipk * ipl * ipf 
    231231      ! 
    232232      SELECT CASE ( nbondj ) 
     
    249249      ! 
    250250      !                           ! Write Dirichlet lateral conditions 
    251       ijhom = nlcj-jprecj 
     251      ijhom = nlcj-nn_hls 
    252252      ! 
    253253      SELECT CASE ( nbondj ) 
     
    256256            DO jl = 1, ipl 
    257257               DO jk = 1, ipk 
    258                   DO jh = 1, jprecj 
     258                  DO jh = 1, nn_hls 
    259259                     ARRAY_IN(:,ijhom+jh,jk,jl,jf) = zt3ns(:,jh,jk,jl,jf,2) 
    260260                  END DO 
     
    266266            DO jl = 1, ipl 
    267267               DO jk = 1, ipk 
    268                   DO jh = 1, jprecj 
     268                  DO jh = 1, nn_hls 
    269269                     ARRAY_IN(:,      jh,jk,jl,jf) = zt3sn(:,jh,jk,jl,jf,2) 
    270270                     ARRAY_IN(:,ijhom+jh,jk,jl,jf) = zt3ns(:,jh,jk,jl,jf,2) 
     
    277277            DO jl = 1, ipl 
    278278               DO jk = 1, ipk 
    279                   DO jh = 1, jprecj 
     279                  DO jh = 1, nn_hls 
    280280                     ARRAY_IN(:,jh,jk,jl,jf) = zt3sn(:,jh,jk,jl,jf,2) 
    281281                  END DO 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/LBC/mpp_nfd_generic.h90

    r8314 r8758  
    7373      ipj   = 4            ! 2nd dimension of message transfers (last j-lines) 
    7474      ! 
    75       ALLOCATE( znorthloc(jpi,4,ipk,ipl,ipf) ) 
     75      ALLOCATE( znorthloc(jpimax,4,ipk,ipl,ipf) ) 
    7676      ! 
    7777      znorthloc(:,:,:,:,:) = 0._wp 
     
    8282               DO jj = nlcj - ipj +1, nlcj 
    8383                  ij = jj - nlcj + ipj 
    84                   znorthloc(:,ij,jk,jl,jf) = ARRAY_IN(:,jj,jk,jl,jf) 
     84                  znorthloc(1:jpi,ij,jk,jl,jf) = ARRAY_IN(1:jpi,jj,jk,jl,jf) 
    8585               END DO 
    8686            END DO 
     
    8989      ! 
    9090      ! 
    91       itaille = jpi * ipj * ipk * ipl * ipf 
     91      itaille = jpimax * ipj * ipk * ipl * ipf 
    9292      ! 
    9393      IF( l_north_nogather ) THEN      !==  ????  ==! 
     
    177177      ELSE                             !==  ????  ==! 
    178178         ALLOCATE( ztab       (jpiglo,4,ipk,ipl,ipf     ) ) 
    179          ALLOCATE( znorthgloio(jpi   ,4,ipk,ipl,ipf,jpni) ) 
     179         ALLOCATE( znorthgloio(jpimax,4,ipk,ipl,ipf,jpni) ) 
    180180         ! 
    181181         CALL MPI_ALLGATHER( znorthloc  , itaille, MPI_DOUBLE_PRECISION,                & 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90

    r8375 r8758  
    153153      !  dimensions divided by the number of processors minus the overlap array. 
    154154      ! 
    155       nreci = 2 * jpreci 
    156       nrecj = 2 * jprecj 
     155      nreci = 2 * nn_hls 
     156      nrecj = 2 * nn_hls 
    157157      iresti = 1 + MOD( jpiglo - nreci -1 , jpni ) 
    158158      irestj = 1 + MOD( jpjglo - nrecj -1 , jpnj ) 
    159159      ! 
     160      !  Need to use jpimax and jpjmax here since jpi and jpj have already been 
     161      !  shrunk to local sizes in nemogcm 
    160162#if defined key_nemocice_decomp 
    161163      ! Change padding to be consistent with CICE 
    162       ilci(1:jpni-1      ,:) = jpi 
    163       ilci(jpni          ,:) = jpiglo - (jpni - 1) * (jpi - nreci) 
    164       ! 
    165       ilcj(:,      1:jpnj-1) = jpj 
    166       ilcj(:,          jpnj) = jpjglo - (jpnj - 1) * (jpj - nrecj) 
     164      ilci(1:jpni-1      ,:) = jpimax 
     165      ilci(jpni          ,:) = jpiglo - (jpni - 1) * (jpimax - nreci) 
     166      ! 
     167      ilcj(:,      1:jpnj-1) = jpjmax 
     168      ilcj(:,          jpnj) = jpjglo - (jpnj - 1) * (jpjmax - nrecj) 
    167169#else 
    168       ilci(1:iresti      ,:) = jpi 
    169       ilci(iresti+1:jpni ,:) = jpi-1 
    170  
    171       ilcj(:,      1:irestj) = jpj 
    172       ilcj(:, irestj+1:jpnj) = jpj-1 
     170      ilci(1:iresti      ,:) = jpimax 
     171      ilci(iresti+1:jpni ,:) = jpimax-1 
     172 
     173      ilcj(:,      1:irestj) = jpjmax 
     174      ilcj(:, irestj+1:jpnj) = jpjmax-1 
    173175#endif 
    174176      ! 
     
    237239         ioea(ii,ij) = iproc + 1 
    238240         iono(ii,ij) = iproc + jpni 
    239          ildi(ii,ij) =  1  + jpreci 
    240          ilei(ii,ij) = ili - jpreci 
     241         ildi(ii,ij) =  1  + nn_hls 
     242         ilei(ii,ij) = ili - nn_hls 
    241243 
    242244         IF( ibondi(ii,ij) == -1 .OR. ibondi(ii,ij) == 2 ) ildi(ii,ij) =  1 
    243245         IF( ibondi(ii,ij) ==  1 .OR. ibondi(ii,ij) == 2 ) ilei(ii,ij) = ili 
    244          ildj(ii,ij) =  1  + jprecj 
    245          ilej(ii,ij) = ilj - jprecj 
     246         ildj(ii,ij) =  1  + nn_hls 
     247         ilej(ii,ij) = ilj - nn_hls 
    246248         IF( ibondj(ii,ij) == -1 .OR. ibondj(ii,ij) == 2 ) ildj(ii,ij) =  1 
    247249         IF( ibondj(ii,ij) ==  1 .OR. ibondj(ii,ij) == 2 ) ilej(ii,ij) = ilj 
     
    441443      IF (lwp) THEN 
    442444         CALL ctl_opn( inum, 'layout.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) 
    443          WRITE(inum,'(a)') '   jpnij     jpi     jpj     jpk  jpiglo  jpjglo' 
    444          WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo 
     445         WRITE(inum,'(a)') '   jpnij   jpimax  jpjmax    jpk  jpiglo  jpjglo'//& 
     446   &           ' ( local:    narea     jpi     jpj)' 
     447         WRITE(inum,'(6i8,a,3i8,a)') jpnij,jpimax,jpjmax,jpk,jpiglo,jpjglo,& 
     448   &           ' ( local: ',narea,jpi,jpj,' )' 
    445449         WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimp njmp nono noso nowe noea nbondi nbondj ' 
    446450 
     
    488492         WRITE(numout,*) ' nreci  = ', nreci   
    489493         WRITE(numout,*) ' nrecj  = ', nrecj   
    490          WRITE(numout,*) ' jpreci = ', jpreci  
    491          WRITE(numout,*) ' jprecj = ', jprecj  
     494         WRITE(numout,*) ' nn_hls = ', nn_hls  
    492495      ENDIF 
    493496 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r8314 r8758  
    239239      INTEGER  ::   ji                 ! dummy loop indices 
    240240      INTEGER  ::   ios, ilocal_comm   ! local integer 
     241      INTEGER  ::   iiarea, ijarea     ! local integers 
     242      INTEGER  ::   iirest, ijrest     ! local integers 
    241243      CHARACTER(len=120), DIMENSION(30) ::   cltxt, cltxt2, clnam 
    242244      ! 
     
    282284      ENDIF 
    283285      ! 
    284       jpk = jpkglo 
    285       ! 
    286 #if defined key_agrif 
    287       IF( .NOT. Agrif_Root() ) THEN       ! AGRIF children: specific setting (cf. agrif_user.F90) 
    288          jpiglo  = nbcellsx + 2 + 2*nbghostcells 
    289          jpjglo  = nbcellsy + 2 + 2*nbghostcells 
    290          jpi     = ( jpiglo-2*jpreci + (jpni-1+0) ) / jpni + 2*jpreci 
    291          jpj     = ( jpjglo-2*jprecj + (jpnj-1+0) ) / jpnj + 2*jprecj 
    292          nperio  = 0 
    293          jperio  = 0 
    294          ln_use_jattr = .false. 
    295       ENDIF 
    296 #endif 
    297286      ! 
    298287      !                             !--------------------------------------------! 
     
    353342#endif 
    354343      ENDIF 
     344      ! 
     345#if defined key_agrif 
     346      IF( .NOT. Agrif_Root() ) THEN       ! AGRIF children: specific setting (cf. agrif_user.F90) 
     347         jpiglo  = nbcellsx + 2 + 2*nbghostcells 
     348         jpjglo  = nbcellsy + 2 + 2*nbghostcells 
     349         jpi     = ( jpiglo-2*nn_hls + (jpni-1+0) ) / jpni + 2*nn_hls 
     350         jpj     = ( jpjglo-2*nn_hls + (jpnj-1+0) ) / jpnj + 2*nn_hls 
     351         jpimax  = jpi 
     352         jpjmax  = jpj 
     353         nperio  = 0 
     354         jperio  = 0 
     355         ln_use_jattr = .false. 
     356      ENDIF 
     357#endif 
    355358 
    356359      IF( Agrif_Root() ) THEN       ! AGRIF mother: specific setting from jpni and jpnj 
     360         iiarea = 1 + MOD( narea - 1 , jpni ) 
     361         ijarea = 1 + ( narea - 1 ) / jpni 
     362         iirest = 1 + MOD( jpiglo - 2*nn_hls - 1 , jpni ) 
     363         ijrest = 1 + MOD( jpjglo - 2*nn_hls - 1 , jpnj ) 
    357364#if defined key_nemocice_decomp 
    358          jpi = ( nx_global+2-2*jpreci + (jpni-1) ) / jpni + 2*jpreci    ! first  dim. 
    359          jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj    ! second dim.  
     365         jpi = ( nx_global+2-2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     366         jpj = ( ny_global+2-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim.  
     367         jpimax  = jpi 
     368         jpjmax  = jpj 
     369         IF( iiarea == jpni ) jpi = jpiglo - (jpni - 1) * (jpi - 2*nn_hls) 
     370         IF( ijarea == jpnj ) jpj = jpjglo - (jpnj - 1) * (jpj - 2*nn_hls) 
    360371#else 
    361          jpi = ( jpiglo     -2*jpreci + (jpni-1) ) / jpni + 2*jpreci    ! first  dim. 
    362          jpj = ( jpjglo     -2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj    ! second dim. 
    363 #endif 
    364       ENDIF 
    365  
    366 !!gm ???    why here  it has already been done in line 301 ! 
     372         jpi = ( jpiglo     -2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     373         jpj = ( jpjglo     -2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim. 
     374         jpimax  = jpi 
     375         jpjmax  = jpj 
     376         IF( iiarea > iirest ) jpi = jpi - 1 
     377         IF( ijarea > ijrest ) jpj = jpj - 1 
     378#endif 
     379      ENDIF 
     380 
    367381      jpk = jpkglo                                             ! third dim 
    368 !!gm end 
    369382 
    370383#if defined key_agrif 
     
    414427      !                                      ! Domain decomposition 
    415428      CALL mpp_init 
     429      IF( ln_nnogather )    CALL nemo_northcomms! northfold neighbour lists (must be done after the masks are defined) 
    416430      ! 
    417431      IF( nn_timing == 1 )  CALL timing_init 
     
    424438                            CALL     dom_init   ! Domain 
    425439      IF( ln_crs        )   CALL     crs_init   ! coarsened grid: domain initialization  
    426       IF( ln_nnogather )    CALL nemo_northcomms! northfold neighbour lists (must be done after the masks are defined) 
     440      !IF( ln_nnogather )    CALL nemo_northcomms! northfold neighbour lists (must be done after the masks are defined) 
    427441      IF( ln_ctl        )   CALL prt_ctl_init   ! Print control 
    428442       
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/OPA_SRC/par_oce.F90

    r7646 r8758  
    5454 
    5555   ! local domain size                !!! * local computational domain * 
    56    INTEGER, PUBLIC ::   jpi   ! = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci   !: first  dimension 
    57    INTEGER, PUBLIC ::   jpj   ! = ( jpjglo-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj   !: second dimension 
     56   INTEGER, PUBLIC ::   jpi   ! = ( jpiglo-2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls   !: first  dimension 
     57   INTEGER, PUBLIC ::   jpj   ! = ( jpjglo-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls   !: second dimension 
    5858   INTEGER, PUBLIC ::   jpk   ! = jpkglo 
    5959   INTEGER, PUBLIC ::   jpim1 ! = jpi-1                                            !: inner domain indices 
     
    6161   INTEGER, PUBLIC ::   jpkm1 ! = jpk-1                                            !:   -     -      - 
    6262   INTEGER, PUBLIC ::   jpij  ! = jpi*jpj                                          !:  jpi x jpj 
     63   INTEGER, PUBLIC ::   jpimax! = maximum jpi across all areas  
     64   INTEGER, PUBLIC ::   jpjmax! = maximum jpj across all areas 
    6365 
    6466   !!--------------------------------------------------------------------- 
     
    7880   INTEGER, PUBLIC, PARAMETER ::   jpr2di = 0   !: number of columns for extra outer halo  
    7981   INTEGER, PUBLIC, PARAMETER ::   jpr2dj = 0   !: number of rows    for extra outer halo  
    80    INTEGER, PUBLIC, PARAMETER ::   jpreci = 1   !: number of columns for overlap  
    81    INTEGER, PUBLIC, PARAMETER ::   jprecj = 1   !: number of rows    for overlap  
     82   INTEGER, PUBLIC, PARAMETER ::   nn_hls = 1   !: halo width (applies to both rows and columns) 
    8283 
    8384   !!---------------------------------------------------------------------- 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/SAO_SRC/nemogcm.F90

    r8314 r8758  
    9393      INTEGER ::   ji                 ! dummy loop indices 
    9494      INTEGER ::   ios, ilocal_comm   ! local integer 
     95      INTEGER  ::   iiarea, ijarea     ! local integers 
     96      INTEGER  ::   iirest, ijrest     ! local integers 
    9597      CHARACTER(len=120), DIMENSION(30) ::   cltxt, cltxt2, clnam 
    9698      ! 
     
    209211#endif 
    210212      ENDIF 
     213      ! 
     214#if defined key_agrif 
     215      IF( .NOT. Agrif_Root() ) THEN       ! AGRIF children: specific setting (cf. agrif_user.F90) 
     216         jpiglo  = nbcellsx + 2 + 2*nbghostcells 
     217         jpjglo  = nbcellsy + 2 + 2*nbghostcells 
     218         jpi     = ( jpiglo-2*nn_hls + (jpni-1+0) ) / jpni + 2*nn_hls 
     219         jpj     = ( jpjglo-2*nn_hls + (jpnj-1+0) ) / jpnj + 2*nn_hls 
     220         jpimax  = jpi 
     221         jpjmax  = jpj 
     222         nperio  = 0 
     223         jperio  = 0 
     224         ln_use_jattr = .false. 
     225      ENDIF 
     226#endif 
    211227 
    212228      IF( Agrif_Root() ) THEN       ! AGRIF mother: specific setting from jpni and jpnj 
     229         iiarea = 1 + MOD( narea - 1 , jpni ) 
     230         ijarea = 1 + ( narea - 1 ) / jpni 
     231         iirest = 1 + MOD( jpiglo - 2*nn_hls - 1 , jpni ) 
     232         ijrest = 1 + MOD( jpjglo - 2*nn_hls - 1 , jpnj ) 
    213233#if defined key_nemocice_decomp 
    214          jpi = ( nx_global+2-2*jpreci + (jpni-1) ) / jpni + 2*jpreci    ! first  dim. 
    215          jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj    ! second dim.  
     234         jpi = ( nx_global+2-2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     235         jpj = ( ny_global+2-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim.  
     236         jpimax  = jpi 
     237         jpjmax  = jpj 
     238         IF( iiarea == jpni ) jpi = jpiglo - (jpni - 1) * (jpi - 2*nn_hls) 
     239         IF( ijarea == jpnj ) jpj = jpjglo - (jpnj - 1) * (jpj - 2*nn_hls) 
    216240#else 
    217          jpi = ( jpiglo     -2*jpreci + (jpni-1) ) / jpni + 2*jpreci    ! first  dim. 
    218          jpj = ( jpjglo     -2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj    ! second dim. 
    219 #endif 
    220       ENDIF 
    221  
    222 !!gm ???    why here  it has already been done in line 301 ! 
     241         jpi = ( jpiglo     -2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     242         jpj = ( jpjglo     -2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim. 
     243         jpimax  = jpi 
     244         jpjmax  = jpj 
     245         IF( iiarea > iirest ) jpi = jpi - 1 
     246         IF( ijarea > ijrest ) jpj = jpj - 1 
     247#endif 
     248      ENDIF 
     249 
    223250      jpk = jpkglo                                             ! third dim 
    224 !!gm end 
     251 
     252#if defined key_agrif 
     253      ! simple trick to use same vertical grid as parent but different number of levels:  
     254      ! Save maximum number of levels in jpkglo, then define all vertical grids with this number. 
     255      ! Suppress once vertical online interpolation is ok 
     256      IF(.NOT.Agrif_Root())   jpkglo = Agrif_Parent( jpkglo ) 
     257#endif 
    225258      jpim1 = jpi-1                                            ! inner domain indices 
    226259      jpjm1 = jpj-1                                            !   "           " 
    227       jpkm1 = jpk-1                                            !   "           " 
     260      jpkm1 = MAX( 1, jpk-1 )                                  !   "           " 
    228261      jpij  = jpi*jpj                                          !  jpi x j 
    229262 
     
    381414      ! 
    382415      IF( numstp          /= -1 )   CLOSE( numstp          )   ! time-step file 
    383       IF( numsol          /= -1 )   CLOSE( numsol          )   ! solver file 
     416      IF( numrun          /= -1 )   CLOSE( numrun          )   ! run statistics file 
    384417      IF( numnam_ref      /= -1 )   CLOSE( numnam_ref      )   ! oce reference namelist 
    385418      IF( numnam_cfg      /= -1 )   CLOSE( numnam_cfg      )   ! oce configuration namelist 
  • branches/2017/dev_r8126_ROBUST08_no_ghost/NEMOGCM/NEMO/SAS_SRC/nemogcm.F90

    r8314 r8758  
    7474      ! 
    7575#if defined key_agrif 
    76      CALL Agrif_Init_Grids()      ! AGRIF: set the meshes 
     76      CALL Agrif_Init_Grids()      ! AGRIF: set the meshes 
    7777#endif 
    7878      ! 
     
    167167      INTEGER  ::   ilocal_comm   ! local integer 
    168168      INTEGER  ::   ios, inum     !   -      - 
     169      INTEGER  ::   iiarea, ijarea     ! local integers 
     170      INTEGER  ::   iirest, ijrest     ! local integers 
    169171      CHARACTER(len=120), DIMENSION(30) ::   cltxt, cltxt2, clnam 
    170172      CHARACTER(len=80)                 ::   clname 
     
    220222      ENDIF 
    221223      ! 
    222       jpk = jpkglo 
    223       ! 
    224 #if defined key_agrif 
    225       IF( .NOT. Agrif_Root() ) THEN       ! AGRIF children: specific setting (cf. agrif_user.F90) 
    226          jpiglo  = nbcellsx + 2 + 2*nbghostcells 
    227          jpjglo  = nbcellsy + 2 + 2*nbghostcells 
    228          jpi     = ( jpiglo-2*jpreci + (jpni-1+0) ) / jpni + 2*jpreci 
    229          jpj     = ( jpjglo-2*jprecj + (jpnj-1+0) ) / jpnj + 2*jprecj 
    230          nperio  = 0 
    231          jperio  = 0 
    232          ln_use_jattr = .false. 
    233       ENDIF 
    234 #endif 
    235224      ! 
    236225      !                             !--------------------------------------------! 
     
    289278#endif 
    290279      ENDIF 
     280      ! 
     281#if defined key_agrif 
     282      IF( .NOT. Agrif_Root() ) THEN       ! AGRIF children: specific setting (cf. agrif_user.F90) 
     283         jpiglo  = nbcellsx + 2 + 2*nbghostcells 
     284         jpjglo  = nbcellsy + 2 + 2*nbghostcells 
     285         jpi     = ( jpiglo-2*nn_hls + (jpni-1+0) ) / jpni + 2*nn_hls 
     286         jpj     = ( jpjglo-2*nn_hls + (jpnj-1+0) ) / jpnj + 2*nn_hls 
     287         jpimax  = jpi 
     288         jpjmax  = jpj 
     289         nperio  = 0 
     290         jperio  = 0 
     291         ln_use_jattr = .false. 
     292      ENDIF 
     293#endif 
    291294 
    292295      IF( Agrif_Root() ) THEN       ! AGRIF mother: specific setting from jpni and jpnj 
     296         iiarea = 1 + MOD( narea - 1 , jpni ) 
     297         ijarea = 1 + ( narea - 1 ) / jpni 
     298         iirest = 1 + MOD( jpiglo - 2*nn_hls - 1 , jpni ) 
     299         ijrest = 1 + MOD( jpjglo - 2*nn_hls - 1 , jpnj ) 
    293300#if defined key_nemocice_decomp 
    294          jpi = ( nx_global+2-2*jpreci + (jpni-1) ) / jpni + 2*jpreci    ! first  dim. 
    295          jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj    ! second dim.  
     301         jpi = ( nx_global+2-2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     302         jpj = ( ny_global+2-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim.  
     303         jpimax  = jpi 
     304         jpjmax  = jpj 
     305         IF( iiarea == jpni ) jpi = jpiglo - (jpni - 1) * (jpi - 2*nn_hls) 
     306         IF( ijarea == jpnj ) jpj = jpjglo - (jpnj - 1) * (jpj - 2*nn_hls) 
    296307#else 
    297          jpi = ( jpiglo     -2*jpreci + (jpni-1) ) / jpni + 2*jpreci    ! first  dim. 
    298          jpj = ( jpjglo     -2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj    ! second dim. 
    299 #endif 
    300       ENDIF 
     308         jpi = ( jpiglo     -2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     309         jpj = ( jpjglo     -2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim. 
     310         jpimax  = jpi 
     311         jpjmax  = jpj 
     312         IF( iiarea > iirest ) jpi = jpi - 1 
     313         IF( ijarea > ijrest ) jpj = jpj - 1 
     314#endif 
     315      ENDIF 
     316 
     317      jpk = jpkglo                                             ! third dim 
    301318 
    302319#if defined key_agrif 
     
    676693                IF ((sxM .gt. sxT) .AND. (sxM .lt. dxT)) THEN 
    677694                   nsndto = nsndto + 1 
    678                      isendto(nsndto) = jn 
     695                   isendto(nsndto) = jn 
    679696                ELSEIF ((sxM .le. sxT) .AND. (dxM .ge. dxT)) THEN 
    680697                   nsndto = nsndto + 1 
Note: See TracChangeset for help on using the changeset viewer.