https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ADVolumeJunctionBaseUserObject.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
13
22{
23public:
34
35 virtual void initialSetup() override;
36 virtual void initialize() override;
37 virtual void execute() override;
38 virtual void threadJoin(const UserObject & uo) override;
39
43 const std::vector<ADReal> & getResidual() const;
44
45 const std::vector<ADReal> & getFlux(const unsigned int & connection_index) const override;
46
47protected:
54 virtual void storeConnectionData();
55
61 virtual void computeFluxesAndResiduals(const unsigned int & c) = 0;
62
66 virtual std::vector<const MooseVariableBase *> getFlowChannelVariables() const;
67
71 virtual std::vector<const MooseVariableBase *> getJunctionVariables() const;
72
76 const MooseVariableBase * getJunctionVar(const std::string & var_name, unsigned int i = 0) const;
77
81 const ADVariableValue & coupledJunctionValue(const std::string & var_name,
82 unsigned int i = 0) const;
83
86
88 const subdomain_id_type _junction_subdomain_id;
89
91 const Real & _volume;
92
94 std::vector<std::string> _flow_variable_names;
96 std::vector<std::string> _scalar_variable_names;
97
99 unsigned int _n_flux_eq;
101 unsigned int _n_scalar_eq;
102
103 std::vector<const ADVariableValue *> _junction_var_values;
104 std::vector<ADReal> _cached_junction_var_values;
105
107 const std::vector<UserObjectName> & _numerical_flux_names;
108
110 std::vector<unsigned int> _connection_indices;
111
113 std::vector<dof_id_type> _scalar_dofs;
115 std::vector<std::vector<dof_id_type>> _flow_channel_dofs;
116
118 std::vector<std::vector<ADReal>> _flux;
119
121 std::vector<ADReal> _residual;
122
123public:
125};
Provides common interfaces for flow junction user objects.
Base class for computing and caching flux and residual vectors for a volume junction.
const std::vector< ADReal > & getResidual() const
Returns the residual vector for the scalar variables.
std::vector< const ADVariableValue * > _junction_var_values
virtual void threadJoin(const UserObject &uo) override
const ADVariableValue & coupledJunctionValue(const std::string &var_name, unsigned int i=0) const
Gets an AD junction variable value.
std::vector< std::vector< dof_id_type > > _flow_channel_dofs
Degrees of freedom for flow channel variables, for each connection.
std::vector< unsigned int > _connection_indices
Connection indices for this thread.
virtual std::vector< const MooseVariableBase * > getJunctionVariables() const
Gets the junction variables.
std::vector< std::vector< ADReal > > _flux
Cached flux vector for each connection.
virtual std::vector< const MooseVariableBase * > getFlowChannelVariables() const
Gets the flow channel variables.
const subdomain_id_type _junction_subdomain_id
Junction subdomain ID.
const std::vector< ADReal > & getFlux(const unsigned int &connection_index) const override
Gets the flux vector for a connection.
virtual void storeConnectionData()
Stores data (connection index, face shape functions, DoFs associated with flow channel variables) rel...
std::vector< std::string > _scalar_variable_names
Vector of coupled variable names for each scalar variable.
const MooseVariableBase * getJunctionVar(const std::string &var_name, unsigned int i=0) const
Gets a junction variable.
std::vector< dof_id_type > _scalar_dofs
Degrees of freedom for scalar variables.
std::vector< std::string > _flow_variable_names
Vector of coupled variable names for each flow variable.
virtual void computeFluxesAndResiduals(const unsigned int &c)=0
Computes and stores the fluxes, the scalar residuals, and their Jacobians.
unsigned int _n_scalar_eq
Number of scalar residual components.
const std::vector< UserObjectName > & _numerical_flux_names
Names of numerical flux user objects for each connected flow channel.
unsigned int _n_flux_eq
Number of flow channel flux components.
std::vector< ADReal > _residual
Cached scalar residual vector.
const Real & _volume
Volume of the junction.
const bool _use_scalar_variables
True if the junction variables are scalar variables.
VariableValueTempl< true > ADVariableValue