Changeset 14789 for NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/OCE/LBC/lbclnk.F90
- Timestamp:
- 2021-05-05T13:18:04+02:00 (3 years ago)
- 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 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev _r12970_AGRIF_CMEMSext/AGRIF5 ^/vendors/AGRIF/dev@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 ^/vendors/PPR@HEAD ext/PPR 8 9 9 10 # SETTE 10 ^/utils/CI/sette@1 3559sette11 ^/utils/CI/sette@14244 sette
-
- Property svn:externals
-
NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/OCE/LBC/lbclnk.F90
r13226 r14789 6 6 !! History : OPA ! 1997-06 (G. Madec) Original code 7 7 !! 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 9 9 !! 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 12 12 !! 4.0 ! 2017-03 (G. Madec) automatique allocation of array size (use with any 3rd dim size) 13 13 !! - ! 2017-04 (G. Madec) remove duplicated routines (lbc_lnk_2d_9, lbc_lnk_2d_multiple, lbc_lnk_3d_gather) … … 23 23 USE lbcnfd ! north fold 24 24 USE in_out_manager ! I/O manager 25 #if ! defined key_mpi_off 26 USE MPI 27 #endif 25 28 26 29 IMPLICIT NONE … … 28 31 29 32 INTERFACE lbc_lnk 30 MODULE PROCEDURE mpp_lnk_2d_sp , mpp_lnk_3d_sp , mpp_lnk_4d_sp31 MODULE PROCEDURE mpp_lnk_2d_dp , mpp_lnk_3d_dp , mpp_lnk_4d_dp32 END INTERFACE 33 INTERFACE lbc_lnk_ptr 34 MODULE PROCEDURE mpp_lnk_2d_ptr_sp , mpp_lnk_3d_ptr_sp , mpp_lnk_4d_ptr_sp35 MODULE PROCEDURE mpp_lnk_2d_ptr_dp , mpp_lnk_3d_ptr_dp , mpp_lnk_4d_ptr_dp36 END INTERFACE 37 INTERFACE lbc_lnk_multi 38 MODULE PROCEDURE lbc_lnk_2d_multi_sp , lbc_lnk_3d_multi_sp, lbc_lnk_4d_multi_sp39 MODULE PROCEDURE lbc_lnk_ 2d_multi_dp , lbc_lnk_3d_multi_dp, lbc_lnk_4d_multi_dp33 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 40 43 END INTERFACE 41 44 ! … … 44 47 END INTERFACE 45 48 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 70 56 !! * Substitutions 71 # include "do_loop_substitute.h90"57 !!# include "do_loop_substitute.h90" 72 58 !!---------------------------------------------------------------------- 73 59 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 78 64 79 65 !!---------------------------------------------------------------------- 80 !! *** l oad_ptr_(2,3,4)d***66 !! *** lbc_lnk_call_[234]d_[sd]p *** 81 67 !! 82 68 !! * 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) 84 71 !! cd_nat ! nature of pt2d array grid-points 85 72 !! psgn ! sign used across the north fold boundary … … 89 76 !! kfld ! number of elements that has been attributed 90 77 !!---------------------------------------------------------------------- 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 !!---------------------------------------------------------------------- 100 85 !! 101 86 !! ---- SINGLE PRECISION VERSIONS 102 87 !! 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 128 99 !! 129 100 !! ---- DOUBLE PRECISION VERSIONS 130 101 !! 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 161 121 !! cd_nat : nature of array grid-points 162 122 !! psgn : sign used across the north fold boundary 163 !! kfld : optional,number of pt3d arrays123 !! kfld : number of pt3d arrays 164 124 !! kfillmode : optional, method to be use to fill the halos (see jpfill* variables) 165 125 !! pfillval : optional, background value (used with jpfillcopy) 166 126 !!---------------------------------------------------------------------- 167 !168 ! !== 2D array and array of 2D pointer ==!169 !170 127 !! 171 128 !! ---- SINGLE PRECISION VERSIONS 172 129 !! 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 212 140 !! 213 141 !! ---- DOUBLE PRECISION VERSIONS 214 142 !! 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 351 153 352 154 !!====================================================================== … … 375 177 # include "mpp_lbc_north_icb_generic.h90" 376 178 # undef ROUTINE_LNK 377 179 378 180 379 181 !!---------------------------------------------------------------------- … … 389 191 !! jpi : first dimension of the local subdomain 390 192 !! 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) 399 194 !!---------------------------------------------------------------------- 400 195 … … 407 202 # include "mpp_lnk_icb_generic.h90" 408 203 # undef ROUTINE_LNK 409 204 410 205 END MODULE lbclnk 411
Note: See TracChangeset
for help on using the changeset viewer.