30template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
58 template <std::
size_t GeometryMapNumCoeffs, std::
size_t VariableNumCoeffs>
59 EZSolverBase(
const std::array<int64_t, GeometryMapNumCoeffs> &geometryMapNumCoeffs,
60 const std::array<int64_t, VariableNumCoeffs> &variableNumCoeffs)
61 :
Base(
std::make_tuple(geometryMapNumCoeffs),
62 std::make_tuple(variableNumCoeffs)) {}
69 auto const &
G()
const {
return Base::template input<0>(); }
72 auto &
G() {
return Base::template input<0>(); }
75 auto const &
u()
const {
return Base::template output<0>(); }
78 auto &
u() {
return Base::template output<0>(); }
85 G().template find_knot_indices<iganet::functionspace::interior>(
collPts_.first);
87 G().template find_knot_indices<iganet::functionspace::boundary>(
collPts_.second);
89 u().template find_knot_indices<iganet::functionspace::interior>(
collPts_.first);
91 u().template find_knot_indices<iganet::functionspace::boundary>(
collPts_.second);
99template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
107 std::array<torch::Tensor, Variable::template geoDim<0>()>(
108 const std::array<torch::Tensor, Variable::template parDim<0>()>&
114 EZSolver(
const GeometryMap& geometryMap,
const Variable& variable,
116 std::array<torch::Tensor, Variable::template geoDim<0>()>(
117 const std::array<torch::Tensor, Variable::template parDim<0>()>&
120 :
EZSolverBase<GeometryMap, Variable>(geometryMap.template space<0>().ncoeffs(), variable.template space<0>().ncoeffs()),
140 this->
u().
template space<0>().degrees(),
141 this->
u().
template space<0>().ncoeffs(),
142 torch::where(mask, M, S_xx+S_yy).t(),
143 { this->
u().template space<0>().ncumcoeffs(),
144 this->
u().template space<0>().ncumcoeffs() });
157template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
165 std::array<torch::Tensor, Variable::template geoDim<0>()>(
166 const std::array<torch::Tensor, Variable::template parDim<0>()>&
174 std::array<torch::Tensor, Variable::template geoDim<0>()>(
175 const std::array<torch::Tensor, Variable::template parDim<0>()>&
178 :
EZSolverBase<GeometryMap, Variable>(geometryMap.template space<0>().ncoeffs(), variable.template space<0>().ncoeffs()),
rhs_(
rhs) {}
183 this->
u().
template space<0>().degrees(),
184 this->
u().
template space<0>().ncoeffs(),
186 { this->
u().template space<0>().ncumcoeffs(),
187 this->
u().template space<0>().ncumcoeffs() });
200template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
202 const Variable& variable,
203 const std::function<std::array<torch::Tensor, Variable::template geoDim<0>()>(
const std::array<torch::Tensor, Variable::template parDim<0>()> &)>
209 return interp.
solve().clone();
213template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
215 const Variable& variable,
216 const std::function<std::array<torch::Tensor, Variable::template geoDim<0>()>(
const std::array<torch::Tensor, Variable::template parDim<0>()> &)>
219 EZSolver solver(geometryMap, variable, rhs);
222 return solver.
solve().clone();
Easy-to-use interpolation class.
Definition ezsolver.hpp:158
std::function< std::array< torch::Tensor, Variable::template geoDim< 0 >()>(const std::array< torch::Tensor, Variable::template parDim< 0 >()> &) > rhs_
Right-hand side function.
Definition ezsolver.hpp:168
void assembleLhs() override
Assembles the left-hand side as the mass matrix.
Definition ezsolver.hpp:181
EZInterpolation(const GeometryMap &geometryMap, const Variable &variable, const std::function< std::array< torch::Tensor, Variable::template geoDim< 0 >()>(const std::array< torch::Tensor, Variable::template parDim< 0 >()> &) > &rhs)
Constructor.
Definition ezsolver.hpp:172
void assembleRhs() override
Assembles the right-hand side from the given function.
Definition ezsolver.hpp:191
Easy-to-use solver base class.
Definition ezsolver.hpp:32
Customizable::template output_boundary_knot_indices_t< 0 > var_knot_indices_boundary_
Knot indices of variables at the boundary.
Definition ezsolver.hpp:54
auto const & G() const
Returns a constant reference to the geometry.
Definition ezsolver.hpp:69
Customizable::template input_boundary_knot_indices_t< 0 > G_knot_indices_boundary_
Knot indices of the geometry map at the boundary.
Definition ezsolver.hpp:48
Customizable::template input_interior_knot_indices_t< 0 > G_knot_indices_
Knot indices of the geometry map.
Definition ezsolver.hpp:45
auto const & u() const
Returns a constant reference to the variable.
Definition ezsolver.hpp:75
Base::template collPts_t< 0 > collPts_
Collocation points.
Definition ezsolver.hpp:39
auto & G()
Returns a non-constant reference to the geometry.
Definition ezsolver.hpp:72
Customizable::template output_interior_knot_indices_t< 0 > var_knot_indices_
Knot indices of variables.
Definition ezsolver.hpp:51
void init() override
Initializes the solver.
Definition ezsolver.hpp:81
auto & u()
Returns a non-constant reference to the variable.
Definition ezsolver.hpp:78
EZSolverBase(const std::array< int64_t, GeometryMapNumCoeffs > &geometryMapNumCoeffs, const std::array< int64_t, VariableNumCoeffs > &variableNumCoeffs)
Constructor.
Definition ezsolver.hpp:59
auto const & collPts() const
Returns a constant reference to the collocation points.
Definition ezsolver.hpp:65
Easy-to-use solver class.
Definition ezsolver.hpp:100
void assembleRhs() override
Assembles the right-hand side from the given function.
Definition ezsolver.hpp:148
std::function< std::array< torch::Tensor, Variable::template geoDim< 0 >()>(const std::array< torch::Tensor, Variable::template parDim< 0 >()> &) > rhs_
Right-hand side function.
Definition ezsolver.hpp:110
void assembleLhs() override
Assembles the left-hand side as the mass matrix.
Definition ezsolver.hpp:124
EZSolver(const GeometryMap &geometryMap, const Variable &variable, const std::function< std::array< torch::Tensor, Variable::template geoDim< 0 >()>(const std::array< torch::Tensor, Variable::template parDim< 0 >()> &) > &rhs)
Constructor.
Definition ezsolver.hpp:114
IgA solver.
Definition igasolver.hpp:29
torch::Tensor lhs_
Left-hand side tensor.
Definition igasolver.hpp:33
torch::Tensor rhs_
Right-hand side tensor.
Definition igasolver.hpp:36
constexpr const auto & rhs() const
Returns a constant reference to the right-hand side object.
Definition igasolver.hpp:52
virtual void assemble()
Assembles the solver.
Definition igasolver.hpp:61
torch::Tensor solve() const
Computes the solution vector.
Definition igasolver.hpp:73
Isogeometric analysis solver.
Matrix utility functions.
torch::Tensor to_sparseCsrTensor(const torch::Tensor &col_indices, const torch::Tensor &values, const torch::IntArrayRef &size)
Constructs a sparse-CSR matrix from the column indices, matrix values and the matrix size.
Definition matrix.hpp:30
auto ezpoisson(const GeometryMap &geometryMap, const Variable &variable, const std::function< std::array< torch::Tensor, Variable::template geoDim< 0 >()>(const std::array< torch::Tensor, Variable::template parDim< 0 >()> &)> rhs)
Easy-to-use Poisson solver function.
Definition ezsolver.hpp:214
collPts
Enumerator for the collocation point specifier.
Definition collocation.hpp:21
auto ezinterp(const GeometryMap &geometryMap, const Variable &variable, const std::function< std::array< torch::Tensor, Variable::template geoDim< 0 >()>(const std::array< torch::Tensor, Variable::template parDim< 0 >()> &)> mapping)
Easy-to-use interpolation function.
Definition ezsolver.hpp:201
IgANetCustomizable.
Definition iganet.hpp:1125