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 10136 for NEMO/branches/2018/dev_r9759_HPC09_ESIWACE/src/OCE/LBC/lib_mpp.F90 – NEMO

Ignore:
Timestamp:
2018-09-17T15:16:43+02:00 (6 years ago)
Author:
dguibert
Message:

bull: async/datatype

Experimental changes to enable/study/bench various mpi "optimisations":

  • BULL_ASYNC
  • BULL_DATATYPE_VECTOR/SUBARRAY

this has been applied to the nonosc subroutine (only for now).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9759_HPC09_ESIWACE/src/OCE/LBC/lib_mpp.F90

    r9814 r10136  
    7272   PUBLIC   mpp_lnk_2d_ptr, mpp_lnk_3d_ptr, mpp_lnk_4d_ptr 
    7373   ! 
     74#ifdef BULL_ASYNC 
     75   ! Interface associated to the mpp_lnk_... routines is defined in lbclnk 
     76   PUBLIC   mpp_lnk_2d_async    , mpp_lnk_3d_async    , mpp_lnk_4d_async 
     77   PUBLIC   mpp_lnk_2d_ptr_async, mpp_lnk_3d_ptr_async, mpp_lnk_4d_ptr_async 
     78#endif 
    7479!!gm  this should be useless 
    7580   PUBLIC   mpp_nfd_2d    , mpp_nfd_3d    , mpp_nfd_4d 
     
    270275            WRITE(ldtxt(ii),*) '           bad value for cn_mpi_send = ', cn_mpi_send     ;   ii = ii + 1 
    271276            kstop = kstop + 1 
     277            WRITE(*,*) '           bad value for cn_mpi_send = ', cn_mpi_send     ;   ii = ii + 1 
    272278         END SELECT 
    273279         ! 
     
    276282         WRITE(ldtxt(ii),*) '          without calling MPI_Init before ! '                ;   ii = ii + 1 
    277283         kstop = kstop + 1 
     284         WRITE(*,*) ' lib_mpp: You cannot provide a local communicator '          ;   ii = ii + 1 
    278285      ELSE 
    279286         SELECT CASE ( cn_mpi_send ) 
     
    292299            WRITE(ldtxt(ii),*) '           bad value for cn_mpi_send = ', cn_mpi_send     ;   ii = ii + 1 
    293300            kstop = kstop + 1 
     301            WRITE(*,*) '           bad value for cn_mpi_send = ', cn_mpi_send     ;   ii = ii + 1 
    294302         END SELECT 
    295303         ! 
     
    383391#     undef MULTI 
    384392#  undef DIM_4d 
     393 
     394#ifdef BULL_ASYNC 
     395# define ASYNC 
     396 
     397#if (defined BULL_MPI_DATATYPE || defined BULL_MPI_DATATYPE_SUBARRAY) 
     398# define MPI_DATATYPE_SUBARRAY 
     399#warning "MPI_DATATYPE_SUBARRAY" 
     400#ifdef BULL_MPI_DATATYPE_VECTOR 
     401#undef MPI_DATATYPE_VECTOR 
     402#warning "BULL_MPI_DATATYPE_SUBARRAY and BULL_MPI_DATATYPE_VECTOR are defined: undef BULL_MPI_DATATYPE_VECTOR" 
     403#endif 
     404#endif 
     405#ifdef BULL_MPI_DATATYPE_VECTOR 
     406# define MPI_DATATYPE_VECTOR 
     407#warning "MPI_DATATYPE_VECTOR" 
     408#endif 
     409   !!---------------------------------------------------------------------- 
     410   !!                   ***  routine mpp_lnk_(2,3,4)d  *** 
     411   !! 
     412   !!   * Argument : dummy argument use in mpp_lnk_... routines 
     413   !!                ptab   :   array or pointer of arrays on which the boundary condition is applied 
     414   !!                cd_nat :   nature of array grid-points 
     415   !!                psgn   :   sign used across the north fold boundary 
     416   !!                kfld   :   optional, number of pt3d arrays 
     417   !!                cd_mpp :   optional, fill the overlap area only 
     418   !!                pval   :   optional, background value (used at closed boundaries) 
     419   !!---------------------------------------------------------------------- 
     420   ! 
     421   !                       !==  2D array and array of 2D pointer  ==! 
     422   ! 
     423#  define DIM_2d 
     424#     define ROUTINE_LNK           mpp_lnk_2d_async 
     425#     include "mpp_lnk_generic.h90" 
     426#     undef ROUTINE_LNK 
     427#     define MULTI 
     428#     define ROUTINE_LNK           mpp_lnk_2d_ptr_async 
     429#     include "mpp_lnk_generic.h90" 
     430#     undef ROUTINE_LNK 
     431#     undef MULTI 
     432#  undef DIM_2d 
     433   ! 
     434   !                       !==  3D array and array of 3D pointer  ==! 
     435   ! 
     436#  define DIM_3d 
     437#     define ROUTINE_LNK           mpp_lnk_3d_async 
     438#     include "mpp_lnk_generic.h90" 
     439#     undef ROUTINE_LNK 
     440#     define MULTI 
     441#     define ROUTINE_LNK           mpp_lnk_3d_ptr_async 
     442#     include "mpp_lnk_generic.h90" 
     443#     undef ROUTINE_LNK 
     444#     undef MULTI 
     445#  undef DIM_3d 
     446   ! 
     447   !                       !==  4D array and array of 4D pointer  ==! 
     448   ! 
     449#  define DIM_4d 
     450#     define ROUTINE_LNK           mpp_lnk_4d_async 
     451#     include "mpp_lnk_generic.h90" 
     452#     undef ROUTINE_LNK 
     453#     define MULTI 
     454#     define ROUTINE_LNK           mpp_lnk_4d_ptr_async 
     455#     include "mpp_lnk_generic.h90" 
     456#     undef ROUTINE_LNK 
     457#     undef MULTI 
     458#  undef DIM_4d 
     459 
     460#undef ASYNC 
     461#undef MPI_DATATYPE 
     462#endif 
    385463 
    386464   !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.