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 13065 for NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/NST – NEMO

Ignore:
Timestamp:
2020-06-08T18:11:57+02:00 (4 years ago)
Author:
smasson
Message:

Extra_Halo: toward AGRIF compatibility, see #2366

Location:
NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/NST
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/NST/agrif_oce.F90

    r12377 r13065  
    6767   INTEGER, PUBLIC :: avt_id, avm_id, en_id                ! TKE related identificators 
    6868   INTEGER, PUBLIC :: mbkt_id, ht0_id 
     69   INTEGER, PUBLIC :: glamt_id, gphit_id 
    6970   INTEGER, PUBLIC :: kindic_agr 
    7071    
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/NST/agrif_oce_interp.F90

    r12377 r13065  
    4343   PUBLIC   interptsn, interpsshn, interpavm 
    4444   PUBLIC   interpunb, interpvnb , interpub2b, interpvb2b 
    45    PUBLIC   interpe3t 
     45   PUBLIC   interpe3t, interpglamt, interpgphit 
    4646#if defined key_vertical 
    4747   PUBLIC   interpht0, interpmbkt 
     
    9595      ! 
    9696      ! --- West --- ! 
    97       ibdy1 = 2 
    98       ibdy2 = 1+nbghostcells  
    99       ! 
    100       IF( .NOT.ln_dynspg_ts ) THEN  ! Store transport 
     97      ibdy1 = nn_hls + 2                  ! halo + land + 1 
     98      ibdy2 = nn_hls + 1 + nbghostcells   ! halo + land + nbghostcells 
     99      ! 
     100      IF( .NOT.ln_dynspg_ts ) THEN  ! Store tangential transport 
    101101         DO ji = mi0(ibdy1), mi1(ibdy2) 
    102102            uu_b(ji,:,Krhs_a) = 0._wp 
     
    115115      ! 
    116116      DO ji = mi0(ibdy1), mi1(ibdy2) 
    117          zub(ji,:) = 0._wp    ! Correct transport 
     117         zub(ji,:) = 0._wp    ! Correct tangential transport 
    118118         DO jk = 1, jpkm1 
    119119            DO jj = 1, jpj 
     
    153153 
    154154      ! --- East --- ! 
    155       ibdy1 = jpiglo-1-nbghostcells 
    156       ibdy2 = jpiglo-2  
     155      ibdy1 = jpiglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
     156      ibdy2 = jpiglo - ( nn_hls + 2 )                 ! halo + land + 1 
    157157      ! 
    158158      IF( .NOT.ln_dynspg_ts ) THEN  ! Store transport 
     
    192192             
    193193      IF( ln_dynspg_ts ) THEN       ! Set tangential velocities to time splitting estimate 
    194          ibdy1 = jpiglo-nbghostcells 
    195          ibdy2 = jpiglo-1  
     194         ibdy1 = jpiglo - ( nn_hls + nbghostcells )   ! halo + land + nbghostcells - 1 
     195         ibdy2 = jpiglo - ( nn_hls + 1 )              ! halo + land + 1            - 1 
    196196         DO ji = mi0(ibdy1), mi1(ibdy2) 
    197197            zvb(ji,:) = 0._wp 
     
    215215 
    216216      ! --- South --- ! 
    217       jbdy1 = 2 
    218       jbdy2 = 1+nbghostcells  
     217      jbdy1 = nn_hls + 2                  ! halo + land + 1 
     218      jbdy2 = nn_hls + 1 + nbghostcells   ! halo + land + nbghostcells 
    219219      ! 
    220220      IF( .NOT.ln_dynspg_ts ) THEN  ! Store transport 
     
    276276 
    277277      ! --- North --- ! 
    278       jbdy1 = jpjglo-1-nbghostcells 
    279       jbdy2 = jpjglo-2  
     278      jbdy1 = jpjglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
     279      jbdy2 = jpjglo - ( nn_hls + 2 )                 ! halo + land + 1 
    280280      ! 
    281281      IF( .NOT.ln_dynspg_ts ) THEN  ! Store transport 
     
    315315             
    316316      IF( ln_dynspg_ts ) THEN       ! Set tangential velocities to time splitting estimate 
    317          jbdy1 = jpjglo-nbghostcells 
    318          jbdy2 = jpjglo-1 
     317         jbdy1 = jpjglo - ( nn_hls + nbghostcells )   ! halo + land + nbghostcells - 1 
     318         jbdy2 = jpjglo - ( nn_hls + 1 )              ! halo + land + 1            - 1 
    319319         DO jj = mj0(jbdy1), mj1(jbdy2) 
    320320            zub(:,jj) = 0._wp 
     
    354354      ! 
    355355      !--- West ---! 
    356       istart = 2 
    357       iend   = nbghostcells+1 
     356      istart = nn_hls + 2                              ! halo + land + 1 
     357      iend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    358358      DO ji = mi0(istart), mi1(iend) 
    359359         DO jj=1,jpj 
     
    364364      ! 
    365365      !--- East ---! 
    366       istart = jpiglo-nbghostcells 
    367       iend   = jpiglo-1 
     366      istart = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     367      iend   = jpiglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
    368368      DO ji = mi0(istart), mi1(iend) 
    369369         DO jj=1,jpj 
     
    371371         END DO 
    372372      END DO 
    373       istart = jpiglo-nbghostcells-1 
    374       iend   = jpiglo-2 
     373      istart = jpiglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
     374      iend   = jpiglo - ( nn_hls + 2 )                 ! halo + land + 1 
    375375      DO ji = mi0(istart), mi1(iend) 
    376376         DO jj=1,jpj 
     
    380380      ! 
    381381      !--- South ---! 
    382       jstart = 2 
    383       jend   = nbghostcells+1 
     382      jstart = nn_hls + 2                              ! halo + land + 1 
     383      jend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    384384      DO jj = mj0(jstart), mj1(jend) 
    385385         DO ji=1,jpi 
     
    390390      ! 
    391391      !--- North ---! 
    392       jstart = jpjglo-nbghostcells 
    393       jend   = jpjglo-1 
     392      jstart = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     393      jend   = jpjglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
    394394      DO jj = mj0(jstart), mj1(jend) 
    395395         DO ji=1,jpi 
     
    397397         END DO 
    398398      END DO 
    399       jstart = jpjglo-nbghostcells-1 
    400       jend   = jpjglo-2 
     399      jstart = jpjglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
     400      jend   = jpjglo - ( nn_hls + 2 )                 ! halo + land + 1 
    401401      DO jj = mj0(jstart), mj1(jend) 
    402402         DO ji=1,jpi 
     
    421421      ! 
    422422      !--- West ---! 
    423       istart = 2 
    424       iend   = nbghostcells+1 
     423      istart = nn_hls + 2                              ! halo + land + 1 
     424      iend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    425425      DO ji = mi0(istart), mi1(iend) 
    426426         DO jj=1,jpj 
     
    431431      ! 
    432432      !--- East ---! 
    433       istart = jpiglo-nbghostcells 
    434       iend   = jpiglo-1 
     433      istart = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     434      iend   = jpiglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
    435435      DO ji = mi0(istart), mi1(iend) 
    436436         DO jj=1,jpj 
     
    438438         END DO 
    439439      END DO 
    440       istart = jpiglo-nbghostcells-1 
    441       iend   = jpiglo-2 
     440      istart = jpiglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
     441      iend   = jpiglo - ( nn_hls + 2 )                 ! halo + land + 1 
    442442      DO ji = mi0(istart), mi1(iend) 
    443443         DO jj=1,jpj 
     
    447447      ! 
    448448      !--- South ---! 
    449       jstart = 2 
    450       jend   = nbghostcells+1 
     449      jstart = nn_hls + 2                              ! halo + land + 1 
     450      jend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    451451      DO jj = mj0(jstart), mj1(jend) 
    452452         DO ji=1,jpi 
     
    457457      ! 
    458458      !--- North ---! 
    459       jstart = jpjglo-nbghostcells 
    460       jend   = jpjglo-1 
     459      jstart = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     460      jend   = jpjglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
    461461      DO jj = mj0(jstart), mj1(jend) 
    462462         DO ji=1,jpi 
     
    464464         END DO 
    465465      END DO 
    466       jstart = jpjglo-nbghostcells-1 
    467       jend   = jpjglo-2 
     466      jstart = jpjglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
     467      jend   = jpjglo - ( nn_hls + 2 )                 ! halo + land + 1 
    468468      DO jj = mj0(jstart), mj1(jend) 
    469469         DO ji=1,jpi 
     
    542542      ! 
    543543      ! --- West --- ! 
    544       istart = 2 
    545       iend   = 1 + nbghostcells 
     544      istart = nn_hls + 2                              ! halo + land + 1 
     545      iend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    546546      DO ji = mi0(istart), mi1(iend) 
    547547         DO jj = 1, jpj 
     
    551551      ! 
    552552      ! --- East --- ! 
    553       istart = jpiglo - nbghostcells 
    554       iend   = jpiglo - 1 
     553      istart = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     554      iend   = jpiglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
    555555      DO ji = mi0(istart), mi1(iend) 
    556556         DO jj = 1, jpj 
     
    560560      ! 
    561561      ! --- South --- ! 
    562       jstart = 2 
    563       jend   = 1 + nbghostcells 
     562      jstart = nn_hls + 2                              ! halo + land + 1 
     563      jend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    564564      DO jj = mj0(jstart), mj1(jend) 
    565565         DO ji = 1, jpi 
     
    569569      ! 
    570570      ! --- North --- ! 
    571       jstart = jpjglo - nbghostcells 
    572       jend   = jpjglo - 1 
     571      jstart = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     572      jend   = jpjglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
    573573      DO jj = mj0(jstart), mj1(jend) 
    574574         DO ji = 1, jpi 
     
    593593      ! 
    594594      ! --- West --- ! 
    595       istart = 2 
    596       iend   = 1+nbghostcells 
     595      istart = nn_hls + 2                              ! halo + land + 1 
     596      iend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    597597      DO ji = mi0(istart), mi1(iend) 
    598598         DO jj = 1, jpj 
     
    602602      ! 
    603603      ! --- East --- ! 
    604       istart = jpiglo - nbghostcells 
    605       iend   = jpiglo - 1 
     604      istart = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     605      iend   = jpiglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
    606606      DO ji = mi0(istart), mi1(iend) 
    607607         DO jj = 1, jpj 
     
    611611      ! 
    612612      ! --- South --- ! 
    613       jstart = 2 
    614       jend   = 1+nbghostcells 
     613      jstart = nn_hls + 2                              ! halo + land + 1 
     614      jend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    615615      DO jj = mj0(jstart), mj1(jend) 
    616616         DO ji = 1, jpi 
     
    620620      ! 
    621621      ! --- North --- ! 
    622       jstart = jpjglo - nbghostcells 
    623       jend   = jpjglo - 1 
     622      jstart = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
     623      jend   = jpjglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
    624624      DO jj = mj0(jstart), mj1(jend) 
    625625         DO ji = 1, jpi 
     
    11521152                     WRITE(numout,*) ' Agrif error for e3t_0: parent , child, i, j, k ',  &  
    11531153                     &                 ptab(ji,jj,jk), tmask(ji,jj,jk) * e3t_0(ji,jj,jk), & 
    1154                      &                 ji+nimpp-1, jj+njmpp-1, jk 
    1155                      kindic_agr = kindic_agr + 1 
     1154                     &                 mig0(ji), mig0(jj), jk 
     1155                !     kindic_agr = kindic_agr + 1 
    11561156                  ENDIF 
    11571157               END DO 
     
    11621162      !  
    11631163   END SUBROUTINE interpe3t 
     1164 
     1165 
     1166   SUBROUTINE interpglamt( ptab, i1, i2, j1, j2, before ) 
     1167      !!---------------------------------------------------------------------- 
     1168      !!                  ***  ROUTINE interpglamt  *** 
     1169      !!----------------------------------------------------------------------   
     1170      INTEGER                        , INTENT(in   ) :: i1, i2, j1, j2 
     1171      REAL(wp),DIMENSION(i1:i2,j1:j2), INTENT(inout) :: ptab 
     1172      LOGICAL                        , INTENT(in   ) :: before 
     1173      ! 
     1174      INTEGER :: ji, jj, jk 
     1175      REAL(wp):: ztst 
     1176      !!----------------------------------------------------------------------   
     1177      !     
     1178      IF( before ) THEN 
     1179         ptab(i1:i2,j1:j2) = glamt(i1:i2,j1:j2) 
     1180      ELSE 
     1181         ztst = MAXVAL(ABS(glamt(i1:i2,j1:j2)))*1.e-4 
     1182         DO jj = j1, j2 
     1183            DO ji = i1, i2 
     1184               IF( ABS( ptab(ji,jj) - glamt(ji,jj) ) > ztst ) THEN 
     1185                  WRITE(numout,*) ' Agrif error for glamt: parent, child, i, j ', ptab(ji,jj), glamt(ji,jj), mig0(ji), mig0(jj) 
     1186                  kindic_agr = kindic_agr + 1 
     1187               ENDIF 
     1188            END DO 
     1189         END DO 
     1190      ENDIF 
     1191      !  
     1192   END SUBROUTINE interpglamt 
     1193 
     1194 
     1195   SUBROUTINE interpgphit( ptab, i1, i2, j1, j2, before ) 
     1196      !!---------------------------------------------------------------------- 
     1197      !!                  ***  ROUTINE interpgphit  *** 
     1198      !!----------------------------------------------------------------------   
     1199      INTEGER                        , INTENT(in   ) :: i1, i2, j1, j2 
     1200      REAL(wp),DIMENSION(i1:i2,j1:j2), INTENT(inout) :: ptab 
     1201      LOGICAL                        , INTENT(in   ) :: before 
     1202      ! 
     1203      INTEGER :: ji, jj, jk 
     1204      REAL(wp):: ztst 
     1205      !!----------------------------------------------------------------------   
     1206      !     
     1207      IF( before ) THEN 
     1208         ptab(i1:i2,j1:j2) = gphit(i1:i2,j1:j2) 
     1209      ELSE 
     1210         ztst = MAXVAL(ABS(gphit(i1:i2,j1:j2)))*1.e-4 
     1211         DO jj = j1, j2 
     1212            DO ji = i1, i2 
     1213               IF( ABS( ptab(ji,jj) - gphit(ji,jj) ) > ztst ) THEN 
     1214                  WRITE(numout,*) ' Agrif error for gphit: parent, child, i, j ', ptab(ji,jj), gphit(ji,jj), mig0(ji), mig0(jj) 
     1215                  kindic_agr = kindic_agr + 1 
     1216               ENDIF 
     1217            END DO 
     1218         END DO 
     1219      ENDIF 
     1220      !  
     1221   END SUBROUTINE interpgphit 
    11641222 
    11651223 
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/NST/agrif_oce_sponge.F90

    r12807 r13065  
    106106      REAL(wp) ::   z1_ispongearea, z1_jspongearea 
    107107      REAL(wp), DIMENSION(jpi,jpj) :: ztabramp 
     108#if defined key_vertical 
     109      REAL(wp), DIMENSION(jpi,jpj) :: ztabrampu 
     110      REAL(wp), DIMENSION(jpi,jpj) :: ztabrampv 
     111#endif 
    108112      REAL(wp), DIMENSION(jpjmax)  :: zmskwest,  zmskeast 
    109113      REAL(wp), DIMENSION(jpimax)  :: zmsknorth, zmsksouth 
     
    128132         ! --- West --- ! 
    129133         ztabramp(:,:) = 0._wp 
    130          ind1 = 1+nbghostcells 
     134         ind1 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    131135         DO ji = mi0(ind1), mi1(ind1)                 
    132136            ztabramp(ji,:) = ssumask(ji,:) 
    133137         END DO 
    134138         ! 
    135          zmskwest(:) = 0._wp 
    136139         zmskwest(1:jpj) = MAXVAL(ztabramp(:,:), dim=1) 
     140         zmskwest(jpj+1:jpjmax) = 0._wp 
    137141 
    138142         ! --- East --- ! 
    139143         ztabramp(:,:) = 0._wp 
    140          ind1 = jpiglo - nbghostcells - 1 
     144         ind1 = jpiglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
    141145         DO ji = mi0(ind1), mi1(ind1)                  
    142146            ztabramp(ji,:) = ssumask(ji,:) 
    143147         END DO 
    144148         ! 
    145          zmskeast(:) = 0._wp 
    146149         zmskeast(1:jpj) = MAXVAL(ztabramp(:,:), dim=1) 
     150         zmskeast(jpj+1:jpjmax) = 0._wp 
    147151 
    148152         ! --- South --- ! 
    149153         ztabramp(:,:) = 0._wp 
    150          ind1 = 1+nbghostcells 
     154         ind1 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    151155         DO jj = mj0(ind1), mj1(ind1)                  
    152156            ztabramp(:,jj) = ssvmask(:,jj) 
    153157         END DO 
    154158         ! 
    155          zmsksouth(:) = 0._wp 
    156159         zmsksouth(1:jpi) = MAXVAL(ztabramp(:,:), dim=2) 
     160         zmsksouth(jpi+1:jpimax) = 0._wp 
    157161 
    158162         ! --- North --- ! 
    159163         ztabramp(:,:) = 0._wp 
    160          ind1 = jpjglo - nbghostcells - 1 
     164         ind1 = jpjglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
    161165         DO jj = mj0(ind1), mj1(ind1)                  
    162166            ztabramp(:,jj) = ssvmask(:,jj) 
    163167         END DO 
    164168         ! 
    165          zmsknorth(:) = 0._wp 
    166169         zmsknorth(1:jpi) = MAXVAL(ztabramp(:,:), dim=2) 
     170         zmsknorth(jpi+1:jpimax) = 0._wp 
     171 
    167172         ! JC: SPONGE MASKING TO BE SORTED OUT: 
    168173         zmskwest(:)  = 1._wp 
    169174         zmskeast(:)  = 1._wp 
     175         zmsksouth(:) = 1._wp 
    170176         zmsknorth(:) = 1._wp 
    171          zmsksouth(:) = 1._wp 
    172177#if defined key_mpp_mpi 
    173178!         CALL mpp_max( 'AGRIF_sponge', zmskwest(:) , jpjmax ) 
     
    192197 
    193198         ! --- West --- ! 
    194          ind1 = 1+nbghostcells 
    195          ind2 = 1+nbghostcells + ispongearea  
     199         ind1 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     200         ind2 = nn_hls + 1 + nbghostcells + ispongearea  
    196201         DO ji = mi0(ind1), mi1(ind2)    
    197202            DO jj = 1, jpj                
     
    202207         ! ghost cells: 
    203208         ind1 = 1 
    204          ind2 = nbghostcells + 1 
     209         ind2 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    205210         DO ji = mi0(ind1), mi1(ind2)    
    206211            DO jj = 1, jpj                
     
    210215 
    211216         ! --- East --- ! 
    212          ind1 = jpiglo - nbghostcells - ispongearea 
    213          ind2 = jpiglo - nbghostcells 
     217         ind1 = jpiglo - ( nn_hls + nbghostcells ) - ispongearea 
     218         ind2 = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    214219         DO ji = mi0(ind1), mi1(ind2) 
    215220            DO jj = 1, jpj 
     
    219224 
    220225         ! ghost cells: 
    221          ind1 = jpiglo - nbghostcells 
     226         ind1 = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    222227         ind2 = jpiglo 
    223228         DO ji = mi0(ind1), mi1(ind2) 
     
    228233 
    229234         ! --- South --- ! 
    230          ind1 = 1+nbghostcells 
    231          ind2 = 1+nbghostcells + jspongearea 
     235         ind1 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     236         ind2 = nn_hls + 1 + nbghostcells + jspongearea  
    232237         DO jj = mj0(ind1), mj1(ind2)  
    233238            DO ji = 1, jpi 
     
    238243         ! ghost cells: 
    239244         ind1 = 1 
    240          ind2 = nbghostcells + 1 
     245         ind2 = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
    241246         DO jj = mj0(ind1), mj1(ind2)  
    242247            DO ji = 1, jpi 
     
    246251 
    247252         ! --- North --- ! 
    248          ind1 = jpjglo - nbghostcells - jspongearea 
    249          ind2 = jpjglo - nbghostcells 
     253         ind1 = jpjglo - ( nn_hls + nbghostcells ) - jspongearea 
     254         ind2 = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    250255         DO jj = mj0(ind1), mj1(ind2) 
    251256            DO ji = 1, jpi 
     
    255260 
    256261         ! ghost cells: 
    257          ind1 = jpjglo - nbghostcells 
     262         ind1 = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    258263         ind2 = jpjglo 
    259264         DO jj = mj0(ind1), mj1(ind2) 
     
    273278            fspv(ji,jj) = 0.5_wp * ( ztabramp(ji,jj) + ztabramp(ji  ,jj+1) ) * ssvmask(ji,jj) 
    274279         END_2D 
    275          CALL lbc_lnk( 'agrif_Sponge', fspu, 'U', 1. )   ! Lateral boundary conditions 
    276          CALL lbc_lnk( 'agrif_Sponge', fspv, 'V', 1. ) 
    277  
    278          spongedoneT = .TRUE. 
    279280      ENDIF 
    280281 
     
    289290                                  &  * ssvmask(ji,jj) * ssvmask(ji,jj+1) 
    290291         END_2D 
    291          CALL lbc_lnk( 'agrif_Sponge', fspt, 'T', 1. )   ! Lateral boundary conditions 
    292          CALL lbc_lnk( 'agrif_Sponge', fspf, 'F', 1. ) 
    293           
     292      ENDIF 
     293       
     294      IF( .NOT. spongedoneT .AND. .NOT. spongedoneU ) THEN 
     295         CALL lbc_lnk_multi( 'agrif_Sponge', fspu, 'U', 1., fspv, 'V', 1., fspt, 'T', 1., fspf, 'F', 1. ) 
     296         spongedoneT = .TRUE. 
     297         spongedoneU = .TRUE. 
     298      ENDIF 
     299      IF( .NOT. spongedoneT ) THEN 
     300         CALL lbc_lnk_multi( 'agrif_Sponge', fspu, 'U', 1., fspv, 'V', 1. ) 
     301         spongedoneT = .TRUE. 
     302      ENDIF 
     303      IF( .NOT. spongedoneT .AND. .NOT. spongedoneU ) THEN 
     304         CALL lbc_lnk_multi( 'agrif_Sponge', fspt, 'T', 1., fspf, 'F', 1. ) 
    294305         spongedoneU = .TRUE. 
    295306      ENDIF 
     
    312323      END_2D 
    313324      ! 
    314       ztabramp(:,:) = REAL( mbkt_parent(:,:), wp )   ;   CALL lbc_lnk( 'Agrif_Sponge', ztabramp, 'T', 1. ) 
    315       mbkt_parent(:,:) = NINT( ztabramp(:,:) ) 
    316       ztabramp(:,:) = REAL( mbku_parent(:,:), wp )   ;   CALL lbc_lnk( 'Agrif_Sponge', ztabramp, 'U', 1. ) 
    317       mbku_parent(:,:) = NINT( ztabramp(:,:) ) 
    318       ztabramp(:,:) = REAL( mbkv_parent(:,:), wp )   ;   CALL lbc_lnk( 'Agrif_Sponge', ztabramp, 'V', 1. ) 
    319       mbkv_parent(:,:) = NINT( ztabramp(:,:) ) 
     325      ztabramp (:,:) = REAL( mbkt_parent (:,:), wp ) 
     326      ztabrampu(:,:) = REAL( mbku_parentu(:,:), wp ) 
     327      ztabrampv(:,:) = REAL( mbkv_parentv(:,:), wp ) 
     328      CALL lbc_lnk_multi( 'Agrif_Sponge', ztabramp, 'T', 1., ztabrampu, 'U', 1., ztabrampv, 'V', 1. ) 
     329      mbkt_parent(:,:) = NINT( ztabramp (:,:) ) 
     330      mbku_parent(:,:) = NINT( ztabrampu(:,:) ) 
     331      mbkv_parent(:,:) = NINT( ztabrampv(:,:) ) 
    320332#endif 
    321333      ! 
     
    505517 
    506518      INTEGER :: ji,jj,jk,jmax 
    507  
     519      INTEGER :: ind1 
    508520      ! sponge parameters  
    509521      REAL(wp) :: ze2u, ze1v, zua, zva, zbtr, zhtot, ztrelax 
     
    646658 
    647659         jmax = j2-1 
    648          IF ((nbondj == 1).OR.(nbondj == 2)) jmax = MIN(jmax,jpj-nbghostcells-2)   ! North 
     660         ind1 = jpjglo - ( nn_hls + nbghostcells + 2 )   ! North 
     661         DO jj = mj0(ind1), mj1(ind1)                  
     662            jmax = MIN(jmax,jj) 
     663         END DO 
    649664 
    650665         DO jj = j1+1, jmax 
     
    684699      ! 
    685700      INTEGER  ::   ji, jj, jk, imax 
     701      INTEGER  ::   ind1 
     702      ! sponge parameters  
    686703      REAL(wp) ::   ze2u, ze1v, zua, zva, zbtr, zhtot, ztrelax 
    687704      REAL(wp), DIMENSION(i1:i2,j1:j2,1:jpk) :: vbdiff 
     
    802819 
    803820         imax = i2 - 1 
    804          IF ((nbondi == 1).OR.(nbondi == 2))   imax = MIN(imax,jpi-nbghostcells-2)   ! East 
    805  
     821         ind1 = jpiglo - ( nn_hls + nbghostcells + 2 )   ! East 
     822         DO ji = mi0(ind1), mi1(ind1)                 
     823            imax = MIN(imax,ji) 
     824         END DO 
     825          
    806826         DO jj = j1+1, j2 
    807827            DO ji = i1+1, imax   ! vector opt. 
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/NST/agrif_user.F90

    r12807 r13065  
    6262      ! 1. Declaration of the type of variable which have to be interpolated 
    6363      !--------------------------------------------------------------------- 
    64       ind1 =     nbghostcells 
    65       ind2 = 1 + nbghostcells 
    66       ind3 = 2 + nbghostcells 
     64      ind1 =          nbghostcells       ! do the interpolation over nbghostcells points 
     65      ind2 = nn_hls + nbghostcells + 1   ! U/V points: array index of the first point in the reference grid  
     66      ind3 = nn_hls + nbghostcells + 2   ! T   points: array index of the first point in the reference grid  
    6767      CALL agrif_declare_variable((/1,2/),(/ind2,ind3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e1u_id) 
    6868      CALL agrif_declare_variable((/2,1/),(/ind3,ind2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e2v_id) 
     
    270270         ! 
    271271         ! In case of vertical interpolation, check only that total depths agree between child and parent: 
    272          DO ji = 1, jpi 
    273             DO jj = 1, jpj 
    274                IF ((mbkt_parent(ji,jj)/=0).AND.(ABS(ht0_parent(ji,jj)-ht_0(ji,jj))>1.e-3)) kindic_agr = kindic_agr + 1 
    275                IF ((mbku_parent(ji,jj)/=0).AND.(ABS(hu0_parent(ji,jj)-hu_0(ji,jj))>1.e-3)) kindic_agr = kindic_agr + 1 
    276                IF ((mbkv_parent(ji,jj)/=0).AND.(ABS(hv0_parent(ji,jj)-hv_0(ji,jj))>1.e-3)) kindic_agr = kindic_agr + 1 
    277             END DO 
    278          END DO 
     272         DO_2D_00_00 
     273            IF ((mbkt_parent(ji,jj)/=0).AND.(ABS(ht0_parent(ji,jj)-ht_0(ji,jj))>1.e-3)) kindic_agr = kindic_agr + 1 
     274            IF ((mbku_parent(ji,jj)/=0).AND.(ABS(hu0_parent(ji,jj)-hu_0(ji,jj))>1.e-3)) kindic_agr = kindic_agr + 1 
     275            IF ((mbkv_parent(ji,jj)/=0).AND.(ABS(hv0_parent(ji,jj)-hv_0(ji,jj))>1.e-3)) kindic_agr = kindic_agr + 1 
     276         END_2D 
    279277# endif 
    280278         CALL mpp_sum( 'agrif_user', kindic_agr ) 
     
    286284         END IF   
    287285         !     
     286         IF(lwp) WRITE(numout,*) ' ' 
     287         IF(lwp) WRITE(numout,*) 'AGRIF: Check longitude and latitude near bdys. Level: ', Agrif_Level() 
     288         ! 
     289         ! check glamt in sponge area: 
     290         kindic_agr = 0 
     291         CALL Agrif_Bc_variable(glamt_id,calledweight=1.,procname=interpglamt) 
     292         CALL mpp_sum( 'agrif_user', kindic_agr ) 
     293         IF( kindic_agr /= 0 ) THEN 
     294            CALL ctl_stop('==> Child glamt is NOT correct near boundaries.') 
     295         ELSE 
     296            IF(lwp) WRITE(numout,*) '==> Child glamt is ok near boundaries.' 
     297            IF(lwp) WRITE(numout,*) ' ' 
     298         END IF   
     299         ! 
     300         ! check gphit in sponge area: 
     301         kindic_agr = 0 
     302         CALL Agrif_Bc_variable(gphit_id,calledweight=1.,procname=interpgphit) 
     303         CALL mpp_sum( 'agrif_user', kindic_agr ) 
     304         IF( kindic_agr /= 0 ) THEN 
     305            CALL ctl_stop('==> Child gphit is NOT correct near boundaries.') 
     306         ELSE 
     307            IF(lwp) WRITE(numout,*) '==> Child gphit is ok near boundaries.' 
     308            IF(lwp) WRITE(numout,*) ' ' 
     309         END IF   
    288310      ENDIF 
    289311 
     
    314336      ! 1. Declaration of the type of variable which have to be interpolated 
    315337      !--------------------------------------------------------------------- 
    316       ind1 =     nbghostcells 
    317       ind2 = 1 + nbghostcells 
    318       ind3 = 2 + nbghostcells 
     338      ind1 =          nbghostcells       ! do the interpolation over nbghostcells points 
     339      ind2 = nn_hls + nbghostcells + 1   ! U/V points: array index of the first point in the reference grid  
     340      ind3 = nn_hls + nbghostcells + 2   ! T   points: array index of the first point in the reference grid  
    319341# if defined key_vertical 
    320342      CALL agrif_declare_variable((/2,2,0,0/),(/ind3,ind3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,jpts+1/),tsn_id) 
     
    340362 
    341363      CALL agrif_declare_variable((/2,2,0/),(/ind3,ind3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),e3t_id) 
     364      CALL agrif_declare_variable((/2,2/),(/ind3,ind3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),glamt_id) 
     365      CALL agrif_declare_variable((/2,2/),(/ind3,ind3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),gphit_id) 
    342366 
    343367# if defined key_vertical 
     
    393417      CALL Agrif_Set_bcinterp(vn_sponge_id,interp1=AGRIF_ppm,interp2=Agrif_linear) 
    394418 
    395       CALL Agrif_Set_bcinterp(e3t_id,interp=AGRIF_constant) 
     419      CALL Agrif_Set_bcinterp(  e3t_id,interp=AGRIF_constant) 
     420      CALL Agrif_Set_bcinterp(gphit_id,interp=AGRIF_constant) 
     421      CALL Agrif_Set_bcinterp(glamt_id,interp=AGRIF_constant) 
    396422 
    397423# if defined key_vertical 
     
    421447! JC: check near the boundary only until matching in sponge has been sorted out: 
    422448      CALL Agrif_Set_bc(  e3t_id, (/0,ind1-1/) )   
     449      CALL Agrif_Set_bc(glamt_id, (/0,ind1-1/) )   
     450      CALL Agrif_Set_bc(gphit_id, (/0,ind1-1/) )   
    423451 
    424452# if defined key_vertical  
     
    433461      !---------------  
    434462      CALL Agrif_Set_Updatetype(scales_t_id, update = AGRIF_Update_Average) 
     463!!$      CALL Agrif_Set_Updatetype(glamt_id, update = AGRIF_Update_Average) 
     464!!$      CALL Agrif_Set_Updatetype(gphit_id, update = AGRIF_Update_Average) 
    435465 
    436466# if defined UPD_HIGH 
     
    532562      !                            2,2 = two ghost lines 
    533563      !------------------------------------------------------------------------------------- 
    534       ind1 =     nbghostcells 
    535       ind2 = 1 + nbghostcells 
    536       ind3 = 2 + nbghostcells 
     564      ind1 =          nbghostcells       ! do the interpolation over nbghostcells points 
     565      ind2 = nn_hls + nbghostcells + 1   ! U/V points: array index of the first point in the reference grid  
     566      ind3 = nn_hls + nbghostcells + 2   ! T   points: array index of the first point in the reference grid  
    537567      CALL agrif_declare_variable((/2,2,0/),(/ind3,ind3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpl*(8+nlay_s+nlay_i)/),tra_ice_id) 
    538568      CALL agrif_declare_variable((/1,2/)  ,(/ind2,ind3/)  ,(/'x','y'/)    ,(/1,1/)  ,(/jpi,jpj/)                      ,u_ice_id  ) 
     
    657687      ! 1. Declaration of the type of variable which have to be interpolated 
    658688      !--------------------------------------------------------------------- 
    659       ind1 =     nbghostcells 
    660       ind2 = 1 + nbghostcells 
    661       ind3 = 2 + nbghostcells 
     689      ind1 =          nbghostcells       ! do the interpolation over nbghostcells points 
     690      ind2 = nn_hls + nbghostcells + 1   ! U/V points: array index of the first point in the reference grid  
     691      ind3 = nn_hls + nbghostcells + 2   ! T   points: array index of the first point in the reference grid  
    662692# if defined key_vertical 
    663693      CALL agrif_declare_variable((/2,2,0,0/),(/ind3,ind3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,jptra+1/),trn_id) 
     
    756786      ! 
    757787      SELECT CASE( i ) 
    758       CASE(1)   ;   indglob = indloc + nimppt(nprocloc+1) - 1 
    759       CASE(2)   ;   indglob = indloc + njmppt(nprocloc+1) - 1 
    760       CASE DEFAULT 
    761          indglob = indloc 
     788      CASE(1)        ;   indglob = mig(indloc) 
     789      CASE(2)        ;   indglob = mjg(indloc) 
     790      CASE DEFAULT   ;   indglob = indloc 
    762791      END SELECT 
    763792      ! 
     
    776805      !!---------------------------------------------------------------------- 
    777806      ! 
    778       imin = nimppt(Agrif_Procrank+1)  ! ????? 
    779       jmin = njmppt(Agrif_Procrank+1)  ! ????? 
    780       imax = imin + jpi - 1 
    781       jmax = jmin + jpj - 1 
     807      imin = mig( 1 ) 
     808      jmin = mjg( 1 ) 
     809      imax = mig(jpi) 
     810      jmax = mjg(jpj) 
    782811      !  
    783812   END SUBROUTINE Agrif_get_proc_info 
Note: See TracChangeset for help on using the changeset viewer.