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 5883 for branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90 – NEMO

Ignore:
Timestamp:
2015-11-13T08:01:08+01:00 (8 years ago)
Author:
gm
Message:

#1613: vvl by default: TRA/TRC remove optimization associated with linear free surface

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r5836 r5883  
    2323   !!                          the mppobc routine to optimize the BDY and OBC communications 
    2424   !!            3.5  !  2013  ( C. Ethe, G. Madec ) message passing arrays as local variables  
    25    !!            3.5  !  2013 (S.Mocavero, I.Epicoco - CMCC) north fold optimizations 
     25   !!            3.5  !  2013  (S.Mocavero, I.Epicoco - CMCC) north fold optimizations 
    2626   !!---------------------------------------------------------------------- 
    2727 
     
    26622662   END SUBROUTINE mpp_lbc_north_e 
    26632663 
    2664       SUBROUTINE mpp_lnk_bdy_3d( ptab, cd_type, psgn, ib_bdy ) 
     2664 
     2665   SUBROUTINE mpp_lnk_bdy_3d( ptab, cd_type, psgn, ib_bdy ) 
    26652666      !!---------------------------------------------------------------------- 
    26662667      !!                  ***  routine mpp_lnk_bdy_3d  *** 
     
    26832684      !! 
    26842685      !!---------------------------------------------------------------------- 
    2685  
    2686       USE lbcnfd          ! north fold 
    2687  
    2688       INCLUDE 'mpif.h' 
    2689  
    26902686      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   ptab     ! 3D array on which the boundary condition is applied 
    26912687      CHARACTER(len=1)                , INTENT(in   ) ::   cd_type  ! define the nature of ptab array grid-points 
     
    26942690      !                                                             ! =  1. , the sign is kept 
    26952691      INTEGER                         , INTENT(in   ) ::   ib_bdy   ! BDY boundary set 
     2692      ! 
    26962693      INTEGER  ::   ji, jj, jk, jl             ! dummy loop indices 
    2697       INTEGER  ::   imigr, iihom, ijhom        ! temporary integers 
     2694      INTEGER  ::   imigr, iihom, ijhom        ! local integers 
    26982695      INTEGER  ::   ml_req1, ml_req2, ml_err   ! for key_mpi_isend 
    2699       REAL(wp) ::   zland 
     2696      REAL(wp) ::   zland                      ! local scalar 
    27002697      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    27012698      ! 
    27022699      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   zt3ns, zt3sn   ! 3d for north-south & south-north 
    27032700      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   zt3ew, zt3we   ! 3d for east-west & west-east 
    2704  
    2705       !!---------------------------------------------------------------------- 
    2706        
     2701      !!---------------------------------------------------------------------- 
     2702      ! 
    27072703      ALLOCATE( zt3ns(jpi,jprecj,jpk,2), zt3sn(jpi,jprecj,jpk,2),   & 
    27082704         &      zt3ew(jpj,jpreci,jpk,2), zt3we(jpj,jpreci,jpk,2)  ) 
    27092705 
    2710       zland = 0.e0 
     2706      zland = 0.-WP 
    27112707 
    27122708      ! 1. standard boundary treatment 
    27132709      ! ------------------------------ 
    2714        
    27152710      !                                   ! East-West boundaries 
    27162711      !                                        !* Cyclic east-west 
    2717  
    27182712      IF( nbondi == 2) THEN 
    2719         IF (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) THEN 
    2720           ptab( 1 ,:,:) = ptab(jpim1,:,:) 
    2721           ptab(jpi,:,:) = ptab(  2  ,:,:) 
    2722         ELSE 
    2723           IF( .NOT. cd_type == 'F' )   ptab(     1       :jpreci,:,:) = zland    ! south except F-point 
    2724           ptab(nlci-jpreci+1:jpi   ,:,:) = zland    ! north 
    2725         ENDIF 
     2713         IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6 ) THEN 
     2714            ptab( 1 ,:,:) = ptab(jpim1,:,:) 
     2715            ptab(jpi,:,:) = ptab(  2  ,:,:) 
     2716         ELSE 
     2717            IF( .NOT. cd_type == 'F' )   ptab(1:jpreci,:,:) = zland    ! south except F-point 
     2718            ptab(nlci-jpreci+1:jpi,:,:) = zland    ! north 
     2719         ENDIF 
    27262720      ELSEIF(nbondi == -1) THEN 
    2727         IF( .NOT. cd_type == 'F' )   ptab(     1       :jpreci,:,:) = zland    ! south except F-point 
     2721         IF( .NOT. cd_type == 'F' )   ptab(1:jpreci,:,:) = zland    ! south except F-point 
    27282722      ELSEIF(nbondi == 1) THEN 
    2729         ptab(nlci-jpreci+1:jpi   ,:,:) = zland    ! north 
     2723         ptab(nlci-jpreci+1:jpi,:,:) = zland    ! north 
    27302724      ENDIF                                     !* closed 
    27312725 
    27322726      IF (nbondj == 2 .OR. nbondj == -1) THEN 
    2733         IF( .NOT. cd_type == 'F' )   ptab(:,     1       :jprecj,:) = zland       ! south except F-point 
     2727        IF( .NOT. cd_type == 'F' )   ptab(:,1:jprecj,:) = zland       ! south except F-point 
    27342728      ELSEIF (nbondj == 2 .OR. nbondj == 1) THEN 
    2735         ptab(:,nlcj-jprecj+1:jpj   ,:) = zland       ! north 
    2736       ENDIF 
    2737        
    2738       ! 
    2739  
     2729        ptab(:,nlcj-jprecj+1:jpj,:) = zland       ! north 
     2730      ENDIF 
     2731      ! 
    27402732      ! 2. East and west directions exchange 
    27412733      ! ------------------------------------ 
     
    27942786      CASE ( 0 ) 
    27952787         DO jl = 1, jpreci 
    2796             ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
     2788            ptab(      jl,:,:) = zt3we(:,jl,:,2) 
    27972789            ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    27982790         END DO 
    27992791      CASE ( 1 ) 
    28002792         DO jl = 1, jpreci 
    2801             ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
     2793            ptab(      jl,:,:) = zt3we(:,jl,:,2) 
    28022794         END DO 
    28032795      END SELECT 
     
    28852877   END SUBROUTINE mpp_lnk_bdy_3d 
    28862878 
    2887       SUBROUTINE mpp_lnk_bdy_2d( ptab, cd_type, psgn, ib_bdy ) 
     2879 
     2880   SUBROUTINE mpp_lnk_bdy_2d( ptab, cd_type, psgn, ib_bdy ) 
    28882881      !!---------------------------------------------------------------------- 
    28892882      !!                  ***  routine mpp_lnk_bdy_2d  *** 
     
    29062899      !! 
    29072900      !!---------------------------------------------------------------------- 
    2908  
    2909       USE lbcnfd          ! north fold 
    2910  
    2911       INCLUDE 'mpif.h' 
    2912  
    2913       REAL(wp), DIMENSION(jpi,jpj)    , INTENT(inout) ::   ptab     ! 3D array on which the boundary condition is applied 
    2914       CHARACTER(len=1)                , INTENT(in   ) ::   cd_type  ! define the nature of ptab array grid-points 
    2915       !                                                             ! = T , U , V , F , W points 
    2916       REAL(wp)                        , INTENT(in   ) ::   psgn     ! =-1 the sign change across the north fold boundary 
    2917       !                                                             ! =  1. , the sign is kept 
    2918       INTEGER                         , INTENT(in   ) ::   ib_bdy   ! BDY boundary set 
     2901      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   ptab     ! 3D array on which the boundary condition is applied 
     2902      CHARACTER(len=1)            , INTENT(in   ) ::   cd_type  ! define the nature of ptab array grid-points 
     2903      !                                                         ! = T , U , V , F , W points 
     2904      REAL(wp)                    , INTENT(in   ) ::   psgn     ! =-1 the sign change across the north fold boundary 
     2905      !                                                         ! =  1. , the sign is kept 
     2906      INTEGER                     , INTENT(in   ) ::   ib_bdy   ! BDY boundary set 
     2907      ! 
    29192908      INTEGER  ::   ji, jj, jl             ! dummy loop indices 
    2920       INTEGER  ::   imigr, iihom, ijhom        ! temporary integers 
     2909      INTEGER  ::   imigr, iihom, ijhom        ! local integers 
    29212910      INTEGER  ::   ml_req1, ml_req2, ml_err   ! for key_mpi_isend 
    29222911      REAL(wp) ::   zland 
     
    29252914      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ns, zt2sn   ! 2d for north-south & south-north 
    29262915      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ew, zt2we   ! 2d for east-west & west-east 
    2927  
    29282916      !!---------------------------------------------------------------------- 
    29292917 
     
    29312919         &      zt2ew(jpj,jpreci,2), zt2we(jpj,jpreci,2)   ) 
    29322920 
    2933       zland = 0.e0 
     2921      zland = 0._wp 
    29342922 
    29352923      ! 1. standard boundary treatment 
    29362924      ! ------------------------------ 
    2937        
    29382925      !                                   ! East-West boundaries 
    2939       !                                        !* Cyclic east-west 
    2940  
    2941       IF( nbondi == 2) THEN 
    2942         IF (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) THEN 
    2943           ptab( 1 ,:) = ptab(jpim1,:) 
    2944           ptab(jpi,:) = ptab(  2  ,:) 
    2945         ELSE 
    2946           IF( .NOT. cd_type == 'F' )   ptab(     1       :jpreci,:) = zland    ! south except F-point 
    2947           ptab(nlci-jpreci+1:jpi   ,:) = zland    ! north 
    2948         ENDIF 
     2926      !                                      !* Cyclic east-west 
     2927      IF( nbondi == 2 ) THEN 
     2928         IF (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) THEN 
     2929            ptab( 1 ,:) = ptab(jpim1,:) 
     2930            ptab(jpi,:) = ptab(  2  ,:) 
     2931         ELSE 
     2932            IF(.NOT.cd_type == 'F' )  ptab(     1       :jpreci,:) = zland    ! south except F-point 
     2933                                      ptab(nlci-jpreci+1:jpi   ,:) = zland    ! north 
     2934         ENDIF 
    29492935      ELSEIF(nbondi == -1) THEN 
    2950         IF( .NOT. cd_type == 'F' )   ptab(     1       :jpreci,:) = zland    ! south except F-point 
     2936         IF( .NOT.cd_type == 'F' )    ptab(     1       :jpreci,:) = zland    ! south except F-point 
    29512937      ELSEIF(nbondi == 1) THEN 
    2952         ptab(nlci-jpreci+1:jpi   ,:) = zland    ! north 
    2953       ENDIF                                     !* closed 
    2954  
    2955       IF (nbondj == 2 .OR. nbondj == -1) THEN 
    2956         IF( .NOT. cd_type == 'F' )   ptab(:,     1       :jprecj) = zland       ! south except F-point 
     2938                                      ptab(nlci-jpreci+1:jpi   ,:) = zland    ! north 
     2939      ENDIF 
     2940      !                                      !* closed 
     2941      IF( nbondj == 2 .OR. nbondj == -1 ) THEN 
     2942         IF( .NOT.cd_type == 'F' )    ptab(:,     1       :jprecj) = zland    ! south except F-point 
    29572943      ELSEIF (nbondj == 2 .OR. nbondj == 1) THEN 
    2958         ptab(:,nlcj-jprecj+1:jpj) = zland       ! north 
    2959       ENDIF 
    2960        
    2961       ! 
    2962  
     2944                                      ptab(:,nlcj-jprecj+1:jpj   ) = zland    ! north 
     2945      ENDIF 
     2946      ! 
    29632947      ! 2. East and west directions exchange 
    29642948      ! ------------------------------------ 
     
    31073091      ! 
    31083092   END SUBROUTINE mpp_lnk_bdy_2d 
     3093 
    31093094 
    31103095   SUBROUTINE mpi_init_opa( ldtxt, ksft, code ) 
     
    31963181   END SUBROUTINE DDPDD_MPI 
    31973182 
     3183 
    31983184   SUBROUTINE mpp_lbc_north_icb( pt2d, cd_type, psgn, pr2dj) 
    31993185      !!--------------------------------------------------------------------- 
     
    32183204      !!                                                    ! north fold, =  1. otherwise 
    32193205      INTEGER, OPTIONAL       , INTENT(in   ) ::   pr2dj 
     3206      ! 
    32203207      INTEGER ::   ji, jj, jr 
    32213208      INTEGER ::   ierr, itaille, ildi, ilei, iilb 
     
    32243211      REAL(wp), DIMENSION(:,:)  , ALLOCATABLE  ::  ztab_e, znorthloc_e 
    32253212      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE  ::  znorthgloio_e 
    3226  
    32273213      !!---------------------------------------------------------------------- 
    32283214      ! 
     
    32343220      ENDIF 
    32353221      ALLOCATE( ztab_e(jpiglo,4+2*ipr2dj), znorthloc_e(jpi,4+2*ipr2dj), znorthgloio_e(jpi,4+2*ipr2dj,jpni) ) 
    3236  
    3237       ! 
    3238       ztab_e(:,:) = 0.e0 
    3239  
    3240       ij=0 
     3222      ! 
     3223      ztab_e(:,:) = 0._wp 
     3224      ! 
     3225      ij = 0 
    32413226      ! put in znorthloc_e the last 4 jlines of pt2d 
    32423227      DO jj = nlcj - ijpj + 1 - ipr2dj, nlcj +ipr2dj 
     
    32803265      ! 
    32813266   END SUBROUTINE mpp_lbc_north_icb 
     3267 
    32823268 
    32833269   SUBROUTINE mpp_lnk_2d_icb( pt2d, cd_type, psgn, jpri, jprj ) 
     
    33003286      !!                    noso   : number for local neighboring processors 
    33013287      !!                    nono   : number for local neighboring processors 
    3302       !! 
    33033288      !!---------------------------------------------------------------------- 
    33043289      INTEGER                                             , INTENT(in   ) ::   jpri 
     
    34593444 
    34603445   END SUBROUTINE mpp_lnk_2d_icb 
     3446    
    34613447#else 
    34623448   !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.