36 use mpi_f08,
only : mpi_type_size, mpi_type_create_struct, mpi_type_commit, &
37 mpi_get_address, mpi_real, mpi_double_precision, mpi_character, &
38 mpi_integer, mpi_logical, mpi_integer2, mpi_address_kind, &
39 mpi_datatype, mpi_aint_diff
122 type(mpi_datatype) ::
type(17)
123 integer(kind=MPI_ADDRESS_KIND) :: disp(17), base
124 integer :: len(17), i, ierr
126 call mpi_get_address(nmsh_hex%el_idx, disp(1), ierr)
127 call mpi_get_address(nmsh_hex%v(1)%v_idx, disp(2), ierr)
128 call mpi_get_address(nmsh_hex%v(1)%v_xyz, disp(3), ierr)
129 call mpi_get_address(nmsh_hex%v(2)%v_idx, disp(4), ierr)
130 call mpi_get_address(nmsh_hex%v(2)%v_xyz, disp(5), ierr)
131 call mpi_get_address(nmsh_hex%v(3)%v_idx, disp(6), ierr)
132 call mpi_get_address(nmsh_hex%v(3)%v_xyz, disp(7), ierr)
133 call mpi_get_address(nmsh_hex%v(4)%v_idx, disp(8), ierr)
134 call mpi_get_address(nmsh_hex%v(4)%v_xyz, disp(9), ierr)
135 call mpi_get_address(nmsh_hex%v(5)%v_idx, disp(10), ierr)
136 call mpi_get_address(nmsh_hex%v(5)%v_xyz, disp(11), ierr)
137 call mpi_get_address(nmsh_hex%v(6)%v_idx, disp(12), ierr)
138 call mpi_get_address(nmsh_hex%v(6)%v_xyz, disp(13), ierr)
139 call mpi_get_address(nmsh_hex%v(7)%v_idx, disp(14), ierr)
140 call mpi_get_address(nmsh_hex%v(7)%v_xyz, disp(15), ierr)
141 call mpi_get_address(nmsh_hex%v(8)%v_idx, disp(16), ierr)
142 call mpi_get_address(nmsh_hex%v(8)%v_xyz, disp(17), ierr)
147 disp(i) = mpi_aint_diff(disp(i), base)
154 type(1) = mpi_integer
155 type(2:16:2) = mpi_integer
156 type(3:17:2) = mpi_double_precision
157 call mpi_type_create_struct(17, len, disp,
type,
mpi_nmsh_hex, ierr)
164 type(mpi_datatype) ::
type(9)
165 integer(kind=MPI_ADDRESS_KIND) :: disp(9), base
166 integer :: len(9), i, ierr
168 call mpi_get_address(nmsh_quad%el_idx, disp(1), ierr)
169 call mpi_get_address(nmsh_quad%v(1)%v_idx, disp(2), ierr)
170 call mpi_get_address(nmsh_quad%v(1)%v_xyz, disp(3), ierr)
171 call mpi_get_address(nmsh_quad%v(2)%v_idx, disp(4), ierr)
172 call mpi_get_address(nmsh_quad%v(2)%v_xyz, disp(5), ierr)
173 call mpi_get_address(nmsh_quad%v(3)%v_idx, disp(6), ierr)
174 call mpi_get_address(nmsh_quad%v(3)%v_xyz, disp(7), ierr)
175 call mpi_get_address(nmsh_quad%v(4)%v_idx, disp(8), ierr)
176 call mpi_get_address(nmsh_quad%v(4)%v_xyz, disp(9), ierr)
181 disp(i) = mpi_aint_diff(disp(i), base)
188 type(1) = mpi_integer
189 type(2:8:2) = mpi_integer
190 type(3:9:2) = mpi_double_precision
191 call mpi_type_create_struct(9, len, disp,
type,
mpi_nmsh_quad, ierr)
198 type(mpi_datatype) ::
type(6)
199 integer(kind=MPI_ADDRESS_KIND) :: disp(6), base
200 integer :: len(6), i, ierr
202 call mpi_get_address(nmsh_zone%e, disp(1), ierr)
203 call mpi_get_address(nmsh_zone%f, disp(2), ierr)
204 call mpi_get_address(nmsh_zone%p_e, disp(3), ierr)
205 call mpi_get_address(nmsh_zone%p_f, disp(4), ierr)
206 call mpi_get_address(nmsh_zone%glb_pt_ids, disp(5), ierr)
207 call mpi_get_address(nmsh_zone%type, disp(6), ierr)
211 disp(i) = mpi_aint_diff(disp(i), base)
219 call mpi_type_create_struct(6, len, disp,
type,
mpi_nmsh_zone, ierr)
227 type(mpi_datatype) ::
type(3)
228 integer(kind=MPI_ADDRESS_KIND) :: disp(3), base
229 integer :: len(3), i, ierr
231 call mpi_get_address(nmsh_curve_el%e, disp(1), ierr)
232 call mpi_get_address(nmsh_curve_el%curve_data, disp(2), ierr)
233 call mpi_get_address(nmsh_curve_el%type, disp(3), ierr)
237 disp(i) = mpi_aint_diff(disp(i), base)
243 type(1) = mpi_integer
244 type(2) = mpi_double_precision
245 type(3) = mpi_integer
247 call mpi_type_create_struct(3, len, disp,
type,
mpi_nmsh_curve, ierr)
257 type(mpi_datatype) ::
type(4)
258 integer(kind=MPI_ADDRESS_KIND) :: disp(4), base
259 integer :: len(4), ierr, i
265 call mpi_get_address(re2v1_data%rgroup, disp(1), ierr)
266 call mpi_get_address(re2v1_data%x, disp(2), ierr)
267 call mpi_get_address(re2v1_data%y, disp(3), ierr)
268 call mpi_get_address(re2v1_data%z, disp(4), ierr)
272 disp(i) = mpi_aint_diff(disp(i), base)
286 call mpi_get_address(re2v2_data%rgroup, disp(1), ierr)
287 call mpi_get_address(re2v2_data%x, disp(2), ierr)
288 call mpi_get_address(re2v2_data%y, disp(3), ierr)
289 call mpi_get_address(re2v2_data%z, disp(4), ierr)
293 disp(i) = mpi_aint_diff(disp(i), base)
298 type = mpi_double_precision
309 type(mpi_datatype) ::
type(3)
310 integer(kind=MPI_ADDRESS_KIND) :: disp(3), base
311 integer :: len(3), ierr, i
317 call mpi_get_address(re2v1_data%rgroup, disp(1), ierr)
318 call mpi_get_address(re2v1_data%x, disp(2), ierr)
319 call mpi_get_address(re2v1_data%y, disp(3), ierr)
323 disp(i) = mpi_aint_diff(disp(i), base)
337 call mpi_get_address(re2v2_data%rgroup, disp(1), ierr)
338 call mpi_get_address(re2v2_data%x, disp(2), ierr)
339 call mpi_get_address(re2v2_data%y, disp(3), ierr)
343 disp(i) = mpi_aint_diff(disp(i), base)
348 type = mpi_double_precision
359 type(mpi_datatype) ::
type(4)
360 integer(kind=MPI_ADDRESS_KIND) :: disp(4), base
361 integer :: len(4), ierr, i
367 call mpi_get_address(re2v1_data%elem, disp(1), ierr)
368 call mpi_get_address(re2v1_data%zone, disp(2), ierr)
369 call mpi_get_address(re2v1_data%point, disp(3), ierr)
370 call mpi_get_address(re2v1_data%type, disp(4), ierr)
374 disp(i) = mpi_aint_diff(disp(i), base)
380 type(1:2) = mpi_integer
382 type(4) = mpi_character
391 call mpi_get_address(re2v2_data%elem, disp(1), ierr)
392 call mpi_get_address(re2v2_data%zone, disp(2), ierr)
393 call mpi_get_address(re2v2_data%point, disp(3), ierr)
394 call mpi_get_address(re2v2_data%type, disp(4), ierr)
398 disp(i) = mpi_aint_diff(disp(i), base)
404 type(1:2) = mpi_double_precision
405 type(3) = mpi_double_precision
406 type(4) = mpi_character
417 type(mpi_datatype) ::
type(4)
418 integer(kind=MPI_ADDRESS_KIND) :: disp(4), base
419 integer :: len(4), ierr, i
425 call mpi_get_address(re2v1_data%elem, disp(1), ierr)
426 call mpi_get_address(re2v1_data%face, disp(2), ierr)
427 call mpi_get_address(re2v1_data%bc_data, disp(3), ierr)
428 call mpi_get_address(re2v1_data%type, disp(4), ierr)
432 disp(i) = mpi_aint_diff(disp(i), base)
438 type(1:2) = mpi_integer
440 type(4) = mpi_character
449 call mpi_get_address(re2v2_data%elem, disp(1), ierr)
450 call mpi_get_address(re2v2_data%face, disp(2), ierr)
451 call mpi_get_address(re2v2_data%bc_data, disp(3), ierr)
452 call mpi_get_address(re2v2_data%type, disp(4), ierr)
456 disp(i) = mpi_aint_diff(disp(i), base)
462 type(1:2) = mpi_double_precision
463 type(3) = mpi_double_precision
464 type(4) = mpi_character
474 type(mpi_datatype) ::
type(2)
475 integer(kind=MPI_ADDRESS_KIND) :: disp(2), base
476 integer :: len(2), ierr, i
478 call mpi_get_address(stl_hdr%hdr, disp(1), ierr)
479 call mpi_get_address(stl_hdr%ntri, disp(2), ierr)
483 disp(i) = mpi_aint_diff(disp(i), base)
489 type(1) = mpi_character
490 type(2) = mpi_integer
492 call mpi_type_create_struct(2, len, disp,
type,
mpi_stl_header, ierr)
500 type(mpi_datatype) ::
type(5)
501 integer(kind=MPI_ADDRESS_KIND) :: disp(5), base
502 integer :: len(5), i, ierr
504 call mpi_get_address(
tri%n, disp(1), ierr)
505 call mpi_get_address(
tri%v1, disp(2), ierr)
506 call mpi_get_address(
tri%v2, disp(3), ierr)
507 call mpi_get_address(
tri%v3, disp(4), ierr)
508 call mpi_get_address(
tri%attrib, disp(5), ierr)
512 disp(i) = mpi_aint_diff(disp(i), base)
519 type(5) = mpi_integer2
type(mpi_datatype), public mpi_real_precision
MPI type for working precision of REAL types.
type(mpi_comm), public neko_comm
MPI communicator.
subroutine mpi_type_nmsh_quad_free
Deallocate nmsh quad derived MPI type.
subroutine mpi_type_re2_bc_free
Deallocate re2 bc derived MPI type.
subroutine mpi_type_nmsh_quad_init
Define a MPI derived type for a 2d nmsh quad.
type(mpi_datatype), public mpi_nmsh_hex
MPI derived type for 3D Neko nmsh data.
subroutine, public neko_mpi_types_init
Define all MPI derived types.
subroutine mpi_type_stl_header_init
Define a MPI dervied type for a STL header.
subroutine mpi_type_nmsh_curve_init
Define a MPI derived type for a nmsh curved element.
integer, public mpi_double_precision_size
Size of MPI type double precision.
integer, public mpi_real_prec_size
Size of working precision REAL types.
type(mpi_datatype), public mpi_re2v2_data_xyz
MPI derived type for 3D NEKTON re2 data.
subroutine mpi_type_nmsh_zone_init
Define a MPI derived type for a nmsh zone.
type(mpi_datatype), public mpi_re2v2_data_xy
MPI derived type for 2D NEKTON re2 data.
type(mpi_datatype), public mpi_nmsh_quad
MPI derived type for 2D Neko nmsh data.
subroutine mpi_type_stl_triangle_init
Define a MPI derived type for a STL triangle.
subroutine mpi_type_nmsh_hex_init
Define a MPI derived type for a 3d nmsh hex.
type(mpi_datatype), public mpi_nmsh_curve
MPI derived type for Neko nmsh curved elements.
subroutine mpi_type_re2_xyz_free
Deallocate re2 xyz derived MPI type.
subroutine mpi_type_stl_triangle_free
Deallocate STL triangle derived MPI type.
integer, public mpi_character_size
Size of MPI type character.
integer, public mpi_real_size
Size of MPI type real.
subroutine mpi_type_re2_cv_init
Define a MPI derived type for re2 cv data.
subroutine mpi_type_re2_xy_free
Deallocate re2 xyz derived MPI type.
integer, public mpi_integer_size
Size of MPI type integer.
type(mpi_datatype), public mpi_re2v1_data_cv
MPI derived type for NEKTON re2 cv data.
type(mpi_datatype), public mpi_re2v2_data_cv
MPI derived type for NEKTON re2 cv data.
integer, public mpi_logical_size
Size of MPI type logical.
subroutine mpi_type_nmsh_zone_free
Deallocate nmsh zone derived MPI type.
type(mpi_datatype), public mpi_re2v1_data_xy
MPI derived type for 2D NEKTON re2 data.
subroutine mpi_type_nmsh_curve_free
Deallocate nmsh curve derived MPI type.
subroutine mpi_type_re2_bc_init
Define a MPI derived type for re2 bc data.
subroutine mpi_type_re2_cv_free
Deallocate re2 cv derived MPI type.
type(mpi_datatype), public mpi_re2v1_data_bc
MPI derived type for NEKTON re2 bc data.
type(mpi_datatype), public mpi_stl_header
MPI Derived type for a STL header.
subroutine mpi_type_nmsh_hex_free
Deallocate nmsh hex derived MPI type.
type(mpi_datatype), public mpi_nmsh_zone
MPI derived type for Neko nmsh zone data.
type(mpi_datatype), public mpi_re2v2_data_bc
MPI derived type for NEKTON re2 bc data.
subroutine mpi_type_re2_xy_init
Define a MPI derived type for a 2d re2 data.
subroutine mpi_type_re2_xyz_init
Define a MPI derived type for a 3d re2 data.
type(mpi_datatype), public mpi_stl_triangle
MPI derived type for a STL triangle.
type(mpi_datatype), public mpi_re2v1_data_xyz
MPI derived type for 3D NEKTON re2 data.
subroutine, public neko_mpi_types_free
Deallocate all derived MPI types.
subroutine mpi_type_stl_header_free
Deallocate STL header dervied MPI type.
Stereolithography format.
Defines a triangular element.
NEKTON re2 bc data (version 1)
NEKTON re2 curve data (version 1)
NEKTON re2 element data (2d) (version 1)
NEKTON re2 element data (3d) (version 1)
NEKTON re2 bc data (version 2)
NEKTON re2 curve data (version 2)
NEKTON re2 element data (2d) (version 2)
NEKTON re2 element data (3d) (version 2)