FMS
2025.04
Flexible Modeling System
mpp_comm.inc
1
! -*-f90-*-
2
3
!***********************************************************************
4
!* Apache License 2.0
5
!*
6
!* This file is part of the GFDL Flexible Modeling System (FMS).
7
!*
8
!* Licensed under the Apache License, Version 2.0 (the "License");
9
!* you may not use this file except in compliance with the License.
10
!* You may obtain a copy of the License at
11
!*
12
!* http://www.apache.org/licenses/LICENSE-2.0
13
!*
14
!* FMS is distributed in the hope that it will be useful, but WITHOUT
15
!* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied;
16
!* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
17
!* PARTICULAR PURPOSE. See the License for the specific language
18
!* governing permissions and limitations under the License.
19
!***********************************************************************
20
!> @file
21
!> @brief Imports checksum, gather, and scatter routines from other include files used
22
!! for communications and calculations between PE's in @ref mpp_mod
23
24
!> @addtogroup mpp_mod
25
!> @{
26
27
#if defined(use_libMPI)
28
#include <mpp_comm_mpi.inc>
29
#else
30
#include <mpp_comm_nocomm.inc>
31
#endif
32
33
#undef MPP_CHKSUM_INT_
34
#define MPP_CHKSUM_INT_ mpp_chksum_i8_1d
35
#undef MPP_CHKSUM_INT_RMASK_
36
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i8_1d_rmask
37
#undef MPP_TYPE_
38
#define MPP_TYPE_ integer(i8_kind)
39
#undef MPP_RANK_
40
#define MPP_RANK_ (:)
41
#include <mpp_chksum_int.fh>
42
43
#undef MPP_CHKSUM_INT_
44
#define MPP_CHKSUM_INT_ mpp_chksum_i8_2d
45
#undef MPP_CHKSUM_INT_RMASK_
46
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i8_2d_rmask
47
#undef MPP_TYPE_
48
#define MPP_TYPE_ integer(i8_kind)
49
#undef MPP_RANK_
50
#define MPP_RANK_ (:,:)
51
#include <mpp_chksum_int.fh>
52
53
#undef MPP_CHKSUM_INT_
54
#define MPP_CHKSUM_INT_ mpp_chksum_i8_3d
55
#undef MPP_CHKSUM_INT_RMASK_
56
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i8_3d_rmask
57
#undef MPP_TYPE_
58
#define MPP_TYPE_ integer(i8_kind)
59
#undef MPP_RANK_
60
#define MPP_RANK_ (:,:,:)
61
#include <mpp_chksum_int.fh>
62
63
#undef MPP_CHKSUM_INT_
64
#define MPP_CHKSUM_INT_ mpp_chksum_i8_4d
65
#undef MPP_CHKSUM_INT_RMASK_
66
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i8_4d_rmask
67
#undef MPP_TYPE_
68
#define MPP_TYPE_ integer(i8_kind)
69
#undef MPP_RANK_
70
#define MPP_RANK_ (:,:,:,:)
71
#include <mpp_chksum_int.fh>
72
73
#undef MPP_CHKSUM_INT_
74
#define MPP_CHKSUM_INT_ mpp_chksum_i8_5d
75
#undef MPP_CHKSUM_INT_RMASK_
76
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i8_5d_rmask
77
#undef MPP_TYPE_
78
#define MPP_TYPE_ integer(i8_kind)
79
#undef MPP_RANK_
80
#define MPP_RANK_ (:,:,:,:,:)
81
#include <mpp_chksum_int.fh>
82
83
#undef MPP_CHKSUM_INT_
84
#define MPP_CHKSUM_INT_ mpp_chksum_i4_1d
85
#undef MPP_CHKSUM_INT_RMASK_
86
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i4_1d_rmask
87
#undef MPP_TYPE_
88
#define MPP_TYPE_ integer(i4_kind)
89
#undef MPP_RANK_
90
#define MPP_RANK_ (:)
91
#include <mpp_chksum_int.fh>
92
93
#undef MPP_CHKSUM_INT_
94
#define MPP_CHKSUM_INT_ mpp_chksum_i4_2d
95
#undef MPP_CHKSUM_INT_RMASK_
96
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i4_2d_rmask
97
#undef MPP_TYPE_
98
#define MPP_TYPE_ integer(i4_kind)
99
#undef MPP_RANK_
100
#define MPP_RANK_ (:,:)
101
#include <mpp_chksum_int.fh>
102
103
#undef MPP_CHKSUM_INT_
104
#define MPP_CHKSUM_INT_ mpp_chksum_i4_3d
105
#undef MPP_CHKSUM_INT_RMASK_
106
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i4_3d_rmask
107
#undef MPP_TYPE_
108
#define MPP_TYPE_ integer(i4_kind)
109
#undef MPP_RANK_
110
#define MPP_RANK_ (:,:,:)
111
#include <mpp_chksum_int.fh>
112
113
#undef MPP_CHKSUM_INT_
114
#define MPP_CHKSUM_INT_ mpp_chksum_i4_4d
115
#undef MPP_CHKSUM_INT_RMASK_
116
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i4_4d_rmask
117
#undef MPP_TYPE_
118
#define MPP_TYPE_ integer(i4_kind)
119
#undef MPP_RANK_
120
#define MPP_RANK_ (:,:,:,:)
121
#include <mpp_chksum_int.fh>
122
123
#undef MPP_CHKSUM_INT_
124
#define MPP_CHKSUM_INT_ mpp_chksum_i4_5d
125
#undef MPP_CHKSUM_INT_RMASK_
126
#define MPP_CHKSUM_INT_RMASK_ mpp_chksum_i4_5d_rmask
127
#undef MPP_TYPE_
128
#define MPP_TYPE_ integer(i4_kind)
129
#undef MPP_RANK_
130
#define MPP_RANK_ (:,:,:,:,:)
131
#include <mpp_chksum_int.fh>
132
133
#undef MPP_CHKSUM_
134
#define MPP_CHKSUM_ mpp_chksum_r8_0d
135
#undef MPP_TYPE_
136
#define MPP_TYPE_ real(r8_kind)
137
#undef MPP_RANK_
138
#define MPP_RANK_ !
139
#include <mpp_chksum_scalar.fh>
140
141
#undef MPP_CHKSUM_
142
#define MPP_CHKSUM_ mpp_chksum_r8_1d
143
#undef MPP_TRANSFER_KIND_
144
#define MPP_TRANSFER_KIND_ i8_kind
145
#undef MPP_TYPE_
146
#define MPP_TYPE_ real(r8_kind)
147
#undef MPP_RANK_
148
#define MPP_RANK_ (:)
149
#include <mpp_chksum.fh>
150
151
#undef MPP_CHKSUM_
152
#define MPP_CHKSUM_ mpp_chksum_r8_2d
153
#undef MPP_TRANSFER_KIND_
154
#define MPP_TRANSFER_KIND_ i8_kind
155
#undef MPP_TYPE_
156
#define MPP_TYPE_ real(r8_kind)
157
#undef MPP_RANK_
158
#define MPP_RANK_ (:,:)
159
#include <mpp_chksum.fh>
160
161
#undef MPP_CHKSUM_
162
#define MPP_CHKSUM_ mpp_chksum_r8_3d
163
#undef MPP_TRANSFER_KIND_
164
#define MPP_TRANSFER_KIND_ i8_kind
165
#undef MPP_TYPE_
166
#define MPP_TYPE_ real(r8_kind)
167
#undef MPP_RANK_
168
#define MPP_RANK_ (:,:,:)
169
#include <mpp_chksum.fh>
170
171
#undef MPP_CHKSUM_
172
#define MPP_CHKSUM_ mpp_chksum_r8_4d
173
#undef MPP_TRANSFER_KIND_
174
#define MPP_TRANSFER_KIND_ i8_kind
175
#undef MPP_TYPE_
176
#define MPP_TYPE_ real(r8_kind)
177
#undef MPP_RANK_
178
#define MPP_RANK_ (:,:,:,:)
179
#include <mpp_chksum.fh>
180
181
#undef MPP_CHKSUM_
182
#define MPP_CHKSUM_ mpp_chksum_r8_5d
183
#undef MPP_TRANSFER_KIND_
184
#define MPP_TRANSFER_KIND_ i8_kind
185
#undef MPP_TYPE_
186
#define MPP_TYPE_ real(r8_kind)
187
#undef MPP_RANK_
188
#define MPP_RANK_ (:,:,:,:,:)
189
#include <mpp_chksum.fh>
190
191
#ifdef OVERLOAD_C8
192
#undef MPP_CHKSUM_
193
#define MPP_CHKSUM_ mpp_chksum_c8_0d
194
#undef MPP_TRANSFER_KIND_
195
#define MPP_TRANSFER_KIND_ i8_kind
196
#undef MPP_TYPE_
197
#define MPP_TYPE_ complex(c8_kind)
198
#undef MPP_RANK_
199
#define MPP_RANK_ !
200
#include <mpp_chksum_scalar.fh>
201
202
#undef MPP_CHKSUM_
203
#define MPP_CHKSUM_ mpp_chksum_c8_1d
204
#undef MPP_TRANSFER_KIND_
205
#define MPP_TRANSFER_KIND_ i8_kind
206
#undef MPP_TYPE_
207
#define MPP_TYPE_ complex(c8_kind)
208
#undef MPP_RANK_
209
#define MPP_RANK_ (:)
210
#include <mpp_chksum.fh>
211
212
#undef MPP_CHKSUM_
213
#define MPP_CHKSUM_ mpp_chksum_c8_2d
214
#undef MPP_TRANSFER_KIND_
215
#define MPP_TRANSFER_KIND_ i8_kind
216
#undef MPP_TYPE_
217
#define MPP_TYPE_ complex(c8_kind)
218
#undef MPP_RANK_
219
#define MPP_RANK_ (:,:)
220
#include <mpp_chksum.fh>
221
222
#undef MPP_CHKSUM_
223
#define MPP_CHKSUM_ mpp_chksum_c8_3d
224
#undef MPP_TRANSFER_KIND_
225
#define MPP_TRANSFER_KIND_ i8_kind
226
#undef MPP_TYPE_
227
#define MPP_TYPE_ complex(c8_kind)
228
#undef MPP_RANK_
229
#define MPP_RANK_ (:,:,:)
230
#include <mpp_chksum.fh>
231
232
#undef MPP_CHKSUM_
233
#define MPP_CHKSUM_ mpp_chksum_c8_4d
234
#undef MPP_TRANSFER_KIND_
235
#define MPP_TRANSFER_KIND_ i8_kind
236
#undef MPP_TYPE_
237
#define MPP_TYPE_ complex(c8_kind)
238
#undef MPP_RANK_
239
#define MPP_RANK_ (:,:,:,:)
240
#include <mpp_chksum.fh>
241
242
#undef MPP_CHKSUM_
243
#define MPP_CHKSUM_ mpp_chksum_c8_5d
244
#undef MPP_TRANSFER_KIND_
245
#define MPP_TRANSFER_KIND_ i8_kind
246
#undef MPP_TYPE_
247
#define MPP_TYPE_ complex(c8_kind)
248
#undef MPP_RANK_
249
#define MPP_RANK_ (:,:,:,:,:)
250
#include <mpp_chksum.fh>
251
#endif
252
253
#undef MPP_CHKSUM_
254
#define MPP_CHKSUM_ mpp_chksum_r4_0d
255
#undef MPP_TRANSFER_KIND_
256
#define MPP_TRANSFER_KIND_ i4_kind
257
#undef MPP_TYPE_
258
#define MPP_TYPE_ real(r4_kind)
259
#undef MPP_RANK_
260
#define MPP_RANK_ !
261
#include <mpp_chksum_scalar.fh>
262
263
#undef MPP_CHKSUM_
264
#define MPP_CHKSUM_ mpp_chksum_r4_1d
265
#undef MPP_TRANSFER_KIND_
266
#define MPP_TRANSFER_KIND_ i4_kind
267
#undef MPP_TYPE_
268
#define MPP_TYPE_ real(r4_kind)
269
#undef MPP_RANK_
270
#define MPP_RANK_ (:)
271
#include <mpp_chksum.fh>
272
273
#undef MPP_CHKSUM_
274
#define MPP_CHKSUM_ mpp_chksum_r4_2d
275
#undef MPP_TRANSFER_KIND_
276
#define MPP_TRANSFER_KIND_ i4_kind
277
#undef MPP_TYPE_
278
#define MPP_TYPE_ real(r4_kind)
279
#undef MPP_RANK_
280
#define MPP_RANK_ (:,:)
281
#include <mpp_chksum.fh>
282
283
#undef MPP_CHKSUM_
284
#define MPP_CHKSUM_ mpp_chksum_r4_3d
285
#undef MPP_TRANSFER_KIND_
286
#define MPP_TRANSFER_KIND_ i4_kind
287
#undef MPP_TYPE_
288
#define MPP_TYPE_ real(r4_kind)
289
#undef MPP_RANK_
290
#define MPP_RANK_ (:,:,:)
291
#include <mpp_chksum.fh>
292
293
#undef MPP_CHKSUM_
294
#define MPP_CHKSUM_ mpp_chksum_r4_4d
295
#undef MPP_TRANSFER_KIND_
296
#define MPP_TRANSFER_KIND_ i4_kind
297
#undef MPP_TYPE_
298
#define MPP_TYPE_ real(r4_kind)
299
#undef MPP_RANK_
300
#define MPP_RANK_ (:,:,:,:)
301
#include <mpp_chksum.fh>
302
303
#undef MPP_CHKSUM_
304
#define MPP_CHKSUM_ mpp_chksum_r4_5d
305
#undef MPP_TRANSFER_KIND_
306
#define MPP_TRANSFER_KIND_ i4_kind
307
#undef MPP_TYPE_
308
#define MPP_TYPE_ real(r4_kind)
309
#undef MPP_RANK_
310
#define MPP_RANK_ (:,:,:,:,:)
311
#include <mpp_chksum.fh>
312
313
#ifdef OVERLOAD_C4
314
#undef MPP_CHKSUM_
315
#define MPP_CHKSUM_ mpp_chksum_c4_0d
316
#undef MPP_TRANSFER_KIND_
317
#define MPP_TRANSFER_KIND_ i4_kind
318
#undef MPP_TYPE_
319
#define MPP_TYPE_ complex(c4_kind)
320
#undef MPP_RANK_
321
#define MPP_RANK_ !
322
#include <mpp_chksum_scalar.fh>
323
324
#undef MPP_CHKSUM_
325
#define MPP_CHKSUM_ mpp_chksum_c4_1d
326
#undef MPP_TRANSFER_KIND_
327
#define MPP_TRANSFER_KIND_ i4_kind
328
#undef MPP_TYPE_
329
#define MPP_TYPE_ complex(c4_kind)
330
#undef MPP_RANK_
331
#define MPP_RANK_ (:)
332
#include <mpp_chksum.fh>
333
334
#undef MPP_CHKSUM_
335
#define MPP_CHKSUM_ mpp_chksum_c4_2d
336
#undef MPP_TRANSFER_KIND_
337
#define MPP_TRANSFER_KIND_ i4_kind
338
#undef MPP_TYPE_
339
#define MPP_TYPE_ complex(c4_kind)
340
#undef MPP_RANK_
341
#define MPP_RANK_ (:,:)
342
#include <mpp_chksum.fh>
343
344
#undef MPP_CHKSUM_
345
#define MPP_CHKSUM_ mpp_chksum_c4_3d
346
#undef MPP_TRANSFER_KIND_
347
#define MPP_TRANSFER_KIND_ i4_kind
348
#undef MPP_TYPE_
349
#define MPP_TYPE_ complex(c4_kind)
350
#undef MPP_RANK_
351
#define MPP_RANK_ (:,:,:)
352
#include <mpp_chksum.fh>
353
354
#undef MPP_CHKSUM_
355
#define MPP_CHKSUM_ mpp_chksum_c4_4d
356
#undef MPP_TRANSFER_KIND_
357
#define MPP_TRANSFER_KIND_ i4_kind
358
#undef MPP_TYPE_
359
#define MPP_TYPE_ complex(c4_kind)
360
#undef MPP_RANK_
361
#define MPP_RANK_ (:,:,:,:)
362
#include <mpp_chksum.fh>
363
364
#undef MPP_CHKSUM_
365
#define MPP_CHKSUM_ mpp_chksum_c4_5d
366
#undef MPP_TRANSFER_KIND_
367
#define MPP_TRANSFER_KIND_ i4_kind
368
#undef MPP_TYPE_
369
#define MPP_TYPE_ complex(c4_kind)
370
#undef MPP_RANK_
371
#define MPP_RANK_ (:,:,:,:,:)
372
#include <mpp_chksum.fh>
373
#endif
374
375
!#################################################
376
#undef MPP_GATHER_1D_
377
#undef MPP_GATHER_1DV_
378
#undef MPP_TYPE_
379
#define MPP_TYPE_ logical
380
#define MPP_GATHER_1D_ mpp_gather_logical_1d
381
#define MPP_GATHER_1DV_ mpp_gather_logical_1dv
382
#undef MPP_GATHER_PELIST_2D_
383
#undef MPP_GATHER_PELIST_3D_
384
#define MPP_GATHER_PELIST_2D_ mpp_gather_pelist_logical_2d
385
#define MPP_GATHER_PELIST_3D_ mpp_gather_pelist_logical_3d
386
#undef MPI_TYPE_
387
#define MPI_TYPE_ MPI_LOGICAL
388
#include <mpp_gather.fh>
389
390
#undef MPP_GATHER_1D_
391
#undef MPP_GATHER_1DV_
392
#undef MPP_TYPE_
393
#define MPP_TYPE_ integer(i4_kind)
394
#define MPP_GATHER_1D_ mpp_gather_int4_1d
395
#define MPP_GATHER_1DV_ mpp_gather_int4_1dv
396
#undef MPP_GATHER_PELIST_2D_
397
#undef MPP_GATHER_PELIST_3D_
398
#define MPP_GATHER_PELIST_2D_ mpp_gather_pelist_int4_2d
399
#define MPP_GATHER_PELIST_3D_ mpp_gather_pelist_int4_3d
400
#undef MPI_TYPE_
401
#define MPI_TYPE_ MPI_INTEGER4
402
#include <mpp_gather.fh>
403
404
405
#undef MPP_GATHER_1D_
406
#undef MPP_GATHER_1DV_
407
#undef MPP_TYPE_
408
#define MPP_TYPE_ integer(i8_kind)
409
#define MPP_GATHER_1D_ mpp_gather_int8_1d
410
#define MPP_GATHER_1DV_ mpp_gather_int8_1dv
411
#undef MPP_GATHER_PELIST_2D_
412
#undef MPP_GATHER_PELIST_3D_
413
#define MPP_GATHER_PELIST_2D_ mpp_gather_pelist_int8_2d
414
#define MPP_GATHER_PELIST_3D_ mpp_gather_pelist_int8_3d
415
#undef MPI_TYPE_
416
#define MPI_TYPE_ MPI_INTEGER8
417
#include <mpp_gather.fh>
418
419
420
#undef MPP_GATHER_1D_
421
#undef MPP_GATHER_1DV_
422
#undef MPP_TYPE_
423
#define MPP_TYPE_ real(r4_kind)
424
#define MPP_GATHER_1D_ mpp_gather_real4_1d
425
#define MPP_GATHER_1DV_ mpp_gather_real4_1dv
426
#undef MPP_GATHER_PELIST_2D_
427
#undef MPP_GATHER_PELIST_3D_
428
#define MPP_GATHER_PELIST_2D_ mpp_gather_pelist_real4_2d
429
#define MPP_GATHER_PELIST_3D_ mpp_gather_pelist_real4_3d
430
#undef MPI_TYPE_
431
#define MPI_TYPE_ MPI_REAL4
432
#include <mpp_gather.fh>
433
434
#undef MPP_GATHER_1D_
435
#undef MPP_GATHER_1DV_
436
#undef MPP_TYPE_
437
#define MPP_TYPE_ real(r8_kind)
438
#define MPP_GATHER_1D_ mpp_gather_real8_1d
439
#define MPP_GATHER_1DV_ mpp_gather_real8_1dv
440
#undef MPP_GATHER_PELIST_2D_
441
#undef MPP_GATHER_PELIST_3D_
442
#define MPP_GATHER_PELIST_2D_ mpp_gather_pelist_real8_2d
443
#define MPP_GATHER_PELIST_3D_ mpp_gather_pelist_real8_3d
444
#undef MPI_TYPE_
445
#define MPI_TYPE_ MPI_REAL8
446
#include <mpp_gather.fh>
447
448
!#################################################
449
#undef MPP_SCATTER_PELIST_2D_
450
#undef MPP_SCATTER_PELIST_3D_
451
#undef MPP_TYPE_
452
#define MPP_TYPE_ integer(i4_kind)
453
#define MPP_SCATTER_PELIST_2D_ mpp_scatter_pelist_int4_2d
454
#define MPP_SCATTER_PELIST_3D_ mpp_scatter_pelist_int4_3d
455
#undef MPI_TYPE_
456
#define MPI_TYPE_ MPI_INTEGER4
457
#include <mpp_scatter.fh>
458
459
#undef MPP_SCATTER_PELIST_2D_
460
#undef MPP_SCATTER_PELIST_3D_
461
#undef MPP_TYPE_
462
#define MPP_TYPE_ integer(i8_kind)
463
#define MPP_SCATTER_PELIST_2D_ mpp_scatter_pelist_int8_2d
464
#define MPP_SCATTER_PELIST_3D_ mpp_scatter_pelist_int8_3d
465
#undef MPI_TYPE_
466
#define MPI_TYPE_ MPI_INTEGER8
467
#include <mpp_scatter.fh>
468
469
#undef MPP_SCATTER_PELIST_2D_
470
#undef MPP_SCATTER_PELIST_3D_
471
#undef MPP_TYPE_
472
#define MPP_TYPE_ real(r4_kind)
473
#define MPP_SCATTER_PELIST_2D_ mpp_scatter_pelist_real4_2d
474
#define MPP_SCATTER_PELIST_3D_ mpp_scatter_pelist_real4_3d
475
#undef MPI_TYPE_
476
#define MPI_TYPE_ MPI_REAL4
477
#include <mpp_scatter.fh>
478
479
#undef MPP_SCATTER_PELIST_2D_
480
#undef MPP_SCATTER_PELIST_3D_
481
#undef MPP_TYPE_
482
#define MPP_TYPE_ real(r8_kind)
483
#define MPP_SCATTER_PELIST_2D_ mpp_scatter_pelist_real8_2d
484
#define MPP_SCATTER_PELIST_3D_ mpp_scatter_pelist_real8_3d
485
#undef MPI_TYPE_
486
#define MPI_TYPE_ MPI_REAL8
487
#include <mpp_scatter.fh>
488
!> @}
mpp
include
mpp_comm.inc
Generated by
1.9.1