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 11549 – NEMO

Changeset 11549


Ignore:
Timestamp:
2019-09-16T14:48:51+02:00 (5 years ago)
Author:
jchanut
Message:

#2199: Take into account masked open boundaries in sponge definition. Output sponge values.

Location:
NEMO/branches/2019/dev_r10973_AGRIF-01_jchanut_small_jpi_jpj
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10973_AGRIF-01_jchanut_small_jpi_jpj/cfgs/SHARED/field_def_nemo-oce.xml

    r10824 r11549  
    2727        <field id="soce"         long_name="salinity"                            standard_name="sea_water_practical_salinity"      unit="1e-3"     grid_ref="grid_T_3D"/> 
    2828        <field id="soce_e3t"     long_name="salinity    (thickness weighted)"                                                      unit="1e-3"     grid_ref="grid_T_3D" > soce * e3t </field > 
     29 
     30        <!-- AGRIF sponge --> 
     31        <field id="fsahm_spt"    long_name=" AGRIF t-sponge viscosity coefficient"   unit="m2/s"                              /> 
    2932 
    3033        <!-- t-eddy viscosity coefficients (ldfdyn) --> 
     
    364367        <field id="uoces"        long_name="ocean transport along i-axis times salinity (CRS)"                                                  unit="1e-3*m/s"   grid_ref="grid_U_3D" /> 
    365368 
     369 
     370        <!-- AGRIF sponge --> 
     371        <field id="fsaht_spu"    long_name=" AGRIF u-sponge diffusivity coefficient"   unit="m2/s"         /> 
     372 
    366373        <!-- u-eddy diffusivity coefficients (available if ln_traldf_OFF=F) --> 
    367374        <field id="ahtu_2d"      long_name=" surface u-eddy diffusivity coefficient"   unit="m2/s or m4/s" /> 
     
    418425        <field id="voces"        long_name="ocean transport along j-axis times salinity (CRS)"                                                  unit="1e-3*m/s"   grid_ref="grid_V_3D" /> 
    419426 
     427        <!-- AGRIF sponge --> 
     428        <field id="fsaht_spv"    long_name=" AGRIF v-sponge diffusivity coefficient"   unit="m2/s"         /> 
     429 
    420430        <!-- v-eddy diffusivity coefficients (available if ln_traldf_OFF=F) --> 
    421431        <field id="ahtv_2d"      long_name=" surface v-eddy diffusivity coefficient"     unit="m2/s or (m4/s)^1/2" /> 
     
    496506       
    497507      <!-- F grid --> 
     508      <!-- AGRIF sponge --> 
     509      <field id="fsahm_spf"    long_name=" AGRIF f-sponge viscosity coefficient"   unit="m2/s"                              /> 
     510 
    498511      <!-- f-eddy viscosity coefficients (ldfdyn) --> 
    499512      <field id="ahmf_2d"      long_name=" surface f-eddy viscosity coefficient"   unit="m2/s or m4/s" /> 
  • NEMO/branches/2019/dev_r10973_AGRIF-01_jchanut_small_jpi_jpj/src/NST/agrif_oce_sponge.F90

    r11542 r11549  
    2222   USE agrif_oce 
    2323   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     24   USE iom 
    2425 
    2526   IMPLICIT NONE 
     
    5859#endif 
    5960      ! 
     61      CALL iom_put("fsaht_spu", fsaht_spu(:,:)) 
     62      CALL iom_put("fsaht_spv", fsaht_spv(:,:)) 
     63      ! 
    6064   END SUBROUTINE Agrif_Sponge_Tra 
    6165 
     
    8488      Agrif_UseSpecialValue = .FALSE. 
    8589#endif 
     90      ! 
     91      CALL iom_put("fsahm_spt", fsahm_spt(:,:)) 
     92      CALL iom_put("fsahm_spf", fsahm_spf(:,:)) 
    8693      ! 
    8794   END SUBROUTINE Agrif_Sponge_dyn 
     
    96103      REAL(wp) ::   z1_ispongearea, z1_jspongearea 
    97104      REAL(wp), DIMENSION(jpi,jpj) :: ztabramp 
     105      REAL(wp), DIMENSION(jpjmax)  :: zmskwest,  zmskeast 
     106      REAL(wp), DIMENSION(jpimax)  :: zmsknorth, zmsksouth 
    98107      !!---------------------------------------------------------------------- 
    99108      ! 
    100109#if defined SPONGE || defined SPONGE_TOP 
    101110      IF (( .NOT. spongedoneT ).OR.( .NOT. spongedoneU )) THEN 
     111         ! 
     112         ! Retrieve masks at open boundaries: 
     113 
     114         ! --- West --- ! 
     115         ztabramp(:,:) = 0._wp 
     116         ind1 = 1+nbghostcells 
     117         DO ji = mi0(ind1), mi1(ind1)                 
     118            ztabramp(ji,:) = umask(ji,:,1) 
     119         END DO 
     120         ! 
     121         zmskwest(:) = 0._wp 
     122         zmskwest(1:jpj) = MAXVAL(ztabramp(:,:), dim=1) 
     123 
     124         ! --- East --- ! 
     125         ztabramp(:,:) = 0._wp 
     126         ind1 = jpiglo - nbghostcells - 1 
     127         DO ji = mi0(ind1), mi1(ind1)                  
     128            ztabramp(ji,:) = umask(ji,:,1) 
     129         END DO 
     130         ! 
     131         zmskeast(:) = 0._wp 
     132         zmskeast(1:jpj) = MAXVAL(ztabramp(:,:), dim=1) 
     133 
     134         ! --- South --- ! 
     135         ztabramp(:,:) = 0._wp 
     136         ind1 = 1+nbghostcells 
     137         DO jj = mj0(ind1), mj1(ind1)                  
     138            ztabramp(:,jj) = vmask(:,jj,1) 
     139         END DO 
     140         ! 
     141         zmsksouth(:) = 0._wp 
     142         zmsksouth(1:jpi) = MAXVAL(ztabramp(:,:), dim=2) 
     143 
     144         ! --- North --- ! 
     145         ztabramp(:,:) = 0._wp 
     146         ind1 = jpjglo - nbghostcells - 1 
     147         DO jj = mj0(ind1), mj1(ind1)                  
     148            ztabramp(:,jj) = vmask(:,jj,1) 
     149         END DO 
     150         ! 
     151         zmsknorth(:) = 0._wp 
     152         zmsknorth(1:jpi) = MAXVAL(ztabramp(:,:), dim=2) 
     153 
     154#if defined key_mpp_mpi 
     155         CALL mpp_max( 'AGRIF_sponge', zmskwest(:) , jpjmax ) 
     156         CALL mpp_max( 'AGRIF_Sponge', zmskeast(:) , jpjmax ) 
     157         CALL mpp_max( 'AGRIF_Sponge', zmsksouth(:), jpimax ) 
     158         CALL mpp_max( 'AGRIF_Sponge', zmsknorth(:), jpimax ) 
     159#endif 
     160 
    102161         ! Define ramp from boundaries towards domain interior at T-points 
    103162         ! Store it in ztabramp 
     
    117176         DO ji = mi0(ind1), mi1(ind2)    
    118177            DO jj = 1, jpj                
    119                ztabramp(ji,jj) = REAL( ind2 - mig(ji) ) * z1_ispongearea 
     178               ztabramp(ji,jj) = REAL( ind2 - mig(ji) ) * z1_ispongearea * zmskwest(jj) 
     179            END DO 
     180         END DO 
     181 
     182         ! ghost cells (cosmetic): 
     183         ind1 = 1 
     184         ind2 = nbghostcells 
     185         DO ji = mi0(ind1), mi1(ind2)    
     186            DO jj = 1, jpj                
     187               ztabramp(ji,jj) = zmskwest(jj) 
    120188            END DO 
    121189         END DO 
     
    126194         DO ji = mi0(ind1), mi1(ind2) 
    127195            DO jj = 1, jpj 
    128                ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( mig(ji) - ind1 ) * z1_ispongearea) 
     196               ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( mig(ji) - ind1 ) * z1_ispongearea) * zmskeast(jj) 
     197            ENDDO 
     198         END DO 
     199 
     200         ! ghost cells (cosmetic): 
     201         ind1 = jpiglo - nbghostcells + 1 
     202         ind2 = jpiglo 
     203         DO ji = mi0(ind1), mi1(ind2) 
     204            DO jj = 1, jpj 
     205               ztabramp(ji,jj) = zmskeast(jj) 
    129206            ENDDO 
    130207         END DO 
     
    135212         DO jj = mj0(ind1), mj1(ind2)  
    136213            DO ji = 1, jpi 
    137                ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( ind2 - mjg(jj) ) * z1_jspongearea) 
     214               ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( ind2 - mjg(jj) ) * z1_jspongearea) * zmsksouth(ji) 
     215            END DO 
     216         END DO 
     217 
     218         ! ghost cells (cosmetic): 
     219         ind1 = 1 
     220         ind2 = nbghostcells 
     221         DO jj = mj0(ind1), mj1(ind2)  
     222            DO ji = 1, jpi 
     223               ztabramp(ji,jj) = zmsksouth(ji) 
    138224            END DO 
    139225         END DO 
     
    144230         DO jj = mj0(ind1), mj1(ind2) 
    145231            DO ji = 1, jpi 
    146                ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( mjg(jj) - ind1 ) * z1_jspongearea) 
     232               ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( mjg(jj) - ind1 ) * z1_jspongearea) * zmsknorth(ji) 
     233            END DO 
     234         END DO 
     235 
     236         ! ghost cells (cosmetic): 
     237         ind1 = jpjglo - nbghostcells + 1 
     238         ind2 = jpjglo 
     239         DO jj = mj0(ind1), mj1(ind2) 
     240            DO ji = 1, jpi 
     241               ztabramp(ji,jj) = zmsknorth(ji) 
    147242            END DO 
    148243         END DO 
     
    160255            END DO 
    161256         END DO 
    162          CALL lbc_lnk( 'agrif_oce_sponge', fsaht_spu, 'U', 1. )   ! Lateral boundary conditions 
    163          CALL lbc_lnk( 'agrif_oce_sponge', fsaht_spv, 'V', 1. ) 
     257         CALL lbc_lnk( 'agrif_Sponge', fsaht_spu, 'U', 1. )   ! Lateral boundary conditions 
     258         CALL lbc_lnk( 'agrif_Sponge', fsaht_spv, 'V', 1. ) 
    164259          
    165260         spongedoneT = .TRUE. 
     
    177272            END DO 
    178273         END DO 
    179          CALL lbc_lnk( 'agrif_oce_sponge', fsahm_spt, 'T', 1. )   ! Lateral boundary conditions 
    180          CALL lbc_lnk( 'agrif_oce_sponge', fsahm_spf, 'F', 1. ) 
     274         CALL lbc_lnk( 'agrif_Sponge', fsahm_spt, 'T', 1. )   ! Lateral boundary conditions 
     275         CALL lbc_lnk( 'agrif_Sponge', fsahm_spf, 'F', 1. ) 
    181276          
    182277         spongedoneU = .TRUE. 
Note: See TracChangeset for help on using the changeset viewer.