15 return mesh == process.
getMesh();
18std::vector<std::unique_ptr<NumLib::LocalToGlobalIndexMap>>
21 std::size_t
const n_processes)
23 std::vector<std::unique_ptr<NumLib::LocalToGlobalIndexMap>>
25 submesh_dof_tables.reserve(n_processes);
27 for (std::size_t i = 0; i < n_processes; ++i)
29 submesh_dof_tables.push_back(
34 return submesh_dof_tables;
38 std::vector<std::unique_ptr<NumLib::LocalToGlobalIndexMap>>
const&
41 std::vector<NumLib::LocalToGlobalIndexMap const*> dof_table_pointers;
43 dof_table_pointers.reserve(dof_tables.size());
44 transform(cbegin(dof_tables), cend(dof_tables),
45 back_inserter(dof_table_pointers),
46 [](std::unique_ptr<NumLib::LocalToGlobalIndexMap>
const& p)
49 return dof_table_pointers;
55 std::vector<NumLib::LocalToGlobalIndexMap const*> dof_tables_of_all_procs(
58 for (std::size_t proc_id = 0; proc_id < n_processes; ++proc_id)
60 dof_tables_of_all_procs[proc_id] = &process.
getDOFTable(proc_id);
63 return dof_tables_of_all_procs;
80 std::vector<NumLib::LocalToGlobalIndexMap const*>
const&
86 bulk_mesh_dof_tables ,
87 std::vector<std::unique_ptr<NumLib::LocalToGlobalIndexMap>>{});
90 auto const n_processes = bulk_mesh_dof_tables.size();
94 auto container_that_owns_output_mesh_dof_tables =
97 auto output_mesh_dof_tables =
98 toNonOwning(container_that_owns_output_mesh_dof_tables);
100 return std::pair(std::move(output_mesh_dof_tables),
101 std::move(container_that_owns_output_mesh_dof_tables));
104std::vector<std::reference_wrapper<
105 const std::vector<std::reference_wrapper<ProcessLib::ProcessVariable>>>>
107 std::size_t
const n_processes)
109 std::vector<std::reference_wrapper<
110 const std::vector<std::reference_wrapper<ProcessLib::ProcessVariable>>>>
112 pvs_of_all_procs.reserve(n_processes);
114 for (std::size_t proc_id = 0; proc_id < n_processes; ++proc_id)
119 return pvs_of_all_procs;
122std::vector<std::unique_ptr<MeshLib::IntegrationPointWriter>>
const*
137 std::size_t
const n_processes,
140 auto bulk_mesh_dof_tables =
141 getDofTablesOfAllProcesses(process, n_processes);
143 auto [output_mesh_dof_tables, container_that_owns_output_mesh_dof_tables] =
144 computeOutputMeshDofTables(process, output_mesh, bulk_mesh_dof_tables);
146 return {getProcessVariablesOfAllProcesses(process, n_processes),
148 ::getIntegrationPointWriters(process, output_mesh),
149 std::move(bulk_mesh_dof_tables),
150 std::move(output_mesh_dof_tables),
151 std::move(container_that_owns_output_mesh_dof_tables),
156 std::vector<std::reference_wrapper<
157 const std::vector<std::reference_wrapper<ProcessVariable>>>>&&
158 process_variables_of_all_processes,
160 const std::vector<std::unique_ptr<MeshLib::IntegrationPointWriter>>*
161 integration_point_writers,
162 std::vector<const NumLib::LocalToGlobalIndexMap*>&&
163 bulk_mesh_dof_tables_of_all_processes,
164 std::vector<const NumLib::LocalToGlobalIndexMap*>&&
165 output_mesh_dof_tables_of_all_processes,
166 std::vector<std::unique_ptr<NumLib::LocalToGlobalIndexMap>>&&
167 container_that_owns_output_mesh_dof_tables,
170 std::move(process_variables_of_all_processes)),
174 std::move(bulk_mesh_dof_tables_of_all_processes)),
176 std::move(output_mesh_dof_tables_of_all_processes)),
178 std::move(container_that_owns_output_mesh_dof_tables)),
186 if (n_proc_pvs != n_proc_bulk)
189 "Mismatch in number of processes (PVs vs. bulk mesh d.o.f. "
191 n_proc_pvs, n_proc_bulk);
194 if (n_proc_pvs != n_proc_out)
197 "Mismatch in number of processes (PVs vs. output mesh d.o.f. "
199 n_proc_pvs, n_proc_out);
203 if (n_proc_own != 0 && n_proc_pvs != n_proc_own)
206 "Mismatch in number of processes (PVs vs. output mesh d.o.f. "
207 "tables, owning): {} != {}",
208 n_proc_pvs, n_proc_own);
A subset of nodes on a single mesh.
std::unique_ptr< LocalToGlobalIndexMap > deriveBoundaryConstrainedMap(int const variable_id, std::vector< int > const &component_ids, MeshLib::MeshSubset &&new_mesh_subset) const
Holds all data of a process that are needed for output.
std::vector< std::unique_ptr< NumLib::LocalToGlobalIndexMap > > container_that_owns_output_mesh_dof_tables_
SecondaryVariableCollection const & secondary_variables_
std::vector< NumLib::LocalToGlobalIndexMap const * > output_mesh_dof_tables_of_all_processes_
std::vector< std::unique_ptr< MeshLib::IntegrationPointWriter > > const * integration_point_writers_
std::vector< std::reference_wrapper< const std::vector< std::reference_wrapper< ProcessVariable > > > > process_variables_of_all_processes_
ProcessOutputData(std::vector< std::reference_wrapper< const std::vector< std::reference_wrapper< ProcessVariable > > > > &&process_variables_of_all_processes, const SecondaryVariableCollection &secondary_variables, const std::vector< std::unique_ptr< MeshLib::IntegrationPointWriter > > *integration_point_writers, std::vector< const NumLib::LocalToGlobalIndexMap * > &&bulk_mesh_dof_tables_of_all_processes, std::vector< const NumLib::LocalToGlobalIndexMap * > &&output_mesh_dof_tables_of_all_processes, std::vector< std::unique_ptr< NumLib::LocalToGlobalIndexMap > > &&container_that_owns_output_mesh_dof_tables, MeshLib::Mesh &output_mesh)
std::vector< NumLib::LocalToGlobalIndexMap const * > bulk_mesh_dof_tables_of_all_processes_
MeshLib::Mesh & output_mesh_
std::vector< std::unique_ptr< MeshLib::IntegrationPointWriter > > const & getIntegrationPointWriters() const
MeshLib::Mesh & getMesh() const
SecondaryVariableCollection const & getSecondaryVariables() const
virtual NumLib::LocalToGlobalIndexMap const & getDOFTable(const int) const
std::vector< std::vector< std::reference_wrapper< ProcessVariable > > > const & getProcessVariables() const
Handles configuration of several secondary variables from the project file.
ProcessOutputData createProcessOutputData(Process const &process, std::size_t const n_processes, MeshLib::Mesh &output_mesh)
Extracts data necessary for output from the given process.
std::vector< NumLib::LocalToGlobalIndexMap const * > toNonOwning(std::vector< std::unique_ptr< NumLib::LocalToGlobalIndexMap > > const &dof_tables)
bool isSimulationDomain(MeshLib::Mesh const &mesh, ProcessLib::Process const &process)
std::vector< std::unique_ptr< NumLib::LocalToGlobalIndexMap > > computeDofTablesForSubmesh(ProcessLib::Process const &process, MeshLib::Mesh const &submesh, std::size_t const n_processes)
std::vector< std::reference_wrapper< const std::vector< std::reference_wrapper< ProcessLib::ProcessVariable > > > > getProcessVariablesOfAllProcesses(ProcessLib::Process const &process, std::size_t const n_processes)
decltype(auto) computeOutputMeshDofTables(ProcessLib::Process const &process, MeshLib::Mesh const &output_mesh, std::vector< NumLib::LocalToGlobalIndexMap const * > const &bulk_mesh_dof_tables)
std::vector< std::unique_ptr< MeshLib::IntegrationPointWriter > > const * getIntegrationPointWriters(ProcessLib::Process const &process, MeshLib::Mesh const &output_mesh)
std::vector< NumLib::LocalToGlobalIndexMap const * > getDofTablesOfAllProcesses(ProcessLib::Process const &process, std::size_t const n_processes)