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 14789 for NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/OCE/LBC/lbclnk.F90 – NEMO

Ignore:
Timestamp:
2021-05-05T13:18:04+02:00 (3 years ago)
Author:
mcastril
Message:

[2021/HPC-11_mcastril_HPDAonline_DiagGPU] Update externals

Location:
NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
         5^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8^/vendors/PPR@HEAD            ext/PPR 
        89 
        910# SETTE 
        10 ^/utils/CI/sette@13559        sette 
         11^/utils/CI/sette@14244        sette 
  • NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/OCE/LBC/lbclnk.F90

    r13226 r14789  
    66   !! History :  OPA  ! 1997-06  (G. Madec)  Original code 
    77   !!   NEMO     1.0  ! 2002-09  (G. Madec)  F90: Free form and module 
    8    !!            3.2  ! 2009-03  (R. Benshila)  External north fold treatment   
     8   !!            3.2  ! 2009-03  (R. Benshila)  External north fold treatment 
    99   !!            3.5  ! 2012     (S.Mocavero, I. Epicoco)  optimization of BDY comm. via lbc_bdy_lnk and lbc_obc_lnk 
    10    !!            3.4  ! 2012-12  (R. Bourdalle-Badie, G. Reffray)  add a C1D case   
    11    !!            3.6  ! 2015-06  (O. Tintó and M. Castrillo)  add lbc_lnk_multi   
     10   !!            3.4  ! 2012-12  (R. Bourdalle-Badie, G. Reffray)  add a C1D case 
     11   !!            3.6  ! 2015-06  (O. Tintó and M. Castrillo)  add lbc_lnk_multi 
    1212   !!            4.0  ! 2017-03  (G. Madec) automatique allocation of array size (use with any 3rd dim size) 
    1313   !!             -   ! 2017-04  (G. Madec) remove duplicated routines (lbc_lnk_2d_9, lbc_lnk_2d_multiple, lbc_lnk_3d_gather) 
     
    2323   USE lbcnfd         ! north fold 
    2424   USE in_out_manager ! I/O manager 
     25#if ! defined key_mpi_off 
     26   USE MPI 
     27#endif 
    2528 
    2629   IMPLICIT NONE 
     
    2831 
    2932   INTERFACE lbc_lnk 
    30       MODULE PROCEDURE   mpp_lnk_2d_sp   , mpp_lnk_3d_sp   , mpp_lnk_4d_sp 
    31       MODULE PROCEDURE   mpp_lnk_2d_dp   , mpp_lnk_3d_dp   , mpp_lnk_4d_dp 
    32    END INTERFACE 
    33    INTERFACE lbc_lnk_ptr 
    34       MODULE PROCEDURE   mpp_lnk_2d_ptr_sp , mpp_lnk_3d_ptr_sp , mpp_lnk_4d_ptr_sp 
    35       MODULE PROCEDURE   mpp_lnk_2d_ptr_dp , mpp_lnk_3d_ptr_dp , mpp_lnk_4d_ptr_dp 
    36    END INTERFACE 
    37    INTERFACE lbc_lnk_multi 
    38       MODULE PROCEDURE   lbc_lnk_2d_multi_sp , lbc_lnk_3d_multi_sp, lbc_lnk_4d_multi_sp 
    39       MODULE PROCEDURE   lbc_lnk_2d_multi_dp , lbc_lnk_3d_multi_dp, lbc_lnk_4d_multi_dp 
     33      MODULE PROCEDURE   lbc_lnk_call_2d_sp, lbc_lnk_call_3d_sp, lbc_lnk_call_4d_sp 
     34      MODULE PROCEDURE   lbc_lnk_call_2d_dp, lbc_lnk_call_3d_dp, lbc_lnk_call_4d_dp 
     35   END INTERFACE 
     36 
     37   INTERFACE lbc_lnk_pt2pt 
     38      MODULE PROCEDURE   lbc_lnk_pt2pt_sp, lbc_lnk_pt2pt_dp 
     39   END INTERFACE 
     40 
     41   INTERFACE lbc_lnk_neicoll 
     42      MODULE PROCEDURE   lbc_lnk_neicoll_sp ,lbc_lnk_neicoll_dp 
    4043   END INTERFACE 
    4144   ! 
     
    4447   END INTERFACE 
    4548 
    46    INTERFACE mpp_nfd 
    47       MODULE PROCEDURE   mpp_nfd_2d_sp    , mpp_nfd_3d_sp    , mpp_nfd_4d_sp 
    48       MODULE PROCEDURE   mpp_nfd_2d_dp    , mpp_nfd_3d_dp    , mpp_nfd_4d_dp 
    49       MODULE PROCEDURE   mpp_nfd_2d_ptr_sp, mpp_nfd_3d_ptr_sp, mpp_nfd_4d_ptr_sp 
    50       MODULE PROCEDURE   mpp_nfd_2d_ptr_dp, mpp_nfd_3d_ptr_dp, mpp_nfd_4d_ptr_dp 
    51        
    52    END INTERFACE 
    53  
    54    PUBLIC   lbc_lnk       ! ocean/ice lateral boundary conditions 
    55    PUBLIC   lbc_lnk_multi ! modified ocean/ice lateral boundary conditions 
    56    PUBLIC   lbc_lnk_icb   ! iceberg lateral boundary conditions 
    57  
    58 #if   defined key_mpp_mpi 
    59 !$AGRIF_DO_NOT_TREAT 
    60    INCLUDE 'mpif.h' 
    61 !$AGRIF_END_DO_NOT_TREAT 
    62 #endif 
    63  
    64    INTEGER, PUBLIC, PARAMETER ::   jpfillnothing = 1 
    65    INTEGER, PUBLIC, PARAMETER ::   jpfillcst     = 2 
    66    INTEGER, PUBLIC, PARAMETER ::   jpfillcopy    = 3 
    67    INTEGER, PUBLIC, PARAMETER ::   jpfillperio   = 4 
    68    INTEGER, PUBLIC, PARAMETER ::   jpfillmpi     = 5 
    69  
     49   PUBLIC   lbc_lnk            ! ocean/ice lateral boundary conditions 
     50   PUBLIC   lbc_lnk_icb        ! iceberg lateral boundary conditions 
     51 
     52   REAL(dp), DIMENSION(:), ALLOCATABLE ::   buffsnd_dp, buffrcv_dp   ! MPI send/recv buffers 
     53   REAL(sp), DIMENSION(:), ALLOCATABLE ::   buffsnd_sp, buffrcv_sp   !  
     54   INTEGER,  DIMENSION(8)              ::   nreq_p2p                 ! request id for MPI_Isend in point-2-point communication 
     55    
    7056   !! * Substitutions 
    71 #  include "do_loop_substitute.h90" 
     57   !!#  include "do_loop_substitute.h90" 
    7258   !!---------------------------------------------------------------------- 
    7359   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    7864 
    7965   !!---------------------------------------------------------------------- 
    80    !!                   ***   load_ptr_(2,3,4)d   *** 
     66   !!                   ***   lbc_lnk_call_[234]d_[sd]p   *** 
    8167   !! 
    8268   !!   * Dummy Argument : 
    83    !!       in    ==>   ptab       ! array to be loaded (2D, 3D or 4D) 
     69   !!       in    ==>   cdname     ! name of the calling subroutine (for monitoring) 
     70   !!                   ptab       ! array to be loaded (2D, 3D or 4D) 
    8471   !!                   cd_nat     ! nature of pt2d array grid-points 
    8572   !!                   psgn       ! sign used across the north fold boundary 
     
    8976   !!                   kfld       ! number of elements that has been attributed 
    9077   !!---------------------------------------------------------------------- 
    91  
    92    !!---------------------------------------------------------------------- 
    93    !!                  ***   lbc_lnk_(2,3,4)d_multi   *** 
    94    !!                     ***   load_ptr_(2,3,4)d   *** 
    95    !! 
    96    !!   * Argument : dummy argument use in lbc_lnk_multi_... routines 
    97    !! 
    98    !!---------------------------------------------------------------------- 
    99  
     78   ! 
     79   !!---------------------------------------------------------------------- 
     80   !! 
     81   !!                  ***   lbc_lnk_call_[234]d_[sd]p   *** 
     82   !!                  ***     load_ptr_[234]d_[sd]p     *** 
     83   !! 
     84   !!---------------------------------------------------------------------- 
    10085   !! 
    10186   !!   ----   SINGLE PRECISION VERSIONS 
    10287   !! 
    103 #  define SINGLE_PRECISION 
    104 #  define DIM_2d 
    105 #     define ROUTINE_LOAD           load_ptr_2d_sp 
    106 #     define ROUTINE_MULTI          lbc_lnk_2d_multi_sp 
    107 #     include "lbc_lnk_multi_generic.h90" 
    108 #     undef ROUTINE_MULTI 
    109 #     undef ROUTINE_LOAD 
    110 #  undef DIM_2d 
    111  
    112 #  define DIM_3d 
    113 #     define ROUTINE_LOAD           load_ptr_3d_sp 
    114 #     define ROUTINE_MULTI          lbc_lnk_3d_multi_sp 
    115 #     include "lbc_lnk_multi_generic.h90" 
    116 #     undef ROUTINE_MULTI 
    117 #     undef ROUTINE_LOAD 
    118 #  undef DIM_3d 
    119  
    120 #  define DIM_4d 
    121 #     define ROUTINE_LOAD           load_ptr_4d_sp 
    122 #     define ROUTINE_MULTI          lbc_lnk_4d_multi_sp 
    123 #     include "lbc_lnk_multi_generic.h90" 
    124 #     undef ROUTINE_MULTI 
    125 #     undef ROUTINE_LOAD 
    126 #  undef DIM_4d 
    127 #  undef SINGLE_PRECISION 
     88#define PRECISION sp 
     89# define DIM_2d 
     90#    include "lbc_lnk_call_generic.h90" 
     91# undef  DIM_2d 
     92# define DIM_3d 
     93#    include "lbc_lnk_call_generic.h90" 
     94# undef  DIM_3d 
     95# define DIM_4d 
     96#    include "lbc_lnk_call_generic.h90" 
     97# undef  DIM_4d 
     98#undef PRECISION 
    12899   !! 
    129100   !!   ----   DOUBLE PRECISION VERSIONS 
    130101   !! 
    131  
    132 #  define DIM_2d 
    133 #     define ROUTINE_LOAD           load_ptr_2d_dp 
    134 #     define ROUTINE_MULTI          lbc_lnk_2d_multi_dp 
    135 #     include "lbc_lnk_multi_generic.h90" 
    136 #     undef ROUTINE_MULTI 
    137 #     undef ROUTINE_LOAD 
    138 #  undef DIM_2d 
    139  
    140 #  define DIM_3d 
    141 #     define ROUTINE_LOAD           load_ptr_3d_dp 
    142 #     define ROUTINE_MULTI          lbc_lnk_3d_multi_dp 
    143 #     include "lbc_lnk_multi_generic.h90" 
    144 #     undef ROUTINE_MULTI 
    145 #     undef ROUTINE_LOAD 
    146 #  undef DIM_3d 
    147  
    148 #  define DIM_4d 
    149 #     define ROUTINE_LOAD           load_ptr_4d_dp 
    150 #     define ROUTINE_MULTI          lbc_lnk_4d_multi_dp 
    151 #     include "lbc_lnk_multi_generic.h90" 
    152 #     undef ROUTINE_MULTI 
    153 #     undef ROUTINE_LOAD 
    154 #  undef DIM_4d 
    155  
    156    !!---------------------------------------------------------------------- 
    157    !!                   ***  routine mpp_lnk_(2,3,4)d  *** 
    158    !! 
    159    !!   * Argument : dummy argument use in mpp_lnk_... routines 
    160    !!                ptab      :   array or pointer of arrays on which the boundary condition is applied 
     102#define PRECISION dp 
     103# define DIM_2d 
     104#    include "lbc_lnk_call_generic.h90" 
     105# undef  DIM_2d 
     106# define DIM_3d 
     107#    include "lbc_lnk_call_generic.h90" 
     108# undef  DIM_3d 
     109# define DIM_4d 
     110#    include "lbc_lnk_call_generic.h90" 
     111# undef  DIM_4d 
     112#undef PRECISION 
     113   ! 
     114   !!---------------------------------------------------------------------- 
     115   !!                   ***  lbc_lnk_pt2pt_[sd]p  *** 
     116   !!                  ***  lbc_lnk_neicoll_[sd]p  *** 
     117   !! 
     118   !!   * Argument : dummy argument use in lbc_lnk_... routines 
     119   !!                cdname    :   name of the calling subroutine (for monitoring) 
     120   !!                ptab      :   pointer of arrays on which the boundary condition is applied 
    161121   !!                cd_nat    :   nature of array grid-points 
    162122   !!                psgn      :   sign used across the north fold boundary 
    163    !!                kfld      :   optional, number of pt3d arrays 
     123   !!                kfld      :   number of pt3d arrays 
    164124   !!                kfillmode :   optional, method to be use to fill the halos (see jpfill* variables) 
    165125   !!                pfillval  :   optional, background value (used with jpfillcopy) 
    166126   !!---------------------------------------------------------------------- 
    167    ! 
    168    !                       !==  2D array and array of 2D pointer  ==! 
    169    ! 
    170127   !! 
    171128   !!   ----   SINGLE PRECISION VERSIONS 
    172129   !! 
    173 # define SINGLE_PRECISION 
    174 #  define DIM_2d 
    175 #     define ROUTINE_LNK           mpp_lnk_2d_sp 
    176 #     include "mpp_lnk_generic.h90" 
    177 #     undef ROUTINE_LNK 
    178 #     define MULTI 
    179 #     define ROUTINE_LNK           mpp_lnk_2d_ptr_sp 
    180 #     include "mpp_lnk_generic.h90" 
    181 #     undef ROUTINE_LNK 
    182 #     undef MULTI 
    183 #  undef DIM_2d 
    184    ! 
    185    !                       !==  3D array and array of 3D pointer  ==! 
    186    ! 
    187 #  define DIM_3d 
    188 #     define ROUTINE_LNK           mpp_lnk_3d_sp 
    189 #     include "mpp_lnk_generic.h90" 
    190 #     undef ROUTINE_LNK 
    191 #     define MULTI 
    192 #     define ROUTINE_LNK           mpp_lnk_3d_ptr_sp 
    193 #     include "mpp_lnk_generic.h90" 
    194 #     undef ROUTINE_LNK 
    195 #     undef MULTI 
    196 #  undef DIM_3d 
    197    ! 
    198    !                       !==  4D array and array of 4D pointer  ==! 
    199    ! 
    200 #  define DIM_4d 
    201 #     define ROUTINE_LNK           mpp_lnk_4d_sp 
    202 #     include "mpp_lnk_generic.h90" 
    203 #     undef ROUTINE_LNK 
    204 #     define MULTI 
    205 #     define ROUTINE_LNK           mpp_lnk_4d_ptr_sp 
    206 #     include "mpp_lnk_generic.h90" 
    207 #     undef ROUTINE_LNK 
    208 #     undef MULTI 
    209 #  undef DIM_4d 
    210 # undef SINGLE_PRECISION 
    211  
     130#define PRECISION sp 
     131#  define MPI_TYPE MPI_REAL 
     132#  define BUFFSND buffsnd_sp 
     133#  define BUFFRCV buffrcv_sp 
     134#  include "lbc_lnk_pt2pt_generic.h90" 
     135#  include "lbc_lnk_neicoll_generic.h90" 
     136#  undef MPI_TYPE 
     137#  undef BUFFSND 
     138#  undef BUFFRCV 
     139#undef PRECISION 
    212140   !! 
    213141   !!   ----   DOUBLE PRECISION VERSIONS 
    214142   !! 
    215 #  define DIM_2d 
    216 #     define ROUTINE_LNK           mpp_lnk_2d_dp 
    217 #     include "mpp_lnk_generic.h90" 
    218 #     undef ROUTINE_LNK 
    219 #     define MULTI 
    220 #     define ROUTINE_LNK           mpp_lnk_2d_ptr_dp 
    221 #     include "mpp_lnk_generic.h90" 
    222 #     undef ROUTINE_LNK 
    223 #     undef MULTI 
    224 #  undef DIM_2d 
    225    ! 
    226    !                       !==  3D array and array of 3D pointer  ==! 
    227    ! 
    228 #  define DIM_3d 
    229 #     define ROUTINE_LNK           mpp_lnk_3d_dp 
    230 #     include "mpp_lnk_generic.h90" 
    231 #     undef ROUTINE_LNK 
    232 #     define MULTI 
    233 #     define ROUTINE_LNK           mpp_lnk_3d_ptr_dp 
    234 #     include "mpp_lnk_generic.h90" 
    235 #     undef ROUTINE_LNK 
    236 #     undef MULTI 
    237 #  undef DIM_3d 
    238    ! 
    239    !                       !==  4D array and array of 4D pointer  ==! 
    240    ! 
    241 #  define DIM_4d 
    242 #     define ROUTINE_LNK           mpp_lnk_4d_dp 
    243 #     include "mpp_lnk_generic.h90" 
    244 #     undef ROUTINE_LNK 
    245 #     define MULTI 
    246 #     define ROUTINE_LNK           mpp_lnk_4d_ptr_dp 
    247 #     include "mpp_lnk_generic.h90" 
    248 #     undef ROUTINE_LNK 
    249 #     undef MULTI 
    250 #  undef DIM_4d 
    251  
    252  
    253    !!---------------------------------------------------------------------- 
    254    !!                   ***  routine mpp_nfd_(2,3,4)d  *** 
    255    !! 
    256    !!   * Argument : dummy argument use in mpp_nfd_... routines 
    257    !!                ptab      :   array or pointer of arrays on which the boundary condition is applied 
    258    !!                cd_nat    :   nature of array grid-points 
    259    !!                psgn      :   sign used across the north fold boundary 
    260    !!                kfld      :   optional, number of pt3d arrays 
    261    !!                kfillmode :   optional, method to be use to fill the halos (see jpfill* variables) 
    262    !!                pfillval  :   optional, background value (used with jpfillcopy) 
    263    !!---------------------------------------------------------------------- 
    264    ! 
    265    !                       !==  2D array and array of 2D pointer  ==! 
    266    ! 
    267    !! 
    268    !!   ----   SINGLE PRECISION VERSIONS 
    269    !! 
    270 #  define SINGLE_PRECISION 
    271 #  define DIM_2d 
    272 #     define ROUTINE_NFD           mpp_nfd_2d_sp 
    273 #     include "mpp_nfd_generic.h90" 
    274 #     undef ROUTINE_NFD 
    275 #     define MULTI 
    276 #     define ROUTINE_NFD           mpp_nfd_2d_ptr_sp 
    277 #     include "mpp_nfd_generic.h90" 
    278 #     undef ROUTINE_NFD 
    279 #     undef MULTI 
    280 #  undef DIM_2d 
    281    ! 
    282    !                       !==  3D array and array of 3D pointer  ==! 
    283    ! 
    284 #  define DIM_3d 
    285 #     define ROUTINE_NFD           mpp_nfd_3d_sp 
    286 #     include "mpp_nfd_generic.h90" 
    287 #     undef ROUTINE_NFD 
    288 #     define MULTI 
    289 #     define ROUTINE_NFD           mpp_nfd_3d_ptr_sp 
    290 #     include "mpp_nfd_generic.h90" 
    291 #     undef ROUTINE_NFD 
    292 #     undef MULTI 
    293 #  undef DIM_3d 
    294    ! 
    295    !                       !==  4D array and array of 4D pointer  ==! 
    296    ! 
    297 #  define DIM_4d 
    298 #     define ROUTINE_NFD           mpp_nfd_4d_sp 
    299 #     include "mpp_nfd_generic.h90" 
    300 #     undef ROUTINE_NFD 
    301 #     define MULTI 
    302 #     define ROUTINE_NFD           mpp_nfd_4d_ptr_sp 
    303 #     include "mpp_nfd_generic.h90" 
    304 #     undef ROUTINE_NFD 
    305 #     undef MULTI 
    306 #  undef DIM_4d 
    307 #  undef SINGLE_PRECISION 
    308  
    309    !! 
    310    !!   ----   DOUBLE PRECISION VERSIONS 
    311    !! 
    312 #  define DIM_2d 
    313 #     define ROUTINE_NFD           mpp_nfd_2d_dp 
    314 #     include "mpp_nfd_generic.h90" 
    315 #     undef ROUTINE_NFD 
    316 #     define MULTI 
    317 #     define ROUTINE_NFD           mpp_nfd_2d_ptr_dp 
    318 #     include "mpp_nfd_generic.h90" 
    319 #     undef ROUTINE_NFD 
    320 #     undef MULTI 
    321 #  undef DIM_2d 
    322    ! 
    323    !                       !==  3D array and array of 3D pointer  ==! 
    324    ! 
    325 #  define DIM_3d 
    326 #     define ROUTINE_NFD           mpp_nfd_3d_dp 
    327 #     include "mpp_nfd_generic.h90" 
    328 #     undef ROUTINE_NFD 
    329 #     define MULTI 
    330 #     define ROUTINE_NFD           mpp_nfd_3d_ptr_dp 
    331 #     include "mpp_nfd_generic.h90" 
    332 #     undef ROUTINE_NFD 
    333 #     undef MULTI 
    334 #  undef DIM_3d 
    335    ! 
    336    !                       !==  4D array and array of 4D pointer  ==! 
    337    ! 
    338 #  define DIM_4d 
    339 #     define ROUTINE_NFD           mpp_nfd_4d_dp 
    340 #     include "mpp_nfd_generic.h90" 
    341 #     undef ROUTINE_NFD 
    342 #     define MULTI 
    343 #     define ROUTINE_NFD           mpp_nfd_4d_ptr_dp 
    344 #     include "mpp_nfd_generic.h90" 
    345 #     undef ROUTINE_NFD 
    346 #     undef MULTI 
    347 #  undef DIM_4d 
    348  
    349    !!====================================================================== 
    350  
     143#define PRECISION dp 
     144#  define MPI_TYPE MPI_DOUBLE_PRECISION 
     145#  define BUFFSND buffsnd_dp 
     146#  define BUFFRCV buffrcv_dp 
     147#  include "lbc_lnk_pt2pt_generic.h90" 
     148#  include "lbc_lnk_neicoll_generic.h90" 
     149#  undef MPI_TYPE 
     150#  undef BUFFSND 
     151#  undef BUFFRCV 
     152#undef PRECISION 
    351153 
    352154   !!====================================================================== 
     
    375177#     include "mpp_lbc_north_icb_generic.h90" 
    376178#     undef ROUTINE_LNK 
    377   
     179 
    378180 
    379181      !!---------------------------------------------------------------------- 
     
    389191      !!                    jpi    : first dimension of the local subdomain 
    390192      !!                    jpj    : second dimension of the local subdomain 
    391       !!                    kexti  : number of columns for extra outer halo 
    392       !!                    kextj  : number of rows for extra outer halo 
    393       !!                    nbondi : mark for "east-west local boundary" 
    394       !!                    nbondj : mark for "north-south local boundary" 
    395       !!                    noea   : number for local neighboring processors 
    396       !!                    nowe   : number for local neighboring processors 
    397       !!                    noso   : number for local neighboring processors 
    398       !!                    nono   : number for local neighboring processors 
     193      !!                    mpinei : number of neighboring domains (starting at 0, -1 if no neighbourg) 
    399194      !!---------------------------------------------------------------------- 
    400195 
     
    407202#     include "mpp_lnk_icb_generic.h90" 
    408203#     undef ROUTINE_LNK 
    409    
     204 
    410205END MODULE lbclnk 
    411  
Note: See TracChangeset for help on using the changeset viewer.