OGS
ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim > Class Template Reference

Detailed Description

template<typename ShapeFunction, int GlobalDim>
class ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >

Definition at line 207 of file ComponentTransportFEM.h.

#include <ComponentTransportFEM.h>

Inheritance diagram for ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >:
[legend]
Collaboration diagram for ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >:
[legend]

Public Member Functions

 LocalAssemblerData (MeshLib::Element const &element, std::size_t const local_matrix_size, NumLib::GenericIntegrationMethod const &integration_method, bool is_axially_symmetric, ComponentTransportProcessData const &process_data, std::vector< std::reference_wrapper< ProcessVariable > > const &transport_process_variables)
 
void setChemicalSystemID (std::size_t const) override
 
void initializeChemicalSystemConcrete (Eigen::VectorXd const &local_x, double const t) override
 
void setChemicalSystemConcrete (Eigen::VectorXd const &local_x, double const t, double dt) override
 
void postSpeciationCalculation (std::size_t const ele_id, double const t, double const dt) override
 
void assemble (double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data) override
 
void assembleBlockMatrices (GlobalDimVectorType const &b, int const component_id, double const t, double const dt, Eigen::Ref< const NodalVectorType > const &C_nodal_values, Eigen::Ref< const NodalVectorType > const &p_nodal_values, Eigen::Ref< LocalBlockMatrixType > KCC, Eigen::Ref< LocalBlockMatrixType > MCC, Eigen::Ref< LocalBlockMatrixType > MCp, Eigen::Ref< LocalBlockMatrixType > MpC, Eigen::Ref< LocalBlockMatrixType > Kpp, Eigen::Ref< LocalBlockMatrixType > Mpp, Eigen::Ref< LocalSegmentVectorType > Bp)
 
void assembleKCmCn (int const component_id, double const t, double const dt, Eigen::Ref< LocalBlockMatrixType > KCmCn, double const stoichiometric_coefficient, double const kinetic_prefactor)
 
void assembleForStaggeredScheme (double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, int const process_id, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data) override
 
void assembleHydraulicEquation (double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data)
 
void assembleHeatTransportEquation (double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &)
 
void assembleComponentTransportEquation (double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &, int const transport_process_id)
 
void assembleWithJacobianForStaggeredScheme (double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, int const process_id, std::vector< double > &, std::vector< double > &, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data) override
 
void assembleWithJacobianHydraulicEquation (double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data)
 
void assembleWithJacobianComponentTransportEquation (double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data, int const component_id)
 
void assembleReactionEquationConcrete (double const t, double const dt, Eigen::VectorXd const &local_x, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data, int const transport_process_id) override
 
std::vector< double > const & getIntPtDarcyVelocity (const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
 
std::vector< double > const & calculateIntPtDarcyVelocity (const double t, Eigen::Ref< const NodalVectorType > const &p_nodal_values, Eigen::Ref< const NodalVectorType > const &C_nodal_values, std::vector< double > &cache) const
 
Eigen::Map< const Eigen::RowVectorXd > getShapeMatrix (const unsigned integration_point) const override
 Provides the shape matrix at the given integration point.
 
Eigen::Vector3d getFlux (MathLib::Point3d const &pnt_local_coords, double const t, std::vector< double > const &local_x) const override
 
void computeSecondaryVariableConcrete (double const t, double const, Eigen::VectorXd const &local_x, Eigen::VectorXd const &) override
 
void computeReactionRelatedSecondaryVariable (std::size_t const ele_id) override
 
std::vector< double > const & getIntPtMolarFlux (const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, std::vector< double > &cache) const override
 
void postTimestepConcrete (Eigen::VectorXd const &, Eigen::VectorXd const &, double const, double const, int const) override
 
- Public Member Functions inherited from ProcessLib::ComponentTransport::ComponentTransportLocalAssemblerInterface
 ComponentTransportLocalAssemblerInterface ()=default
 
void initializeChemicalSystem (std::size_t const mesh_item_id, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, std::vector< GlobalVector * > const &x, double const t)
 
void setChemicalSystem (std::size_t const mesh_item_id, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, std::vector< GlobalVector * > const &x, double const t, double const dt)
 
void assembleReactionEquation (std::size_t const mesh_item_id, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, std::vector< GlobalVector * > const &x, double const t, double const dt, GlobalMatrix &M, GlobalMatrix &K, GlobalVector &b, int const process_id)
 
- Public Member Functions inherited from ProcessLib::LocalAssemblerInterface
virtual ~LocalAssemblerInterface ()=default
 
virtual void setInitialConditions (std::size_t const mesh_item_id, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, std::vector< GlobalVector * > const &x, double const t, int const process_id)
 
virtual void initialize (std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const &dof_table)
 
virtual void preAssemble (double const, double const, std::vector< double > const &)
 
virtual void assembleWithJacobian (double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data)
 
virtual void computeSecondaryVariable (std::size_t const mesh_item_id, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, double const t, double const dt, std::vector< GlobalVector * > const &x, GlobalVector const &x_prev, int const process_id)
 
virtual void preTimestep (std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const &dof_table, GlobalVector const &x, double const t, double const delta_t)
 
virtual void postTimestep (std::size_t const mesh_item_id, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, double const t, double const dt, int const process_id)
 
void postNonLinearSolver (std::size_t const mesh_item_id, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, double const t, double const dt, int const process_id)
 
virtual Eigen::Vector3d getFlux (MathLib::Point3d const &, double const, std::vector< std::vector< double > > const &) const
 Fits to staggered scheme.
 
- Public Member Functions inherited from NumLib::ExtrapolatableElement
virtual ~ExtrapolatableElement ()=default
 

Private Types

using ShapeMatricesType = ShapeMatrixPolicyType<ShapeFunction, GlobalDim>
 
using ShapeMatrices = typename ShapeMatricesType::ShapeMatrices
 
using LocalBlockMatrixType
 
using LocalSegmentVectorType
 
using LocalMatrixType
 
using LocalVectorType = Eigen::Matrix<double, Eigen::Dynamic, 1>
 
using NodalVectorType = typename ShapeMatricesType::NodalVectorType
 
using NodalRowVectorType = typename ShapeMatricesType::NodalRowVectorType
 
using GlobalDimVectorType = typename ShapeMatricesType::GlobalDimVectorType
 
using GlobalDimNodalMatrixType
 
using GlobalDimMatrixType = typename ShapeMatricesType::GlobalDimMatrixType
 

Private Member Functions

double getHeatEnergyCoefficient (MaterialPropertyLib::VariableArray const &vars, const double porosity, const double fluid_density, const double specific_heat_capacity_fluid, ParameterLib::SpatialPosition const &pos, double const t, double const dt)
 
GlobalDimMatrixType getThermalConductivityDispersivity (MaterialPropertyLib::VariableArray const &vars, const double fluid_density, const double specific_heat_capacity_fluid, const GlobalDimVectorType &velocity, ParameterLib::SpatialPosition const &pos, double const t, double const dt)
 
NodalVectorType getLocalTemperature (double const t, Eigen::VectorXd const &local_x)
 

Private Attributes

const int temperature_index = -1
 
const int first_concentration_index = -1
 
MeshLib::Element const & _element
 
ComponentTransportProcessData const & _process_data
 
NumLib::GenericIntegrationMethod const & _integration_method
 
std::vector< std::reference_wrapper< ProcessVariable > > const _transport_process_variables
 
std::vector< IntegrationPointData< GlobalDimNodalMatrixType > > _ip_data
 

Static Private Attributes

static const int pressure_index = 0
 
static const int pressure_size = ShapeFunction::NPOINTS
 
static const int temperature_size = ShapeFunction::NPOINTS
 
static const int concentration_size
 

Member Typedef Documentation

◆ GlobalDimMatrixType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::GlobalDimMatrixType = typename ShapeMatricesType::GlobalDimMatrixType
private

Definition at line 239 of file ComponentTransportFEM.h.

◆ GlobalDimNodalMatrixType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::GlobalDimNodalMatrixType
private
Initial value:
MatrixType< GlobalDim, ShapeFunction::NPOINTS > GlobalDimNodalMatrixType

Definition at line 237 of file ComponentTransportFEM.h.

◆ GlobalDimVectorType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::GlobalDimVectorType = typename ShapeMatricesType::GlobalDimVectorType
private

Definition at line 236 of file ComponentTransportFEM.h.

◆ LocalBlockMatrixType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::LocalBlockMatrixType
private
Initial value:
typename ShapeMatricesType::template MatrixType<pressure_size,

Definition at line 223 of file ComponentTransportFEM.h.

◆ LocalMatrixType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::LocalMatrixType
private
Initial value:
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>

Definition at line 229 of file ComponentTransportFEM.h.

◆ LocalSegmentVectorType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::LocalSegmentVectorType
private
Initial value:
typename ShapeMatricesType::template VectorType<pressure_size>

Definition at line 226 of file ComponentTransportFEM.h.

◆ LocalVectorType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::LocalVectorType = Eigen::Matrix<double, Eigen::Dynamic, 1>
private

Definition at line 231 of file ComponentTransportFEM.h.

◆ NodalRowVectorType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::NodalRowVectorType = typename ShapeMatricesType::NodalRowVectorType
private

Definition at line 234 of file ComponentTransportFEM.h.

◆ NodalVectorType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::NodalVectorType = typename ShapeMatricesType::NodalVectorType
private

Definition at line 233 of file ComponentTransportFEM.h.

◆ ShapeMatrices

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::ShapeMatrices = typename ShapeMatricesType::ShapeMatrices
private

Definition at line 221 of file ComponentTransportFEM.h.

◆ ShapeMatricesType

template<typename ShapeFunction , int GlobalDim>
using ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::ShapeMatricesType = ShapeMatrixPolicyType<ShapeFunction, GlobalDim>
private

Definition at line 220 of file ComponentTransportFEM.h.

Constructor & Destructor Documentation

◆ LocalAssemblerData()

template<typename ShapeFunction , int GlobalDim>
ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::LocalAssemblerData ( MeshLib::Element const & element,
std::size_t const local_matrix_size,
NumLib::GenericIntegrationMethod const & integration_method,
bool is_axially_symmetric,
ComponentTransportProcessData const & process_data,
std::vector< std::reference_wrapper< ProcessVariable > > const & transport_process_variables )
inline

Definition at line 242 of file ComponentTransportFEM.h.

250 : temperature_index(process_data.isothermal ? -1
251 : ShapeFunction::NPOINTS),
252 first_concentration_index(process_data.isothermal
253 ? ShapeFunction::NPOINTS
254 : 2 * ShapeFunction::NPOINTS),
255 _element(element),
256 _process_data(process_data),
257 _integration_method(integration_method),
258 _transport_process_variables(transport_process_variables)
259 {
260 (void)local_matrix_size;
261
262 unsigned const n_integration_points =
264 _ip_data.reserve(n_integration_points);
265
268
269 double const aperture_size = _process_data.aperture_size(0.0, pos)[0];
270
271 auto const shape_matrices =
273 GlobalDim>(element, is_axially_symmetric,
275 auto const& medium =
277 for (unsigned ip = 0; ip < n_integration_points; ip++)
278 {
279 _ip_data.emplace_back(
280 shape_matrices[ip].dNdx,
282 shape_matrices[ip].integralMeasure *
283 shape_matrices[ip].detJ * aperture_size);
284
285 pos.setIntegrationPoint(ip);
286
287 _ip_data[ip].porosity =
289 .template initialValue<double>(
290 pos, std::numeric_limits<double>::quiet_NaN() /*t*/);
291
292 _ip_data[ip].pushBackState();
293 }
294 }
double getWeight() const
std::size_t getID() const
Returns the ID of the element.
Definition Element.h:89
MathLib::WeightedPoint const & getWeightedPoint(unsigned const igp) const
void setElementID(std::size_t element_id)
void setIntegrationPoint(unsigned integration_point)
NumLib::GenericIntegrationMethod const & _integration_method
std::vector< IntegrationPointData< GlobalDimNodalMatrixType > > _ip_data
ComponentTransportProcessData const & _process_data
ShapeMatrixPolicyType< ShapeFunction, GlobalDim > ShapeMatricesType
std::vector< std::reference_wrapper< ProcessVariable > > const _transport_process_variables
std::vector< typename ShapeMatricesType::ShapeMatrices, Eigen::aligned_allocator< typename ShapeMatricesType::ShapeMatrices > > initShapeMatrices(MeshLib::Element const &e, bool const is_axially_symmetric, IntegrationMethod const &integration_method)
MaterialPropertyLib::MaterialSpatialDistributionMap media_map

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::ComponentTransportProcessData::aperture_size, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), MathLib::WeightedPoint::getWeight(), NumLib::GenericIntegrationMethod::getWeightedPoint(), NumLib::initShapeMatrices(), ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, MaterialPropertyLib::porosity, ParameterLib::SpatialPosition::setElementID(), and ParameterLib::SpatialPosition::setIntegrationPoint().

Member Function Documentation

◆ assemble()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assemble ( double const t,
double const dt,
std::vector< double > const & local_x,
std::vector< double > const & ,
std::vector< double > & local_M_data,
std::vector< double > & local_K_data,
std::vector< double > & local_b_data )
inlineoverridevirtual

Reimplemented from ProcessLib::LocalAssemblerInterface.

Definition at line 454 of file ComponentTransportFEM.h.

460 {
461 auto const local_matrix_size = local_x.size();
462 // Nodal DOFs include pressure
463 int const num_nodal_dof = 1 + _transport_process_variables.size();
464 // This assertion is valid only if all nodal d.o.f. use the same shape
465 // matrices.
466 assert(local_matrix_size == ShapeFunction::NPOINTS * num_nodal_dof);
467
468 auto local_M = MathLib::createZeroedMatrix<LocalMatrixType>(
469 local_M_data, local_matrix_size, local_matrix_size);
470 auto local_K = MathLib::createZeroedMatrix<LocalMatrixType>(
471 local_K_data, local_matrix_size, local_matrix_size);
472 auto local_b = MathLib::createZeroedVector<LocalVectorType>(
473 local_b_data, local_matrix_size);
474
475 // Get block matrices
476 auto Kpp = local_K.template block<pressure_size, pressure_size>(
478 auto Mpp = local_M.template block<pressure_size, pressure_size>(
480 auto Bp = local_b.template segment<pressure_size>(pressure_index);
481
482 auto local_p = Eigen::Map<const NodalVectorType>(
483 &local_x[pressure_index], pressure_size);
484
485 auto const& b =
488
489 auto const number_of_components = num_nodal_dof - 1;
490 for (int component_id = 0; component_id < number_of_components;
491 ++component_id)
492 {
493 /* Partitioned assembler matrix
494 * | pp | pc1 | pc2 | pc3 |
495 * |-----|-----|-----|-----|
496 * | c1p | c1c1| 0 | 0 |
497 * |-----|-----|-----|-----|
498 * | c2p | 0 | c2c2| 0 |
499 * |-----|-----|-----|-----|
500 * | c3p | 0 | 0 | c3c3|
501 */
502 auto concentration_index =
503 pressure_size + component_id * concentration_size;
504
505 auto KCC =
506 local_K.template block<concentration_size, concentration_size>(
507 concentration_index, concentration_index);
508 auto MCC =
509 local_M.template block<concentration_size, concentration_size>(
510 concentration_index, concentration_index);
511 auto MCp =
512 local_M.template block<concentration_size, pressure_size>(
513 concentration_index, pressure_index);
514 auto MpC =
515 local_M.template block<pressure_size, concentration_size>(
516 pressure_index, concentration_index);
517
518 auto local_C = Eigen::Map<const NodalVectorType>(
519 &local_x[concentration_index], concentration_size);
520
521 assembleBlockMatrices(b, component_id, t, dt, local_C, local_p, KCC,
522 MCC, MCp, MpC, Kpp, Mpp, Bp);
523
525 {
526 auto const stoichiometric_matrix =
529
530 assert(stoichiometric_matrix);
531
532 for (Eigen::SparseMatrix<double>::InnerIterator it(
533 *stoichiometric_matrix, component_id);
534 it;
535 ++it)
536 {
537 auto const stoichiometric_coefficient = it.value();
538 auto const coupled_component_id = it.row();
539 auto const kinetic_prefactor =
541 ->getKineticPrefactor(coupled_component_id);
542
543 auto const concentration_index =
544 pressure_size + component_id * concentration_size;
545 auto const coupled_concentration_index =
547 coupled_component_id * concentration_size;
548 auto KCmCn = local_K.template block<concentration_size,
550 concentration_index, coupled_concentration_index);
551
552 // account for the coupling between components
553 assembleKCmCn(component_id, t, dt, KCmCn,
554 stoichiometric_coefficient,
555 kinetic_prefactor);
556 }
557 }
558 }
559 }
virtual double getKineticPrefactor(std::size_t reaction_id) const
virtual Eigen::SparseMatrix< double > const * getStoichiometricMatrix() const
void assembleBlockMatrices(GlobalDimVectorType const &b, int const component_id, double const t, double const dt, Eigen::Ref< const NodalVectorType > const &C_nodal_values, Eigen::Ref< const NodalVectorType > const &p_nodal_values, Eigen::Ref< LocalBlockMatrixType > KCC, Eigen::Ref< LocalBlockMatrixType > MCC, Eigen::Ref< LocalBlockMatrixType > MCp, Eigen::Ref< LocalBlockMatrixType > MpC, Eigen::Ref< LocalBlockMatrixType > Kpp, Eigen::Ref< LocalBlockMatrixType > Mpp, Eigen::Ref< LocalSegmentVectorType > Bp)
void assembleKCmCn(int const component_id, double const t, double const dt, Eigen::Ref< LocalBlockMatrixType > KCmCn, double const stoichiometric_coefficient, double const kinetic_prefactor)
std::vector< Eigen::VectorXd > const projected_specific_body_force_vectors
Projected specific body force vector: R * R^T * b.

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_transport_process_variables, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleBlockMatrices(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleKCmCn(), ProcessLib::ComponentTransport::ComponentTransportProcessData::chemical_solver_interface, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, MeshLib::Element::getID(), ChemistryLib::ChemicalSolverInterface::getKineticPrefactor(), ChemistryLib::ChemicalSolverInterface::getStoichiometricMatrix(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_size, and ProcessLib::ComponentTransport::ComponentTransportProcessData::projected_specific_body_force_vectors.

◆ assembleBlockMatrices()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleBlockMatrices ( GlobalDimVectorType const & b,
int const component_id,
double const t,
double const dt,
Eigen::Ref< const NodalVectorType > const & C_nodal_values,
Eigen::Ref< const NodalVectorType > const & p_nodal_values,
Eigen::Ref< LocalBlockMatrixType > KCC,
Eigen::Ref< LocalBlockMatrixType > MCC,
Eigen::Ref< LocalBlockMatrixType > MCp,
Eigen::Ref< LocalBlockMatrixType > MpC,
Eigen::Ref< LocalBlockMatrixType > Kpp,
Eigen::Ref< LocalBlockMatrixType > Mpp,
Eigen::Ref< LocalSegmentVectorType > Bp )
inline

Definition at line 561 of file ComponentTransportFEM.h.

573 {
574 unsigned const n_integration_points =
576
579
581
582 // Get material properties
583 auto const& medium =
585 // Select the only valid for component transport liquid phase.
586 auto const& phase = medium.phase("AqueousLiquid");
587
588 // Assume that the component name is the same as the process variable
589 // name. Components are shifted by one because the first one is always
590 // pressure.
591 auto const& component = phase.component(
592 _transport_process_variables[component_id].get().getName());
593
594 LocalBlockMatrixType KCC_Laplacian =
595 LocalBlockMatrixType::Zero(concentration_size, concentration_size);
596
597 std::vector<GlobalDimVectorType> ip_flux_vector;
598 double average_velocity_norm = 0.0;
600 {
601 ip_flux_vector.reserve(n_integration_points);
602 }
603
604 auto const& Ns =
606 .NsHigherOrder<typename ShapeFunction::MeshElement>();
607
608 for (unsigned ip(0); ip < n_integration_points; ++ip)
609 {
610 pos.setIntegrationPoint(ip);
611
612 auto& ip_data = _ip_data[ip];
613 auto const& dNdx = ip_data.dNdx;
614 auto const& N = Ns[ip];
615 auto const& w = ip_data.integration_weight;
616 auto& porosity = ip_data.porosity;
617
618 double C_int_pt = 0.0;
619 double p_int_pt = 0.0;
620
621 NumLib::shapeFunctionInterpolate(C_nodal_values, N, C_int_pt);
622 NumLib::shapeFunctionInterpolate(p_nodal_values, N, p_int_pt);
623
624 vars.concentration = C_int_pt;
625 vars.liquid_phase_pressure = p_int_pt;
626
627 // update according to a particular porosity model
629 .template value<double>(vars, pos, t, dt);
630 vars.porosity = porosity;
631
632 auto const& retardation_factor =
634 .template value<double>(vars, pos, t, dt);
635
636 auto const& solute_dispersivity_transverse = medium.template value<
637 double>(
639
640 auto const& solute_dispersivity_longitudinal =
641 medium.template value<double>(
644
645 // Use the fluid density model to compute the density
646 // TODO (renchao): concentration of which component as the argument
647 // for calculation of fluid density
648 auto const density =
650 .template value<double>(vars, pos, t, dt);
651
652 auto const decay_rate =
654 .template value<double>(vars, pos, t, dt);
655
656 auto const& pore_diffusion_coefficient =
657 MaterialPropertyLib::formEigenTensor<GlobalDim>(
659 .value(vars, pos, t, dt));
660
661 auto const& K = MaterialPropertyLib::formEigenTensor<GlobalDim>(
663 vars, pos, t, dt));
664
665 // Use the viscosity model to compute the viscosity
667 .template value<double>(vars, pos, t, dt);
668
669 GlobalDimMatrixType const K_over_mu = K / mu;
670 GlobalDimVectorType const velocity =
672 ? GlobalDimVectorType(-K_over_mu *
673 (dNdx * p_nodal_values - density * b))
674 : GlobalDimVectorType(-K_over_mu * dNdx * p_nodal_values);
675
676 const double drho_dp =
678 .template dValue<double>(
679 vars,
681 pos, t, dt);
682
683 const double drho_dC =
685 .template dValue<double>(
687 t, dt);
688
689 GlobalDimMatrixType const hydrodynamic_dispersion =
692 pore_diffusion_coefficient, velocity, porosity,
693 solute_dispersivity_transverse,
694 solute_dispersivity_longitudinal);
695
696 const double R_times_phi(retardation_factor * porosity);
697 GlobalDimVectorType const mass_density_flow = velocity * density;
698 auto const N_t_N = (N.transpose() * N).eval();
699
701 {
702 MCp.noalias() += N_t_N * (C_int_pt * R_times_phi * drho_dp * w);
703 MCC.noalias() += N_t_N * (C_int_pt * R_times_phi * drho_dC * w);
704 KCC.noalias() -= dNdx.transpose() * mass_density_flow * N * w;
705 }
706 else
707 {
708 ip_flux_vector.emplace_back(mass_density_flow);
709 average_velocity_norm += velocity.norm();
710 }
711 MCC.noalias() += N_t_N * (R_times_phi * density * w);
712 KCC.noalias() += N_t_N * (decay_rate * R_times_phi * density * w);
713 KCC_Laplacian.noalias() +=
714 dNdx.transpose() * hydrodynamic_dispersion * dNdx * density * w;
715
716 MpC.noalias() += N_t_N * (porosity * drho_dC * w);
717
718 // Calculate Mpp, Kpp, and bp in the first loop over components
719 if (component_id == 0)
720 {
721 Mpp.noalias() += N_t_N * (porosity * drho_dp * w);
722 Kpp.noalias() +=
723 dNdx.transpose() * K_over_mu * dNdx * (density * w);
724
726 {
727 Bp.noalias() += dNdx.transpose() * K_over_mu * b *
728 (density * density * w);
729 }
730 }
731 }
732
734 {
736 typename ShapeFunction::MeshElement>(
738 _ip_data,
740 ip_flux_vector,
741 average_velocity_norm /
742 static_cast<double>(n_integration_points),
743 KCC_Laplacian);
744 }
745
746 KCC.noalias() += KCC_Laplacian;
747 }
std::string getName(std::string const &line)
Returns the name/title from the "Zone"-description.
Phase const & phase(std::size_t index) const
Definition Medium.cpp:33
Component const & component(std::size_t const &index) const
Definition Phase.cpp:33
auto const & NsHigherOrder() const
typename ShapeMatricesType::GlobalDimVectorType GlobalDimVectorType
typename ShapeMatricesType::template MatrixType< pressure_size, pressure_size > LocalBlockMatrixType
typename ShapeMatricesType::GlobalDimMatrixType GlobalDimMatrixType
@ longitudinal_dispersivity
used to compute the hydrodynamic dispersion tensor.
@ transversal_dispersivity
used to compute the hydrodynamic dispersion tensor.
@ retardation_factor
specify retardation factor used in component transport process.
void shapeFunctionInterpolate(const NodalValues &, const ShapeMatrix &)
void assembleAdvectionMatrix(IPData const &ip_data_vector, NumLib::ShapeMatrixCache const &shape_matrix_cache, std::vector< FluxVectorType > const &ip_flux_vector, Eigen::MatrixBase< Derived > &laplacian_matrix)
Eigen::MatrixXd computeHydrodynamicDispersion(NumericalStabilization const &stabilizer, std::size_t const element_id, Eigen::MatrixXd const &pore_diffusion_coefficient, Eigen::VectorXd const &velocity, double const porosity, double const solute_dispersivity_transverse, double const solute_dispersivity_longitudinal)
auto & get(Tuples &... ts)
Definition Get.h:67
auto eval(Function &f, Tuples &... ts) -> typename detail::GetFunctionReturnType< decltype(&Function::eval)>::type
Definition Apply.h:267
NumLib::ShapeMatrixCache shape_matrix_cache
caches for each mesh element type the shape matrix

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_transport_process_variables, NumLib::detail::assembleAdvectionMatrix(), MaterialPropertyLib::Phase::component(), NumLib::computeHydrodynamicDispersion(), MaterialPropertyLib::concentration, MaterialPropertyLib::VariableArray::concentration, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, MaterialPropertyLib::decay_rate, MaterialPropertyLib::density, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), getName(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::has_gravity, MaterialPropertyLib::liquid_phase_pressure, MaterialPropertyLib::VariableArray::liquid_phase_pressure, ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, ProcessLib::ComponentTransport::ComponentTransportProcessData::non_advective_form, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::permeability, MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::pore_diffusion, MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, MaterialPropertyLib::retardation_factor, ParameterLib::SpatialPosition::setElementID(), ParameterLib::SpatialPosition::setIntegrationPoint(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, NumLib::detail::shapeFunctionInterpolate(), ProcessLib::ComponentTransport::ComponentTransportProcessData::stabilizer, MaterialPropertyLib::transversal_dispersivity, and MaterialPropertyLib::viscosity.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assemble().

◆ assembleComponentTransportEquation()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleComponentTransportEquation ( double const t,
double const dt,
Eigen::VectorXd const & local_x,
Eigen::VectorXd const & local_x_prev,
std::vector< double > & local_M_data,
std::vector< double > & local_K_data,
std::vector< double > & ,
int const transport_process_id )
inline

Definition at line 1080 of file ComponentTransportFEM.h.

1085 {
1086 assert(static_cast<int>(local_x.size()) ==
1089 static_cast<int>(_transport_process_variables.size()) +
1091
1092 auto const local_p =
1093 local_x.template segment<pressure_size>(pressure_index);
1094
1095 NodalVectorType local_T = getLocalTemperature(t, local_x);
1096
1097 auto const local_C = local_x.template segment<concentration_size>(
1099 (transport_process_id - (_process_data.isothermal ? 1 : 2)) *
1101 auto const local_p_prev =
1102 local_x_prev.segment<pressure_size>(pressure_index);
1103
1104 auto local_M = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
1105 local_M_data, concentration_size, concentration_size);
1106 auto local_K = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
1107 local_K_data, concentration_size, concentration_size);
1108
1109 LocalBlockMatrixType KCC_Laplacian =
1110 LocalBlockMatrixType::Zero(concentration_size, concentration_size);
1111
1112 unsigned const n_integration_points =
1114
1115 std::vector<GlobalDimVectorType> ip_flux_vector;
1116 double average_velocity_norm = 0.0;
1118 {
1119 ip_flux_vector.reserve(n_integration_points);
1120 }
1121
1124
1125 auto const& b =
1128
1131
1132 auto const& medium =
1134 auto const& phase = medium.phase("AqueousLiquid");
1135 auto const component_id =
1136 transport_process_id - (_process_data.isothermal ? 1 : 2);
1137 auto const& component = phase.component(
1138 _transport_process_variables[component_id].get().getName());
1139
1140 auto const& Ns =
1142 .NsHigherOrder<typename ShapeFunction::MeshElement>();
1143
1144 for (unsigned ip(0); ip < n_integration_points; ++ip)
1145 {
1146 pos.setIntegrationPoint(ip);
1147
1148 auto& ip_data = _ip_data[ip];
1149 auto const& dNdx = ip_data.dNdx;
1150 auto const& w = ip_data.integration_weight;
1151 auto const& N = Ns[ip];
1152 auto& porosity = ip_data.porosity;
1153 auto const& porosity_prev = ip_data.porosity_prev;
1154
1155 double const C_int_pt = N.dot(local_C);
1156 double const p_int_pt = N.dot(local_p);
1157 double const T_int_pt = N.dot(local_T);
1158
1159 vars.concentration = C_int_pt;
1160 vars.liquid_phase_pressure = p_int_pt;
1161 vars.temperature = T_int_pt;
1162
1164 {
1165 vars.temperature = N.dot(local_T);
1166 }
1167
1168 // porosity
1169 {
1170 vars_prev.porosity = porosity_prev;
1171
1172 porosity =
1174 ? porosity_prev
1176 .template value<double>(vars, vars_prev, pos, t,
1177 dt);
1178
1179 vars.porosity = porosity;
1180 }
1181
1182 auto const& retardation_factor =
1184 .template value<double>(vars, pos, t, dt);
1185
1186 auto const& solute_dispersivity_transverse = medium.template value<
1187 double>(
1189 auto const& solute_dispersivity_longitudinal =
1190 medium.template value<double>(
1193
1194 // Use the fluid density model to compute the density
1195 auto const density =
1197 .template value<double>(vars, pos, t, dt);
1198 auto const decay_rate =
1200 .template value<double>(vars, pos, t, dt);
1201
1202 auto const& pore_diffusion_coefficient =
1203 MaterialPropertyLib::formEigenTensor<GlobalDim>(
1205 .value(vars, pos, t, dt));
1206
1207 auto const& K = MaterialPropertyLib::formEigenTensor<GlobalDim>(
1209 vars, pos, t, dt));
1210 // Use the viscosity model to compute the viscosity
1212 .template value<double>(vars, pos, t, dt);
1213
1214 GlobalDimMatrixType const K_over_mu = K / mu;
1215 GlobalDimVectorType const velocity =
1217 ? GlobalDimVectorType(-K_over_mu *
1218 (dNdx * local_p - density * b))
1219 : GlobalDimVectorType(-K_over_mu * dNdx * local_p);
1220
1221 GlobalDimMatrixType const hydrodynamic_dispersion =
1224 pore_diffusion_coefficient, velocity, porosity,
1225 solute_dispersivity_transverse,
1226 solute_dispersivity_longitudinal);
1227
1228 double const R_times_phi = retardation_factor * porosity;
1229 auto const N_t_N = (N.transpose() * N).eval();
1230
1232 {
1233 const double drho_dC =
1235 .template dValue<double>(
1237 pos, t, dt);
1238 local_M.noalias() +=
1239 N_t_N * (R_times_phi * C_int_pt * drho_dC * w);
1240 }
1241
1242 local_M.noalias() += N_t_N * (R_times_phi * density * w);
1243
1244 // coupling term
1246 {
1247 double const p_dot = (p_int_pt - N.dot(local_p_prev)) / dt;
1248
1249 const double drho_dp =
1251 .template dValue<double>(vars,
1254 pos, t, dt);
1255
1256 local_K.noalias() +=
1257 N_t_N * ((R_times_phi * drho_dp * p_dot) * w) -
1258 dNdx.transpose() * velocity * N * (density * w);
1259 }
1260 else
1261 {
1262 ip_flux_vector.emplace_back(velocity * density);
1263 average_velocity_norm += velocity.norm();
1264 }
1265 local_K.noalias() +=
1266 N_t_N * (decay_rate * R_times_phi * density * w);
1267
1268 KCC_Laplacian.noalias() += dNdx.transpose() *
1269 hydrodynamic_dispersion * dNdx *
1270 (density * w);
1271 }
1272
1274 {
1276 typename ShapeFunction::MeshElement>(
1278 _process_data.shape_matrix_cache, ip_flux_vector,
1279 average_velocity_norm /
1280 static_cast<double>(n_integration_points),
1281 KCC_Laplacian);
1282 }
1283 local_K.noalias() += KCC_Laplacian;
1284 }
NodalVectorType getLocalTemperature(double const t, Eigen::VectorXd const &local_x)
typename ShapeMatricesType::NodalVectorType NodalVectorType

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_transport_process_variables, NumLib::detail::assembleAdvectionMatrix(), ProcessLib::ComponentTransport::ComponentTransportProcessData::chemically_induced_porosity_change, MaterialPropertyLib::Phase::component(), NumLib::computeHydrodynamicDispersion(), MaterialPropertyLib::concentration, MaterialPropertyLib::VariableArray::concentration, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, MaterialPropertyLib::decay_rate, MaterialPropertyLib::density, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getLocalTemperature(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::has_gravity, ProcessLib::ComponentTransport::ComponentTransportProcessData::isothermal, MaterialPropertyLib::VariableArray::liquid_phase_pressure, ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, ProcessLib::ComponentTransport::ComponentTransportProcessData::non_advective_form, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::permeability, MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::pore_diffusion, MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_size, ProcessLib::ComponentTransport::ComponentTransportProcessData::projected_specific_body_force_vectors, MaterialPropertyLib::retardation_factor, ParameterLib::SpatialPosition::setElementID(), ParameterLib::SpatialPosition::setIntegrationPoint(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, ProcessLib::ComponentTransport::ComponentTransportProcessData::stabilizer, MaterialPropertyLib::VariableArray::temperature, ProcessLib::ComponentTransport::ComponentTransportProcessData::temperature, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::temperature_size, MaterialPropertyLib::transversal_dispersivity, and MaterialPropertyLib::viscosity.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleForStaggeredScheme().

◆ assembleForStaggeredScheme()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleForStaggeredScheme ( double const t,
double const dt,
Eigen::VectorXd const & local_x,
Eigen::VectorXd const & local_x_prev,
int const process_id,
std::vector< double > & local_M_data,
std::vector< double > & local_K_data,
std::vector< double > & local_b_data )
inlineoverridevirtual

Reimplemented from ProcessLib::LocalAssemblerInterface.

Definition at line 796 of file ComponentTransportFEM.h.

803 {
804 if (process_id == _process_data.hydraulic_process_id)
805 {
806 assembleHydraulicEquation(t, dt, local_x, local_x_prev,
807 local_M_data, local_K_data, local_b_data);
808 }
809 else if (process_id == _process_data.thermal_process_id)
810 {
811 assembleHeatTransportEquation(t, dt, local_x, local_x_prev,
812 local_M_data, local_K_data,
813 local_b_data);
814 }
815 else
816 {
817 // Go for assembling in an order of transport process id.
818 assembleComponentTransportEquation(t, dt, local_x, local_x_prev,
819 local_M_data, local_K_data,
820 local_b_data, process_id);
821 }
822 }
void assembleHeatTransportEquation(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &)
void assembleHydraulicEquation(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data)
void assembleComponentTransportEquation(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &, int const transport_process_id)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHeatTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHydraulicEquation(), ProcessLib::ComponentTransport::ComponentTransportProcessData::hydraulic_process_id, and ProcessLib::ComponentTransport::ComponentTransportProcessData::thermal_process_id.

◆ assembleHeatTransportEquation()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHeatTransportEquation ( double const t,
double const dt,
Eigen::VectorXd const & local_x,
Eigen::VectorXd const & ,
std::vector< double > & local_M_data,
std::vector< double > & local_K_data,
std::vector< double > &  )
inline

Definition at line 952 of file ComponentTransportFEM.h.

958 {
959 assert(local_x.size() ==
961
962 auto const local_p =
963 local_x.template segment<pressure_size>(pressure_index);
964 auto const local_T =
965 local_x.template segment<temperature_size>(temperature_index);
966
967 auto local_M = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
968 local_M_data, temperature_size, temperature_size);
969 auto local_K = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
970 local_K_data, temperature_size, temperature_size);
971
973 pos.setElementID(this->_element.getID());
974
975 auto const& process_data = this->_process_data;
976 auto const& medium =
977 *process_data.media_map.getMedium(this->_element.getID());
978 auto const& liquid_phase = medium.phase("AqueousLiquid");
979
980 auto const& b =
983
985
986 unsigned const n_integration_points =
988
989 std::vector<GlobalDimVectorType> ip_flux_vector;
990 double average_velocity_norm = 0.0;
991 ip_flux_vector.reserve(n_integration_points);
992
993 auto const& Ns =
995 .NsHigherOrder<typename ShapeFunction::MeshElement>();
996
997 for (unsigned ip(0); ip < n_integration_points; ip++)
998 {
999 pos.setIntegrationPoint(ip);
1000
1001 auto const& ip_data = this->_ip_data[ip];
1002 auto const& dNdx = ip_data.dNdx;
1003 auto const& w = ip_data.integration_weight;
1004 auto const& N = Ns[ip];
1005
1006 double p_at_xi = 0.;
1007 NumLib::shapeFunctionInterpolate(local_p, N, p_at_xi);
1008 double T_at_xi = 0.;
1009 NumLib::shapeFunctionInterpolate(local_T, N, T_at_xi);
1010
1011 vars.temperature = T_at_xi;
1012 vars.liquid_phase_pressure = p_at_xi;
1013
1014 vars.liquid_saturation = 1.0;
1015
1016 auto const porosity =
1018 .template value<double>(vars, pos, t, dt);
1019 vars.porosity = porosity;
1020
1021 // Use the fluid density model to compute the density
1022 auto const fluid_density =
1023 liquid_phase
1025 .template value<double>(vars, pos, t, dt);
1026 vars.density = fluid_density;
1027 auto const specific_heat_capacity_fluid =
1028 liquid_phase
1030 .template value<double>(vars, pos, t, dt);
1031
1032 // Assemble mass matrix
1033 local_M.noalias() += w *
1035 vars, porosity, fluid_density,
1036 specific_heat_capacity_fluid, pos, t, dt) *
1037 N.transpose() * N;
1038
1039 // Assemble Laplace matrix
1040 auto const viscosity =
1041 liquid_phase
1043 .template value<double>(vars, pos, t, dt);
1044
1045 auto const intrinsic_permeability =
1046 MaterialPropertyLib::formEigenTensor<GlobalDim>(
1047 medium
1048 .property(
1050 .value(vars, pos, t, dt));
1051
1052 GlobalDimMatrixType const K_over_mu =
1053 intrinsic_permeability / viscosity;
1054 GlobalDimVectorType const velocity =
1055 process_data.has_gravity
1056 ? GlobalDimVectorType(-K_over_mu *
1057 (dNdx * local_p - fluid_density * b))
1058 : GlobalDimVectorType(-K_over_mu * dNdx * local_p);
1059
1060 GlobalDimMatrixType const thermal_conductivity_dispersivity =
1062 vars, fluid_density, specific_heat_capacity_fluid, velocity,
1063 pos, t, dt);
1064
1065 local_K.noalias() +=
1066 w * dNdx.transpose() * thermal_conductivity_dispersivity * dNdx;
1067
1068 ip_flux_vector.emplace_back(velocity * fluid_density *
1069 specific_heat_capacity_fluid);
1070 average_velocity_norm += velocity.norm();
1071 }
1072
1073 NumLib::assembleAdvectionMatrix<typename ShapeFunction::MeshElement>(
1074 process_data.stabilizer, this->_ip_data,
1075 _process_data.shape_matrix_cache, ip_flux_vector,
1076 average_velocity_norm / static_cast<double>(n_integration_points),
1077 local_K);
1078 }
GlobalDimMatrixType getThermalConductivityDispersivity(MaterialPropertyLib::VariableArray const &vars, const double fluid_density, const double specific_heat_capacity_fluid, const GlobalDimVectorType &velocity, ParameterLib::SpatialPosition const &pos, double const t, double const dt)
double getHeatEnergyCoefficient(MaterialPropertyLib::VariableArray const &vars, const double porosity, const double fluid_density, const double specific_heat_capacity_fluid, ParameterLib::SpatialPosition const &pos, double const t, double const dt)
double fluid_density(const double p, const double T, const double x)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, MaterialPropertyLib::density, MaterialPropertyLib::VariableArray::density, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getHeatEnergyCoefficient(), MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getThermalConductivityDispersivity(), MaterialPropertyLib::VariableArray::liquid_phase_pressure, MaterialPropertyLib::VariableArray::liquid_saturation, ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::permeability, MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_size, ProcessLib::ComponentTransport::ComponentTransportProcessData::projected_specific_body_force_vectors, ParameterLib::SpatialPosition::setElementID(), ParameterLib::SpatialPosition::setIntegrationPoint(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, NumLib::detail::shapeFunctionInterpolate(), MaterialPropertyLib::specific_heat_capacity, MaterialPropertyLib::VariableArray::temperature, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::temperature_index, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::temperature_size, and MaterialPropertyLib::viscosity.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleForStaggeredScheme().

◆ assembleHydraulicEquation()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHydraulicEquation ( double const t,
double const dt,
Eigen::VectorXd const & local_x,
Eigen::VectorXd const & local_x_prev,
std::vector< double > & local_M_data,
std::vector< double > & local_K_data,
std::vector< double > & local_b_data )
inline

Definition at line 824 of file ComponentTransportFEM.h.

831 {
832 auto const local_p =
833 local_x.template segment<pressure_size>(pressure_index);
834 auto const local_C = local_x.template segment<concentration_size>(
836 auto const local_C_prev =
837 local_x_prev.segment<concentration_size>(first_concentration_index);
838
839 NodalVectorType local_T = getLocalTemperature(t, local_x);
840
841 auto local_M = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
842 local_M_data, pressure_size, pressure_size);
843 auto local_K = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
844 local_K_data, pressure_size, pressure_size);
845 auto local_b = MathLib::createZeroedVector<LocalSegmentVectorType>(
846 local_b_data, pressure_size);
847
848 unsigned const n_integration_points =
850
853
854 auto const& b =
857
858 auto const& medium =
860 auto const& phase = medium.phase("AqueousLiquid");
861
864
865 auto const& Ns =
867 .NsHigherOrder<typename ShapeFunction::MeshElement>();
868
869 for (unsigned ip(0); ip < n_integration_points; ++ip)
870 {
871 pos.setIntegrationPoint(ip);
872
873 auto& ip_data = _ip_data[ip];
874 auto const& dNdx = ip_data.dNdx;
875 auto const& w = ip_data.integration_weight;
876 auto const& N = Ns[ip];
877 auto& porosity = ip_data.porosity;
878 auto const& porosity_prev = ip_data.porosity_prev;
879
880 double const C_int_pt = N.dot(local_C);
881 double const p_int_pt = N.dot(local_p);
882 double const T_int_pt = N.dot(local_T);
883
884 vars.concentration = C_int_pt;
885 vars.liquid_phase_pressure = p_int_pt;
886 vars.temperature = T_int_pt;
887
888 // porosity
889 {
890 vars_prev.porosity = porosity_prev;
891
892 porosity =
894 ? porosity_prev
896 .template value<double>(vars, vars_prev, pos, t,
897 dt);
898
899 vars.porosity = porosity;
900 }
901
902 // Use the fluid density model to compute the density
903 // TODO: Concentration of which component as one of arguments for
904 // calculation of fluid density
905 auto const density =
907 .template value<double>(vars, pos, t, dt);
908
909 auto const& K = MaterialPropertyLib::formEigenTensor<GlobalDim>(
911 vars, pos, t, dt));
912
913 // Use the viscosity model to compute the viscosity
915 .template value<double>(vars, pos, t, dt);
916
917 GlobalDimMatrixType const K_over_mu = K / mu;
918
919 const double drho_dp =
921 .template dValue<double>(
922 vars,
924 pos, t, dt);
925 const double drho_dC =
927 .template dValue<double>(
929 t, dt);
930
931 // matrix assembly
932 local_M.noalias() += w * N.transpose() * porosity * drho_dp * N;
933 local_K.noalias() +=
934 w * dNdx.transpose() * density * K_over_mu * dNdx;
935
937 {
938 local_b.noalias() +=
939 w * density * density * dNdx.transpose() * K_over_mu * b;
940 }
941
942 // coupling term
943 {
944 double const C_dot = (C_int_pt - N.dot(local_C_prev)) / dt;
945
946 local_b.noalias() -=
947 w * N.transpose() * porosity * drho_dC * C_dot;
948 }
949 }
950 }

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemically_induced_porosity_change, MaterialPropertyLib::concentration, MaterialPropertyLib::VariableArray::concentration, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, MaterialPropertyLib::density, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getLocalTemperature(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::has_gravity, MaterialPropertyLib::liquid_phase_pressure, MaterialPropertyLib::VariableArray::liquid_phase_pressure, ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::permeability, MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_size, ProcessLib::ComponentTransport::ComponentTransportProcessData::projected_specific_body_force_vectors, ParameterLib::SpatialPosition::setElementID(), ParameterLib::SpatialPosition::setIntegrationPoint(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, MaterialPropertyLib::VariableArray::temperature, and MaterialPropertyLib::viscosity.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleForStaggeredScheme().

◆ assembleKCmCn()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleKCmCn ( int const component_id,
double const t,
double const dt,
Eigen::Ref< LocalBlockMatrixType > KCmCn,
double const stoichiometric_coefficient,
double const kinetic_prefactor )
inline

Definition at line 749 of file ComponentTransportFEM.h.

753 {
754 unsigned const n_integration_points =
756
759
761
762 auto const& medium =
764 auto const& phase = medium.phase("AqueousLiquid");
765 auto const& component = phase.component(
766 _transport_process_variables[component_id].get().getName());
767
768 auto const& Ns =
770 .NsHigherOrder<typename ShapeFunction::MeshElement>();
771
772 for (unsigned ip(0); ip < n_integration_points; ++ip)
773 {
774 auto& ip_data = _ip_data[ip];
775 auto const& w = ip_data.integration_weight;
776 auto const& N = Ns[ip];
777 auto& porosity = ip_data.porosity;
778
779 auto const retardation_factor =
781 .template value<double>(vars, pos, t, dt);
782
784 .template value<double>(vars, pos, t, dt);
785
786 auto const density =
788 .template value<double>(vars, pos, t, dt);
789
790 KCmCn.noalias() -= w * N.transpose() * stoichiometric_coefficient *
791 kinetic_prefactor * retardation_factor *
792 porosity * density * N;
793 }
794 }

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_transport_process_variables, MaterialPropertyLib::Phase::component(), MaterialPropertyLib::density, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), getName(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::porosity, MaterialPropertyLib::retardation_factor, ParameterLib::SpatialPosition::setElementID(), and ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assemble().

◆ assembleReactionEquationConcrete()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleReactionEquationConcrete ( double const t,
double const dt,
Eigen::VectorXd const & local_x,
std::vector< double > & local_M_data,
std::vector< double > & local_K_data,
std::vector< double > & local_b_data,
int const transport_process_id )
inlineoverridevirtual

Implements ProcessLib::ComponentTransport::ComponentTransportLocalAssemblerInterface.

Definition at line 1567 of file ComponentTransportFEM.h.

1572 {
1573 auto const local_C = local_x.template segment<concentration_size>(
1575 (transport_process_id - 1) * concentration_size);
1576
1577 auto local_M = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
1578 local_M_data, concentration_size, concentration_size);
1579 auto local_K = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
1580 local_K_data, concentration_size, concentration_size);
1581 auto local_b = MathLib::createZeroedVector<LocalVectorType>(
1582 local_b_data, concentration_size);
1583
1584 unsigned const n_integration_points =
1586
1589
1592
1593 auto const& medium =
1595 auto const component_id = transport_process_id - 1;
1596
1597 auto const& Ns =
1599 .NsHigherOrder<typename ShapeFunction::MeshElement>();
1600
1601 for (unsigned ip(0); ip < n_integration_points; ++ip)
1602 {
1603 pos.setIntegrationPoint(ip);
1604
1605 auto& ip_data = _ip_data[ip];
1606 auto const w = ip_data.integration_weight;
1607 auto const& N = Ns[ip];
1608 auto& porosity = ip_data.porosity;
1609 auto const& porosity_prev = ip_data.porosity_prev;
1610 auto const chemical_system_id = ip_data.chemical_system_id;
1611
1612 double C_int_pt = 0.0;
1613 NumLib::shapeFunctionInterpolate(local_C, N, C_int_pt);
1614
1615 vars.concentration = C_int_pt;
1616
1617 auto const porosity_dot = (porosity - porosity_prev) / dt;
1618
1619 // porosity
1620 {
1621 vars_prev.porosity = porosity_prev;
1622
1623 porosity =
1625 ? porosity_prev
1627 .template value<double>(vars, vars_prev, pos, t,
1628 dt);
1629 }
1630
1631 local_M.noalias() += w * N.transpose() * porosity * N;
1632
1633 local_K.noalias() += w * N.transpose() * porosity_dot * N;
1634
1635 if (chemical_system_id == -1)
1636 {
1637 continue;
1638 }
1639
1640 auto const C_post_int_pt =
1642 component_id, chemical_system_id);
1643
1644 local_b.noalias() +=
1645 w * N.transpose() * porosity * (C_post_int_pt - C_int_pt) / dt;
1646 }
1647 }
virtual double getConcentration(int const, GlobalIndexType const) const

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemical_solver_interface, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemically_induced_porosity_change, MaterialPropertyLib::VariableArray::concentration, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, ChemistryLib::ChemicalSolverInterface::getConcentration(), MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, ParameterLib::SpatialPosition::setElementID(), ParameterLib::SpatialPosition::setIntegrationPoint(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, and NumLib::detail::shapeFunctionInterpolate().

◆ assembleWithJacobianComponentTransportEquation()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianComponentTransportEquation ( double const t,
double const dt,
Eigen::VectorXd const & local_x,
Eigen::VectorXd const & local_x_prev,
std::vector< double > & local_b_data,
std::vector< double > & local_Jac_data,
int const component_id )
inline

Definition at line 1417 of file ComponentTransportFEM.h.

1421 {
1422 auto const concentration_index =
1424
1425 auto const p = local_x.template segment<pressure_size>(pressure_index);
1426 auto const c =
1427 local_x.template segment<concentration_size>(concentration_index);
1428 auto const c_prev =
1429 local_x_prev.segment<concentration_size>(concentration_index);
1430
1433 {
1435 }
1436
1437 auto local_Jac = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
1438 local_Jac_data, concentration_size, concentration_size);
1439 auto local_rhs = MathLib::createZeroedVector<LocalSegmentVectorType>(
1440 local_b_data, concentration_size);
1441
1442 LocalBlockMatrixType KCC_Laplacian =
1443 LocalBlockMatrixType::Zero(concentration_size, concentration_size);
1444
1445 unsigned const n_integration_points =
1447
1448 std::vector<GlobalDimVectorType> ip_flux_vector;
1449 double average_velocity_norm = 0.0;
1450 ip_flux_vector.reserve(n_integration_points);
1451
1454
1455 auto const& b =
1458
1461
1462 auto const& medium =
1464 auto const& phase = medium.phase("AqueousLiquid");
1465 auto const& component = phase.component(
1466 _transport_process_variables[component_id].get().getName());
1467
1468 auto const& Ns =
1470 .NsHigherOrder<typename ShapeFunction::MeshElement>();
1471
1472 for (unsigned ip(0); ip < n_integration_points; ++ip)
1473 {
1474 pos.setIntegrationPoint(ip);
1475
1476 auto& ip_data = _ip_data[ip];
1477 auto const& dNdx = ip_data.dNdx;
1478 auto const& w = ip_data.integration_weight;
1479 auto const& N = Ns[ip];
1480 auto& phi = ip_data.porosity;
1481 auto const& phi_prev = ip_data.porosity_prev;
1482
1483 double const p_ip = N.dot(p);
1484 double const c_ip = N.dot(c);
1485
1486 vars.liquid_phase_pressure = p_ip;
1487 vars.concentration = c_ip;
1488
1490 {
1491 vars.temperature = N.dot(T);
1492 }
1493
1494 // porosity
1495 {
1496 vars_prev.porosity = phi_prev;
1497
1499 ? phi_prev
1501 .template value<double>(vars, vars_prev, pos, t,
1502 dt);
1503
1504 vars.porosity = phi;
1505 }
1506
1507 auto const R =
1509 .template value<double>(vars, pos, t, dt);
1510
1511 auto const alpha_T = medium.template value<double>(
1513 auto const alpha_L = medium.template value<double>(
1515
1517 .template value<double>(vars, pos, t, dt);
1518 // first-order decay constant
1519 auto const alpha =
1521 .template value<double>(vars, pos, t, dt);
1522
1523 auto const Dp = MaterialPropertyLib::formEigenTensor<GlobalDim>(
1525 .value(vars, pos, t, dt));
1526
1527 auto const k = MaterialPropertyLib::formEigenTensor<GlobalDim>(
1529 vars, pos, t, dt));
1531 .template value<double>(vars, pos, t, dt);
1532 // Darcy flux
1533 GlobalDimVectorType const q =
1535 ? GlobalDimVectorType(-k / mu * (dNdx * p - rho * b))
1536 : GlobalDimVectorType(-k / mu * dNdx * p);
1537
1539 _process_data.stabilizer, _element.getID(), Dp, q, phi, alpha_T,
1540 alpha_L);
1541
1542 // matrix assembly
1543 local_Jac.noalias() +=
1544 w * rho * N.transpose() * phi * R * (alpha + 1 / dt) * N;
1545
1546 KCC_Laplacian.noalias() += w * rho * dNdx.transpose() * D * dNdx;
1547
1548 auto const cdot = (c - c_prev) / dt;
1549 local_rhs.noalias() -=
1550 w * rho * N.transpose() * phi * R * N * (cdot + alpha * c);
1551
1552 ip_flux_vector.emplace_back(q * rho);
1553 average_velocity_norm += q.norm();
1554 }
1555
1556 NumLib::assembleAdvectionMatrix<typename ShapeFunction::MeshElement>(
1558 _process_data.shape_matrix_cache, ip_flux_vector,
1559 average_velocity_norm / static_cast<double>(n_integration_points),
1560 KCC_Laplacian);
1561
1562 local_rhs.noalias() -= KCC_Laplacian * c;
1563
1564 local_Jac.noalias() += KCC_Laplacian;
1565 }
@ rho
density. For some models, rho substitutes p
virtual Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > getNodalValuesOnElement(MeshLib::Element const &element, double const t) const
Returns a matrix of values for all nodes of the given element.
Definition Parameter.h:164

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_transport_process_variables, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemically_induced_porosity_change, MaterialPropertyLib::Phase::component(), NumLib::computeHydrodynamicDispersion(), MaterialPropertyLib::VariableArray::concentration, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, MaterialPropertyLib::decay_rate, MaterialPropertyLib::density, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), getName(), ParameterLib::Parameter< T >::getNodalValuesOnElement(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::has_gravity, MaterialPropertyLib::VariableArray::liquid_phase_pressure, MaterialPropertyLib::longitudinal_dispersivity, ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::permeability, MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::pore_diffusion, MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, ProcessLib::ComponentTransport::ComponentTransportProcessData::projected_specific_body_force_vectors, MaterialPropertyLib::retardation_factor, ParameterLib::SpatialPosition::setElementID(), ParameterLib::SpatialPosition::setIntegrationPoint(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, ProcessLib::ComponentTransport::ComponentTransportProcessData::stabilizer, MaterialPropertyLib::VariableArray::temperature, ProcessLib::ComponentTransport::ComponentTransportProcessData::temperature, MaterialPropertyLib::transversal_dispersivity, and MaterialPropertyLib::viscosity.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianForStaggeredScheme().

◆ assembleWithJacobianForStaggeredScheme()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianForStaggeredScheme ( double const t,
double const dt,
Eigen::VectorXd const & local_x,
Eigen::VectorXd const & local_x_prev,
int const process_id,
std::vector< double > & ,
std::vector< double > & ,
std::vector< double > & local_b_data,
std::vector< double > & local_Jac_data )
inlineoverridevirtual

Reimplemented from ProcessLib::LocalAssemblerInterface.

Definition at line 1286 of file ComponentTransportFEM.h.

1293 {
1294 if (process_id == _process_data.hydraulic_process_id)
1295 {
1296 assembleWithJacobianHydraulicEquation(t, dt, local_x, local_x_prev,
1297 local_b_data, local_Jac_data);
1298 }
1299 else
1300 {
1301 int const component_id = process_id - 1;
1303 t, dt, local_x, local_x_prev, local_b_data, local_Jac_data,
1304 component_id);
1305 }
1306 }
void assembleWithJacobianHydraulicEquation(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data)
void assembleWithJacobianComponentTransportEquation(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data, int const component_id)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianHydraulicEquation(), and ProcessLib::ComponentTransport::ComponentTransportProcessData::hydraulic_process_id.

◆ assembleWithJacobianHydraulicEquation()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianHydraulicEquation ( double const t,
double const dt,
Eigen::VectorXd const & local_x,
Eigen::VectorXd const & local_x_prev,
std::vector< double > & local_b_data,
std::vector< double > & local_Jac_data )
inline

Definition at line 1308 of file ComponentTransportFEM.h.

1312 {
1313 auto const p = local_x.template segment<pressure_size>(pressure_index);
1314 auto const c = local_x.template segment<concentration_size>(
1316
1317 auto const p_prev = local_x_prev.segment<pressure_size>(pressure_index);
1318 auto const c_prev =
1319 local_x_prev.segment<concentration_size>(first_concentration_index);
1320
1321 auto local_Jac = MathLib::createZeroedMatrix<LocalBlockMatrixType>(
1322 local_Jac_data, pressure_size, pressure_size);
1323 auto local_rhs = MathLib::createZeroedVector<LocalSegmentVectorType>(
1324 local_b_data, pressure_size);
1325
1326 unsigned const n_integration_points =
1328
1331 auto const& b =
1334
1335 auto const& medium =
1337 auto const& phase = medium.phase("AqueousLiquid");
1338
1341
1342 auto const& Ns =
1344 .NsHigherOrder<typename ShapeFunction::MeshElement>();
1345
1346 for (unsigned ip(0); ip < n_integration_points; ++ip)
1347 {
1348 pos.setIntegrationPoint(ip);
1349
1350 auto& ip_data = _ip_data[ip];
1351 auto const& dNdx = ip_data.dNdx;
1352 auto const& w = ip_data.integration_weight;
1353 auto const& N = Ns[ip];
1354 auto& phi = ip_data.porosity;
1355 auto const& phi_prev = ip_data.porosity_prev;
1356
1357 double const p_ip = N.dot(p);
1358 double const c_ip = N.dot(c);
1359
1360 double const cdot_ip = (c_ip - N.dot(c_prev)) / dt;
1361
1362 vars.liquid_phase_pressure = p_ip;
1363 vars.concentration = c_ip;
1364
1365 // porosity
1366 {
1367 vars_prev.porosity = phi_prev;
1368
1370 ? phi_prev
1372 .template value<double>(vars, vars_prev, pos, t,
1373 dt);
1374
1375 vars.porosity = phi;
1376 }
1377
1379 .template value<double>(vars, pos, t, dt);
1380
1381 auto const k = MaterialPropertyLib::formEigenTensor<GlobalDim>(
1383 vars, pos, t, dt));
1384
1386 .template value<double>(vars, pos, t, dt);
1387
1388 auto const drho_dp =
1390 .template dValue<double>(
1391 vars,
1393 pos, t, dt);
1394 auto const drho_dc =
1396 .template dValue<double>(
1398 t, dt);
1399
1400 // matrix assembly
1401 local_Jac.noalias() += w * N.transpose() * phi * drho_dp / dt * N +
1402 w * dNdx.transpose() * rho * k / mu * dNdx;
1403
1404 local_rhs.noalias() -=
1405 w * N.transpose() * phi *
1406 (drho_dp * N * p_prev + drho_dc * cdot_ip) +
1407 w * rho * dNdx.transpose() * k / mu * dNdx * p;
1408
1410 {
1411 local_rhs.noalias() +=
1412 w * rho * dNdx.transpose() * k / mu * rho * b;
1413 }
1414 }
1415 }

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemically_induced_porosity_change, MaterialPropertyLib::concentration, MaterialPropertyLib::VariableArray::concentration, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, MaterialPropertyLib::density, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::has_gravity, MaterialPropertyLib::liquid_phase_pressure, MaterialPropertyLib::VariableArray::liquid_phase_pressure, ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::permeability, MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_size, ProcessLib::ComponentTransport::ComponentTransportProcessData::projected_specific_body_force_vectors, ParameterLib::SpatialPosition::setElementID(), ParameterLib::SpatialPosition::setIntegrationPoint(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, and MaterialPropertyLib::viscosity.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianForStaggeredScheme().

◆ calculateIntPtDarcyVelocity()

template<typename ShapeFunction , int GlobalDim>
std::vector< double > const & ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::calculateIntPtDarcyVelocity ( const double t,
Eigen::Ref< const NodalVectorType > const & p_nodal_values,
Eigen::Ref< const NodalVectorType > const & C_nodal_values,
std::vector< double > & cache ) const
inline

Definition at line 1691 of file ComponentTransportFEM.h.

1696 {
1697 auto const n_integration_points =
1699
1700 cache.clear();
1701 auto cache_mat = MathLib::createZeroedMatrix<
1702 Eigen::Matrix<double, GlobalDim, Eigen::Dynamic, Eigen::RowMajor>>(
1703 cache, GlobalDim, n_integration_points);
1704
1707
1708 auto const& b =
1711
1713
1714 auto const& medium =
1716 auto const& phase = medium.phase("AqueousLiquid");
1717
1718 auto const& Ns =
1720 .NsHigherOrder<typename ShapeFunction::MeshElement>();
1721
1722 for (unsigned ip = 0; ip < n_integration_points; ++ip)
1723 {
1724 auto const& ip_data = _ip_data[ip];
1725 auto const& dNdx = ip_data.dNdx;
1726 auto const& N = Ns[ip];
1727 auto const& porosity = ip_data.porosity;
1728
1729 pos.setIntegrationPoint(ip);
1730
1731 double C_int_pt = 0.0;
1732 double p_int_pt = 0.0;
1733
1734 NumLib::shapeFunctionInterpolate(C_nodal_values, N, C_int_pt);
1735 NumLib::shapeFunctionInterpolate(p_nodal_values, N, p_int_pt);
1736
1737 vars.concentration = C_int_pt;
1738 vars.liquid_phase_pressure = p_int_pt;
1739 vars.porosity = porosity;
1740
1741 // TODO (naumov) Temporary value not used by current material
1742 // models. Need extension of secondary variables interface.
1743 double const dt = std::numeric_limits<double>::quiet_NaN();
1744 auto const& K = MaterialPropertyLib::formEigenTensor<GlobalDim>(
1746 vars, pos, t, dt));
1748 .template value<double>(vars, pos, t, dt);
1749 GlobalDimMatrixType const K_over_mu = K / mu;
1750
1751 cache_mat.col(ip).noalias() = -K_over_mu * dNdx * p_nodal_values;
1753 {
1754 auto const rho_w =
1756 .template value<double>(vars, pos, t, dt);
1757 // here it is assumed that the vector b is directed 'downwards'
1758 cache_mat.col(ip).noalias() += K_over_mu * rho_w * b;
1759 }
1760 }
1761
1762 return cache;
1763 }
Eigen::Map< Matrix > createZeroedMatrix(std::vector< double > &data, Eigen::MatrixXd::Index rows, Eigen::MatrixXd::Index cols)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, MaterialPropertyLib::VariableArray::concentration, MathLib::createZeroedMatrix(), MaterialPropertyLib::density, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::has_gravity, MaterialPropertyLib::VariableArray::liquid_phase_pressure, ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::permeability, MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::VariableArray::porosity, ProcessLib::ComponentTransport::ComponentTransportProcessData::projected_specific_body_force_vectors, ParameterLib::SpatialPosition::setElementID(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, NumLib::detail::shapeFunctionInterpolate(), and MaterialPropertyLib::viscosity.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::computeSecondaryVariableConcrete(), and ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getIntPtDarcyVelocity().

◆ computeReactionRelatedSecondaryVariable()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::computeReactionRelatedSecondaryVariable ( std::size_t const ele_id)
inlineoverridevirtual

Implements ProcessLib::ComponentTransport::ComponentTransportLocalAssemblerInterface.

Definition at line 1863 of file ComponentTransportFEM.h.

1865 {
1866 auto const n_integration_points =
1868
1870 {
1871 auto const& medium = *_process_data.media_map.getMedium(ele_id);
1872
1873 for (auto& ip_data : _ip_data)
1874 {
1875 ip_data.porosity = ip_data.porosity_prev;
1876
1878 ->updatePorosityPostReaction(ip_data.chemical_system_id,
1879 medium, ip_data.porosity);
1880 }
1881
1883 std::accumulate(_ip_data.begin(), _ip_data.end(), 0.,
1884 [](double const s, auto const& ip)
1885 { return s + ip.porosity; }) /
1886 n_integration_points;
1887 }
1888
1889 std::vector<GlobalIndexType> chemical_system_indices;
1890 chemical_system_indices.reserve(n_integration_points);
1891 std::transform(_ip_data.begin(), _ip_data.end(),
1892 std::back_inserter(chemical_system_indices),
1893 [](auto const& ip_data)
1894 { return ip_data.chemical_system_id; });
1895
1897 ele_id, chemical_system_indices);
1898 }
virtual void updatePorosityPostReaction(GlobalIndexType const &, MaterialPropertyLib::Medium const &, double &)
virtual void computeSecondaryVariable(std::size_t const, std::vector< GlobalIndexType > const &)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemical_solver_interface, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemically_induced_porosity_change, ChemistryLib::ChemicalSolverInterface::computeSecondaryVariable(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, ProcessLib::ComponentTransport::ComponentTransportProcessData::mesh_prop_porosity, and ChemistryLib::ChemicalSolverInterface::updatePorosityPostReaction().

◆ computeSecondaryVariableConcrete()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::computeSecondaryVariableConcrete ( double const t,
double const ,
Eigen::VectorXd const & local_x,
Eigen::VectorXd const &  )
inlineoverridevirtual

Reimplemented from ProcessLib::LocalAssemblerInterface.

Definition at line 1837 of file ComponentTransportFEM.h.

1842 {
1843 auto const local_p =
1844 local_x.template segment<pressure_size>(pressure_index);
1845 auto const local_C = local_x.template segment<concentration_size>(
1847
1848 std::vector<double> ele_velocity;
1849 calculateIntPtDarcyVelocity(t, local_p, local_C, ele_velocity);
1850
1851 auto const n_integration_points =
1853 auto const ele_velocity_mat =
1854 MathLib::toMatrix(ele_velocity, GlobalDim, n_integration_points);
1855
1856 auto const ele_id = _element.getID();
1857 Eigen::Map<LocalVectorType>(
1858 &(*_process_data.mesh_prop_velocity)[ele_id * GlobalDim],
1859 GlobalDim) =
1860 ele_velocity_mat.rowwise().sum() / n_integration_points;
1861 }
std::vector< double > const & calculateIntPtDarcyVelocity(const double t, Eigen::Ref< const NodalVectorType > const &p_nodal_values, Eigen::Ref< const NodalVectorType > const &C_nodal_values, std::vector< double > &cache) const
Eigen::Map< const Matrix > toMatrix(std::vector< double > const &data, Eigen::MatrixXd::Index rows, Eigen::MatrixXd::Index cols)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::calculateIntPtDarcyVelocity(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::mesh_prop_velocity, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, and MathLib::toMatrix().

◆ getFlux()

template<typename ShapeFunction , int GlobalDim>
Eigen::Vector3d ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getFlux ( MathLib::Point3d const & ,
double const ,
std::vector< double > const &  ) const
inlineoverridevirtual

Computes the flux in the point p_local_coords that is given in local coordinates using the values from local_x. Fits to monolithic scheme.

Reimplemented from ProcessLib::LocalAssemblerInterface.

Definition at line 1775 of file ComponentTransportFEM.h.

1778 {
1779 auto const local_p = Eigen::Map<const NodalVectorType>(
1780 &local_x[pressure_index], pressure_size);
1781 auto const local_C = Eigen::Map<const NodalVectorType>(
1783
1784 // Eval shape matrices at given point
1785 // Note: Axial symmetry is set to false here, because we only need dNdx
1786 // here, which is not affected by axial symmetry.
1787 auto const shape_matrices =
1789 GlobalDim>(
1790 _element, false /*is_axially_symmetric*/,
1791 std::array{pnt_local_coords})[0];
1792
1795 auto const& b =
1798
1800
1801 auto const& medium =
1803 auto const& phase = medium.phase("AqueousLiquid");
1804
1805 // local_x contains the local concentration and pressure values
1806 double c_int_pt;
1807 NumLib::shapeFunctionInterpolate(local_C, shape_matrices.N, c_int_pt);
1808 vars.concentration = c_int_pt;
1809
1810 double p_int_pt;
1811 NumLib::shapeFunctionInterpolate(local_p, shape_matrices.N, p_int_pt);
1812 vars.liquid_phase_pressure = p_int_pt;
1813
1814 // TODO (naumov) Temporary value not used by current material models.
1815 // Need extension of secondary variables interface.
1816 double const dt = std::numeric_limits<double>::quiet_NaN();
1817 auto const K = MaterialPropertyLib::formEigenTensor<GlobalDim>(
1819 vars, pos, t, dt));
1820
1822 .template value<double>(vars, pos, t, dt);
1823 GlobalDimMatrixType const K_over_mu = K / mu;
1824
1825 GlobalDimVectorType q = -K_over_mu * shape_matrices.dNdx * local_p;
1826 auto const rho_w = phase[MaterialPropertyLib::PropertyType::density]
1827 .template value<double>(vars, pos, t, dt);
1829 {
1830 q += K_over_mu * rho_w * b;
1831 }
1832 Eigen::Vector3d flux(0.0, 0.0, 0.0);
1833 flux.head<GlobalDim>() = rho_w * q;
1834 return flux;
1835 }
std::vector< typename ShapeMatricesType::ShapeMatrices, Eigen::aligned_allocator< typename ShapeMatricesType::ShapeMatrices > > computeShapeMatrices(MeshLib::Element const &e, bool const is_axially_symmetric, PointContainer const &points)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, NumLib::computeShapeMatrices(), MaterialPropertyLib::VariableArray::concentration, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, MaterialPropertyLib::density, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), ProcessLib::ComponentTransport::ComponentTransportProcessData::has_gravity, MaterialPropertyLib::VariableArray::liquid_phase_pressure, ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, MaterialPropertyLib::permeability, MaterialPropertyLib::Medium::phase(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_size, ProcessLib::ComponentTransport::ComponentTransportProcessData::projected_specific_body_force_vectors, ParameterLib::SpatialPosition::setElementID(), NumLib::detail::shapeFunctionInterpolate(), and MaterialPropertyLib::viscosity.

◆ getHeatEnergyCoefficient()

template<typename ShapeFunction , int GlobalDim>
double ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getHeatEnergyCoefficient ( MaterialPropertyLib::VariableArray const & vars,
const double porosity,
const double fluid_density,
const double specific_heat_capacity_fluid,
ParameterLib::SpatialPosition const & pos,
double const t,
double const dt )
inlineprivate

Definition at line 2029 of file ComponentTransportFEM.h.

2034 {
2035 auto const& medium =
2037 auto const& solid_phase = medium.phase("Solid");
2038
2039 auto const specific_heat_capacity_solid =
2040 solid_phase
2041 .property(
2043 .template value<double>(vars, pos, t, dt);
2044
2045 auto const solid_density =
2046 solid_phase.property(MaterialPropertyLib::PropertyType::density)
2047 .template value<double>(vars, pos, t, dt);
2048
2049 return solid_density * specific_heat_capacity_solid * (1 - porosity) +
2050 fluid_density * specific_heat_capacity_fluid * porosity;
2051 }
Property const & property(PropertyType const &p) const
Definition Phase.cpp:53

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, MaterialPropertyLib::density, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::Phase::property(), and MaterialPropertyLib::specific_heat_capacity.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHeatTransportEquation().

◆ getIntPtDarcyVelocity()

template<typename ShapeFunction , int GlobalDim>
std::vector< double > const & ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getIntPtDarcyVelocity ( const double t,
std::vector< GlobalVector * > const & x,
std::vector< NumLib::LocalToGlobalIndexMap const * > const & dof_table,
std::vector< double > & cache ) const
inlineoverridevirtual

Implements ProcessLib::ComponentTransport::ComponentTransportLocalAssemblerInterface.

Definition at line 1649 of file ComponentTransportFEM.h.

1654 {
1655 assert(x.size() == dof_table.size());
1656
1657 auto const n_processes = x.size();
1658 std::vector<std::vector<double>> local_x;
1659 local_x.reserve(n_processes);
1660
1661 for (std::size_t process_id = 0; process_id < n_processes; ++process_id)
1662 {
1663 auto const indices =
1664 NumLib::getIndices(_element.getID(), *dof_table[process_id]);
1665 assert(!indices.empty());
1666 local_x.push_back(x[process_id]->get(indices));
1667 }
1668
1669 // only one process, must be monolithic.
1670 if (n_processes == 1)
1671 {
1672 auto const local_p = Eigen::Map<const NodalVectorType>(
1673 &local_x[0][pressure_index], pressure_size);
1674 auto const local_C = Eigen::Map<const NodalVectorType>(
1676 return calculateIntPtDarcyVelocity(t, local_p, local_C, cache);
1677 }
1678
1679 // multiple processes, must be staggered.
1680 {
1681 constexpr int pressure_process_id = 0;
1682 constexpr int concentration_process_id = 1;
1683 auto const local_p = Eigen::Map<const NodalVectorType>(
1684 &local_x[pressure_process_id][0], pressure_size);
1685 auto const local_C = Eigen::Map<const NodalVectorType>(
1686 &local_x[concentration_process_id][0], concentration_size);
1687 return calculateIntPtDarcyVelocity(t, local_p, local_C, cache);
1688 }
1689 }
std::vector< GlobalIndexType > getIndices(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const &dof_table)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::calculateIntPtDarcyVelocity(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), NumLib::getIndices(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, and ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_size.

◆ getIntPtMolarFlux()

template<typename ShapeFunction , int GlobalDim>
std::vector< double > const & ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getIntPtMolarFlux ( const double t,
std::vector< GlobalVector * > const & x,
std::vector< NumLib::LocalToGlobalIndexMap const * > const & dof_tables,
std::vector< double > & cache ) const
inlineoverridevirtual

Implements ProcessLib::ComponentTransport::ComponentTransportLocalAssemblerInterface.

Definition at line 1900 of file ComponentTransportFEM.h.

1905 {
1906 std::vector<double> local_x_vec;
1907
1908 auto const n_processes = x.size();
1909 for (std::size_t process_id = 0; process_id < n_processes; ++process_id)
1910 {
1911 auto const indices =
1912 NumLib::getIndices(_element.getID(), *dof_tables[process_id]);
1913 assert(!indices.empty());
1914 auto const local_solution = x[process_id]->get(indices);
1915 local_x_vec.insert(std::end(local_x_vec),
1916 std::begin(local_solution),
1917 std::end(local_solution));
1918 }
1919 auto const local_x = MathLib::toVector(local_x_vec);
1920
1921 auto const p = local_x.template segment<pressure_size>(pressure_index);
1922 auto const c = local_x.template segment<concentration_size>(
1924
1925 auto const n_integration_points =
1927
1928 cache.clear();
1929 auto cache_mat = MathLib::createZeroedMatrix<
1930 Eigen::Matrix<double, GlobalDim, Eigen::Dynamic, Eigen::RowMajor>>(
1931 cache, GlobalDim, n_integration_points);
1932
1935
1936 auto const& b =
1939
1941
1942 auto const& medium =
1944 auto const& phase = medium.phase("AqueousLiquid");
1945
1946 int const component_id = 0;
1947 auto const& component = phase.component(
1948 _transport_process_variables[component_id].get().getName());
1949
1950 auto const& Ns =
1952 .NsHigherOrder<typename ShapeFunction::MeshElement>();
1953
1954 for (unsigned ip = 0; ip < n_integration_points; ++ip)
1955 {
1956 auto const& ip_data = _ip_data[ip];
1957 auto const& dNdx = ip_data.dNdx;
1958 auto const& N = Ns[ip];
1959 auto const& phi = ip_data.porosity;
1960
1961 pos.setIntegrationPoint(ip);
1962
1963 double const p_ip = N.dot(p);
1964 double const c_ip = N.dot(c);
1965
1966 vars.concentration = c_ip;
1967 vars.liquid_phase_pressure = p_ip;
1968 vars.porosity = phi;
1969
1970 double const dt = std::numeric_limits<double>::quiet_NaN();
1971
1972 auto const& k = MaterialPropertyLib::formEigenTensor<GlobalDim>(
1974 vars, pos, t, dt));
1976 .template value<double>(vars, pos, t, dt);
1978 .template value<double>(vars, pos, t, dt);
1979
1980 // Darcy flux
1981 GlobalDimVectorType const q =
1983 ? GlobalDimVectorType(-k / mu * (dNdx * p - rho * b))
1984 : GlobalDimVectorType(-k / mu * dNdx * p);
1985
1986 auto const alpha_T = medium.template value<double>(
1988 auto const alpha_L = medium.template value<double>(
1990 auto const Dp = MaterialPropertyLib::formEigenTensor<GlobalDim>(
1992 .value(vars, pos, t, dt));
1993
1994 // Hydrodynamic dispersion
1996 _process_data.stabilizer, _element.getID(), Dp, q, phi, alpha_T,
1997 alpha_L);
1998
1999 cache_mat.col(ip).noalias() = q * c_ip - phi * D * dNdx * c;
2000 }
2001
2002 return cache;
2003 }
Eigen::Map< const Vector > toVector(std::vector< double > const &data, Eigen::VectorXd::Index size)
Creates an Eigen mapped vector from the given data vector.

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_transport_process_variables, MaterialPropertyLib::Phase::component(), NumLib::computeHydrodynamicDispersion(), MaterialPropertyLib::VariableArray::concentration, MathLib::createZeroedMatrix(), MaterialPropertyLib::density, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), NumLib::getIndices(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::has_gravity, MaterialPropertyLib::VariableArray::liquid_phase_pressure, MaterialPropertyLib::longitudinal_dispersivity, ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::permeability, MaterialPropertyLib::Medium::phase(), MaterialPropertyLib::pore_diffusion, MaterialPropertyLib::VariableArray::porosity, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::pressure_index, ProcessLib::ComponentTransport::ComponentTransportProcessData::projected_specific_body_force_vectors, ParameterLib::SpatialPosition::setElementID(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, ProcessLib::ComponentTransport::ComponentTransportProcessData::stabilizer, MathLib::toVector(), MaterialPropertyLib::transversal_dispersivity, and MaterialPropertyLib::viscosity.

◆ getLocalTemperature()

template<typename ShapeFunction , int GlobalDim>
NodalVectorType ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getLocalTemperature ( double const t,
Eigen::VectorXd const & local_x )
inlineprivate

◆ getShapeMatrix()

template<typename ShapeFunction , int GlobalDim>
Eigen::Map< const Eigen::RowVectorXd > ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getShapeMatrix ( const unsigned integration_point) const
inlineoverridevirtual

Provides the shape matrix at the given integration point.

Implements NumLib::ExtrapolatableElement.

Definition at line 1765 of file ComponentTransportFEM.h.

1767 {
1769 typename ShapeFunction::MeshElement>()[integration_point];
1770
1771 // assumes N is stored contiguously in memory
1772 return Eigen::Map<const Eigen::RowVectorXd>(N.data(), N.size());
1773 }

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, NumLib::ShapeMatrixCache::NsHigherOrder(), and ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache.

◆ getThermalConductivityDispersivity()

template<typename ShapeFunction , int GlobalDim>
GlobalDimMatrixType ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getThermalConductivityDispersivity ( MaterialPropertyLib::VariableArray const & vars,
const double fluid_density,
const double specific_heat_capacity_fluid,
const GlobalDimVectorType & velocity,
ParameterLib::SpatialPosition const & pos,
double const t,
double const dt )
inlineprivate

Definition at line 2053 of file ComponentTransportFEM.h.

2059 {
2060 auto const& medium =
2062
2064 MaterialPropertyLib::formEigenTensor<GlobalDim>(
2065 medium
2066 .property(
2068 .value(vars, pos, t, dt));
2069
2070 auto const thermal_dispersivity_transversal =
2071 medium
2074 .template value<double>();
2075
2076 auto const thermal_dispersivity_longitudinal =
2077 medium
2080 .template value<double>();
2081
2082 // Thermal conductivity is moved outside and zero matrix is passed
2083 // instead due to multiplication with fluid's density times specific
2084 // heat capacity.
2085 return thermal_conductivity +
2086 fluid_density * specific_heat_capacity_fluid *
2089 GlobalDimMatrixType::Zero(GlobalDim, GlobalDim),
2090 velocity, 0 /* phi */, thermal_dispersivity_transversal,
2091 thermal_dispersivity_longitudinal);
2092 }

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, NumLib::computeHydrodynamicDispersion(), MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, ProcessLib::ComponentTransport::ComponentTransportProcessData::stabilizer, and MaterialPropertyLib::thermal_conductivity.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHeatTransportEquation().

◆ initializeChemicalSystemConcrete()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::initializeChemicalSystemConcrete ( Eigen::VectorXd const & local_x,
double const t )
inlineoverridevirtual

Implements ProcessLib::ComponentTransport::ComponentTransportLocalAssemblerInterface.

Definition at line 316 of file ComponentTransportFEM.h.

318 {
320
321 auto const& medium =
323
326
327 auto const& Ns =
329 .NsHigherOrder<typename ShapeFunction::MeshElement>();
330
331 unsigned const n_integration_points =
333
334 for (unsigned ip = 0; ip < n_integration_points; ip++)
335 {
336 auto& ip_data = _ip_data[ip];
337 auto const& N = Ns[ip];
338 auto const& chemical_system_id = ip_data.chemical_system_id;
339
340 auto const n_component = _transport_process_variables.size();
341 std::vector<double> C_int_pt(n_component);
342 for (unsigned component_id = 0; component_id < n_component;
343 ++component_id)
344 {
345 auto const concentration_index =
347 component_id * concentration_size;
348 auto const local_C =
349 local_x.template segment<concentration_size>(
350 concentration_index);
351
353 C_int_pt[component_id]);
354 }
355
357 ->initializeChemicalSystemConcrete(C_int_pt, chemical_system_id,
358 medium, pos, t);
359 }
360 }
virtual void initializeChemicalSystemConcrete(std::vector< double > const &, GlobalIndexType const &, MaterialPropertyLib::Medium const &, ParameterLib::SpatialPosition const &, double const)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_transport_process_variables, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemical_solver_interface, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ChemistryLib::ChemicalSolverInterface::initializeChemicalSystemConcrete(), ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), ParameterLib::SpatialPosition::setElementID(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, and NumLib::detail::shapeFunctionInterpolate().

◆ postSpeciationCalculation()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::postSpeciationCalculation ( std::size_t const ele_id,
double const t,
double const dt )
inlineoverridevirtual

Implements ProcessLib::ComponentTransport::ComponentTransportLocalAssemblerInterface.

Definition at line 427 of file ComponentTransportFEM.h.

429 {
431 {
432 return;
433 }
434
435 auto const& medium = *_process_data.media_map.getMedium(ele_id);
436
438 pos.setElementID(ele_id);
439
440 for (auto& ip_data : _ip_data)
441 {
442 ip_data.porosity = ip_data.porosity_prev;
443
445 ->updateVolumeFractionPostReaction(ip_data.chemical_system_id,
446 medium, pos,
447 ip_data.porosity, t, dt);
448
450 ip_data.chemical_system_id, medium, ip_data.porosity);
451 }
452 }
virtual void updateVolumeFractionPostReaction(GlobalIndexType const &, MaterialPropertyLib::Medium const &, ParameterLib::SpatialPosition const &, double const, double const, double const)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemical_solver_interface, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemically_induced_porosity_change, MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, ParameterLib::SpatialPosition::setElementID(), ChemistryLib::ChemicalSolverInterface::updatePorosityPostReaction(), and ChemistryLib::ChemicalSolverInterface::updateVolumeFractionPostReaction().

◆ postTimestepConcrete()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::postTimestepConcrete ( Eigen::VectorXd const & ,
Eigen::VectorXd const & ,
double const ,
double const ,
int const  )
inlineoverridevirtual

Reimplemented from ProcessLib::LocalAssemblerInterface.

Definition at line 2005 of file ComponentTransportFEM.h.

2009 {
2010 unsigned const n_integration_points =
2012
2013 for (unsigned ip = 0; ip < n_integration_points; ip++)
2014 {
2015 _ip_data[ip].pushBackState();
2016 }
2017 }

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, and NumLib::GenericIntegrationMethod::getNumberOfPoints().

◆ setChemicalSystemConcrete()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::setChemicalSystemConcrete ( Eigen::VectorXd const & local_x,
double const t,
double dt )
inlineoverridevirtual

Implements ProcessLib::ComponentTransport::ComponentTransportLocalAssemblerInterface.

Definition at line 362 of file ComponentTransportFEM.h.

364 {
366
367 auto const& medium =
369
372
375
376 auto const& Ns =
378 .NsHigherOrder<typename ShapeFunction::MeshElement>();
379
380 unsigned const n_integration_points =
382
383 for (unsigned ip = 0; ip < n_integration_points; ip++)
384 {
385 auto& ip_data = _ip_data[ip];
386 auto const& N = Ns[ip];
387 auto& porosity = ip_data.porosity;
388 auto const& porosity_prev = ip_data.porosity_prev;
389 auto const& chemical_system_id = ip_data.chemical_system_id;
390
391 auto const n_component = _transport_process_variables.size();
392 std::vector<double> C_int_pt(n_component);
393 for (unsigned component_id = 0; component_id < n_component;
394 ++component_id)
395 {
396 auto const concentration_index =
398 component_id * concentration_size;
399 auto const local_C =
400 local_x.template segment<concentration_size>(
401 concentration_index);
402
404 C_int_pt[component_id]);
405 }
406
407 {
408 vars_prev.porosity = porosity_prev;
409
410 porosity =
412 ? porosity_prev
413 : medium
414 ->property(
416 .template value<double>(vars, vars_prev, pos, t,
417 dt);
418
419 vars.porosity = porosity;
420 }
421
423 C_int_pt, chemical_system_id, medium, vars, pos, t, dt);
424 }
425 }
virtual void setChemicalSystemConcrete(std::vector< double > const &, GlobalIndexType const &, MaterialPropertyLib::Medium const *, MaterialPropertyLib::VariableArray const &, ParameterLib::SpatialPosition const &, double const, double const)

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_transport_process_variables, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemical_solver_interface, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemically_induced_porosity_change, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::first_concentration_index, MeshLib::Element::getID(), MaterialPropertyLib::MaterialSpatialDistributionMap::getMedium(), NumLib::GenericIntegrationMethod::getNumberOfPoints(), ProcessLib::ComponentTransport::ComponentTransportProcessData::media_map, NumLib::ShapeMatrixCache::NsHigherOrder(), MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, ChemistryLib::ChemicalSolverInterface::setChemicalSystemConcrete(), ParameterLib::SpatialPosition::setElementID(), ProcessLib::ComponentTransport::ComponentTransportProcessData::shape_matrix_cache, and NumLib::detail::shapeFunctionInterpolate().

◆ setChemicalSystemID()

template<typename ShapeFunction , int GlobalDim>
void ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::setChemicalSystemID ( std::size_t const )
inlineoverridevirtual

Implements ProcessLib::ComponentTransport::ComponentTransportLocalAssemblerInterface.

Definition at line 296 of file ComponentTransportFEM.h.

297 {
299 // chemical system index map
300 auto& chemical_system_index_map =
302
303 unsigned const n_integration_points =
305 for (unsigned ip = 0; ip < n_integration_points; ip++)
306 {
307 _ip_data[ip].chemical_system_id =
308 chemical_system_index_map.empty()
309 ? 0
310 : chemical_system_index_map.back() + 1;
311 chemical_system_index_map.push_back(
312 _ip_data[ip].chemical_system_id);
313 }
314 }
std::vector< GlobalIndexType > chemical_system_index_map

References ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data, ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data, ProcessLib::ComponentTransport::ComponentTransportProcessData::chemical_solver_interface, ChemistryLib::ChemicalSolverInterface::chemical_system_index_map, and NumLib::GenericIntegrationMethod::getNumberOfPoints().

Member Data Documentation

◆ _element

template<typename ShapeFunction , int GlobalDim>
MeshLib::Element const& ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_element
private

Definition at line 2020 of file ComponentTransportFEM.h.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::LocalAssemblerData(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assemble(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleBlockMatrices(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHeatTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHydraulicEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleKCmCn(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleReactionEquationConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianHydraulicEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::calculateIntPtDarcyVelocity(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::computeSecondaryVariableConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getFlux(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getIntPtDarcyVelocity(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getIntPtMolarFlux(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getLocalTemperature(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getThermalConductivityDispersivity(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::initializeChemicalSystemConcrete(), and ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::setChemicalSystemConcrete().

◆ _integration_method

template<typename ShapeFunction , int GlobalDim>
NumLib::GenericIntegrationMethod const& ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_integration_method
private

Definition at line 2023 of file ComponentTransportFEM.h.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::LocalAssemblerData(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleBlockMatrices(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHeatTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHydraulicEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleKCmCn(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleReactionEquationConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianHydraulicEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::calculateIntPtDarcyVelocity(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::computeReactionRelatedSecondaryVariable(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::computeSecondaryVariableConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getIntPtMolarFlux(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::initializeChemicalSystemConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::postTimestepConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::setChemicalSystemConcrete(), and ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::setChemicalSystemID().

◆ _ip_data

template<typename ShapeFunction , int GlobalDim>
std::vector<IntegrationPointData<GlobalDimNodalMatrixType> > ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_ip_data
private

Definition at line 2027 of file ComponentTransportFEM.h.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::LocalAssemblerData(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleBlockMatrices(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHeatTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHydraulicEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleKCmCn(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleReactionEquationConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianHydraulicEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::calculateIntPtDarcyVelocity(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::computeReactionRelatedSecondaryVariable(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getIntPtMolarFlux(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::initializeChemicalSystemConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::postSpeciationCalculation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::postTimestepConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::setChemicalSystemConcrete(), and ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::setChemicalSystemID().

◆ _process_data

template<typename ShapeFunction , int GlobalDim>
ComponentTransportProcessData const& ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::_process_data
private

Definition at line 2021 of file ComponentTransportFEM.h.

Referenced by ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::LocalAssemblerData(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assemble(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleBlockMatrices(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleForStaggeredScheme(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHeatTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleHydraulicEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleKCmCn(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleReactionEquationConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianComponentTransportEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianForStaggeredScheme(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::assembleWithJacobianHydraulicEquation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::calculateIntPtDarcyVelocity(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::computeReactionRelatedSecondaryVariable(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::computeSecondaryVariableConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getFlux(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getHeatEnergyCoefficient(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getIntPtMolarFlux(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getLocalTemperature(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getShapeMatrix(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::getThermalConductivityDispersivity(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::initializeChemicalSystemConcrete(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::postSpeciationCalculation(), ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::setChemicalSystemConcrete(), and ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::setChemicalSystemID().

◆ _transport_process_variables

◆ concentration_size

template<typename ShapeFunction , int GlobalDim>
const int ProcessLib::ComponentTransport::LocalAssemblerData< ShapeFunction, GlobalDim >::concentration_size
staticprivate

◆ first_concentration_index

◆ pressure_index

◆ pressure_size

◆ temperature_index

◆ temperature_size


The documentation for this class was generated from the following file: