From ba965c40675fbb90c307d75308ed37bd5524f6cb Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Wed, 30 Aug 2017 14:44:24 +0200 Subject: [PATCH] [PCS] Added a member to Process to set coupling terms to all local assemblers --- ProcessLib/LiquidFlow/LiquidFlowProcess.cpp | 30 +++++++++++++-------- ProcessLib/LiquidFlow/LiquidFlowProcess.h | 12 +++++---- ProcessLib/Process.h | 1 + 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp index beacb9f51b7..d398f7fc5cb 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp +++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp @@ -66,18 +66,20 @@ void LiquidFlowProcess::initializeConcreteProcess( pv.getShapeFunctionOrder(), _local_assemblers, mesh.isAxiallySymmetric(), integration_order, _gravitational_axis_id, _gravitational_acceleration, _reference_temperature, - *_material_properties); + *_material_properties, this->_coupling_term); _secondary_variables.addSecondaryVariable( "darcy_velocity", - makeExtrapolator(mesh.getDimension(), - getExtrapolator(), _local_assemblers, + makeExtrapolator( + mesh.getDimension(), getExtrapolator(), _local_assemblers, &LiquidFlowLocalAssemblerInterface::getIntPtDarcyVelocity)); } -void LiquidFlowProcess::assembleConcreteProcess( - const double t, GlobalVector const& x, GlobalMatrix& M, GlobalMatrix& K, - GlobalVector& b) +void LiquidFlowProcess::assembleConcreteProcess(const double t, + GlobalVector const& x, + GlobalMatrix& M, + GlobalMatrix& K, + GlobalVector& b) { DBUG("Assemble LiquidFlowProcess."); // Call global assembler for each local assembly item. @@ -100,15 +102,21 @@ void LiquidFlowProcess::assembleWithJacobianConcreteProcess( dx_dx, M, K, b, Jac, _coupling_term); } -void LiquidFlowProcess::computeSecondaryVariableConcrete( - const double t, - GlobalVector const& x) +void LiquidFlowProcess::computeSecondaryVariableConcrete(const double t, + GlobalVector const& x) { DBUG("Compute the velocity for LiquidFlowProcess."); GlobalExecutor::executeMemberOnDereferenced( &LiquidFlowLocalAssemblerInterface::computeSecondaryVariable, - _local_assemblers, *_local_to_global_index_map, t, x, - _coupling_term); + _local_assemblers, *_local_to_global_index_map, t, x, _coupling_term); +} + +void LiquidFlowProcess::setStaggeredCouplingTermToLocalAssemblers() +{ + DBUG("Compute the velocity for LiquidFlowProcess."); + GlobalExecutor::executeMemberOnDereferenced( + &LiquidFlowLocalAssemblerInterface::setStaggeredCouplingTerm, + _local_assemblers, _coupling_term); } } // end of namespace diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.h b/ProcessLib/LiquidFlow/LiquidFlowProcess.h index 9bd7152f130..0ab5f4ac69b 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowProcess.h +++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.h @@ -73,8 +73,8 @@ public: double const reference_temperature, BaseLib::ConfigTree const& config); - void computeSecondaryVariableConcrete( - double const t, GlobalVector const& x) override; + void computeSecondaryVariableConcrete(double const t, + GlobalVector const& x) override; bool isLinear() const override { return true; } int getGravitationalAxisID() const { return _gravitational_axis_id; } @@ -88,14 +88,16 @@ public: return _material_properties.get(); } + void setStaggeredCouplingTermToLocalAssemblers() override; + private: void initializeConcreteProcess( NumLib::LocalToGlobalIndexMap const& dof_table, MeshLib::Mesh const& mesh, unsigned const integration_order) override; - void assembleConcreteProcess( - const double t, GlobalVector const& x, GlobalMatrix& M, GlobalMatrix& K, - GlobalVector& b) override; + void assembleConcreteProcess(const double t, GlobalVector const& x, + GlobalMatrix& M, GlobalMatrix& K, + GlobalVector& b) override; void assembleWithJacobianConcreteProcess( const double t, GlobalVector const& x, GlobalVector const& xdot, diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h index 1e0a15beae4..88ef33bf5ee 100644 --- a/ProcessLib/Process.h +++ b/ProcessLib/Process.h @@ -75,6 +75,7 @@ public: _coupling_term = coupling_term; } + virtual void setStaggeredCouplingTermToLocalAssemblers() {} void assemble(const double t, GlobalVector const& x, GlobalMatrix& M, GlobalMatrix& K, GlobalVector& b) final; -- GitLab