diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess-fwd.h b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess-fwd.h deleted file mode 100644 index 9b0ac58ff2a9fb1402c3e43ebca935e9dbae1474..0000000000000000000000000000000000000000 --- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess-fwd.h +++ /dev/null @@ -1,17 +0,0 @@ -/** - * \copyright - * Copyright (c) 2012-2017, OpenGeoSys Community (http://www.opengeosys.org) - * Distributed under a Modified BSD License. - * See accompanying file LICENSE.txt or - * http://www.opengeosys.org/project/license - * - */ - -#pragma once - -#include "SmallDeformationProcess.h" - -extern template class ProcessLib::LIE::SmallDeformation:: - SmallDeformationProcess<2>; -extern template class ProcessLib::LIE::SmallDeformation:: - SmallDeformationProcess<3>; diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp index 4efd0379a2d3826eab4f3c5002e876f8448ec668..80b8f09c5bb85f76f0e4cb6f8624e6d5324652f1 100644 --- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp +++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp @@ -8,24 +8,16 @@ */ #include "SmallDeformationProcess.h" -#include "SmallDeformationProcess-fwd.h" - -#include <algorithm> -#include <cassert> -#include <vector> #include "MeshLib/ElementCoordinatesMappingLocal.h" -#include "MeshLib/Elements/Element.h" #include "MeshLib/Mesh.h" -#include "MeshLib/Node.h" #include "MeshLib/Properties.h" #include "NumLib/DOF/LocalToGlobalIndexMap.h" #include "ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.h" -#include "ProcessLib/LIE/Common/LevelSetFunction.h" #include "ProcessLib/LIE/Common/MeshUtils.h" -#include "ProcessLib/LIE/Common/Utils.h" +#include "ProcessLib/LIE/SmallDeformation/LocalAssembler/CreateLocalAssemblers.h" #include "ProcessLib/LIE/SmallDeformation/LocalAssembler/LocalAssemblerDataFracture.h" #include "ProcessLib/LIE/SmallDeformation/LocalAssembler/LocalAssemblerDataMatrix.h" #include "ProcessLib/LIE/SmallDeformation/LocalAssembler/LocalAssemblerDataMatrixNearFracture.h" @@ -406,6 +398,55 @@ void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess( _local_assemblers, *_local_to_global_index_map, x); } +template <int DisplacementDim> +bool SmallDeformationProcess<DisplacementDim>::isLinear() const +{ + return false; +} + +template <int DisplacementDim> +void SmallDeformationProcess<DisplacementDim>::assembleConcreteProcess( + const double t, GlobalVector const& x, GlobalMatrix& M, GlobalMatrix& K, + GlobalVector& b) +{ + DBUG("Assemble SmallDeformationProcess."); + + // Call global assembler for each local assembly item. + GlobalExecutor::executeMemberDereferenced( + _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, + *_local_to_global_index_map, t, x, M, K, b, _coupled_solutions); +} +template <int DisplacementDim> +void SmallDeformationProcess<DisplacementDim>:: + assembleWithJacobianConcreteProcess(const double t, GlobalVector const& x, + GlobalVector const& xdot, + const double dxdot_dx, + const double dx_dx, GlobalMatrix& M, + GlobalMatrix& K, GlobalVector& b, + GlobalMatrix& Jac) +{ + DBUG("AssembleWithJacobian SmallDeformationProcess."); + + // Call global assembler for each local assembly item. + GlobalExecutor::executeMemberDereferenced( + _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, + _local_assemblers, *_local_to_global_index_map, t, x, xdot, dxdot_dx, + dx_dx, M, K, b, Jac, _coupled_solutions); +} +template <int DisplacementDim> +void SmallDeformationProcess<DisplacementDim>::preTimestepConcreteProcess( + GlobalVector const& x, double const t, double const dt, + const int /*process_id*/) +{ + DBUG("PreTimestep SmallDeformationProcess."); + + _process_data.dt = dt; + _process_data.t = t; + + GlobalExecutor::executeMemberOnDereferenced( + &SmallDeformationLocalAssemblerInterface::preTimestep, + _local_assemblers, *_local_to_global_index_map, x, t, dt); +} // ------------------------------------------------------------------------------------ // template instantiation // ------------------------------------------------------------------------------------ diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h index 9a59b5e380e148d6a3463b3842262102fee0a944..f8b7f076eae1a3b5e106ad4c5f81640704744add 100644 --- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h +++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h @@ -9,13 +9,8 @@ #pragma once -#include <cassert> - -#include "ProcessLib/Process.h" - -#include "ProcessLib/LIE/SmallDeformation/LocalAssembler/CreateLocalAssemblers.h" #include "ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerInterface.h" - +#include "ProcessLib/Process.h" #include "SmallDeformationProcessData.h" namespace ProcessLib @@ -49,8 +44,7 @@ public: //! \name ODESystem interface //! @{ - - bool isLinear() const override { return false; } + bool isLinear() const override; //! @} private: @@ -65,45 +59,16 @@ private: void assembleConcreteProcess(const double t, GlobalVector const& x, GlobalMatrix& M, GlobalMatrix& K, - GlobalVector& b) override - { - DBUG("Assemble SmallDeformationProcess."); - - // Call global assembler for each local assembly item. - GlobalExecutor::executeMemberDereferenced( - _global_assembler, &VectorMatrixAssembler::assemble, - _local_assemblers, *_local_to_global_index_map, t, x, M, K, b, - _coupled_solutions); - } + GlobalVector& b) override; void assembleWithJacobianConcreteProcess( const double t, GlobalVector const& x, GlobalVector const& xdot, const double dxdot_dx, const double dx_dx, GlobalMatrix& M, - GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override - { - DBUG("AssembleWithJacobian SmallDeformationProcess."); - - // Call global assembler for each local assembly item. - GlobalExecutor::executeMemberDereferenced( - _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, *_local_to_global_index_map, t, x, xdot, - dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); - } - - void preTimestepConcreteProcess( - GlobalVector const& x, double const t, double const dt, - const int /*process_id*/) override - const int /*process_id*/) override - { - DBUG("PreTimestep SmallDeformationProcess."); - - _process_data.dt = dt; - _process_data.t = t; - - GlobalExecutor::executeMemberOnDereferenced( - &SmallDeformationLocalAssemblerInterface::preTimestep, - _local_assemblers, *_local_to_global_index_map, x, t, dt); - } + GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override; + + void preTimestepConcreteProcess(GlobalVector const& x, double const t, + double const dt, + const int /*process_id*/) override; void postTimestepConcreteProcess(GlobalVector const& x) override; @@ -126,6 +91,9 @@ private: std::unique_ptr<MeshLib::MeshSubset const> _mesh_subset_matrix_nodes; }; +extern template class SmallDeformationProcess<2>; +extern template class SmallDeformationProcess<3>; + } // namespace SmallDeformation } // namespace LIE } // namespace ProcessLib