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/agrif_oce_sponge.F90 – NEMO

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

Extra_Halo: toward AGRIF compatibility, see #2366

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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. 
Note: See TracChangeset for help on using the changeset viewer.