- Timestamp:
- 2021-01-25T08:50:49+01:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14312_MPI_Interface/src/OCE/LBC/lbcnfd.F90
r13286 r14338 21 21 USE in_out_manager ! I/O manager 22 22 USE lib_mpp ! MPP library 23 #if ! defined key_mpi_off 24 USE MPI 25 #endif 23 26 24 27 IMPLICIT NONE 25 28 PRIVATE 26 29 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, lbc_lnk_neicoll 31 MODULE PROCEDURE lbc_nfd_2d_sp, lbc_nfd_ext_2d_sp, lbc_nfd_3d_sp, lbc_nfd_4d_sp 32 MODULE PROCEDURE lbc_nfd_2d_dp, lbc_nfd_ext_2d_dp, lbc_nfd_3d_dp, lbc_nfd_4d_dp 45 33 END INTERFACE 46 34 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 lbc_nfd_nogather ! called by mpp_nfd 36 MODULE PROCEDURE lbc_nfd_nogather_2d_sp, lbc_nfd_nogather_3d_sp, lbc_nfd_nogather_4d_sp 37 MODULE PROCEDURE lbc_nfd_nogather_2d_dp, lbc_nfd_nogather_3d_dp, lbc_nfd_nogather_4d_dp 38 END INTERFACE 56 39 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 40 INTERFACE mpp_nfd 41 MODULE PROCEDURE mpp_nfd_2d_sp, mpp_nfd_3d_sp, mpp_nfd_4d_sp 42 MODULE PROCEDURE mpp_nfd_2d_dp, mpp_nfd_3d_dp, mpp_nfd_4d_dp 43 END INTERFACE 44 45 PUBLIC mpp_nfd ! mpi north fold conditions 68 46 PUBLIC lbc_nfd ! north fold conditions 69 47 PUBLIC lbc_nfd_nogather ! north fold conditions (no allgather case) … … 82 60 83 61 !!---------------------------------------------------------------------- 84 !! *** routine lbc_nfd_(2,3,4)d *** 62 !! *** routine lbc_nfd_[234]d_[sd]p *** 63 !! *** routine lbc_nfd_nogather_[234]d_[sd]p *** 64 !! *** routine lbc_nfd_ext_2d_[sd]p *** 85 65 !!---------------------------------------------------------------------- 86 66 !! … … 95 75 ! !== SINGLE PRECISION VERSIONS 96 76 ! 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 !!---------------------------------------------------------------------- 77 #define PRECISION sp 78 # define DIM_2d 79 # include "lbc_nfd_generic.h90" 80 # include "lbc_nfd_nogather_generic.h90" 81 # include "lbc_nfd_ext_generic.h90" 82 # undef DIM_2d 83 # define DIM_3d 84 # include "lbc_nfd_generic.h90" 85 # include "lbc_nfd_nogather_generic.h90" 86 # undef DIM_3d 87 # define DIM_4d 88 # include "lbc_nfd_generic.h90" 89 # include "lbc_nfd_nogather_generic.h90" 90 # undef DIM_4d 91 #undef PRECISION 189 92 ! 190 93 ! !== DOUBLE PRECISION VERSIONS 191 94 ! 95 #define PRECISION dp 96 # define DIM_2d 97 # include "lbc_nfd_generic.h90" 98 # include "lbc_nfd_nogather_generic.h90" 99 # include "lbc_nfd_ext_generic.h90" 100 # undef DIM_2d 101 # define DIM_3d 102 # include "lbc_nfd_generic.h90" 103 # include "lbc_nfd_nogather_generic.h90" 104 # undef DIM_3d 105 # define DIM_4d 106 # include "lbc_nfd_generic.h90" 107 # include "lbc_nfd_nogather_generic.h90" 108 # undef DIM_4d 109 #undef PRECISION 110 111 !!====================================================================== 192 112 ! 193 ! !== 2D array and array of 2D pointer ==!194 !195 # define DIM_2d196 # define ROUTINE_NFD lbc_nfd_2d_dp197 # include "lbc_nfd_generic.h90"198 # undef ROUTINE_NFD199 # define MULTI200 # define ROUTINE_NFD lbc_nfd_2d_ptr_dp201 # include "lbc_nfd_generic.h90"202 # undef ROUTINE_NFD203 # undef MULTI204 # undef DIM_2d205 !206 ! !== 2D array with extra haloes ==!207 !208 # define DIM_2d209 # define ROUTINE_NFD lbc_nfd_2d_ext_dp210 # include "lbc_nfd_ext_generic.h90"211 # undef ROUTINE_NFD212 # undef DIM_2d213 !214 ! !== 3D array and array of 3D pointer ==!215 !216 # define DIM_3d217 # define ROUTINE_NFD lbc_nfd_3d_dp218 # include "lbc_nfd_generic.h90"219 # undef ROUTINE_NFD220 # define MULTI221 # define ROUTINE_NFD lbc_nfd_3d_ptr_dp222 # include "lbc_nfd_generic.h90"223 # undef ROUTINE_NFD224 # undef MULTI225 # undef DIM_3d226 !227 ! !== 4D array and array of 4D pointer ==!228 !229 # define DIM_4d230 # define ROUTINE_NFD lbc_nfd_4d_dp231 # include "lbc_nfd_generic.h90"232 # undef ROUTINE_NFD233 # define MULTI234 # define ROUTINE_NFD lbc_nfd_4d_ptr_dp235 # include "lbc_nfd_generic.h90"236 # undef ROUTINE_NFD237 # undef MULTI238 # undef DIM_4d239 !240 ! lbc_nfd_nogather routines241 !242 ! !== 2D array and array of 2D pointer ==!243 !244 # define DIM_2d245 # define ROUTINE_NFD lbc_nfd_nogather_2d_dp246 # include "lbc_nfd_nogather_generic.h90"247 # undef ROUTINE_NFD248 # define MULTI249 # define ROUTINE_NFD lbc_nfd_nogather_2d_ptr_dp250 # include "lbc_nfd_nogather_generic.h90"251 # undef ROUTINE_NFD252 # undef MULTI253 # undef DIM_2d254 !255 ! !== 3D array and array of 3D pointer ==!256 !257 # define DIM_3d258 # define ROUTINE_NFD lbc_nfd_nogather_3d_dp259 # include "lbc_nfd_nogather_generic.h90"260 # undef ROUTINE_NFD261 # define MULTI262 # define ROUTINE_NFD lbc_nfd_nogather_3d_ptr_dp263 # include "lbc_nfd_nogather_generic.h90"264 # undef ROUTINE_NFD265 # undef MULTI266 # undef DIM_3d267 !268 ! !== 4D array and array of 4D pointer ==!269 !270 # define DIM_4d271 # define ROUTINE_NFD lbc_nfd_nogather_4d_dp272 # include "lbc_nfd_nogather_generic.h90"273 # undef ROUTINE_NFD274 !# define MULTI275 !# define ROUTINE_NFD lbc_nfd_nogather_4d_ptr276 !# include "lbc_nfd_nogather_generic.h90"277 !# undef ROUTINE_NFD278 !# undef MULTI279 # undef DIM_4d280 281 113 !!---------------------------------------------------------------------- 282 283 114 !! *** routine mpp_nfd_(2,3,4)d *** 115 !! 116 !! * Argument : dummy argument use in mpp_nfd_... routines 117 !! ptab : pointer of arrays on which the boundary condition is applied 118 !! cd_nat : nature of array grid-points 119 !! psgn : sign used across the north fold boundary 120 !! kfld : optional, number of pt3d arrays 121 !! kfillmode : optional, method to be use to fill the halos (see jpfill* variables) 122 !! pfillval : optional, background value (used with jpfillcopy) 123 !!---------------------------------------------------------------------- 124 !! 125 !! ---- SINGLE PRECISION VERSIONS 126 !! 127 #define PRECISION sp 128 # define MPI_TYPE MPI_REAL 129 # define DIM_2d 130 # include "mpp_nfd_generic.h90" 131 # undef DIM_2d 132 # define DIM_3d 133 # include "mpp_nfd_generic.h90" 134 # undef DIM_3d 135 # define DIM_4d 136 # include "mpp_nfd_generic.h90" 137 # undef DIM_4d 138 # undef MPI_TYPE 139 #undef PRECISION 140 !! 141 !! ---- DOUBLE PRECISION VERSIONS 142 !! 143 #define PRECISION dp 144 # define MPI_TYPE MPI_DOUBLE_PRECISION 145 # define DIM_2d 146 # include "mpp_nfd_generic.h90" 147 # undef DIM_2d 148 # define DIM_3d 149 # include "mpp_nfd_generic.h90" 150 # undef DIM_3d 151 # define DIM_4d 152 # include "mpp_nfd_generic.h90" 153 # undef DIM_4d 154 # undef MPI_TYPE 155 #undef PRECISION 284 156 285 157 !!======================================================================
Note: See TracChangeset
for help on using the changeset viewer.