30template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
62 template <std::
size_t GeometryMapNumCoeffs, std::
size_t VariableNumCoeffs>
63 EZSolverBase(
const std::array<int64_t, GeometryMapNumCoeffs> &geometryMapNumCoeffs,
64 const std::array<int64_t, VariableNumCoeffs> &variableNumCoeffs)
65 :
Base(
std::make_tuple(geometryMapNumCoeffs),
66 std::make_tuple(variableNumCoeffs)) {}
75 auto const &
G()
const {
return Base::template input<0>(); }
79 auto &
G() {
return Base::template input<0>(); }
83 auto const &
u()
const {
return Base::template output<0>(); }
87 auto &
u() {
return Base::template output<0>(); }
94 G().template find_knot_indices<iganet::functionspace::interior>(
collPts_.first);
96 G().template find_knot_indices<iganet::functionspace::boundary>(
collPts_.second);
98 u().template find_knot_indices<iganet::functionspace::interior>(
collPts_.first);
100 u().template find_knot_indices<iganet::functionspace::boundary>(
collPts_.second);
108template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
116 std::array<torch::Tensor, Variable::template geoDim<0>()>(
117 const std::array<torch::Tensor, Variable::template parDim<0>()>&
126 EZSolver(
const GeometryMap& geometryMap,
const Variable& variable,
128 std::array<torch::Tensor, Variable::template geoDim<0>()>(
129 const std::array<torch::Tensor, Variable::template parDim<0>()>&
132 :
EZSolverBase<GeometryMap, Variable>(geometryMap.template space<0>().ncoeffs(), variable.template space<0>().ncoeffs()),
152 this->
u().
template space<0>().degrees(),
153 this->
u().
template space<0>().ncoeffs(),
154 torch::where(mask, M, S_xx+S_yy).t(),
155 { this->
u().template space<0>().ncumcoeffs(),
156 this->
u().template space<0>().ncumcoeffs() });
169template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
177 std::array<torch::Tensor, Variable::template geoDim<0>()>(
178 const std::array<torch::Tensor, Variable::template parDim<0>()>&
189 std::array<torch::Tensor, Variable::template geoDim<0>()>(
190 const std::array<torch::Tensor, Variable::template parDim<0>()>&
193 :
EZSolverBase<GeometryMap, Variable>(geometryMap.template space<0>().ncoeffs(), variable.template space<0>().ncoeffs()),
rhs_(
rhs) {}
198 this->
u().
template space<0>().degrees(),
199 this->
u().
template space<0>().ncoeffs(),
201 { this->
u().template space<0>().ncumcoeffs(),
202 this->
u().template space<0>().ncumcoeffs() });
215template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
217 const Variable& variable,
218 const std::function<std::array<torch::Tensor, Variable::template geoDim<0>()>(
const std::array<torch::Tensor, Variable::template parDim<0>()> &)>
224 return interp.
solve().clone();
228template <FunctionSpaceType GeometryMap, FunctionSpaceType Variable>
230 const Variable& variable,
231 const std::function<std::array<torch::Tensor, Variable::template geoDim<0>()>(
const std::array<torch::Tensor, Variable::template parDim<0>()> &)>
234 EZSolver solver(geometryMap, variable, rhs);
237 return solver.
solve().clone();
Easy-to-use interpolation class.
Definition ezsolver.hpp:170
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:180
void assembleLhs() override
Assembles the left-hand side as the mass matrix.
Definition ezsolver.hpp:196
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:187
void assembleRhs() override
Assembles the right-hand side from the given function.
Definition ezsolver.hpp:206
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:75
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:83
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:79
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:90
auto & u()
Returns a non-constant reference to the variable.
Definition ezsolver.hpp:87
EZSolverBase(const std::array< int64_t, GeometryMapNumCoeffs > &geometryMapNumCoeffs, const std::array< int64_t, VariableNumCoeffs > &variableNumCoeffs)
Constructor.
Definition ezsolver.hpp:63
auto const & collPts() const
Returns a constant reference to the collocation points.
Definition ezsolver.hpp:70
Easy-to-use solver class.
Definition ezsolver.hpp:109
void assembleRhs() override
Assembles the right-hand side from the given function.
Definition ezsolver.hpp:160
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:119
void assembleLhs() override
Assembles the left-hand side as the mass matrix.
Definition ezsolver.hpp:136
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:126
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:55
virtual void assemble()
Assembles the solver.
Definition igasolver.hpp:65
torch::Tensor solve() const
Computes the solution vector.
Definition igasolver.hpp:78
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:31
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:229
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:216
IgANetCustomizable.
Definition iganet.hpp:1299