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 14976 for NEMO/trunk – NEMO

Changeset 14976 for NEMO/trunk


Ignore:
Timestamp:
2021-06-11T11:14:27+02:00 (3 years ago)
Author:
jchanut
Message:

#2638, merge dev_14608_AGRIF_domcfg branch into trunk

Location:
NEMO/trunk
Files:
3 deleted
19 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r14608_AGRIF_domcfg@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
  • NEMO/trunk/cfgs/AGRIF_DEMO/EXPREF/AGRIF_FixedGrids.in

    r13286 r14976  
    112 
    2 41 81 49 91 1 1 1 
    3 121 152 110 143 4 4 4 
     245 85 52 94 1 1 1 
     3125 156 113 146 4 4 4 
    440 
    551 
  • NEMO/trunk/src/NST/agrif_oce_interp.F90

    r14433 r14976  
    4444   PUBLIC   interptsn, interpsshn, interpavm 
    4545   PUBLIC   interpunb, interpvnb , interpub2b, interpvb2b 
    46    PUBLIC   interpe3t, interpglamt, interpgphit 
     46   PUBLIC   interpglamt, interpgphit 
    4747   PUBLIC   interpht0, interpmbkt, interpe3t0_vremap 
    4848   PUBLIC   agrif_istate_oce, agrif_istate_ssh   ! called by icestate.F90 and domvvl.F90 
     
    216216      IF( lk_west ) THEN 
    217217         ibdy1 = nn_hls + 2                  ! halo + land + 1 
    218          ibdy2 = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhox()   ! halo + land + nbghostcells 
     218         ibdy2 = nn_hls + nbghostcells + nn_shift_bar*Agrif_Rhox()   ! halo + land + nbghostcells 
    219219         ! 
    220220         IF( .NOT.ln_dynspg_ts ) THEN  ! Store transport 
     
    265265      ! --- East --- ! 
    266266      IF( lk_east) THEN 
    267          ibdy1 = jpiglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhox()     
     267         ibdy1 = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()     
    268268         ibdy2 = jpiglo - ( nn_hls + 2 )                  
    269269         ! 
     
    293293         END DO 
    294294         ! 
    295          ibdy1 = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()  
     295         ibdy1 = jpiglo - ( nn_hls + nbghostcells - 1 ) - nn_shift_bar*Agrif_Rhox()  
    296296         ibdy2 = jpiglo - ( nn_hls + 1 )      
    297297         ! 
     
    326326      IF( lk_south ) THEN 
    327327         jbdy1 = nn_hls + 2                  
    328          jbdy2 = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()    
     328         jbdy2 = nn_hls + nbghostcells + nn_shift_bar*Agrif_Rhoy()    
    329329         ! 
    330330         IF( .NOT.ln_dynspg_ts ) THEN 
     
    375375      ! --- North --- ! 
    376376      IF( lk_north ) THEN 
    377          jbdy1 = jpjglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhoy()  
     377         jbdy1 = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()  
    378378         jbdy2 = jpjglo - ( nn_hls + 2 ) 
    379379         ! 
     
    403403         END DO 
    404404         ! 
    405          jbdy1 = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()   
     405         jbdy1 = jpjglo - ( nn_hls + nbghostcells -1 ) - nn_shift_bar*Agrif_Rhoy()   
    406406         jbdy2 = jpjglo - ( nn_hls + 1 ) 
    407407         ! 
     
    451451      IF( lk_west ) THEN 
    452452         istart = nn_hls + 2                              ! halo + land + 1 
    453          iend   = nn_hls + 1 + nbghostcells  + nn_shift_bar*Agrif_Rhox()              ! halo + land + nbghostcells 
     453         iend   = nn_hls + nbghostcells  + nn_shift_bar*Agrif_Rhox()              ! halo + land + nbghostcells 
    454454         DO ji = mi0(istart), mi1(iend) 
    455455            DO jj=1,jpj 
     
    462462      !--- East ---! 
    463463      IF( lk_east ) THEN 
    464          istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()  
     464         istart = jpiglo - ( nn_hls + nbghostcells -1 ) - nn_shift_bar*Agrif_Rhox()  
    465465         iend   = jpiglo - ( nn_hls + 1 )                 
    466466         DO ji = mi0(istart), mi1(iend) 
     
    470470            END DO 
    471471         END DO 
    472          istart = jpiglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhox()  
     472         istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()  
    473473         iend   = jpiglo - ( nn_hls + 2 )                 
    474474         DO ji = mi0(istart), mi1(iend) 
     
    482482      IF( lk_south ) THEN 
    483483         jstart = nn_hls + 2                               
    484          jend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()            
     484         jend   = nn_hls + nbghostcells + nn_shift_bar*Agrif_Rhoy()            
    485485         DO jj = mj0(jstart), mj1(jend) 
    486486 
     
    494494      !--- North ---! 
    495495      IF( lk_north ) THEN 
    496          jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()      
     496         jstart = jpjglo - ( nn_hls + nbghostcells -1 ) - nn_shift_bar*Agrif_Rhoy()      
    497497         jend   = jpjglo - ( nn_hls + 1 )                 
    498498         DO jj = mj0(jstart), mj1(jend) 
     
    501501            END DO 
    502502         END DO 
    503          jstart = jpjglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhoy()  
     503         jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()  
    504504         jend   = jpjglo - ( nn_hls + 2 )                 
    505505         DO jj = mj0(jstart), mj1(jend) 
     
    529529      IF( lk_west ) THEN 
    530530         istart = nn_hls + 2                               
    531          iend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhox()  
     531         iend   = nn_hls + nbghostcells + nn_shift_bar*Agrif_Rhox()  
    532532         DO ji = mi0(istart), mi1(iend) 
    533533            DO jj=1,jpj 
     
    540540      !--- East ---! 
    541541      IF( lk_east ) THEN 
    542          istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox() 
     542         istart = jpiglo - ( nn_hls + nbghostcells -1 ) - nn_shift_bar*Agrif_Rhox() 
    543543         iend   = jpiglo - ( nn_hls + 1 )                  
    544544         DO ji = mi0(istart), mi1(iend) 
     
    547547            END DO 
    548548         END DO 
    549          istart = jpiglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhox()  
     549         istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()  
    550550         iend   = jpiglo - ( nn_hls + 2 )                  
    551551         DO ji = mi0(istart), mi1(iend) 
     
    559559      IF( lk_south ) THEN 
    560560         jstart = nn_hls + 2                               
    561          jend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()  
     561         jend   = nn_hls + nbghostcells + nn_shift_bar*Agrif_Rhoy()  
    562562         DO jj = mj0(jstart), mj1(jend) 
    563563            DO ji=1,jpi 
     
    570570      !--- North ---! 
    571571      IF( lk_north ) THEN 
    572          jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()  
     572         jstart = jpjglo - ( nn_hls + nbghostcells -1 ) - nn_shift_bar*Agrif_Rhoy()  
    573573         jend   = jpjglo - ( nn_hls + 1 )                 
    574574         DO jj = mj0(jstart), mj1(jend) 
     
    577577            END DO 
    578578         END DO 
    579          jstart = jpjglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhoy()  
     579         jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()  
    580580         jend   = jpjglo - ( nn_hls + 2 )                
    581581         DO jj = mj0(jstart), mj1(jend) 
     
    672672      IF(lk_west) THEN 
    673673         istart = nn_hls + 2                                                          ! halo + land + 1 
    674          iend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhox()               ! halo + land + nbghostcells 
     674         iend   = nn_hls + nbghostcells + nn_shift_bar*Agrif_Rhox()               ! halo + land + nbghostcells 
    675675         DO ji = mi0(istart), mi1(iend) 
    676676            DO jj = 1, jpj 
     
    682682      ! --- East --- ! 
    683683      IF(lk_east) THEN 
    684          istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()       ! halo + land + nbghostcells - 1 
     684         istart = jpiglo - ( nn_hls + nbghostcells -1 ) - nn_shift_bar*Agrif_Rhox()       ! halo + land + nbghostcells - 1 
    685685         iend   = jpiglo - ( nn_hls + 1 )                                              ! halo + land + 1            - 1 
    686686         DO ji = mi0(istart), mi1(iend) 
     
    694694      IF(lk_south) THEN 
    695695         jstart = nn_hls + 2                                                          ! halo + land + 1 
    696          jend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()               ! halo + land + nbghostcells 
     696         jend   = nn_hls + nbghostcells + nn_shift_bar*Agrif_Rhoy()               ! halo + land + nbghostcells 
    697697         DO jj = mj0(jstart), mj1(jend) 
    698698            DO ji = 1, jpi 
     
    704704      ! --- North --- ! 
    705705      IF(lk_north) THEN 
    706          jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()     ! halo + land + nbghostcells - 1 
     706         jstart = jpjglo - ( nn_hls + nbghostcells -1 ) - nn_shift_bar*Agrif_Rhoy()     ! halo + land + nbghostcells - 1 
    707707         jend   = jpjglo - ( nn_hls + 1 )                                            ! halo + land + 1            - 1 
    708708         DO jj = mj0(jstart), mj1(jend) 
     
    731731      IF(lk_west) THEN 
    732732         istart = nn_hls + 2                                                        ! halo + land + 1 
    733          iend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhox()             ! halo + land + nbghostcells 
     733         iend   = nn_hls + nbghostcells + nn_shift_bar*Agrif_Rhox()             ! halo + land + nbghostcells 
    734734         DO ji = mi0(istart), mi1(iend) 
    735735            DO jj = 1, jpj 
     
    741741      ! --- East --- ! 
    742742      IF(lk_east) THEN 
    743          istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()    ! halo + land + nbghostcells - 1 
     743         istart = jpiglo - ( nn_hls + nbghostcells -1 ) - nn_shift_bar*Agrif_Rhox()    ! halo + land + nbghostcells - 1 
    744744         iend   = jpiglo - ( nn_hls + 1 )                                           ! halo + land + 1            - 1 
    745745         DO ji = mi0(istart), mi1(iend) 
     
    753753      IF(lk_south) THEN 
    754754         jstart = nn_hls + 2                                                        ! halo + land + 1 
    755          jend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()             ! halo + land + nbghostcells 
     755         jend   = nn_hls + nbghostcells + nn_shift_bar*Agrif_Rhoy()             ! halo + land + nbghostcells 
    756756         DO jj = mj0(jstart), mj1(jend) 
    757757            DO ji = 1, jpi 
     
    763763      ! --- North --- ! 
    764764      IF(lk_north) THEN 
    765          jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()    ! halo + land + nbghostcells - 1 
     765         jstart = jpjglo - ( nn_hls + nbghostcells -1 ) - nn_shift_bar*Agrif_Rhoy()    ! halo + land + nbghostcells - 1 
    766766         jend   = jpjglo - ( nn_hls + 1 )                                           ! halo + land + 1            - 1 
    767767         DO jj = mj0(jstart), mj1(jend) 
     
    14181418            DO jj=j1,j2 
    14191419               IF (utint_stage(ji,jj)==0) THEN  
    1420                   zx = 2._wp*MOD(ABS(mig0(ji)-nbghostcells-1), INT(Agrif_Rhox()))/zrhox - 1._wp   
     1420                  zx = 2._wp*MOD(ABS(mig0(ji)-nbghostcells), INT(Agrif_Rhox()))/zrhox - 1._wp   
    14211421                  ubdy(ji,jj) = ubdy(ji,jj) + 0.25_wp*(1._wp-zx*zx) * ptab(ji,jj) &  
    14221422                              &         / zrhoy *r1_e2u(ji,jj) * umask(ji,jj,1)  
     
    15221522            DO jj=j1,j2 
    15231523               IF (vtint_stage(ji,jj)==0) THEN  
    1524                   zy = 2._wp*MOD(ABS(mjg0(jj)-nbghostcells-1), INT(Agrif_Rhoy()))/zrhoy - 1._wp   
     1524                  zy = 2._wp*MOD(ABS(mjg0(jj)-nbghostcells), INT(Agrif_Rhoy()))/zrhoy - 1._wp   
    15251525                  vbdy(ji,jj) = vbdy(ji,jj) + 0.25_wp*(1._wp-zy*zy) * ptab(ji,jj) &  
    15261526                              &         / zrhox * r1_e1v(ji,jj) * vmask(ji,jj,1)  
     
    15331533      !  
    15341534   END SUBROUTINE vb2b_cor 
    1535  
    1536  
    1537    SUBROUTINE interpe3t( ptab, i1, i2, j1, j2, k1, k2, before ) 
    1538       !!---------------------------------------------------------------------- 
    1539       !!                  ***  ROUTINE interpe3t  *** 
    1540       !!----------------------------------------------------------------------   
    1541       INTEGER                              , INTENT(in   ) :: i1, i2, j1, j2, k1, k2 
    1542       REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab 
    1543       LOGICAL                              , INTENT(in   ) :: before 
    1544       ! 
    1545       INTEGER :: ji, jj, jk 
    1546       !!----------------------------------------------------------------------   
    1547       !     
    1548       IF( before ) THEN 
    1549          ptab(i1:i2,j1:j2,k1:k2) = tmask(i1:i2,j1:j2,k1:k2) * e3t_0(i1:i2,j1:j2,k1:k2) 
    1550       ELSE 
    1551          ! 
    1552          DO jk = k1, k2 
    1553             DO jj = j1, j2 
    1554                DO ji = i1, i2 
    1555                   IF( ABS( ptab(ji,jj,jk) - tmask(ji,jj,jk) * e3t_0(ji,jj,jk) ) > 1.D-2) THEN 
    1556                      WRITE(numout,*) ' Agrif error for e3t_0: parent , child, i, j, k ',  &  
    1557                      &                 ptab(ji,jj,jk), tmask(ji,jj,jk) * e3t_0(ji,jj,jk), & 
    1558                      &                 mig0(ji), mjg0(jj), jk 
    1559                      kindic_agr = kindic_agr + 1 
    1560                   ENDIF 
    1561                END DO 
    1562             END DO 
    1563          END DO 
    1564          ! 
    1565       ENDIF 
    1566       !  
    1567    END SUBROUTINE interpe3t 
    15681535 
    15691536 
     
    17931760      INTEGER, INTENT(inout) ::   iindic 
    17941761      !! 
    1795       INTEGER :: ji, jj 
     1762      INTEGER :: ji, jj, jk 
    17961763      INTEGER  :: istart, iend, jstart, jend, ispon 
    17971764      !!----------------------------------------------------------------------   
     
    18021769         ispon  = nn_sponge_len * Agrif_irhox() 
    18031770         istart = nn_hls + 2                                  ! halo + land + 1 
    1804          iend   = nn_hls + 1 + nbghostcells + ispon           ! halo + land + nbghostcells + sponge 
    1805          jstart = nn_hls + 2 
     1771         iend   = nn_hls + nbghostcells + ispon           ! halo + land + nbghostcells + sponge 
     1772         jstart = nn_hls + 2  
     1773         jend   = jpjglo - nn_hls - 1  
     1774         DO ji = mi0(istart), mi1(iend) 
     1775            DO jj = mj0(jstart), mj1(jend) 
     1776               IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1777               IF ( .NOT.ln_vert_remap) THEN 
     1778                  DO jk = 1, jpkm1 
     1779                     IF ( ABS(e3t0_parent(ji,jj,jk)-e3t_0(ji,jj,jk))*tmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1780                  END DO  
     1781               ENDIF 
     1782            END DO 
     1783            DO jj = mj0(jstart), mj1(jend-1) 
     1784               IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1785               IF ( .NOT.ln_vert_remap) THEN 
     1786                  DO jk = 1, jpkm1 
     1787                     IF ( ABS(e3v0_parent(ji,jj,jk)-e3v_0(ji,jj,jk))*vmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1788                  END DO  
     1789               ENDIF 
     1790            END DO 
     1791         END DO 
     1792         DO ji = mi0(istart), mi1(iend-1) 
     1793            DO jj = mj0(jstart), mj1(jend) 
     1794               IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1795               IF ( .NOT.ln_vert_remap) THEN 
     1796                  DO jk = 1, jpkm1 
     1797                     IF ( ABS(e3u0_parent(ji,jj,jk)-e3u_0(ji,jj,jk))*umask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1798                  END DO  
     1799               ENDIF 
     1800            END DO 
     1801         END DO 
     1802      ENDIF 
     1803      ! 
     1804      ! --- East --- ! 
     1805      IF(lk_east) THEN 
     1806         ispon  = nn_sponge_len * Agrif_irhox()  
     1807         istart = jpiglo - ( nn_hls + nbghostcells + ispon -1 )  ! halo + land + nbghostcells + sponge - 1 
     1808         iend   = jpiglo - nn_hls - 1                            ! halo + land + 1                     - 1 
     1809         jstart = nn_hls + 2  
    18061810         jend   = jpjglo - nn_hls - 1 
    18071811         DO ji = mi0(istart), mi1(iend) 
    18081812            DO jj = mj0(jstart), mj1(jend) 
    18091813               IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1814               IF ( .NOT.ln_vert_remap) THEN 
     1815                  DO jk = 1, jpkm1 
     1816                     IF ( ABS(e3t0_parent(ji,jj,jk)-e3t_0(ji,jj,jk))*tmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1817                  END DO  
     1818               ENDIF 
    18101819            END DO 
    18111820            DO jj = mj0(jstart), mj1(jend-1) 
    18121821               IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1822               IF ( .NOT.ln_vert_remap) THEN 
     1823                  DO jk = 1, jpkm1 
     1824                     IF ( ABS(e3v0_parent(ji,jj,jk)-e3v_0(ji,jj,jk))*vmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1825                  END DO  
     1826               ENDIF 
    18131827            END DO 
    18141828         END DO 
     
    18161830            DO jj = mj0(jstart), mj1(jend) 
    18171831               IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
    1818             END DO 
    1819          END DO 
    1820       ENDIF 
    1821       ! 
    1822       ! --- East --- ! 
    1823       IF(lk_east) THEN 
    1824          ispon  = nn_sponge_len * Agrif_irhox()  
    1825          istart = jpiglo - ( nn_hls + nbghostcells + ispon )  ! halo + land + nbghostcells + sponge - 1 
    1826          iend   = jpiglo - ( nn_hls + 1 )                     ! halo + land + 1                     - 1 
    1827          jstart = nn_hls + 2 
    1828          jend   = jpjglo - nn_hls - 1  
    1829          DO ji = mi0(istart), mi1(iend) 
    1830             DO jj = mj0(jstart), mj1(jend) 
    1831                IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
    1832             END DO 
    1833             DO jj = mj0(jstart), mj1(jend-1) 
    1834                IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
    1835             END DO 
    1836          END DO 
    1837          DO ji = mi0(istart+1), mi1(iend-1) 
    1838             DO jj = mj0(jstart), mj1(jend) 
    1839                IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1832               IF ( .NOT.ln_vert_remap) THEN 
     1833                  DO jk = 1, jpkm1 
     1834                     IF ( ABS(e3u0_parent(ji,jj,jk)-e3u_0(ji,jj,jk))*umask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1835                  END DO  
     1836               ENDIF 
    18401837            END DO 
    18411838         END DO 
     
    18441841      ! --- South --- ! 
    18451842      IF(lk_south) THEN 
    1846          ispon  = nn_sponge_len * Agrif_irhoy()  
     1843         ispon  = nn_sponge_len * Agrif_irhoy()   
    18471844         jstart = nn_hls + 2                                 ! halo + land + 1 
    1848          jend   = nn_hls + 1 + nbghostcells + ispon          ! halo + land + nbghostcells + sponge 
    1849          istart = nn_hls + 2 
    1850          iend   = jpiglo - nn_hls - 1 
     1845         jend   = nn_hls + nbghostcells + ispon          ! halo + land + nbghostcells + sponge 
     1846         istart = nn_hls + 2  
     1847         iend   = jpiglo - nn_hls - 1  
    18511848         DO jj = mj0(jstart), mj1(jend) 
    18521849            DO ji = mi0(istart), mi1(iend) 
    18531850               IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1851               IF ( .NOT.ln_vert_remap) THEN 
     1852                  DO jk = 1, jpkm1 
     1853                     IF ( ABS(e3t0_parent(ji,jj,jk)-e3t_0(ji,jj,jk))*tmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1854                  END DO  
     1855               ENDIF 
    18541856            END DO 
    18551857            DO ji = mi0(istart), mi1(iend-1) 
    18561858               IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1859               IF ( .NOT.ln_vert_remap) THEN 
     1860                  DO jk = 1, jpkm1 
     1861                     IF ( ABS(e3u0_parent(ji,jj,jk)-e3u_0(ji,jj,jk))*umask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1862                  END DO  
     1863               ENDIF 
    18571864            END DO 
    18581865         END DO 
     
    18601867            DO ji = mi0(istart), mi1(iend) 
    18611868               IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1869               IF ( .NOT.ln_vert_remap) THEN 
     1870                  DO jk = 1, jpkm1 
     1871                     IF ( ABS(e3v0_parent(ji,jj,jk)-e3v_0(ji,jj,jk))*vmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1872                  END DO  
     1873               ENDIF 
    18621874            END DO 
    18631875         END DO 
     
    18671879      IF(lk_north) THEN 
    18681880         ispon  = nn_sponge_len * Agrif_irhoy()  
    1869          jstart = jpjglo - ( nn_hls + nbghostcells + ispon)  ! halo + land + nbghostcells +sponge - 1 
    1870          jend   = jpjglo - ( nn_hls + 1 )                    ! halo + land + 1            - 1 
    1871          istart = nn_hls + 2 
    1872          iend   = jpiglo - nn_hls - 1 
     1881         jstart = jpjglo - ( nn_hls + nbghostcells + ispon - 1)  ! halo + land + nbghostcells +sponge - 1 
     1882         jend   = jpjglo - nn_hls - 1                            ! halo + land + 1            - 1 
     1883         istart = nn_hls + 2  
     1884         iend   = jpiglo - nn_hls - 1  
    18731885         DO jj = mj0(jstart), mj1(jend) 
    18741886            DO ji = mi0(istart), mi1(iend) 
    18751887               IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1888               IF ( .NOT.ln_vert_remap) THEN 
     1889                  DO jk = 1, jpkm1 
     1890                     IF ( ABS(e3t0_parent(ji,jj,jk)-e3t_0(ji,jj,jk))*tmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1891                  END DO  
     1892               ENDIF 
    18761893            END DO 
    18771894            DO ji = mi0(istart), mi1(iend-1) 
    18781895               IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
    1879             END DO 
    1880          END DO 
    1881          DO jj = mj0(jstart+1), mj1(jend-1) 
     1896               IF ( .NOT.ln_vert_remap) THEN 
     1897                  DO jk = 1, jpkm1 
     1898                     IF ( ABS(e3u0_parent(ji,jj,jk)-e3u_0(ji,jj,jk))*umask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1899                  END DO  
     1900               ENDIF 
     1901            END DO 
     1902         END DO 
     1903         DO jj = mj0(jstart), mj1(jend-1) 
    18821904            DO ji = mi0(istart), mi1(iend) 
    18831905               IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1906               IF ( .NOT.ln_vert_remap) THEN 
     1907                  DO jk = 1, jpkm1 
     1908                     IF ( ABS(e3v0_parent(ji,jj,jk)-e3v_0(ji,jj,jk))*vmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 
     1909                  END DO  
     1910               ENDIF 
    18841911            END DO 
    18851912         END DO 
  • NEMO/trunk/src/NST/agrif_oce_sponge.F90

    r14433 r14976  
    150150      ztabramp(:,:) = 0._wp 
    151151 
    152       IF( lk_west ) THEN                             ! --- West --- ! 
    153          ind1 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    154          ind2 = nn_hls + 1 + nbghostcells + ispongearea  
     152      IF( lk_west ) THEN                            ! --- West --- ! 
     153         ind1 = nn_hls + nbghostcells               ! halo + nbghostcells 
     154         ind2 = nn_hls + nbghostcells + ispongearea  
    155155         DO ji = mi0(ind1), mi1(ind2)    
    156156            DO jj = 1, jpj                
     
    160160         ! ghost cells: 
    161161         ind1 = 1 
    162          ind2 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     162         ind2 = nn_hls +  nbghostcells              ! halo + nbghostcells 
    163163         DO ji = mi0(ind1), mi1(ind2)    
    164164            DO jj = 1, jpj                
     
    168168      ENDIF 
    169169      IF( lk_east ) THEN                             ! --- East --- ! 
    170          ind1 = jpiglo - ( nn_hls + nbghostcells ) - ispongearea - 1 
    171          ind2 = jpiglo - ( nn_hls + nbghostcells ) - 1    ! halo + land + nbghostcells - 1 
     170         ind1 = jpiglo - ( nn_hls + nbghostcells -1 ) - ispongearea - 1 
     171         ind2 = jpiglo - ( nn_hls + nbghostcells -1 ) - 1    ! halo + land + nbghostcells - 1 
    172172         DO ji = mi0(ind1), mi1(ind2) 
    173173            DO jj = 1, jpj 
     
    176176         END DO 
    177177         ! ghost cells: 
    178          ind1 = jpiglo - ( nn_hls + nbghostcells ) - 1    ! halo + land + nbghostcells - 1 
     178         ind1 = jpiglo - ( nn_hls + nbghostcells -1 ) - 1    ! halo + land + nbghostcells - 1 
    179179         ind2 = jpiglo - 1 
    180180         DO ji = mi0(ind1), mi1(ind2) 
     
    185185      ENDIF       
    186186      IF( lk_south ) THEN                            ! --- South --- ! 
    187          ind1 = nn_hls + 1 + nbghostcells                 ! halo + land + nbghostcells 
    188          ind2 = nn_hls + 1 + nbghostcells + jspongearea  
     187         ind1 = nn_hls + nbghostcells                ! halo + nbghostcells 
     188         ind2 = nn_hls + nbghostcells + jspongearea  
    189189         DO jj = mj0(ind1), mj1(ind2)  
    190190            DO ji = 1, jpi 
     
    194194         ! ghost cells: 
    195195         ind1 = 1 
    196          ind2 = nn_hls + 1 + nbghostcells                 ! halo + land + nbghostcells 
     196         ind2 = nn_hls + nbghostcells                ! halo + nbghostcells 
    197197         DO jj = mj0(ind1), mj1(ind2)  
    198198            DO ji = 1, jpi 
     
    202202      ENDIF 
    203203      IF( lk_north ) THEN                            ! --- North --- ! 
    204          ind1 = jpjglo - ( nn_hls + nbghostcells ) - jspongearea - 1 
    205          ind2 = jpjglo - ( nn_hls + nbghostcells ) - 1    ! halo + land + nbghostcells - 1 
     204         ind1 = jpjglo - ( nn_hls + nbghostcells -1 ) - jspongearea - 1 
     205         ind2 = jpjglo - ( nn_hls + nbghostcells -1 ) - 1    ! halo + nbghostcells - 1 
    206206         DO jj = mj0(ind1), mj1(ind2) 
    207207            DO ji = 1, jpi 
     
    210210         END DO 
    211211         ! ghost cells: 
    212          ind1 = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     212         ind1 = jpjglo - ( nn_hls + nbghostcells -1 )      ! halo + land + nbghostcells - 1 
    213213         ind2 = jpjglo 
    214214         DO jj = mj0(ind1), mj1(ind2) 
     
    284284 
    285285      IF( lk_west ) THEN                             ! --- West --- ! 
    286          ind1 = nn_hls + 1 + nbghostcells + ishift 
    287          ind2 = nn_hls + 1 + nbghostcells + ishift + ispongearea  
     286         ind1 = nn_hls + nbghostcells + ishift 
     287         ind2 = nn_hls + nbghostcells + ishift + ispongearea  
    288288         DO ji = mi0(ind1), mi1(ind2)    
    289289            DO jj = 1, jpj                
     
    293293         ! ghost cells: 
    294294         ind1 = 1 
    295          ind2 = nn_hls + 1 + nbghostcells + ishift               ! halo + land + nbghostcells 
     295         ind2 = nn_hls + nbghostcells + ishift               ! halo + nbghostcells 
    296296         DO ji = mi0(ind1), mi1(ind2)    
    297297            DO jj = 1, jpj                
     
    301301      ENDIF 
    302302      IF( lk_east ) THEN                             ! --- East --- ! 
    303          ind1 = jpiglo - ( nn_hls + nbghostcells + ishift) - ispongearea - 1 
    304          ind2 = jpiglo - ( nn_hls + nbghostcells + ishift) - 1    ! halo + land + nbghostcells - 1 
     303         ind1 = jpiglo - ( nn_hls + nbghostcells -1  + ishift) - ispongearea - 1 
     304         ind2 = jpiglo - ( nn_hls + nbghostcells -1  + ishift) - 1    ! halo + nbghostcells - 1 
    305305         DO ji = mi0(ind1), mi1(ind2) 
    306306            DO jj = 1, jpj 
     
    309309         END DO 
    310310         ! ghost cells: 
    311          ind1 = jpiglo - ( nn_hls + nbghostcells + ishift) - 1    ! halo + land + nbghostcells - 1 
     311         ind1 = jpiglo - ( nn_hls + nbghostcells -1 + ishift) - 1    ! halo + nbghostcells - 1 
    312312         ind2 = jpiglo - 1 
    313313         DO ji = mi0(ind1), mi1(ind2) 
     
    318318      ENDIF       
    319319      IF( lk_south ) THEN                            ! --- South --- ! 
    320          ind1 = nn_hls + 1 + nbghostcells + jshift                ! halo + land + nbghostcells 
    321          ind2 = nn_hls + 1 + nbghostcells + jshift + jspongearea  
     320         ind1 = nn_hls + nbghostcells + jshift                ! halo + nbghostcells 
     321         ind2 = nn_hls + nbghostcells + jshift + jspongearea  
    322322         DO jj = mj0(ind1), mj1(ind2)  
    323323            DO ji = 1, jpi 
     
    327327         ! ghost cells: 
    328328         ind1 = 1 
    329          ind2 = nn_hls + 1 + nbghostcells + jshift                ! halo + land + nbghostcells 
     329         ind2 = nn_hls + nbghostcells + jshift                ! halo + land + nbghostcells 
    330330         DO jj = mj0(ind1), mj1(ind2)  
    331331            DO ji = 1, jpi 
     
    335335      ENDIF 
    336336      IF( lk_north ) THEN                            ! --- North --- ! 
    337          ind1 = jpjglo - ( nn_hls + nbghostcells + jshift) - jspongearea - 1 
    338          ind2 = jpjglo - ( nn_hls + nbghostcells + jshift) - 1    ! halo + land + nbghostcells - 1 
     337         ind1 = jpjglo - ( nn_hls + nbghostcells -1 + jshift) - jspongearea - 1 
     338         ind2 = jpjglo - ( nn_hls + nbghostcells -1 + jshift) - 1    ! halo + land + nbghostcells - 1 
    339339         DO jj = mj0(ind1), mj1(ind2) 
    340340            DO ji = 1, jpi 
     
    343343         END DO 
    344344         ! ghost cells: 
    345          ind1 = jpjglo - ( nn_hls + nbghostcells + jshift)      ! halo + land + nbghostcells - 1 
     345         ind1 = jpjglo - ( nn_hls + nbghostcells -1 + jshift)      ! halo + land + nbghostcells - 1 
    346346         ind2 = jpjglo 
    347347         DO jj = mj0(ind1), mj1(ind2) 
     
    741741 
    742742         jmax = j2-1 
    743          ind1 = jpjglo - ( nn_hls + nbghostcells + 2 )   ! North 
     743         ind1 = jpjglo - ( nn_hls + nbghostcells + 1 )   ! North 
    744744         DO jj = mj0(ind1), mj1(ind1)                  
    745745            jmax = MIN(jmax,jj) 
     
    905905 
    906906         imax = i2 - 1 
    907          ind1 = jpiglo - ( nn_hls + nbghostcells + 2 )   ! East 
     907         ind1 = jpiglo - ( nn_hls + nbghostcells + 1 )   ! East 
    908908         DO ji = mi0(ind1), mi1(ind1)                 
    909909            imax = MIN(imax,ji) 
     
    10051005 
    10061006         jmax = j2-1 
    1007          ind1 = jpjglo - ( nn_hls + nbghostcells + 2 )   ! North 
     1007         ind1 = jpjglo - ( nn_hls + nbghostcells + 1 )   ! North 
    10081008         DO jj = mj0(ind1), mj1(ind1)                  
    10091009            jmax = MIN(jmax,jj) 
     
    10721072 
    10731073         imax = i2 - 1 
    1074          ind1 = jpiglo - ( nn_hls + nbghostcells + 2 )   ! East 
     1074         ind1 = jpiglo - ( nn_hls + nbghostcells + 1 )   ! East 
    10751075         DO ji = mi0(ind1), mi1(ind1)                 
    10761076            imax = MIN(imax,ji) 
  • NEMO/trunk/src/NST/agrif_oce_update.F90

    r14227 r14976  
    12841284      !!---------------------------------------------------------------------- 
    12851285      !  
    1286       IF (( .NOT.ln_agrif_2way ).OR.(.NOT.ln_chk_bathy).OR.(Agrif_Root())) RETURN 
     1286      IF (( .NOT.ln_agrif_2way ).OR.(.NOT.ln_chk_bathy) &  
     1287      & .OR.(.NOT.ln_vert_remap).OR.(Agrif_Root())) RETURN 
    12871288      ! 
    12881289      Agrif_UseSpecialValueInUpdate = .FALSE. 
  • NEMO/trunk/src/NST/agrif_user.F90

    r14433 r14976  
    5757      ! 
    5858      INTEGER :: ind1, ind2, ind3, imaxrho 
     59      INTEGER :: nbghostcellsfine_tot_x, nbghostcellsfine_tot_y 
    5960      INTEGER :: its 
    6061      External :: nemo_mapping 
     
    7879      ! 1. Declaration of the type of variable which have to be interpolated 
    7980      !--------------------------------------------------------------------- 
    80       ind1 =              nbghostcells  
    81       ind2 = nn_hls + 2 + nbghostcells_x 
    82       ind3 = nn_hls + 2 + nbghostcells_y_s 
     81!      ind1 =              nbghostcells  
     82      ind2 = nn_hls + 1 + nbghostcells_x 
     83      ind3 = nn_hls + 1 + nbghostcells_y_s 
     84      nbghostcellsfine_tot_x = nbghostcells_x+1 
     85      nbghostcellsfine_tot_y = MAX(nbghostcells_y_s,nbghostcells_y_n)+1 
     86      ind1 = MAX(nbghostcellsfine_tot_x, nbghostcellsfine_tot_y) 
    8387      imaxrho = MAX(Agrif_irhox(), Agrif_irhoy()) 
    8488 
     
    120124       ! 3. Location of interpolation 
    121125      !----------------------------- 
    122 !      CALL Agrif_Set_bc(  e3t_id, (/-nn_sponge_len*imaxrho,ind1-1/) )   
    123 ! JC: check near the boundary only until matching in sponge has been sorted out: 
    124       CALL Agrif_Set_bc(    e3t_id, (/0,ind1-1/) )   
     126      CALL Agrif_Set_bc(  e3t_id, (/-nn_sponge_len*imaxrho-2,ind1-1/) )   
    125127 
    126128      ! extend the interpolation zone by 1 more point than necessary: 
    127129      ! RB check here 
    128       CALL Agrif_Set_bc( e3t0_interp_id, (/-nn_sponge_len*imaxrho-2,ind1/) ) 
    129       CALL Agrif_Set_bc(        mbkt_id, (/-nn_sponge_len*imaxrho-2,ind1/) ) 
    130       CALL Agrif_Set_bc(         ht0_id, (/-nn_sponge_len*imaxrho-2,ind1/) ) 
     130      CALL Agrif_Set_bc( e3t0_interp_id, (/-nn_sponge_len*imaxrho-2,ind1-1/) ) 
     131      CALL Agrif_Set_bc(        mbkt_id, (/-nn_sponge_len*imaxrho-2,ind1-1/) ) 
     132      CALL Agrif_Set_bc(         ht0_id, (/-nn_sponge_len*imaxrho-2,ind1-1/) ) 
     133 
    131134      CALL Agrif_Set_bc(       tsini_id, (/0,ind1-1/) ) ! if west,  rhox=3 and nbghost=3: columns 2 to 4 
    132135      CALL Agrif_Set_bc(        uini_id, (/0,ind1-1/) )  
     
    142145#endif       
    143146 
    144    !   CALL Agrif_Set_ExternalMapping(nemo_mapping) 
     147      CALL Agrif_Set_ExternalMapping(nemo_mapping) 
    145148      ! 
    146149   END SUBROUTINE agrif_declare_var_ini 
     
    222225      ! 
    223226      ! Build "intermediate" parent vertical grid on child domain 
    224       IF ( ln_vert_remap ) THEN 
    225  
    226          jpk_parent = Agrif_parent( jpk ) 
    227          ALLOCATE(e3t0_parent(jpi,jpj,jpk_parent), & 
    228             &     e3u0_parent(jpi,jpj,jpk_parent), & 
    229             &     e3v0_parent(jpi,jpj,jpk_parent), STAT = ierr)  
    230          IF( ierr  > 0 )   CALL ctl_warn('Agrif_Init_Domain: allocation of arrays failed') 
     227      jpk_parent = Agrif_parent( jpk ) 
     228      ALLOCATE(e3t0_parent(jpi,jpj,jpk_parent), & 
     229         &     e3u0_parent(jpi,jpj,jpk_parent), & 
     230         &     e3v0_parent(jpi,jpj,jpk_parent), STAT = ierr)  
     231      IF( ierr  > 0 )   CALL ctl_warn('Agrif_Init_Domain: allocation of arrays failed') 
    231232        
    232          ! Retrieve expected parent scale factors on child grid: 
    233          Agrif_UseSpecialValue = .FALSE. 
    234          e3t0_parent(:,:,:) = 0._wp 
    235          CALL Agrif_Init_Variable(e3t0_interp_id, procname=interpe3t0_vremap) 
    236          ! 
    237          ! Deduce scale factors at U and V points: 
    238          DO_3D( 0, 0, 0, 0, 1, jpk_parent ) 
    239             e3u0_parent(ji,jj,jk) = 0.5_wp * (e3t0_parent(ji,jj,jk) + e3t0_parent(ji+1,jj  ,jk)) 
    240             e3v0_parent(ji,jj,jk) = 0.5_wp * (e3t0_parent(ji,jj,jk) + e3t0_parent(ji  ,jj+1,jk)) 
    241          END_3D 
    242  
    243          ! Assume a step at the bottom except if (pure) s-coordinates 
    244          IF ( .NOT.Agrif_Parent(ln_sco) ) THEN  
    245             DO_2D( 1, 0, 1, 0 ) 
    246                jk = mbku_parent(ji,jj) 
    247                e3u0_parent(ji,jj,jk) = MIN(e3t0_parent(ji,jj,jk), e3t0_parent(ji+1,jj  ,jk)) 
    248                jk = mbkv_parent(ji,jj) 
    249                e3v0_parent(ji,jj,jk) = MIN(e3t0_parent(ji,jj,jk), e3t0_parent(ji  ,jj+1,jk)) 
    250             END_2D 
    251          ENDIF 
    252  
    253          CALL lbc_lnk( 'Agrif_Init_Domain', e3u0_parent, 'U', 1.0_wp, e3v0_parent, 'V', 1.0_wp ) 
    254       ENDIF 
     233      ! Retrieve expected parent scale factors on child grid: 
     234      Agrif_UseSpecialValue = .FALSE. 
     235      e3t0_parent(:,:,:) = 0._wp 
     236      CALL Agrif_Init_Variable(e3t0_interp_id, procname=interpe3t0_vremap) 
     237      ! 
     238      ! Deduce scale factors at U and V points: 
     239      DO_3D( 0, 0, 0, 0, 1, jpk_parent ) 
     240         e3u0_parent(ji,jj,jk) = 0.5_wp * (e3t0_parent(ji,jj,jk) + e3t0_parent(ji+1,jj  ,jk)) 
     241         e3v0_parent(ji,jj,jk) = 0.5_wp * (e3t0_parent(ji,jj,jk) + e3t0_parent(ji  ,jj+1,jk)) 
     242      END_3D 
     243 
     244      ! Assume a step at the bottom except if (pure) s-coordinates 
     245      IF ( .NOT.Agrif_Parent(ln_sco) ) THEN  
     246         DO_2D( 1, 0, 1, 0 ) 
     247            jk = mbku_parent(ji,jj) 
     248            e3u0_parent(ji,jj,jk) = MIN(e3t0_parent(ji,jj,jk), e3t0_parent(ji+1,jj  ,jk)) 
     249            jk = mbkv_parent(ji,jj) 
     250            e3v0_parent(ji,jj,jk) = MIN(e3t0_parent(ji,jj,jk), e3t0_parent(ji  ,jj+1,jk)) 
     251         END_2D 
     252      ENDIF 
     253 
     254      CALL lbc_lnk( 'Agrif_Init_Domain', e3u0_parent, 'U', 1.0_wp, e3v0_parent, 'V', 1.0_wp ) 
    255255 
    256256      ! check if masks and bathymetries match 
     
    262262         ! 
    263263         kindic_agr = 0 
    264          IF( .NOT. ln_vert_remap ) THEN 
    265             ! 
    266             ! check if tmask and vertical scale factors agree with parent in sponge area: 
    267             CALL Agrif_Bc_variable(e3t_id,calledweight=1.,procname=interpe3t) 
    268             ! 
    269          ELSE 
    270             ! 
    271             ! In case of vertical interpolation, check only that total depths agree between child and parent: 
    272                    
    273             CALL Agrif_check_bat( kindic_agr )            
    274          ENDIF 
     264         !          
     265         CALL Agrif_check_bat( kindic_agr )            
    275266         ! 
    276267         CALL mpp_sum( 'agrif_InitValues_Domain', kindic_agr ) 
     
    287278      WHERE (ssmask(:,:)  == 0._wp) mbkt_parent(:,:) = 0 
    288279      ! 
     280      IF ( .NOT.ln_vert_remap ) DEALLOCATE(e3t0_parent, e3u0_parent, e3v0_parent) 
     281 
    289282   END SUBROUTINE Agrif_Init_Domain 
    290283 
     
    440433      !--------------------------------------------------------------------- 
    441434      ind1 =              nbghostcells 
    442       ind2 = nn_hls + 2 + nbghostcells_x 
    443       ind3 = nn_hls + 2 + nbghostcells_y_s 
     435      ind2 = nn_hls + 1 + nbghostcells_x 
     436      ind3 = nn_hls + 1 + nbghostcells_y_s 
    444437      imaxrho = MAX(Agrif_irhox(), Agrif_irhoy()) 
    445438 
     
    640633      !------------------------------------------------------------------------------------- 
    641634      ind1 =              nbghostcells 
    642       ind2 = nn_hls + 2 + nbghostcells_x 
    643       ind3 = nn_hls + 2 + nbghostcells_y_s 
     635      ind2 = nn_hls + 1 + nbghostcells_x 
     636      ind3 = nn_hls + 1 + nbghostcells_y_s 
    644637      ipl = jpl*(9+nlay_s+nlay_i) 
    645638      CALL agrif_declare_variable((/2,2,0/),(/ind2,ind3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,ipl/),tra_ice_id) 
     
    780773      !--------------------------------------------------------------------- 
    781774      ind1 =              nbghostcells 
    782       ind2 = nn_hls + 2 + nbghostcells_x 
    783       ind3 = nn_hls + 2 + nbghostcells_y_s 
     775      ind2 = nn_hls + 1 + nbghostcells_x 
     776      ind3 = nn_hls + 1 + nbghostcells_y_s 
    784777      imaxrho = MAX(Agrif_irhox(), Agrif_irhoy()) 
    785778 
     
    862855 
    863856! JC => side effects of lines below to be checked: 
    864       lk_west  = .NOT. ( Agrif_Ix() == 1 ) 
    865       lk_east  = .NOT. ( Agrif_Ix() + nbcellsx/AGRIF_Irhox() == Agrif_Parent(Ni0glo) -1 ) 
    866       lk_south = .NOT. ( Agrif_Iy() == 1 ) 
    867       lk_north = .NOT. ( Agrif_Iy() + nbcellsy/AGRIF_Irhoy() == Agrif_Parent(Nj0glo) -1 ) 
    868       ! 
    869       ! Set the number of ghost cells according to periodicity 
    870       nbghostcells_x   = nbghostcells 
    871       nbghostcells_y_s = nbghostcells 
    872       nbghostcells_y_n = nbghostcells 
    873       ! 
    874       IF(    l_Iperio    )   nbghostcells_x   = 0 
    875       IF( .NOT. lk_south )   nbghostcells_y_s = 0 
    876       IF( .NOT. lk_north )   nbghostcells_y_n = 0 
    877       ! 
    878       ! Some checks 
    879       IF( (.NOT.ln_vert_remap).AND.(jpkglo>Agrif_Parent(jpkglo)) )                    CALL ctl_stop( 'STOP',    & 
    880          &   'agrif_nemo_init: Agrif children must have less or equal number of vertical levels without ln_vert_remap defined' )  
    881       IF( jpiglo /= nbcellsx + 2 + 2*nn_hls + nbghostcells_x   + nbghostcells_x   )   CALL ctl_stop( 'STOP',    & 
    882          &   'agrif_nemo_init: Agrif children requires jpiglo == nbcellsx + 2 + 2*nn_hls + 2*nbghostcells_x' ) 
    883       IF( jpjglo /= nbcellsy + 2 + 2*nn_hls + nbghostcells_y_s + nbghostcells_y_n )   CALL ctl_stop( 'STOP',    & 
    884          &   'agrif_nemo_init: Agrif children requires jpjglo == nbcellsy + 2 + 2*nn_hls + nbghostcells_y_s + nbghostcells_y_n' ) 
    885       IF( ln_use_jattr )   CALL ctl_stop( 'STOP', 'agrif_nemo_init:Agrif children requires ln_use_jattr = .false. ' ) 
     857      IF (.not.agrif_root()) THEN 
     858         nbghostcells_x   = nbghostcells 
     859         nbghostcells_y_s = nbghostcells 
     860         nbghostcells_y_n = nbghostcells 
     861  
     862 
     863         lk_west  = .TRUE. 
     864         lk_east  = .TRUE. 
     865         lk_south = .TRUE. 
     866         lk_north = .TRUE. 
     867         ! 
     868         ! Correct number of ghost cells according to periodicity 
     869         ! 
     870         IF( l_Iperio         ) THEN ; lk_west  = .FALSE. ; lk_east = .FALSE. ; nbghostcells_x = 0 ; ENDIF 
     871         IF( Agrif_Iy() == 1  ) THEN ; lk_south = .FALSE. ; nbghostcells_y_s = 1 ; ENDIF 
     872         IF( Agrif_Iy() + nbcellsy/AGRIF_Irhoy() ==  Agrif_Parent(Nj0glo) - 1 ) THEN ; lk_north = .FALSE. ; nbghostcells_y_n = 1 ; ENDIF 
     873         ! 
     874         ! Some checks 
     875         IF( (.NOT.ln_vert_remap).AND.(jpkglo>Agrif_Parent(jpkglo)) )                    CALL ctl_stop( 'STOP',    & 
     876           &   'agrif_nemo_init: Agrif children must have less or equal number of vertical levels without ln_vert_remap defined' )  
     877         IF( Ni0glo /= nbcellsx + nbghostcells_x + nbghostcells_x   )   CALL ctl_stop( 'STOP',    & 
     878           &   'agrif_nemo_init: Agrif children requires jpiglo == nbcellsx + 2*nbghostcells_x' ) 
     879         IF( Nj0glo /= nbcellsy + nbghostcells_y_s + nbghostcells_y_n )   CALL ctl_stop( 'STOP',    & 
     880           &   'agrif_nemo_init: Agrif children requires jpjglo == nbcellsy + nbghostcells_y_s + nbghostcells_y_n' ) 
     881         IF( ln_use_jattr )   CALL ctl_stop( 'STOP', 'agrif_nemo_init:Agrif children requires ln_use_jattr = .false. ' ) 
     882      ELSE 
     883         ! Root grid 
     884         nbghostcells_x   = 1  
     885         nbghostcells_y_s = 1  
     886         nbghostcells_y_n = 1  
     887         IF ( l_Iperio.OR.l_NFold ) THEN 
     888           nbghostcells_x = 0 
     889         ENDIF 
     890         IF ( l_NFold ) THEN 
     891           nbghostcells_y_n = 0 ! for completeness 
     892         ENDIF 
     893      ENDIF 
    886894      ! 
    887895      ! 
     
    973981      ENDIF 
    974982 
    975       IF( bounds(2,2,2) > jpjglo) THEN 
     983      IF(( bounds(2,2,2) > jpjglo).AND. ( l_NFold )) THEN 
    976984         IF( bounds(2,1,2) <=jpjglo) THEN 
    977985            nb_chunks = 2 
     
    10651073         ENDIF 
    10661074 
    1067       ELSE IF (bounds(1,1,2) < 1) THEN 
     1075      ELSE IF ((bounds(1,1,2) < 1).AND.( l_Iperio )) THEN 
    10681076         IF (bounds(1,2,2) > 0) THEN 
    10691077            nb_chunks = 2 
  • NEMO/trunk/src/OCE/LBC/mppini.F90

    r14848 r14976  
    8989      ! 
    9090#if defined key_agrif 
    91     IF (.NOT.agrif_root()) THEN 
    9291      call agrif_nemo_init() 
    93     ENDIF 
    9492#endif 
    9593   END SUBROUTINE mpp_init 
     
    307305 
    308306#if defined key_agrif 
    309       IF( .NOT. Agrif_Root() ) THEN       ! AGRIF children: specific setting (cf. agrif_user.F90) 
    310307         CALL agrif_nemo_init() 
    311       ENDIF 
    312308#endif 
    313309      ! 
  • NEMO/trunk/src/OCE/par_oce.F90

    r14834 r14976  
    4747   ! global domain size for AGRIF     !!! * total AGRIF computational domain * 
    4848   INTEGER, PUBLIC            ::   nbug_in_agrif_conv_do_not_remove_or_modify = 1 - 1 
    49    INTEGER, PUBLIC, PARAMETER ::   nbghostcells = 3   !: number of ghost cells: default value 
     49   INTEGER, PUBLIC, PARAMETER ::   nbghostcells = 4   !: number of ghost cells: default value 
    5050   INTEGER, PUBLIC            ::   nbghostcells_x     !: number of ghost cells in i-direction 
    5151   INTEGER, PUBLIC            ::   nbghostcells_y_s   !: number of ghost cells in j-direction at south 
  • NEMO/trunk/tests/DOME/EXPREF/AGRIF_FixedGrids.in

    r14216 r14976  
    111 
    2 278 358 88 162 2 2 2    
     2281 361 91 169 2 2 2    
    330 
  • NEMO/trunk/tests/DOME/MY_SRC/usrdef_hgr.F90

    r14254 r14976  
    2323   IMPLICIT NONE 
    2424   PRIVATE 
     25 
     26   REAL(wp) :: roffsetx, roffsety ! Offset in km to first f-point 
    2527 
    2628   PUBLIC   usr_def_hgr   ! called by domhgr.F90 
     
    6466      ! 
    6567      INTEGER  ::   ji, jj     ! dummy loop indices 
    66       REAL(wp) ::   zphi0, zlam0  
    6768      REAL(wp) ::   zti, ztj   ! local scalars 
    6869      !!------------------------------------------------------------------------------- 
     
    7778      ! Position coordinates (in kilometers) 
    7879      !                          ========== 
    79       zlam0 = -REAL( 0.5 + 1700._wp * 1.e3 / rn_dx) 
    80       zphi0 = -REAL( 0.5 +  800._wp * 1.e3 / rn_dy) 
     80      ! Offsets in km of the first south west f-point:  
     81      roffsetx = -1700._wp 
     82      roffsety =  -800._wp  
    8183#if defined key_agrif 
    82       IF( .NOT.Agrif_Root() ) THEN  
    83          zlam0 = - REAL( 0.5 + 1700._wp * 1.e3 / rn_dx + nbghostcells) & 
    84                & + REAL((nbghostcells + Agrif_Ix() - 1)*Agrif_irhox())   
    85          zphi0 = - REAL( 0.5 +  800._wp * 1.e3 / rn_dy + nbghostcells) & 
    86                & + REAL((nbghostcells + Agrif_Iy() - 1)*Agrif_irhoy())   
    87       ENDIF  
     84      IF( .NOT.Agrif_Root() ) THEN 
     85         ! deduce offset from parent: 
     86         roffsetx = Agrif_Parent(roffsetx) & 
     87              & + (-(nbghostcells_x   - 1) + (Agrif_Parent(nbghostcells_x  ) & 
     88              & + Agrif_Ix()-2)*Agrif_Rhox()) * 1.e-3 * rn_dx 
     89         roffsety = Agrif_Parent(roffsety) & 
     90              & + (-(nbghostcells_y_s - 1) + (Agrif_Parent(nbghostcells_y_s) & 
     91              & + Agrif_Iy()-2)*Agrif_Rhoy()) * 1.e-3 * rn_dy 
     92      ENDIF 
    8893#endif 
    8994          
    90       DO_2D( 1, 1, 1, 1 ) 
    91          zti = REAL( mig0_oldcmp(ji) - 1, wp )   ! start at i=0 in the global grid without halos 
    92          ztj = REAL( mjg0_oldcmp(jj) - 1, wp )   ! start at j=0 in the global grid without halos 
     95      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     96         zti = REAL( mig0(ji) - 1, wp )   ! start at i=0 in the global grid without halos 
     97         ztj = REAL( mjg0(jj) - 1, wp )   ! start at j=0 in the global grid without halos 
    9398          
    94          plamt(ji,jj) = rn_dx * 1.e-3 * ( zlam0 + zti ) 
    95          plamu(ji,jj) = rn_dx * 1.e-3 * ( zlam0 + zti + 0.5_wp ) 
     99         plamt(ji,jj) = roffsetx + rn_dx * 1.e-3 * ( zti - 0.5_wp ) 
     100         plamu(ji,jj) = roffsetx + rn_dx * 1.e-3 *   zti  
    96101         plamv(ji,jj) = plamt(ji,jj)  
    97102         plamf(ji,jj) = plamu(ji,jj)  
    98103          
    99          pphit(ji,jj) = rn_dy * 1.e-3 * ( zphi0 + ztj ) 
    100          pphiv(ji,jj) = rn_dy * 1.e-3 * ( zphi0 + ztj + 0.5_wp ) 
     104         pphit(ji,jj) = roffsety + rn_dy * 1.e-3 * ( ztj - 0.5_wp ) 
     105         pphiv(ji,jj) = roffsety + rn_dy * 1.e-3 *   ztj 
    101106         pphiu(ji,jj) = pphit(ji,jj)  
    102107         pphif(ji,jj) = pphiv(ji,jj)  
  • NEMO/trunk/tests/DOME/MY_SRC/usrdef_nam.F90

    r14433 r14976  
    6060      ! 
    6161      INTEGER ::   ios          ! Local integer 
     62      INTEGER ::   ighost_w, ighost_e, ighost_s, ighost_n 
    6263      REAL(wp)::   zlx, zly, zh ! Local scalars 
    6364      !! 
     
    7475         rn_dx = Agrif_Parent(rn_dx)/Agrif_Rhox() 
    7576         rn_dy = Agrif_Parent(rn_dy)/Agrif_Rhoy() 
    76          rn_dz = Agrif_Parent(rn_dz) 
    7777         rn_f0 = Agrif_Parent(rn_f0) 
    7878      ENDIF 
     
    8484      kk_cfg = nINT( rn_dx ) 
    8585      ! 
     86#if defined key_agrif  
    8687      IF( Agrif_Root() ) THEN       ! Global Domain size:  DOME  global domain is  2000 km x 850 Km x 3600 m 
     88#endif 
    8789         kpi = NINT( 2000.e3  / rn_dx ) + 2   
    8890         kpj = NINT(  850.e3  / rn_dy ) + 2 + 1  
     91#if defined key_agrif  
    8992      ELSE                          ! Global Domain size: add nbghostcells + 1 "land" point on each side 
    90          kpi  = nbcellsx + 2 * ( nbghostcells + 1 ) 
    91          kpj  = nbcellsy + 2 * ( nbghostcells + 1 ) 
    92 !!$         kpi  = nbcellsx + nbghostcells_x   + nbghostcells_x   + 2 
    93 !!$         kpj  = nbcellsy + nbghostcells_y_s + nbghostcells_y_n + 2 
     93         ! At this stage, child ghosts have not been set 
     94         ighost_w = nbghostcells 
     95         ighost_e = nbghostcells 
     96         ighost_s = nbghostcells 
     97         ighost_n = nbghostcells 
     98 
     99         IF  ( Agrif_Ix() == 1 ) ighost_w = 1  
     100         IF  ( Agrif_Ix() + nbcellsx/AGRIF_Irhox() == Agrif_Parent(Ni0glo)-1 ) ighost_e = 1  
     101         IF  ( Agrif_Iy() == 1 ) ighost_s = 1  
     102         IF  ( Agrif_Iy() + nbcellsy/AGRIF_Irhoy() == Agrif_Parent(Nj0glo)-1 ) ighost_n = 1  
     103         kpi  = nbcellsx + ighost_w + ighost_e 
     104         kpj  = nbcellsy + ighost_s + ighost_n 
     105!! JC: number of ghosts are unknown at this stage ! 
     106!!$         kpi  = nbcellsx + nbghostcells_x   + nbghostcells_x    
     107!!$         kpj  = nbcellsy + nbghostcells_y_s + nbghostcells_y_n  
    94108      ENDIF 
     109#endif 
    95110      kpk = NINT( 3600._wp / rn_dz ) + 1 
    96111      ! 
  • NEMO/trunk/tests/DOME/MY_SRC/usrdef_zgr.F90

    r14433 r14976  
    193193            pe3w (ji,jj,ik  ) = pdept(ji,jj,ik  ) - pdept(ji,jj,ik-1)            ! st caution ik > 1 
    194194         END_2D          
    195          !                                   ! bottom scale factors and depth at  U-, V-, UW and VW-points 
    196          !                                   ! usually Computed as the minimum of neighbooring scale factors 
    197          pe3u (:,:,:) = pe3t(:,:,:)          ! HERE DOME configuration :  
    198          pe3v (:,:,:) = pe3t(:,:,:)          !    e3 increases with i-index and identical with j-index 
    199          pe3f (:,:,:) = pe3t(:,:,:)          !    so e3 minimum of (i,i+1) points is (i) point 
    200          pe3uw(:,:,:) = pe3w(:,:,:)          !    in j-direction e3v=e3t and e3f=e3v 
    201          pe3vw(:,:,:) = pe3w(:,:,:)          !    ==>>  no need of lbc_lnk calls 
     195         ! 
     196         DO_3D( 0, 0, 0, 0, 1, jpk )  
     197               pe3u (ji,jj,jk) = MIN( pe3t(ji,jj,jk), pe3t(ji+1,jj,jk) ) 
     198               pe3v (ji,jj,jk) = MIN( pe3t(ji,jj,jk), pe3t(ji,jj+1,jk) ) 
     199               pe3uw(ji,jj,jk) = MIN( pe3w(ji,jj,jk), pe3w(ji+1,jj,jk) ) 
     200               pe3vw(ji,jj,jk) = MIN( pe3w(ji,jj,jk), pe3w(ji,jj+1,jk) ) 
     201         END_3D  
     202         ! 
     203         CALL lbc_lnk('usrdef_zgr', pe3u , 'U', 1._wp, pe3uw, 'U', 1._wp )    
     204         CALL lbc_lnk('usrdef_zgr', pe3v , 'V', 1._wp, pe3vw, 'V', 1._wp )  
     205         ! 
     206         DO jk = 1, jpk                  
     207            WHERE( pe3u (:,:,jk) == 0._wp )   pe3u (:,:,jk) = pe3t_1d(jk) 
     208            WHERE( pe3v (:,:,jk) == 0._wp )   pe3v (:,:,jk) = pe3t_1d(jk) 
     209            WHERE( pe3uw(:,:,jk) == 0._wp )   pe3uw(:,:,jk) = pe3w_1d(jk) 
     210            WHERE( pe3vw(:,:,jk) == 0._wp )   pe3vw(:,:,jk) = pe3w_1d(jk) 
     211         END DO 
     212 
     213         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     214               pe3f(ji,jj,jk) = MIN( pe3v(ji,jj,jk), pe3v(ji+1,jj,jk) ) 
     215         END_3D 
     216         CALL lbc_lnk('usrdef_zgr', pe3f, 'F', 1._wp )       
    202217         !       
    203218      ENDIF 
  • NEMO/trunk/tests/ICE_AGRIF/EXPREF/AGRIF_FixedGrids.in

    r13286 r14976  
    111 
    2 33 62 33 62 3 3 3 
     234 63 34 63 3 3 3 
    330 
  • NEMO/trunk/tests/ICE_AGRIF/EXPREF/make_INITICE.py

    r10516 r14976  
    2020# Reading coordinates file 
    2121nccoord=netcdf(fcoord,'r') 
    22 nav_lon=nccoord.variables['nav_lon'] 
    23 nav_lat=nccoord.variables['nav_lat'] 
     22nav_lon=nccoord.variables['x'] 
     23nav_lat=nccoord.variables['y'] 
    2424time_counter=1 
    2525LON1= nav_lon.shape[1] 
  • NEMO/trunk/tests/ICE_AGRIF/MY_SRC/usrdef_hgr.F90

    r14223 r14976  
    2323   IMPLICIT NONE 
    2424   PRIVATE 
     25 
     26   REAL(wp) :: roffsetx, roffsety ! Offset in km to first f-point 
    2527 
    2628   PUBLIC   usr_def_hgr   ! called by domhgr.F90 
     
    5052      !!                without Coriolis force (f=0) 
    5153      !! 
    52       !! ** Action  : - define longitude & latitude of t-, u-, v- and f-points (in degrees)  
     54      !! ** Action  : - define longitude & latitude of t-, u-, v- and f-points (in kms)  
    5355      !!              - define coriolis parameter at f-point if the domain in not on the sphere (on beta-plane) 
    5456      !!              - define i- & j-scale factors at t-, u-, v- and f-points (in meters) 
     
    6567      ! 
    6668      INTEGER  ::   ji, jj     ! dummy loop indices 
    67       REAL(wp) ::   zphi0, zlam0, zbeta, zf0 
     69      REAL(wp) ::   zbeta, zf0 
    6870      REAL(wp) ::   zti, ztj   ! local scalars 
    6971      !!------------------------------------------------------------------------------- 
     
    7476      IF(lwp) WRITE(numout,*) '          f-plane with irregular grid-spacing (+- 10%)' 
    7577      IF(lwp) WRITE(numout,*) '          the max is given by rn_dx and rn_dy'  
     78      ! 
     79      ! 
     80      ! Position coordinates (in kilometers) 
     81      !                          ========== 
     82      ! Offset is given at first f-point, i.e. at (i,j) = (nn_hls+1, nn_hls+1) 
     83      ! Here we assume the grid is centred around a T-point at the middle of 
     84      ! of the domain (hence domain size is odd) 
     85      roffsetx = (-REAL(Ni0glo-1, wp) + 1._wp) * 0.5 * 1.e-3 * rn_dx 
     86      roffsety = (-REAL(Nj0glo-1, wp) + 1._wp) * 0.5 * 1.e-3 * rn_dy 
     87#if defined key_agrif 
     88      IF( .NOT.Agrif_Root() ) THEN 
     89         ! deduce offset from parent: 
     90         roffsetx = Agrif_Parent(roffsetx) & 
     91            & + (-(nbghostcells_x   - 1) + (Agrif_Parent(nbghostcells_x  ) & 
     92            & + Agrif_Ix()-2)*Agrif_Rhox()) * 1.e-3 * rn_dx 
     93         roffsety = Agrif_Parent(roffsety) & 
     94            & + (-(nbghostcells_y_s - 1) + (Agrif_Parent(nbghostcells_y_s) & 
     95            & + Agrif_Iy()-2)*Agrif_Rhoy()) * 1.e-3 * rn_dy 
     96      ENDIF 
     97#endif 
     98      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     99         zti = REAL( mig0(ji)-1, wp )  ! start at i=0 in the global grid without halos 
     100         ztj = REAL( mjg0(jj)-1, wp )  ! start at j=0 in the global grid without halos 
    76101 
    77       !                          ========== 
    78 #if defined key_agrif  
    79       IF( Agrif_Root() ) THEN 
    80 #endif 
    81          zlam0 = -REAL(Ni0glo, wp) * 0.5 * 1.e-3 * rn_dx 
    82          zphi0 = -REAL(Nj0glo, wp) * 0.5 * 1.e-3 * rn_dy 
    83 #if defined key_agrif  
    84       ELSE 
    85          ! ! let lower left longitude and latitude from parent 
    86 !clem         zlam0  = Agrif_Parent(zlam0) + (Agrif_ix())*Agrif_Parent(rn_dx) * 1.e-5 
    87 !clem         zphi0  = Agrif_Parent(zphi0) + (Agrif_iy())*Agrif_Parent(rn_dy) * 1.e-5 
    88          zlam0 = ( 0.5_wp - REAL(Ni0glo, wp) * 0.5 ) * 1.e-3 * Agrif_irhox() * rn_dx  & 
    89             &  + ( Agrif_Ix() + nbghostcells - 1 ) * Agrif_irhox() * rn_dx * 1.e-3 - ( 0.5_wp + nbghostcells ) * rn_dx * 1.e-3 
    90          zphi0 = ( 0.5_wp - REAL(Nj0glo, wp) * 0.5 ) * 1.e-3 * Agrif_irhoy() * rn_dy  & 
    91             &  + ( Agrif_Iy() + nbghostcells - 1 ) * Agrif_irhoy() * rn_dy * 1.e-3 - ( 0.5_wp + nbghostcells ) * rn_dy * 1.e-3 
    92       ENDIF 
    93 #endif          
     102         plamt(ji,jj) = roffsetx + rn_dx * 1.e-3 * ( zti - 0.5_wp ) 
     103         plamu(ji,jj) = roffsetx + rn_dx * 1.e-3 *   zti 
     104         plamv(ji,jj) = plamt(ji,jj) 
     105         plamf(ji,jj) = plamu(ji,jj) 
    94106 
    95       DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
    96          zti = REAL( mig0(ji), wp ) - 0.5_wp  ! start at i=0.5 in the global grid without halos 
    97          ztj = REAL( mjg0(jj), wp ) - 0.5_wp  ! start at j=0.5 in the global grid without halos 
    98            
    99          plamt(ji,jj) = zlam0 + rn_dx * 1.e-3 *   zti 
    100          plamu(ji,jj) = zlam0 + rn_dx * 1.e-3 * ( zti + 0.5_wp ) 
    101          plamv(ji,jj) = plamt(ji,jj)  
    102          plamf(ji,jj) = plamu(ji,jj)  
    103           
    104          pphit(ji,jj) = zphi0 + rn_dy * 1.e-3 *   ztj 
    105          pphiv(ji,jj) = zphi0 + rn_dy * 1.e-3 * ( ztj + 0.5_wp ) 
    106          pphiu(ji,jj) = pphit(ji,jj)  
    107          pphif(ji,jj) = pphiv(ji,jj)  
     107         pphit(ji,jj) = roffsety + rn_dy * 1.e-3 * ( ztj - 0.5_wp ) 
     108         pphiv(ji,jj) = roffsety + rn_dy * 1.e-3 *   ztj 
     109         pphiu(ji,jj) = pphit(ji,jj) 
     110         pphif(ji,jj) = pphiv(ji,jj) 
    108111      END_2D 
    109           
    110          ! Horizontal scale factors (in meters) 
    111          !                              ====== 
     112      ! 
     113      ! Horizontal scale factors (in meters) 
     114      !                              ====== 
    112115!! ==> EITHER 1) variable scale factors 
    113116!! clem: This can be used with a 1proc simulation but I think it breaks repro when >1procs are used       
  • NEMO/trunk/tests/ICE_AGRIF/MY_SRC/usrdef_nam.F90

    r14433 r14976  
    8888         kpj = NINT( 300.e3 / rn_dy ) - 3 
    8989      ELSE                           ! Global Domain size: add nbghostcells + 1 "land" point on each side 
    90          kpi  = nbcellsx + 2 * ( nbghostcells + 1 ) 
    91          kpj  = nbcellsy + 2 * ( nbghostcells + 1 ) 
     90         kpi  = nbcellsx + 2 * nbghostcells 
     91         kpj  = nbcellsy + 2 * nbghostcells 
     92!! JC: number of ghosts unknown at this tage 
    9293!!$         kpi  = nbcellsx + nbghostcells_x   + nbghostcells_x   + 2 
    9394!!$         kpj  = nbcellsy + nbghostcells_y_s + nbghostcells_y_n + 2 
  • NEMO/trunk/tests/VORTEX/EXPREF/AGRIF_FixedGrids.in

    r9787 r14976  
    111 
    2 19 38 19 38 3 3 3  
     222 41 22 41 3 3 3  
    330 
  • NEMO/trunk/tests/VORTEX/MY_SRC/usrdef_hgr.F90

    r14223 r14976  
    2323   IMPLICIT NONE 
    2424   PRIVATE 
     25 
     26   REAL(wp) :: roffsetx, roffsety ! Offset in km to first f-point 
    2527 
    2628   PUBLIC   usr_def_hgr   ! called by domhgr.F90 
     
    6466      ! 
    6567      INTEGER  ::   ji, jj     ! dummy loop indices 
    66       REAL(wp) ::   zphi0, zlam0, zbeta, zf0 
     68      REAL(wp) ::   zbeta, zf0 
    6769      REAL(wp) ::   zti, ztj   ! local scalars 
    6870      !!------------------------------------------------------------------------------- 
     
    7779      ! Position coordinates (in kilometers) 
    7880      !                          ========== 
    79 #if defined key_agrif  
    80       IF( Agrif_Root() ) THEN 
    81 #endif 
    82          zlam0 = -REAL(Ni0glo, wp) * 0.5 * 1.e-3 * rn_dx 
    83          zphi0 = -REAL(Nj0glo, wp) * 0.5 * 1.e-3 * rn_dy 
     81      ! offset is given at first f-point, i.e. at (i,j) = (nn_hls+1, nn_hls+1) 
     82      ! Here we assume the grid is centred around a T-point at the middle of 
     83      ! of the domain (hence domain size is odd)  
     84      roffsetx = (-REAL(Ni0glo-1, wp) + 1._wp) * 0.5 * 1.e-3 * rn_dx 
     85      roffsety = (-REAL(Nj0glo-1, wp) + 1._wp) * 0.5 * 1.e-3 * rn_dy 
    8486#if defined key_agrif 
    85       ELSE 
    86          ! ! let lower left longitude and latitude from parent 
    87          zlam0 = ( 0.5_wp - REAL(Ni0glo, wp) * 0.5 ) * 1.e-3 * Agrif_irhox() * rn_dx  & 
    88             &  + ( Agrif_Ix() + nbghostcells - 1 ) * Agrif_irhox() * rn_dx * 1.e-3 - ( 0.5_wp + nbghostcells ) * rn_dx * 1.e-3 
    89          zphi0 = ( 0.5_wp - REAL(Nj0glo, wp) * 0.5 ) * 1.e-3 * Agrif_irhoy() * rn_dy  & 
    90             &  + ( Agrif_Iy() + nbghostcells - 1 ) * Agrif_irhoy() * rn_dy * 1.e-3 - ( 0.5_wp + nbghostcells ) * rn_dy * 1.e-3 
    91       ENDIF  
    92 #endif 
     87      IF( .NOT.Agrif_Root() ) THEN 
     88         ! deduce offset from parent: 
     89         roffsetx = Agrif_Parent(roffsetx) & 
     90                  & + (-(nbghostcells_x   - 1) + (Agrif_Parent(nbghostcells_x  ) + Agrif_Ix()-2)*Agrif_Rhox()) * 1.e-3 * rn_dx 
     91         roffsety = Agrif_Parent(roffsety) & 
     92                  & + (-(nbghostcells_y_s - 1) + (Agrif_Parent(nbghostcells_y_s) + Agrif_Iy()-2)*Agrif_Rhoy()) * 1.e-3 * rn_dy 
     93      ENDIF 
     94#endif          
     95      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     96         zti = REAL( mig0(ji)-1, wp )  ! start at i=0 in the global grid without halos 
     97         ztj = REAL( mjg0(jj)-1, wp )  ! start at j=0 in the global grid without halos 
    9398          
    94       DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
    95          zti = REAL( mig0(ji), wp ) - 0.5_wp  ! start at i=0.5 in the global grid without halos 
    96          ztj = REAL( mjg0(jj), wp ) - 0.5_wp  ! start at j=0.5 in the global grid without halos 
    97           
    98          plamt(ji,jj) = zlam0 + rn_dx * 1.e-3 *   zti 
    99          plamu(ji,jj) = zlam0 + rn_dx * 1.e-3 * ( zti + 0.5_wp ) 
     99         plamt(ji,jj) = roffsetx + rn_dx * 1.e-3 * ( zti - 0.5_wp ) 
     100         plamu(ji,jj) = roffsetx + rn_dx * 1.e-3 *   zti  
    100101         plamv(ji,jj) = plamt(ji,jj)  
    101102         plamf(ji,jj) = plamu(ji,jj)  
    102103          
    103          pphit(ji,jj) = zphi0 + rn_dy * 1.e-3 *   ztj 
    104          pphiv(ji,jj) = zphi0 + rn_dy * 1.e-3 * ( ztj + 0.5_wp ) 
     104         pphit(ji,jj) = roffsety + rn_dy * 1.e-3 * ( ztj - 0.5_wp ) 
     105         pphiv(ji,jj) = roffsety + rn_dy * 1.e-3 *   ztj  
    105106         pphiu(ji,jj) = pphit(ji,jj)  
    106107         pphif(ji,jj) = pphiv(ji,jj)  
  • NEMO/trunk/tests/VORTEX/MY_SRC/usrdef_nam.F90

    r14433 r14976  
    6060      ! 
    6161      INTEGER ::   ios          ! Local integer 
     62      INTEGER :: ighost_n, ighost_s, ighost_w, ighost_e 
    6263      REAL(wp)::   zlx, zly, zh ! Local scalars 
    6364      !! 
     
    8384      kk_cfg = nINT( rn_dx ) 
    8485      ! 
     86#if defined key_agrif  
    8587      IF( Agrif_Root() ) THEN       ! Global Domain size:  VORTEX global domain is  1800 km x 1800 Km x 5000 m 
     88#endif 
    8689         kpi = NINT( 1800.e3  / rn_dx ) + 3   
    8790         kpj = NINT( 1800.e3  / rn_dy ) + 3  
     91#if defined key_agrif  
    8892      ELSE                          ! Global Domain size: add nbghostcells + 1 "land" point on each side 
    89          kpi  = nbcellsx + 2 * ( nbghostcells + 1 ) 
    90          kpj  = nbcellsy + 2 * ( nbghostcells + 1 ) 
    91 !!$         kpi  = nbcellsx + nbghostcells_x   + nbghostcells_x   + 2 
    92 !!$         kpj  = nbcellsy + nbghostcells_y_s + nbghostcells_y_n + 2 
     93         ! At this stage, child ghosts have not been set 
     94         ighost_w = nbghostcells 
     95         ighost_e = nbghostcells 
     96         ighost_s = nbghostcells 
     97         ighost_n = nbghostcells 
     98 
     99         IF  ( Agrif_Ix() == 1 ) ighost_w = 1  
     100         IF  ( Agrif_Ix() + nbcellsx/AGRIF_Irhox() == Agrif_Parent(Ni0glo) - 1 ) ighost_e = 1  
     101         IF  ( Agrif_Iy() == 1 ) ighost_s = 1  
     102         IF  ( Agrif_Iy() + nbcellsy/AGRIF_Irhoy() == Agrif_Parent(Nj0glo) - 1 ) ighost_n = 1  
     103!         kpi  = nbcellsx + 2 * ( nbghostcells + 1 ) 
     104!         kpj  = nbcellsy + 2 * ( nbghostcells + 1 ) 
     105         kpi  = nbcellsx + ighost_w + ighost_e  
     106         kpj  = nbcellsy + ighost_s + ighost_n 
    93107      ENDIF 
     108#endif 
    94109      kpk = NINT( 5000._wp / rn_dz ) + 1 
    95110      ! 
Note: See TracChangeset for help on using the changeset viewer.