155#ifdef LIBMESH_HAVE_MPI
160 std::unique_ptr<FEType> temp;
162 ex =
const_cast<FEType *
>(example);
165 temp = std::make_unique<FEType>();
169#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
170 constexpr std::size_t structsize = 5;
172 constexpr std::size_t structsize = 2;
176 MPI_Datatype int_types[structsize];
179 int blocklengths[structsize];
180 MPI_Aint start, displs[structsize];
181 MPI_Datatype tmptype;
184 (MPI_Get_address (ex, &start));
185#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
187 (MPI_Get_address (&(ex->order), &displs[0]));
189 (MPI_Get_address (&(ex->radial_order), &displs[1]));
191 (MPI_Get_address (&(ex->family), &displs[2]));
193 (MPI_Get_address (&(ex->radial_family), &displs[3]));
195 (MPI_Get_address (&(ex->inf_map), &displs[4]));
198 (MPI_Get_address (&(ex->order), &displs[0]));
200 (MPI_Get_address (&(ex->family), &displs[1]));
206 for (std::size_t i = 0; i != structsize; ++i)
209 int_types[i] = MPI_INT;
215 (MPI_Type_create_struct (structsize, blocklengths, displs,
216 int_types, &tmptype));
218 (MPI_Type_commit (&tmptype));
222 (MPI_Type_create_resized (tmptype, 0,
sizeof(FEType),
226 (MPI_Type_commit (&_datatype));
229 (MPI_Type_free (&tmptype));
231 libmesh_ignore(example);