https://mooseframework.inl.gov
Loading...
Searching...
No Matches
SegregatedTestComponent.C
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
11
12#include "libmesh/fe_type.h"
13
14registerMooseObject("ThermalHydraulicsTestApp", SegregatedTestComponent);
15
18{
20 params.addParam<SolverSystemName>(
21 "u_solver_system", "nl0", "Solver system to which the driving variable 'u' is added");
22 params.addParam<SolverSystemName>(
23 "v_solver_system", "nl0", "Solver system to which the coupled variable 'v' is added");
25 "Test component that solves two coupled Poisson equations in separate solver systems.");
26 return params;
27}
28
30 : Component1D(parameters),
31 _u_var_name(genSafeName(name(), "u")),
32 _v_var_name(genSafeName(name(), "v")),
33 _u_solver_system(getParam<SolverSystemName>("u_solver_system")),
34 _v_solver_system(getParam<SolverSystemName>("v_solver_system"))
35{
36}
37
38void
40{
41 const auto & subdomains = getSubdomainNames();
42 const FEType fe_type(FIRST, LAGRANGE);
43
44 _sim.addSimVariable(true, _u_var_name, fe_type, subdomains, 1.0, _u_solver_system);
45 _sim.addSimVariable(true, _v_var_name, fe_type, subdomains, 1.0, _v_solver_system);
46}
47
48void
50{
51 const auto & subdomains = getSubdomainNames();
52 const BoundaryName in_boundary = genName(name(), "in");
53 const BoundaryName out_boundary = genName(name(), "out");
54
55 // -div(grad(u)) = 0
56 {
57 const std::string class_name = "Diffusion";
58 InputParameters pars = _factory.getValidParams(class_name);
59 pars.set<NonlinearVariableName>("variable") = _u_var_name;
60 pars.set<std::vector<SubdomainName>>("block") = subdomains;
61 _sim.addKernel(class_name, genName(name(), "u_diffusion"), pars);
62 }
63
64 // -div(grad(v)) = source
65 {
66 const std::string class_name = "Diffusion";
67 InputParameters pars = _factory.getValidParams(class_name);
68 pars.set<NonlinearVariableName>("variable") = _v_var_name;
69 pars.set<std::vector<SubdomainName>>("block") = subdomains;
70 _sim.addKernel(class_name, genName(name(), "v_diffusion"), pars);
71 }
72
73 // Source for 'v'
74 {
75 const std::string class_name = "CoupledForce";
76 InputParameters pars = _factory.getValidParams(class_name);
77 pars.set<NonlinearVariableName>("variable") = _v_var_name;
78 pars.set<std::vector<VariableName>>("v") = {_u_var_name};
79 pars.set<std::vector<SubdomainName>>("block") = subdomains;
80 _sim.addKernel(class_name, genName(name(), "v_coupling"), pars);
81 }
82
83 // Boundary conditions
84 auto add_dirichlet_bc =
85 [&](const VariableName & var, const BoundaryName & boundary, Real value, const std::string & suffix)
86 {
87 const std::string class_name = "DirichletBC";
88 InputParameters pars = _factory.getValidParams(class_name);
89 pars.set<NonlinearVariableName>("variable") = var;
90 pars.set<std::vector<BoundaryName>>("boundary") = {boundary};
91 pars.set<Real>("value") = value;
92 _sim.addBoundaryCondition(class_name, genName(name(), suffix), pars);
93 };
94
95 add_dirichlet_bc(_u_var_name, in_boundary, 0.0, "u_in_bc");
96 add_dirichlet_bc(_u_var_name, out_boundary, 1.0, "u_out_bc");
97 add_dirichlet_bc(_v_var_name, in_boundary, 0.0, "v_in_bc");
98 add_dirichlet_bc(_v_var_name, out_boundary, 0.0, "v_out_bc");
99}
registerMooseObject("ThermalHydraulicsTestApp", SegregatedTestComponent)
const std::string name
Definition Setup.h:21
Base class for 1D components.
Definition Component1D.h:19
static InputParameters validParams()
Definition Component1D.C:14
virtual const std::vector< SubdomainName > & getSubdomainNames() const
Gets the subdomain names for this component.
Definition Component.C:345
Factory & _factory
The Factory associated with the MooseApp.
Definition Component.h:497
THMProblem & _sim
THM problem this component is part of TODO: make _sim private (applications need to switch to getters...
Definition Component.h:494
virtual void addBoundaryCondition(const std::string &bc_name, const std::string &name, InputParameters &parameters)
virtual void addKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
InputParameters getValidParams(const std::string &name) const
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
std::string genName(const std::string &prefix, unsigned int id, const std::string &suffix="") const
Build a name from a prefix, number and possible suffix.
Test component that solves two Poisson equations, each in its own solver system, coupled through a fi...
SegregatedTestComponent(const InputParameters &parameters)
const VariableName _u_var_name
Name of the driving variable.
virtual void addVariables() override
const SolverSystemName _v_solver_system
Solver system to which the coupled variable is added.
virtual void addMooseObjects() override
const SolverSystemName _u_solver_system
Solver system to which the driving variable is added.
static InputParameters validParams()
const VariableName _v_var_name
Name of the variable coupled to the driving variable.
void addSimVariable(bool nl, const VariableName &name, libMesh::FEType fe_type, Real scaling_factor=1.0, const SolverSystemName &solver_sys="nl0")
Queues a variable of type MooseVariableScalar to be added to the nonlinear or aux system.