From 69cf2b65f330e61fdb7edf1e36dd75f2bca2179e Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Fri, 26 Jul 2019 14:22:17 +0200 Subject: [PATCH] [StaggeredScheme] Replaced the duplicated part from PhaseFieldProcess::constructDofTable --- ProcessLib/PhaseField/PhaseFieldProcess.cpp | 32 ++++++--------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp index 897b11e8fe8..2c9108f151e 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp +++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp @@ -95,9 +95,9 @@ PhaseFieldProcess<DisplacementDim>::getDOFTable(const int process_id) const template <int DisplacementDim> void PhaseFieldProcess<DisplacementDim>::constructDofTable() { - // Create single component dof in every of the mesh's nodes. - _mesh_subset_all_nodes = - std::make_unique<MeshLib::MeshSubset>(_mesh, _mesh.getNodes()); + // For displacement equation. + const int mechanics_process_id = 0; + constructDofTableOfSpecifiedProsessStaggerdScheme(mechanics_process_id); // TODO move the two data members somewhere else. // for extrapolation of secondary variables of stress or strain @@ -111,20 +111,6 @@ void PhaseFieldProcess<DisplacementDim>::constructDofTable() assert(_local_to_global_index_map_single_component); - // For displacement equation. - const int process_id = 0; - std::vector<MeshLib::MeshSubset> all_mesh_subsets; - std::generate_n( - std::back_inserter(all_mesh_subsets), - getProcessVariables(process_id)[0].get().getNumberOfComponents(), - [&]() { return *_mesh_subset_all_nodes; }); - - std::vector<int> const vec_n_components{DisplacementDim}; - _local_to_global_index_map = - std::make_unique<NumLib::LocalToGlobalIndexMap>( - std::move(all_mesh_subsets), vec_n_components, - NumLib::ComponentOrder::BY_LOCATION); - // For phase field equation. _sparsity_pattern_with_single_component = NumLib::computeSparsityPattern( *_local_to_global_index_map_single_component, _mesh); @@ -237,8 +223,8 @@ void PhaseFieldProcess<DisplacementDim>::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, - x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); + _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x, xdot, + dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); if (_coupled_solutions->process_id == 0) { @@ -285,8 +271,8 @@ void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess( dof_tables.emplace_back(*_local_to_global_index_map); dof_tables.emplace_back(*_local_to_global_index_map_single_component); - ProcessLib::ProcessVariable const& pv - = getProcessVariables(process_id)[0]; + ProcessLib::ProcessVariable const& pv = + getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::computeEnergy, _local_assemblers, @@ -316,8 +302,8 @@ void PhaseFieldProcess<DisplacementDim>::postNonLinearSolverConcreteProcess( DBUG("PostNonLinearSolver crack volume computation."); - ProcessLib::ProcessVariable const& pv - = getProcessVariables(process_id)[0]; + ProcessLib::ProcessVariable const& pv = + getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::computeCrackIntegral, _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, t, -- GitLab