Neko  0.9.0
A portable framework for high-order spectral element flow simulations
mpi_types.f90
Go to the documentation of this file.
1 ! Copyright (c) 2019-2023, The Neko Authors
2 ! All rights reserved.
3 !
4 ! Redistribution and use in source and binary forms, with or without
5 ! modification, are permitted provided that the following conditions
6 ! are met:
7 !
8 ! * Redistributions of source code must retain the above copyright
9 ! notice, this list of conditions and the following disclaimer.
10 !
11 ! * Redistributions in binary form must reproduce the above
12 ! copyright notice, this list of conditions and the following
13 ! disclaimer in the documentation and/or other materials provided
14 ! with the distribution.
15 !
16 ! * Neither the name of the authors nor the names of its
17 ! contributors may be used to endorse or promote products derived
18 ! from this software without specific prior written permission.
19 !
20 ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 ! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 ! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 ! FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 ! COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25 ! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26 ! BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 ! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 ! CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 ! LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 ! ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 ! POSSIBILITY OF SUCH DAMAGE.
32 !
35  use comm
36  use re2
37  use nmsh
38  use stl
39  implicit none
40  private
41 
42  type(mpi_datatype) :: mpi_nmsh_hex
43  type(mpi_datatype) :: mpi_nmsh_quad
44  type(mpi_datatype) :: mpi_nmsh_zone
45  type(mpi_datatype) :: mpi_nmsh_curve
46 
47  type(mpi_datatype) :: mpi_re2v1_data_xyz
48  type(mpi_datatype) :: mpi_re2v1_data_xy
49  type(mpi_datatype) :: mpi_re2v1_data_cv
50  type(mpi_datatype) :: mpi_re2v1_data_bc
51 
52  type(mpi_datatype) :: mpi_re2v2_data_xyz
53  type(mpi_datatype) :: mpi_re2v2_data_xy
54  type(mpi_datatype) :: mpi_re2v2_data_cv
55  type(mpi_datatype) :: mpi_re2v2_data_bc
56 
57  type(mpi_datatype) :: mpi_stl_header
58  type(mpi_datatype) :: mpi_stl_triangle
59 
60  integer :: mpi_real_size
62  integer :: mpi_character_size
63  integer :: mpi_integer_size
64  integer :: mpi_logical_size
65  integer :: mpi_real_prec_size
66 
67  ! Public derived types and size definitions
78 
79  ! Public subroutines
81 
82 contains
83 
86  integer :: ierr
87 
88  ! Define derived types
93 
98 
101 
102  ! Check sizes of MPI types
103  call mpi_type_size(mpi_real, mpi_real_size, ierr)
104  call mpi_type_size(mpi_double_precision, mpi_double_precision_size, ierr)
105  call mpi_type_size(mpi_character, mpi_character_size, ierr)
106  call mpi_type_size(mpi_integer, mpi_integer_size, ierr)
107  call mpi_type_size(mpi_logical, mpi_logical_size, ierr)
108  call mpi_type_size(mpi_real_precision, mpi_real_prec_size, ierr)
109 
110  call mpi_barrier(neko_comm, ierr)
111 
112  end subroutine neko_mpi_types_init
113 
116  type(nmsh_hex_t) :: nmsh_hex
117  type(mpi_datatype) :: type(17)
118  integer(kind=MPI_ADDRESS_KIND) :: disp(17), base
119  integer :: len(17), i, ierr
120 
121  call mpi_get_address(nmsh_hex%el_idx, disp(1), ierr)
122  call mpi_get_address(nmsh_hex%v(1)%v_idx, disp(2), ierr)
123  call mpi_get_address(nmsh_hex%v(1)%v_xyz, disp(3), ierr)
124  call mpi_get_address(nmsh_hex%v(2)%v_idx, disp(4), ierr)
125  call mpi_get_address(nmsh_hex%v(2)%v_xyz, disp(5), ierr)
126  call mpi_get_address(nmsh_hex%v(3)%v_idx, disp(6), ierr)
127  call mpi_get_address(nmsh_hex%v(3)%v_xyz, disp(7), ierr)
128  call mpi_get_address(nmsh_hex%v(4)%v_idx, disp(8), ierr)
129  call mpi_get_address(nmsh_hex%v(4)%v_xyz, disp(9), ierr)
130  call mpi_get_address(nmsh_hex%v(5)%v_idx, disp(10), ierr)
131  call mpi_get_address(nmsh_hex%v(5)%v_xyz, disp(11), ierr)
132  call mpi_get_address(nmsh_hex%v(6)%v_idx, disp(12), ierr)
133  call mpi_get_address(nmsh_hex%v(6)%v_xyz, disp(13), ierr)
134  call mpi_get_address(nmsh_hex%v(7)%v_idx, disp(14), ierr)
135  call mpi_get_address(nmsh_hex%v(7)%v_xyz, disp(15), ierr)
136  call mpi_get_address(nmsh_hex%v(8)%v_idx, disp(16), ierr)
137  call mpi_get_address(nmsh_hex%v(8)%v_xyz, disp(17), ierr)
138 
139 
140  base = disp(1)
141  do i = 1, 17
142  disp(i) = mpi_aint_diff(disp(i), base)
143  end do
144 
145  len(1) = 1
146  len(2:16:2) = 1
147  len(3:17:2) = 3
148 
149  type(1) = mpi_integer
150  type(2:16:2) = mpi_integer
151  type(3:17:2) = mpi_double_precision
152  call mpi_type_create_struct(17, len, disp, type, mpi_nmsh_hex, ierr)
153  call mpi_type_commit(mpi_nmsh_hex, ierr)
154  end subroutine mpi_type_nmsh_hex_init
155 
158  type(nmsh_quad_t) :: nmsh_quad
159  type(mpi_datatype) :: type(9)
160  integer(kind=MPI_ADDRESS_KIND) :: disp(9), base
161  integer :: len(9), i, ierr
162 
163  call mpi_get_address(nmsh_quad%el_idx, disp(1), ierr)
164  call mpi_get_address(nmsh_quad%v(1)%v_idx, disp(2), ierr)
165  call mpi_get_address(nmsh_quad%v(1)%v_xyz, disp(3), ierr)
166  call mpi_get_address(nmsh_quad%v(2)%v_idx, disp(4), ierr)
167  call mpi_get_address(nmsh_quad%v(2)%v_xyz, disp(5), ierr)
168  call mpi_get_address(nmsh_quad%v(3)%v_idx, disp(6), ierr)
169  call mpi_get_address(nmsh_quad%v(3)%v_xyz, disp(7), ierr)
170  call mpi_get_address(nmsh_quad%v(4)%v_idx, disp(8), ierr)
171  call mpi_get_address(nmsh_quad%v(4)%v_xyz, disp(9), ierr)
172 
173 
174  base = disp(1)
175  do i = 1, 9
176  disp(i) = mpi_aint_diff(disp(i), base)
177  end do
178 
179  len(1) = 1
180  len(2:8:2) = 1
181  len(3:9:2) = 3
182 
183  type(1) = mpi_integer
184  type(2:8:2) = mpi_integer
185  type(3:9:2) = mpi_double_precision
186  call mpi_type_create_struct(9, len, disp, type, mpi_nmsh_quad, ierr)
187  call mpi_type_commit(mpi_nmsh_quad, ierr)
188  end subroutine mpi_type_nmsh_quad_init
189 
192  type(nmsh_zone_t) :: nmsh_zone
193  type(mpi_datatype) :: type(6)
194  integer(kind=MPI_ADDRESS_KIND) :: disp(6), base
195  integer :: len(6), i, ierr
196 
197  call mpi_get_address(nmsh_zone%e, disp(1), ierr)
198  call mpi_get_address(nmsh_zone%f, disp(2), ierr)
199  call mpi_get_address(nmsh_zone%p_e, disp(3), ierr)
200  call mpi_get_address(nmsh_zone%p_f, disp(4), ierr)
201  call mpi_get_address(nmsh_zone%glb_pt_ids, disp(5), ierr)
202  call mpi_get_address(nmsh_zone%type, disp(6), ierr)
203 
204  base = disp(1)
205  do i = 1, 6
206  disp(i) = mpi_aint_diff(disp(i), base)
207  end do
208 
209  len(1:4) = 1
210  len(5) = 4
211  len(6) = 1
212  type = mpi_integer
213 
214  call mpi_type_create_struct(6, len, disp, type, mpi_nmsh_zone, ierr)
215  call mpi_type_commit(mpi_nmsh_zone, ierr)
216 
217  end subroutine mpi_type_nmsh_zone_init
218 
221  type(nmsh_curve_el_t) :: nmsh_curve_el
222  type(mpi_datatype) :: type(3)
223  integer(kind=MPI_ADDRESS_KIND) :: disp(3), base
224  integer :: len(3), i, ierr
225 
226  call mpi_get_address(nmsh_curve_el%e, disp(1), ierr)
227  call mpi_get_address(nmsh_curve_el%curve_data, disp(2), ierr)
228  call mpi_get_address(nmsh_curve_el%type, disp(3), ierr)
229 
230  base = disp(1)
231  do i = 1, 3
232  disp(i) = mpi_aint_diff(disp(i), base)
233  end do
234 
235  len(1) = 1
236  len(2) = 5*12
237  len(3) = 12
238  type(1) = mpi_integer
239  type(2) = mpi_double_precision
240  type(3) = mpi_integer
241 
242  call mpi_type_create_struct(3, len, disp, type, mpi_nmsh_curve, ierr)
243  call mpi_type_commit(mpi_nmsh_curve, ierr)
244 
245  end subroutine mpi_type_nmsh_curve_init
246 
247 
250  type(re2v1_xyz_t) :: re2v1_data
251  type(re2v2_xyz_t) :: re2v2_data
252  type(mpi_datatype) :: type(4)
253  integer(kind=MPI_ADDRESS_KIND) :: disp(4), base
254  integer :: len(4), ierr, i
255 
256  !
257  ! Setup version 1
258  !
259 
260  call mpi_get_address(re2v1_data%rgroup, disp(1), ierr)
261  call mpi_get_address(re2v1_data%x, disp(2), ierr)
262  call mpi_get_address(re2v1_data%y, disp(3), ierr)
263  call mpi_get_address(re2v1_data%z, disp(4), ierr)
264 
265  base = disp(1)
266  do i = 1, 4
267  disp(i) = mpi_aint_diff(disp(i), base)
268  end do
269 
270  len = 8
271  len(1) = 1
272  type = mpi_real
273 
274  call mpi_type_create_struct(4, len, disp, type, mpi_re2v1_data_xyz, ierr)
275  call mpi_type_commit(mpi_re2v1_data_xyz, ierr)
276 
277  !
278  ! Setup version 2
279  !
280 
281  call mpi_get_address(re2v2_data%rgroup, disp(1), ierr)
282  call mpi_get_address(re2v2_data%x, disp(2), ierr)
283  call mpi_get_address(re2v2_data%y, disp(3), ierr)
284  call mpi_get_address(re2v2_data%z, disp(4), ierr)
285 
286  base = disp(1)
287  do i = 1, 4
288  disp(i) = mpi_aint_diff(disp(i), base)
289  end do
290 
291  len = 8
292  len(1) = 1
293  type = mpi_double_precision
294 
295  call mpi_type_create_struct(4, len, disp, type, mpi_re2v2_data_xyz, ierr)
296  call mpi_type_commit(mpi_re2v2_data_xyz, ierr)
297 
298  end subroutine mpi_type_re2_xyz_init
299 
302  type(re2v1_xy_t) :: re2v1_data
303  type(re2v2_xy_t) :: re2v2_data
304  type(mpi_datatype) :: type(3)
305  integer(kind=MPI_ADDRESS_KIND) :: disp(3), base
306  integer :: len(3), ierr, i
307 
308  !
309  ! Setup version 1
310  !
311 
312  call mpi_get_address(re2v1_data%rgroup, disp(1), ierr)
313  call mpi_get_address(re2v1_data%x, disp(2), ierr)
314  call mpi_get_address(re2v1_data%y, disp(3), ierr)
315 
316  base = disp(1)
317  do i = 1, 3
318  disp(i) = mpi_aint_diff(disp(i), base)
319  end do
320 
321  len = 4
322  len(1) = 1
323  type = mpi_real
324 
325  call mpi_type_create_struct(3, len, disp, type, mpi_re2v1_data_xy, ierr)
326  call mpi_type_commit(mpi_re2v1_data_xy, ierr)
327 
328  !
329  ! Setup version 2
330  !
331 
332  call mpi_get_address(re2v2_data%rgroup, disp(1), ierr)
333  call mpi_get_address(re2v2_data%x, disp(2), ierr)
334  call mpi_get_address(re2v2_data%y, disp(3), ierr)
335 
336  base = disp(1)
337  do i = 1, 3
338  disp(i) = mpi_aint_diff(disp(i), base)
339  end do
340 
341  len = 4
342  len(1) = 1
343  type = mpi_double_precision
344 
345  call mpi_type_create_struct(3, len, disp, type, mpi_re2v2_data_xy, ierr)
346  call mpi_type_commit(mpi_re2v2_data_xy, ierr)
347 
348  end subroutine mpi_type_re2_xy_init
349 
352  type(re2v1_curve_t) :: re2v1_data
353  type(re2v2_curve_t) :: re2v2_data
354  type(mpi_datatype) :: type(4)
355  integer(kind=MPI_ADDRESS_KIND) :: disp(4), base
356  integer :: len(4), ierr, i
357 
358  !
359  ! Setup version 1
360  !
361 
362  call mpi_get_address(re2v1_data%elem, disp(1), ierr)
363  call mpi_get_address(re2v1_data%zone, disp(2), ierr)
364  call mpi_get_address(re2v1_data%point, disp(3), ierr)
365  call mpi_get_address(re2v1_data%type, disp(4), ierr)
366 
367  base = disp(1)
368  do i = 1, 4
369  disp(i) = mpi_aint_diff(disp(i), base)
370  end do
371 
372  len(1:2) = 1
373  len(3) = 5
374  len(4) = 4
375  type(1:2) = mpi_integer
376  type(3) = mpi_real
377  type(4) = mpi_character
378 
379  call mpi_type_create_struct(4, len, disp, type, mpi_re2v1_data_cv, ierr)
380  call mpi_type_commit(mpi_re2v1_data_cv, ierr)
381 
382  !
383  ! Setup version 2
384  !
385 
386  call mpi_get_address(re2v2_data%elem, disp(1), ierr)
387  call mpi_get_address(re2v2_data%zone, disp(2), ierr)
388  call mpi_get_address(re2v2_data%point, disp(3), ierr)
389  call mpi_get_address(re2v2_data%type, disp(4), ierr)
390 
391  base = disp(1)
392  do i = 1, 4
393  disp(i) = mpi_aint_diff(disp(i), base)
394  end do
395 
396  len(1:2) = 1
397  len(3) = 5
398  len(4) = 8
399  type(1:2) = mpi_double_precision
400  type(3) = mpi_double_precision
401  type(4) = mpi_character
402 
403  call mpi_type_create_struct(4, len, disp, type, mpi_re2v2_data_cv, ierr)
404  call mpi_type_commit(mpi_re2v2_data_cv, ierr)
405 
406  end subroutine mpi_type_re2_cv_init
407 
410  type(re2v1_bc_t) :: re2v1_data
411  type(re2v2_bc_t) :: re2v2_data
412  type(mpi_datatype) :: type(4)
413  integer(kind=MPI_ADDRESS_KIND) :: disp(4), base
414  integer :: len(4), ierr, i
415 
416  !
417  ! Setup version 1
418  !
419 
420  call mpi_get_address(re2v1_data%elem, disp(1), ierr)
421  call mpi_get_address(re2v1_data%face, disp(2), ierr)
422  call mpi_get_address(re2v1_data%bc_data, disp(3), ierr)
423  call mpi_get_address(re2v1_data%type, disp(4), ierr)
424 
425  base = disp(1)
426  do i = 1, 4
427  disp(i) = mpi_aint_diff(disp(i), base)
428  end do
429 
430  len(1:2) = 1
431  len(3) = 5
432  len(4) = 4
433  type(1:2) = mpi_integer
434  type(3) = mpi_real
435  type(4) = mpi_character
436 
437  call mpi_type_create_struct(4, len, disp, type, mpi_re2v1_data_bc, ierr)
438  call mpi_type_commit(mpi_re2v1_data_bc, ierr)
439 
440  !
441  ! Setup version 2
442  !
443 
444  call mpi_get_address(re2v2_data%elem, disp(1), ierr)
445  call mpi_get_address(re2v2_data%face, disp(2), ierr)
446  call mpi_get_address(re2v2_data%bc_data, disp(3), ierr)
447  call mpi_get_address(re2v2_data%type, disp(4), ierr)
448 
449  base = disp(1)
450  do i = 1, 4
451  disp(i) = mpi_aint_diff(disp(i), base)
452  end do
453 
454  len(1:2) = 1
455  len(3) = 5
456  len(4) = 8
457  type(1:2) = mpi_double_precision
458  type(3) = mpi_double_precision
459  type(4) = mpi_character
460 
461  call mpi_type_create_struct(4, len, disp, type, mpi_re2v2_data_bc, ierr)
462  call mpi_type_commit(mpi_re2v2_data_bc, ierr)
463 
464  end subroutine mpi_type_re2_bc_init
465 
468  type(stl_hdr_t) :: stl_hdr
469  type(mpi_datatype) :: type(2)
470  integer(kind=MPI_ADDRESS_KIND) :: disp(2), base
471  integer :: len(2), ierr, i
472 
473  call mpi_get_address(stl_hdr%hdr, disp(1), ierr)
474  call mpi_get_address(stl_hdr%ntri, disp(2), ierr)
475 
476  base = disp(1)
477  do i = 1, 2
478  disp(i) = mpi_aint_diff(disp(i), base)
479  end do
480 
481  len(1) = 80
482  len(2) = 1
483 
484  type(1) = mpi_character
485  type(2) = mpi_integer
486 
487  call mpi_type_create_struct(2, len, disp, type, mpi_stl_header, ierr)
488  call mpi_type_commit(mpi_stl_header, ierr)
489 
490  end subroutine mpi_type_stl_header_init
491 
494  type(stl_triangle_t) :: tri
495  type(mpi_datatype) :: type(5)
496  integer(kind=MPI_ADDRESS_KIND) :: disp(5), base
497  integer :: len(5), i, ierr
498 
499  call mpi_get_address(tri%n, disp(1), ierr)
500  call mpi_get_address(tri%v1, disp(2), ierr)
501  call mpi_get_address(tri%v2, disp(3), ierr)
502  call mpi_get_address(tri%v3, disp(4), ierr)
503  call mpi_get_address(tri%attrib, disp(5), ierr)
504 
505  base = disp(1)
506  do i = 1, 5
507  disp(i) = mpi_aint_diff(disp(i), base)
508  end do
509 
510  len(1:4) = 3
511  len(5) = 1
512 
513  type(1:4) = mpi_real
514  type(5) = mpi_integer2
515 
516  call mpi_type_create_struct(5, len, disp, type, mpi_stl_triangle, ierr)
517  call mpi_type_commit(mpi_stl_triangle, ierr)
518 
519  end subroutine mpi_type_stl_triangle_init
520 
532  end subroutine neko_mpi_types_free
533 
536  integer ierr
537  call mpi_type_free(mpi_nmsh_hex, ierr)
538  end subroutine mpi_type_nmsh_hex_free
539 
542  integer ierr
543  call mpi_type_free(mpi_nmsh_quad, ierr)
544  end subroutine mpi_type_nmsh_quad_free
545 
548  integer ierr
549  call mpi_type_free(mpi_nmsh_zone, ierr)
550  end subroutine mpi_type_nmsh_zone_free
551 
554  integer ierr
555  call mpi_type_free(mpi_nmsh_curve, ierr)
556  end subroutine mpi_type_nmsh_curve_free
557 
560  integer ierr
561  call mpi_type_free(mpi_re2v1_data_xyz, ierr)
562  call mpi_type_free(mpi_re2v2_data_xyz, ierr)
563  end subroutine mpi_type_re2_xyz_free
564 
567  integer ierr
568  call mpi_type_free(mpi_re2v1_data_xy, ierr)
569  call mpi_type_free(mpi_re2v2_data_xy, ierr)
570  end subroutine mpi_type_re2_xy_free
571 
574  integer ierr
575  call mpi_type_free(mpi_re2v1_data_cv, ierr)
576  call mpi_type_free(mpi_re2v2_data_cv, ierr)
577  end subroutine mpi_type_re2_cv_free
578 
581  integer ierr
582  call mpi_type_free(mpi_re2v1_data_bc, ierr)
583  call mpi_type_free(mpi_re2v2_data_bc, ierr)
584  end subroutine mpi_type_re2_bc_free
585 
588  integer ierr
589  call mpi_type_free(mpi_stl_header, ierr)
590  end subroutine mpi_type_stl_header_free
591 
594  integer ierr
595  call mpi_type_free(mpi_stl_triangle, ierr)
596  end subroutine mpi_type_stl_triangle_free
597 end module neko_mpi_types
Definition: comm.F90:1
type(mpi_comm) neko_comm
MPI communicator.
Definition: comm.F90:16
type(mpi_datatype) mpi_real_precision
MPI type for working precision of REAL types.
Definition: comm.F90:23
MPI derived types.
Definition: mpi_types.f90:34
subroutine mpi_type_nmsh_quad_free
Deallocate nmsh quad derived MPI type.
Definition: mpi_types.f90:542
subroutine mpi_type_re2_bc_free
Deallocate re2 bc derived MPI type.
Definition: mpi_types.f90:581
subroutine mpi_type_nmsh_quad_init
Define a MPI derived type for a 2d nmsh quad.
Definition: mpi_types.f90:158
type(mpi_datatype), public mpi_nmsh_hex
MPI derived type for 3D Neko nmsh data.
Definition: mpi_types.f90:42
subroutine, public neko_mpi_types_init
Define all MPI derived types.
Definition: mpi_types.f90:86
subroutine mpi_type_stl_header_init
Define a MPI dervied type for a STL header.
Definition: mpi_types.f90:468
subroutine mpi_type_nmsh_curve_init
Define a MPI derived type for a nmsh curved element.
Definition: mpi_types.f90:221
integer, public mpi_double_precision_size
Size of MPI type double precision.
Definition: mpi_types.f90:61
integer, public mpi_real_prec_size
Size of working precision REAL types.
Definition: mpi_types.f90:65
type(mpi_datatype), public mpi_re2v2_data_xyz
MPI derived type for 3D NEKTON re2 data.
Definition: mpi_types.f90:52
subroutine mpi_type_nmsh_zone_init
Define a MPI derived type for a nmsh zone.
Definition: mpi_types.f90:192
type(mpi_datatype), public mpi_re2v2_data_xy
MPI derived type for 2D NEKTON re2 data.
Definition: mpi_types.f90:53
type(mpi_datatype), public mpi_nmsh_quad
MPI derived type for 2D Neko nmsh data.
Definition: mpi_types.f90:43
subroutine mpi_type_stl_triangle_init
Define a MPI derived type for a STL triangle.
Definition: mpi_types.f90:494
subroutine mpi_type_nmsh_hex_init
Define a MPI derived type for a 3d nmsh hex.
Definition: mpi_types.f90:116
type(mpi_datatype), public mpi_nmsh_curve
MPI derived type for Neko nmsh curved elements.
Definition: mpi_types.f90:45
subroutine mpi_type_re2_xyz_free
Deallocate re2 xyz derived MPI type.
Definition: mpi_types.f90:560
subroutine mpi_type_stl_triangle_free
Deallocate STL triangle derived MPI type.
Definition: mpi_types.f90:594
integer, public mpi_character_size
Size of MPI type character.
Definition: mpi_types.f90:62
integer, public mpi_real_size
Size of MPI type real.
Definition: mpi_types.f90:60
subroutine mpi_type_re2_cv_init
Define a MPI derived type for re2 cv data.
Definition: mpi_types.f90:352
subroutine mpi_type_re2_xy_free
Deallocate re2 xyz derived MPI type.
Definition: mpi_types.f90:567
integer, public mpi_integer_size
Size of MPI type integer.
Definition: mpi_types.f90:63
type(mpi_datatype), public mpi_re2v1_data_cv
MPI derived type for NEKTON re2 cv data.
Definition: mpi_types.f90:49
type(mpi_datatype), public mpi_re2v2_data_cv
MPI derived type for NEKTON re2 cv data.
Definition: mpi_types.f90:54
integer, public mpi_logical_size
Size of MPI type logical.
Definition: mpi_types.f90:64
subroutine mpi_type_nmsh_zone_free
Deallocate nmsh zone derived MPI type.
Definition: mpi_types.f90:548
type(mpi_datatype), public mpi_re2v1_data_xy
MPI derived type for 2D NEKTON re2 data.
Definition: mpi_types.f90:48
subroutine mpi_type_nmsh_curve_free
Deallocate nmsh curve derived MPI type.
Definition: mpi_types.f90:554
subroutine mpi_type_re2_bc_init
Define a MPI derived type for re2 bc data.
Definition: mpi_types.f90:410
subroutine mpi_type_re2_cv_free
Deallocate re2 cv derived MPI type.
Definition: mpi_types.f90:574
type(mpi_datatype), public mpi_re2v1_data_bc
MPI derived type for NEKTON re2 bc data.
Definition: mpi_types.f90:50
type(mpi_datatype), public mpi_stl_header
MPI Derived type for a STL header.
Definition: mpi_types.f90:57
subroutine mpi_type_nmsh_hex_free
Deallocate nmsh hex derived MPI type.
Definition: mpi_types.f90:536
type(mpi_datatype), public mpi_nmsh_zone
MPI derived type for Neko nmsh zone data.
Definition: mpi_types.f90:44
type(mpi_datatype), public mpi_re2v2_data_bc
MPI derived type for NEKTON re2 bc data.
Definition: mpi_types.f90:55
subroutine mpi_type_re2_xy_init
Define a MPI derived type for a 2d re2 data.
Definition: mpi_types.f90:302
subroutine mpi_type_re2_xyz_init
Define a MPI derived type for a 3d re2 data.
Definition: mpi_types.f90:250
type(mpi_datatype), public mpi_stl_triangle
MPI derived type for a STL triangle.
Definition: mpi_types.f90:58
type(mpi_datatype), public mpi_re2v1_data_xyz
MPI derived type for 3D NEKTON re2 data.
Definition: mpi_types.f90:47
subroutine, public neko_mpi_types_free
Deallocate all derived MPI types.
Definition: mpi_types.f90:523
subroutine mpi_type_stl_header_free
Deallocate STL header dervied MPI type.
Definition: mpi_types.f90:588
Neko binary mesh format.
Definition: nmsh.f90:2
NEKTON re2 format.
Definition: re2.f90:2
Stereolithography format.
Definition: stl.f90:2
Defines a triangular element.
Definition: tri.f90:34
Neko curve data.
Definition: nmsh.f90:39
Neko hex element data.
Definition: nmsh.f90:24
Neko quad element data.
Definition: nmsh.f90:19
Neko zone data.
Definition: nmsh.f90:29
NEKTON re2 bc data (version 1)
Definition: re2.f90:39
NEKTON re2 curve data (version 1)
Definition: re2.f90:31
NEKTON re2 element data (2d) (version 1)
Definition: re2.f90:25
NEKTON re2 element data (3d) (version 1)
Definition: re2.f90:18
NEKTON re2 bc data (version 2)
Definition: re2.f90:73
NEKTON re2 curve data (version 2)
Definition: re2.f90:65
NEKTON re2 element data (2d) (version 2)
Definition: re2.f90:59
NEKTON re2 element data (3d) (version 2)
Definition: re2.f90:52
Defines a STL hdr.
Definition: stl.f90:8
Defines a STL triangle.
Definition: stl.f90:14