18 container.addString(
"model",
"The model of material").required(
true);
19 container.addDouble(
"density",
"Initial mass density");
20 container.addDouble(
"cp",
"The specific heat capacity");
23 container.addDouble(
"kappa",
"The conductivity parameter");
26 container.addInt(
"dim",
"Dimension of conductivity tensor parameter");
27 auto& kappa_tensor_container = container.addStruct(
"kappa_tensor",
"The conductivity tensor parameter");
28 kappa_tensor_container.addDoubleArray(
"row1",
"First row of the conductivity tensor parameter");
29 kappa_tensor_container.addDoubleArray(
"row2",
"Second row of the conductivity tensor parameter");
30 kappa_tensor_container.addDoubleArray(
"row3",
"Third row of the conductivity tensor parameter");
33 container.registerVerifier([](
const axom::inlet::Container& c) ->
bool {
34 axom::inlet::InletType double_type = axom::inlet::InletType::Double;
35 axom::inlet::InletType int_type = axom::inlet::InletType::Integer;
36 axom::inlet::InletType obj_type = axom::inlet::InletType::Object;
37 axom::inlet::InletType coll_type = axom::inlet::InletType::Collection;
38 std::string model = c[
"model"];
39 bool density_present = c.contains(
"density") && (c[
"density"].
type() == double_type);
40 bool cp_present = c.contains(
"cp") && (c[
"cp"].
type() == double_type);
41 bool kappa_present = c.contains(
"kappa") && (c[
"kappa"].
type() == double_type);
42 bool dim_present = c.contains(
"dim") && (c[
"dim"].
type() == int_type);
43 bool kappa_tensor_present = c.contains(
"kappa_tensor") && (c[
"kappa_tensor"].
type() == obj_type);
45 if (model ==
"LinearIsotropicConductor") {
46 return density_present && cp_present && kappa_present && !dim_present && !kappa_tensor_present;
47 }
else if (model ==
"LinearConductor") {
48 if (density_present && cp_present && !kappa_present && dim_present && kappa_tensor_present) {
51 bool row1_present = c.contains(
"kappa_tensor/row1") && (c[
"kappa_tensor/row1"].
type() == coll_type);
52 bool row2_present = c.contains(
"kappa_tensor/row2") && (c[
"kappa_tensor/row2"].
type() == coll_type);
53 bool row3_present = c.contains(
"kappa_tensor/row3") && (c[
"kappa_tensor/row3"].
type() == coll_type);
54 auto row1_size = c[
"kappa_tensor/row1"].get<std::vector<double>>().
size();
55 auto row2_size = c[
"kappa_tensor/row2"].get<std::vector<double>>().
size();
56 auto row3_size = c[
"kappa_tensor/row3"].get<std::vector<double>>().
size();
59 return row1_present && (row1_size == 2) && row2_present && (row2_size == 2) && !row3_present;
60 }
else if (dim == 3) {
61 return row1_present && (row1_size == 3) && row2_present && (row2_size == 3) && row3_present &&
73 std::vector<std::vector<double>> FromInlet<std::vector<std::vector<double>>>::operator()(
74 const axom::inlet::Container& base)
76 std::vector<std::vector<double>> result;
78 result.push_back(base[
"row1"].
get<std::vector<double>>());
79 result.push_back(base[
"row2"].
get<std::vector<double>>());
80 result.push_back(base[
"row3"].
get<std::vector<double>>());
88 std::string model = base[
"model"];
90 if (model ==
"LinearIsotropicConductor") {
92 }
else if (model ==
"LinearConductor") {
95 int dim = base[
"dim"];
97 std::vector<std::vector<double>> v = {base[
"kappa_tensor"][
"row1"], base[
"kappa_tensor"][
"row2"]};
100 }
else if (dim == 3) {
101 std::vector<std::vector<double>> v = {base[
"kappa_tensor"][
"row1"], base[
"kappa_tensor"][
"row2"],
102 base[
"kappa_tensor"][
"row3"]};
104 {{v[0][0], v[0][1], v[0][2]}, {v[1][0], v[1][1], v[1][2]}, {v[2][0], v[2][1], v[2][2]}}};
Accelerator functionality.
std::variant< heat_transfer::LinearIsotropicConductor, heat_transfer::LinearConductor< 2 >, heat_transfer::LinearConductor< 3 > > var_thermal_material_t
Holds all possible heat transfer materials that can be utilized in our Input Deck.
constexpr SERAC_HOST_DEVICE int size(const tensor< T, n... > &)
returns the total number of stored values in a tensor
constexpr SERAC_HOST_DEVICE auto type(const tuple< T... > &values)
a function intended to be used for extracting the ith type from a tuple.
serac::var_thermal_material_t operator()(const axom::inlet::Container &base)
Returns created object from Inlet container.
Linear anisotropic thermal material model.
Linear isotropic heat transfer material model.
Arbitrary-rank tensor class.
Implementation of the tensor class used by Functional.
The material and load types for the thermal functional physics module.