Ignore:
Timestamp:
2019-07-02T14:25:46+02:00 (19 months ago)
Author:
jchanut
Message:

#2199
1) Make sponge independent of sub-domain size. Partially masked open boundary segments are not taken into account anymore. To do so, sponge coefficients should be read in a file for realistic applications (then nesting tools need to be modified accordingly).
2) Replace East-West-North-South barotropic data arrays by a global 2d array. Then apply barotropic open boundary conditions thanks to mi0/mi1, mj0/mj1 indexes.
3) Call AGRIF bdy update one more time in dynspg_ts during extrapolation phase. This removes a dozen lines of code in dynspg_ts routine.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10973_AGRIF-01_jchanut_small_jpi_jpj/src/NST/agrif_oce_sponge.F90

    r10425 r11205  
    9393      !!---------------------------------------------------------------------- 
    9494      INTEGER  ::   ji, jj, ind1, ind2 
    95       INTEGER  ::   ispongearea 
    96       REAL(wp) ::   z1_spongearea 
     95      INTEGER  ::   ispongearea, jspongearea 
     96      REAL(wp) ::   z1_ispongearea, z1_jspongearea 
    9797      REAL(wp), DIMENSION(jpi,jpj) :: ztabramp 
    9898      !!---------------------------------------------------------------------- 
     
    104104 
    105105         ispongearea  = 1 + nn_sponge_len * Agrif_irhox() 
    106          z1_spongearea = 1._wp / REAL( ispongearea ) 
     106         z1_ispongearea = 1._wp / REAL( ispongearea ) 
     107         jspongearea  = 1 + nn_sponge_len * Agrif_irhoy() 
     108         z1_jspongearea = 1._wp / REAL( jspongearea ) 
    107109          
    108110         ztabramp(:,:) = 0._wp 
    109111 
    110112         ! --- West --- ! 
    111          IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN 
    112             ind1 = 1+nbghostcells 
    113             ind2 = 1+nbghostcells + ispongearea  
     113         ind1 = 1+nbghostcells 
     114         ind2 = 1+nbghostcells + ispongearea  
     115         DO ji = mi0(ind1), mi1(ind2)    
     116            DO jj = 1, jpj                
     117               ztabramp(ji,jj) = REAL( ind2 - mig(ji) ) * z1_ispongearea 
     118            END DO 
     119         END DO 
     120 
     121         ! --- East --- ! 
     122         ind1 = jpiglo - nbghostcells - ispongearea 
     123         ind2 = jpiglo - nbghostcells 
     124         DO ji = mi0(ind1), mi1(ind2) 
    114125            DO jj = 1, jpj 
    115                DO ji = ind1, ind2                 
    116                   ztabramp(ji,jj) = REAL( ind2 - ji ) * z1_spongearea * umask(ind1,jj,1) 
    117                END DO 
     126               ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( mig(ji) - ind1 ) * z1_ispongearea) 
    118127            ENDDO 
    119          ENDIF 
    120  
    121          ! --- East --- ! 
    122          IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN 
    123             ind1 = nlci - nbghostcells - ispongearea 
    124             ind2 = nlci - nbghostcells 
    125             DO jj = 1, jpj 
    126                DO ji = ind1, ind2 
    127                   ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( ji - ind1 ) * z1_spongearea * umask(ind2-1,jj,1) ) 
    128                ENDDO 
    129             ENDDO 
    130          ENDIF 
     128         END DO 
    131129 
    132130         ! --- South --- ! 
    133          IF( (nbondj == -1) .OR. (nbondj == 2) ) THEN 
    134             ind1 = 1+nbghostcells 
    135             ind2 = 1+nbghostcells + ispongearea 
    136             DO jj = ind1, ind2  
    137                DO ji = 1, jpi 
    138                   ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( ind2 - jj ) * z1_spongearea * vmask(ji,ind1,1) ) 
    139                END DO 
    140             ENDDO 
    141          ENDIF 
     131         ind1 = 1+nbghostcells 
     132         ind2 = 1+nbghostcells + jspongearea 
     133         DO jj = mj0(ind1), mj1(ind2)  
     134            DO ji = 1, jpi 
     135               ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( ind2 - mjg(jj) ) * z1_jspongearea) 
     136            END DO 
     137         END DO 
    142138 
    143139         ! --- North --- ! 
    144          IF( (nbondj == 1) .OR. (nbondj == 2) ) THEN 
    145             ind1 = nlcj - nbghostcells - ispongearea 
    146             ind2 = nlcj - nbghostcells 
    147             DO jj = ind1, ind2 
    148                DO ji = 1, jpi 
    149                   ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( jj - ind1 ) * z1_spongearea * vmask(ji,ind2-1,1) ) 
    150                END DO 
    151             ENDDO 
    152          ENDIF 
     140         ind1 = jpjglo - nbghostcells - jspongearea 
     141         ind2 = jpjglo - nbghostcells 
     142         DO jj = mj0(ind1), mj1(ind2) 
     143            DO ji = 1, jpi 
     144               ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( mjg(jj) - ind1 ) * z1_jspongearea) 
     145            END DO 
     146         END DO 
    153147 
    154148      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.