Skip to content
Snippets Groups Projects
Commit 33e3a45a authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

[PL] LIE/SD; Move pcs instantiations to cpp.

Also move some code from the header files to the cpp, cleanup
instantiations.
parent f09c400c
No related branches found
No related tags found
No related merge requests found
/**
* \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>;
......@@ -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
// ------------------------------------------------------------------------------------
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment