void Process::initializeExtrapolator() { NumLib::LocalToGlobalIndexMap const* dof_table_single_component; bool manage_storage; if (_local_to_global_index_map->getNumberOfComponents() == 1) { // For single-variable-single-component processes reuse the existing DOF // table. dof_table_single_component = _local_to_global_index_map.get(); manage_storage = false; } else { // Otherwise construct a new DOF table. std::vector<std::unique_ptr<MeshLib::MeshSubsets>> all_mesh_subsets_single_component; all_mesh_subsets_single_component.emplace_back( new MeshLib::MeshSubsets(_mesh_subset_all_nodes.get())); dof_table_single_component = new NumLib::LocalToGlobalIndexMap( std::move(all_mesh_subsets_single_component), // by location order is needed for output NumLib::ComponentOrder::BY_LOCATION); manage_storage = true; } std::unique_ptr<NumLib::Extrapolator> extrapolator( new NumLib::LocalLinearLeastSquaresExtrapolator( *dof_table_single_component)); // TODO Later on the DOF table can change during the simulation! _extrapolator_data = ExtrapolatorData( std::move(extrapolator), dof_table_single_component, manage_storage); }
void Process::initializeExtrapolator() { NumLib::LocalToGlobalIndexMap* dof_table_single_component; bool manage_storage; std::tie(dof_table_single_component, manage_storage) = getDOFTableForExtrapolatorData(); std::unique_ptr<NumLib::Extrapolator> extrapolator( new NumLib::LocalLinearLeastSquaresExtrapolator( *dof_table_single_component)); // TODO: Later on the DOF table can change during the simulation! _extrapolator_data = ExtrapolatorData( std::move(extrapolator), dof_table_single_component, manage_storage); }