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 14644 for NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/LBC/lbcnfd.F90 – NEMO

Ignore:
Timestamp:
2021-03-26T15:33:49+01:00 (3 years ago)
Author:
sparonuz
Message:

Merge trunk -r14642:HEAD

Location:
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final

    • Property svn:externals
      •  

        old new  
        99 
        1010# SETTE 
        11 ^/utils/CI/sette_wave@13990         sette 
         11^/utils/CI/sette@14244        sette 
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/LBC/lbcnfd.F90

    r13286 r14644  
    2121   USE in_out_manager ! I/O manager 
    2222   USE lib_mpp        ! MPP library 
     23#if ! defined key_mpi_off 
     24   USE MPI 
     25#endif 
    2326 
    2427   IMPLICIT NONE 
    2528   PRIVATE 
    2629 
    27    INTERFACE lbc_nfd 
    28       MODULE PROCEDURE   lbc_nfd_2d_sp    , lbc_nfd_3d_sp    , lbc_nfd_4d_sp 
    29       MODULE PROCEDURE   lbc_nfd_2d_ptr_sp, lbc_nfd_3d_ptr_sp, lbc_nfd_4d_ptr_sp 
    30       MODULE PROCEDURE   lbc_nfd_2d_ext_sp 
    31       MODULE PROCEDURE   lbc_nfd_2d_dp    , lbc_nfd_3d_dp    , lbc_nfd_4d_dp 
    32       MODULE PROCEDURE   lbc_nfd_2d_ptr_dp, lbc_nfd_3d_ptr_dp, lbc_nfd_4d_ptr_dp 
    33       MODULE PROCEDURE   lbc_nfd_2d_ext_dp 
    34    END INTERFACE 
    35    ! 
    36    INTERFACE lbc_nfd_nogather 
    37 !                        ! Currently only 4d array version is needed 
    38      MODULE PROCEDURE   lbc_nfd_nogather_2d_sp    , lbc_nfd_nogather_3d_sp 
    39      MODULE PROCEDURE   lbc_nfd_nogather_4d_sp 
    40      MODULE PROCEDURE   lbc_nfd_nogather_2d_ptr_sp, lbc_nfd_nogather_3d_ptr_sp 
    41      MODULE PROCEDURE   lbc_nfd_nogather_2d_dp    , lbc_nfd_nogather_3d_dp 
    42      MODULE PROCEDURE   lbc_nfd_nogather_4d_dp 
    43      MODULE PROCEDURE   lbc_nfd_nogather_2d_ptr_dp, lbc_nfd_nogather_3d_ptr_dp 
    44 !     MODULE PROCEDURE   lbc_nfd_nogather_4d_ptr 
     30   INTERFACE lbc_nfd            ! called by mpp_nfd, lbc_lnk_pt2pt or lbc_lnk_neicoll 
     31      MODULE PROCEDURE   lbc_nfd_sp, lbc_nfd_ext_sp 
     32      MODULE PROCEDURE   lbc_nfd_dp, lbc_nfd_ext_dp 
    4533   END INTERFACE 
    4634 
    47    TYPE, PUBLIC ::   PTR_2D_dp   !: array of 2D pointers (also used in lib_mpp) 
    48       REAL(dp), DIMENSION (:,:)    , POINTER ::   pt2d 
    49    END TYPE PTR_2D_dp 
    50    TYPE, PUBLIC ::   PTR_3D_dp   !: array of 3D pointers (also used in lib_mpp) 
    51       REAL(dp), DIMENSION (:,:,:)  , POINTER ::   pt3d 
    52    END TYPE PTR_3D_dp 
    53    TYPE, PUBLIC ::   PTR_4D_dp   !: array of 4D pointers (also used in lib_mpp) 
    54       REAL(dp), DIMENSION (:,:,:,:), POINTER ::   pt4d 
    55    END TYPE PTR_4D_dp 
     35   INTERFACE mpp_nfd            ! called by lbc_lnk_pt2pt or lbc_lnk_neicoll 
     36      MODULE PROCEDURE   mpp_nfd_sp, mpp_nfd_dp 
     37   END INTERFACE 
    5638 
    57    TYPE, PUBLIC ::   PTR_2D_sp   !: array of 2D pointers (also used in lib_mpp) 
    58       REAL(sp), DIMENSION (:,:)    , POINTER ::   pt2d 
    59    END TYPE PTR_2D_sp 
    60    TYPE, PUBLIC ::   PTR_3D_sp   !: array of 3D pointers (also used in lib_mpp) 
    61       REAL(sp), DIMENSION (:,:,:)  , POINTER ::   pt3d 
    62    END TYPE PTR_3D_sp 
    63    TYPE, PUBLIC ::   PTR_4D_sp   !: array of 4D pointers (also used in lib_mpp) 
    64       REAL(sp), DIMENSION (:,:,:,:), POINTER ::   pt4d 
    65    END TYPE PTR_4D_sp 
    66  
    67  
     39   INTERFACE lbc_nfd_nogather   ! called by mpp_nfd 
     40      MODULE PROCEDURE   lbc_nfd_nogather_sp, lbc_nfd_nogather_dp 
     41   END INTERFACE 
     42    
     43   PUBLIC   mpp_nfd            ! mpi north fold conditions 
    6844   PUBLIC   lbc_nfd            ! north fold conditions 
    6945   PUBLIC   lbc_nfd_nogather   ! north fold conditions (no allgather case) 
     
    8258 
    8359   !!---------------------------------------------------------------------- 
    84    !!                   ***  routine lbc_nfd_(2,3,4)d  *** 
     60   !!                   ***  routine lbc_nfd_[sd]p  *** 
     61   !!               ***  routine lbc_nfd_nogather_[sd]p  *** 
     62   !!                   ***  routine lbc_nfd_ext_[sd]p  *** 
    8563   !!---------------------------------------------------------------------- 
    8664   !! 
     
    9573   !                       !==  SINGLE PRECISION VERSIONS 
    9674   ! 
    97    ! 
    98    !                       !==  2D array and array of 2D pointer  ==! 
    99    ! 
    100 #  define SINGLE_PRECISION 
    101 #  define DIM_2d 
    102 #     define ROUTINE_NFD           lbc_nfd_2d_sp 
    103 #     include "lbc_nfd_generic.h90" 
    104 #     undef ROUTINE_NFD 
    105 #     define MULTI 
    106 #     define ROUTINE_NFD           lbc_nfd_2d_ptr_sp 
    107 #     include "lbc_nfd_generic.h90" 
    108 #     undef ROUTINE_NFD 
    109 #     undef MULTI 
    110 #  undef DIM_2d 
    111    ! 
    112    !                       !==  2D array with extra haloes  ==! 
    113    ! 
    114 #  define DIM_2d 
    115 #     define ROUTINE_NFD           lbc_nfd_2d_ext_sp 
    116 #     include "lbc_nfd_ext_generic.h90" 
    117 #     undef ROUTINE_NFD 
    118 #  undef DIM_2d 
    119    ! 
    120    !                       !==  3D array and array of 3D pointer  ==! 
    121    ! 
    122 #  define DIM_3d 
    123 #     define ROUTINE_NFD           lbc_nfd_3d_sp 
    124 #     include "lbc_nfd_generic.h90" 
    125 #     undef ROUTINE_NFD 
    126 #     define MULTI 
    127 #     define ROUTINE_NFD           lbc_nfd_3d_ptr_sp 
    128 #     include "lbc_nfd_generic.h90" 
    129 #     undef ROUTINE_NFD 
    130 #     undef MULTI 
    131 #  undef DIM_3d 
    132    ! 
    133    !                       !==  4D array and array of 4D pointer  ==! 
    134    ! 
    135 #  define DIM_4d 
    136 #     define ROUTINE_NFD           lbc_nfd_4d_sp 
    137 #     include "lbc_nfd_generic.h90" 
    138 #     undef ROUTINE_NFD 
    139 #     define MULTI 
    140 #     define ROUTINE_NFD           lbc_nfd_4d_ptr_sp 
    141 #     include "lbc_nfd_generic.h90" 
    142 #     undef ROUTINE_NFD 
    143 #     undef MULTI 
    144 #  undef DIM_4d 
    145    ! 
    146    !  lbc_nfd_nogather routines 
    147    ! 
    148    !                       !==  2D array and array of 2D pointer  ==! 
    149    ! 
    150 #  define DIM_2d 
    151 #     define ROUTINE_NFD           lbc_nfd_nogather_2d_sp 
    152 #     include "lbc_nfd_nogather_generic.h90" 
    153 #     undef ROUTINE_NFD 
    154 #     define MULTI 
    155 #     define ROUTINE_NFD           lbc_nfd_nogather_2d_ptr_sp 
    156 #     include "lbc_nfd_nogather_generic.h90" 
    157 #     undef ROUTINE_NFD 
    158 #     undef MULTI 
    159 #  undef DIM_2d 
    160    ! 
    161    !                       !==  3D array and array of 3D pointer  ==! 
    162    ! 
    163 #  define DIM_3d 
    164 #     define ROUTINE_NFD           lbc_nfd_nogather_3d_sp 
    165 #     include "lbc_nfd_nogather_generic.h90" 
    166 #     undef ROUTINE_NFD 
    167 #     define MULTI 
    168 #     define ROUTINE_NFD           lbc_nfd_nogather_3d_ptr_sp 
    169 #     include "lbc_nfd_nogather_generic.h90" 
    170 #     undef ROUTINE_NFD 
    171 #     undef MULTI 
    172 #  undef DIM_3d 
    173    ! 
    174    !                       !==  4D array and array of 4D pointer  ==! 
    175    ! 
    176 #  define DIM_4d 
    177 #     define ROUTINE_NFD           lbc_nfd_nogather_4d_sp 
    178 #     include "lbc_nfd_nogather_generic.h90" 
    179 #     undef ROUTINE_NFD 
    180 !#     define MULTI 
    181 !#     define ROUTINE_NFD           lbc_nfd_nogather_4d_ptr 
    182 !#     include "lbc_nfd_nogather_generic.h90" 
    183 !#     undef ROUTINE_NFD 
    184 !#     undef MULTI 
    185 #  undef DIM_4d 
    186 #  undef SINGLE_PRECISION 
    187  
    188    !!---------------------------------------------------------------------- 
     75#define PRECISION sp 
     76#  include "lbc_nfd_generic.h90" 
     77#  include "lbc_nfd_nogather_generic.h90" 
     78#  include "lbc_nfd_ext_generic.h90" 
     79#undef PRECISION 
    18980   ! 
    19081   !                       !==  DOUBLE PRECISION VERSIONS 
    19182   ! 
     83#define PRECISION dp 
     84#  include "lbc_nfd_generic.h90" 
     85#  include "lbc_nfd_nogather_generic.h90" 
     86#  include "lbc_nfd_ext_generic.h90" 
     87#undef PRECISION 
     88 
     89   !!====================================================================== 
    19290   ! 
    193    !                       !==  2D array and array of 2D pointer  ==! 
    194    ! 
    195 #  define DIM_2d 
    196 #     define ROUTINE_NFD           lbc_nfd_2d_dp 
    197 #     include "lbc_nfd_generic.h90" 
    198 #     undef ROUTINE_NFD 
    199 #     define MULTI 
    200 #     define ROUTINE_NFD           lbc_nfd_2d_ptr_dp 
    201 #     include "lbc_nfd_generic.h90" 
    202 #     undef ROUTINE_NFD 
    203 #     undef MULTI 
    204 #  undef DIM_2d 
    205    ! 
    206    !                       !==  2D array with extra haloes  ==! 
    207    ! 
    208 #  define DIM_2d 
    209 #     define ROUTINE_NFD           lbc_nfd_2d_ext_dp 
    210 #     include "lbc_nfd_ext_generic.h90" 
    211 #     undef ROUTINE_NFD 
    212 #  undef DIM_2d 
    213    ! 
    214    !                       !==  3D array and array of 3D pointer  ==! 
    215    ! 
    216 #  define DIM_3d 
    217 #     define ROUTINE_NFD           lbc_nfd_3d_dp 
    218 #     include "lbc_nfd_generic.h90" 
    219 #     undef ROUTINE_NFD 
    220 #     define MULTI 
    221 #     define ROUTINE_NFD           lbc_nfd_3d_ptr_dp 
    222 #     include "lbc_nfd_generic.h90" 
    223 #     undef ROUTINE_NFD 
    224 #     undef MULTI 
    225 #  undef DIM_3d 
    226    ! 
    227    !                       !==  4D array and array of 4D pointer  ==! 
    228    ! 
    229 #  define DIM_4d 
    230 #     define ROUTINE_NFD           lbc_nfd_4d_dp 
    231 #     include "lbc_nfd_generic.h90" 
    232 #     undef ROUTINE_NFD 
    233 #     define MULTI 
    234 #     define ROUTINE_NFD           lbc_nfd_4d_ptr_dp 
    235 #     include "lbc_nfd_generic.h90" 
    236 #     undef ROUTINE_NFD 
    237 #     undef MULTI 
    238 #  undef DIM_4d 
    239    ! 
    240    !  lbc_nfd_nogather routines 
    241    ! 
    242    !                       !==  2D array and array of 2D pointer  ==! 
    243    ! 
    244 #  define DIM_2d 
    245 #     define ROUTINE_NFD           lbc_nfd_nogather_2d_dp 
    246 #     include "lbc_nfd_nogather_generic.h90" 
    247 #     undef ROUTINE_NFD 
    248 #     define MULTI 
    249 #     define ROUTINE_NFD           lbc_nfd_nogather_2d_ptr_dp 
    250 #     include "lbc_nfd_nogather_generic.h90" 
    251 #     undef ROUTINE_NFD 
    252 #     undef MULTI 
    253 #  undef DIM_2d 
    254    ! 
    255    !                       !==  3D array and array of 3D pointer  ==! 
    256    ! 
    257 #  define DIM_3d 
    258 #     define ROUTINE_NFD           lbc_nfd_nogather_3d_dp 
    259 #     include "lbc_nfd_nogather_generic.h90" 
    260 #     undef ROUTINE_NFD 
    261 #     define MULTI 
    262 #     define ROUTINE_NFD           lbc_nfd_nogather_3d_ptr_dp 
    263 #     include "lbc_nfd_nogather_generic.h90" 
    264 #     undef ROUTINE_NFD 
    265 #     undef MULTI 
    266 #  undef DIM_3d 
    267    ! 
    268    !                       !==  4D array and array of 4D pointer  ==! 
    269    ! 
    270 #  define DIM_4d 
    271 #     define ROUTINE_NFD           lbc_nfd_nogather_4d_dp 
    272 #     include "lbc_nfd_nogather_generic.h90" 
    273 #     undef ROUTINE_NFD 
    274 !#     define MULTI 
    275 !#     define ROUTINE_NFD           lbc_nfd_nogather_4d_ptr 
    276 !#     include "lbc_nfd_nogather_generic.h90" 
    277 !#     undef ROUTINE_NFD 
    278 !#     undef MULTI 
    279 #  undef DIM_4d 
    280  
    28191   !!---------------------------------------------------------------------- 
    282  
    283  
     92   !!                   ***  routine mpp_nfd_[sd]p  *** 
     93   !! 
     94   !!   * Argument : dummy argument use in mpp_nfd_... routines 
     95   !!                ptab      :   pointer of arrays on which the boundary condition is applied 
     96   !!                cd_nat    :   nature of array grid-points 
     97   !!                psgn      :   sign used across the north fold boundary 
     98   !!                kfld      :   optional, number of pt3d arrays 
     99   !!                kfillmode :   optional, method to be use to fill the halos (see jpfill* variables) 
     100   !!                pfillval  :   optional, background value (used with jpfillcopy) 
     101   !!---------------------------------------------------------------------- 
     102   !! 
     103   !!   ----   SINGLE PRECISION VERSIONS 
     104   !! 
     105#define PRECISION sp 
     106#  define MPI_TYPE MPI_REAL 
     107#  include "mpp_nfd_generic.h90" 
     108#  undef MPI_TYPE 
     109#undef PRECISION 
     110   !! 
     111   !!   ----   DOUBLE PRECISION VERSIONS 
     112   !! 
     113#define PRECISION dp 
     114#  define MPI_TYPE MPI_DOUBLE_PRECISION 
     115#  include "mpp_nfd_generic.h90" 
     116#  undef MPI_TYPE 
     117#undef PRECISION 
    284118 
    285119   !!====================================================================== 
Note: See TracChangeset for help on using the changeset viewer.