IgANet
IGAnets - Isogeometric Analysis Networks
Loading...
Searching...
No Matches
bspline.hpp File Reference

Multivariate B-splines. More...

#include <algorithm>
#include <exception>
#include <filesystem>
#include <functional>
#include <regex>
#include <string_view>
#include <iganet/core/core.hpp>
#include <iganet/core/options.hpp>
#include <iganet/splines/patch.hpp>
#include <iganet/utils/blocktensor.hpp>
#include <iganet/utils/container.hpp>
#include <iganet/utils/dlloader.hpp>
#include <iganet/utils/fqn.hpp>
#include <iganet/utils/index_sequence.hpp>
#include <iganet/utils/integer_pow.hpp>
#include <iganet/utils/jit.hpp>
#include <iganet/utils/linalg.hpp>
#include <iganet/utils/serialize.hpp>
#include <iganet/utils/tensorarray.hpp>
#include <iganet/utils/vslice.hpp>

Go to the source code of this file.

Classes

class  iganet::BSplineCommon< BSplineCore >
 B-spline (common high-level functionality). More...
 
class  iganet::NonUniformBSplineCore< real_t, GeoDim, Degrees >
 Tensor-product non-uniform B-spline (core functionality). More...
 
class  iganet::NonUniformSplineCore_
 NonUniformSplineCore base class. More...
 
class  iganet::Spline_
 Spline base class. More...
 
class  iganet::SplineCore_
 SplineCore base class. More...
 
class  iganet::UniformBSplineCore< real_t, GeoDim, Degrees >
 Tensor-product uniform B-spline (core functionality). More...
 
class  iganet::UniformSplineCore_
 UniformSplineCore base class. More...
 

Namespaces

namespace  iganet
 
namespace  iganet::detail
 

Concepts

concept  iganet::detail::HasFindKnotIndices
 
concept  iganet::detail::HasFindCoeffIndices
 
concept  iganet::SplineCoreType
 Concept to identify template parameters that are derived from iganet::SplineCore_.
 
concept  iganet::UniformSplineCoreType
 Concept to identify template parameters that are derived from iganet::UniformSplineCore_.
 
concept  iganet::NonUniformSplineCoreType
 Concept to identify template parameters that are derived from iganet::NonUniformSplineCore_.
 
concept  iganet::SplineType
 Concept to identify template parameters that are derived from iganet::Spline_.
 
concept  iganet::UniformSplineType
 Concept to identify template parameters that are derived from iganet::Spline_ and iganet::UniformSplineCore_.
 
concept  iganet::NonUniformSplineType
 Concept to identify template parameters that are derived from iganet::Spline_ and iganet::NonUniformSplineCore_.
 

Macros

#define GENERATE_EXPR_SEQ   (curl)(div)(grad)(hess)(jac)(lapl)
 Sequence of expression (parametric coordinates).
 
#define GENERATE_IEXPR_SEQ   (icurl)(idiv)(igrad)(ihess)(ijac)(ilapl)
 Sequence of expression (physical coordinates).
 

Typedefs

template<typename real_t , short_t GeoDim, short_t... Degrees>
using iganet::NonUniformBSpline = BSplineCommon< NonUniformBSplineCore< real_t, GeoDim, Degrees... > >
 Provides the operator<< operation.
 
template<typename real_t , short_t GeoDim, short_t... Degrees>
using iganet::UniformBSpline = BSplineCommon< UniformBSplineCore< real_t, GeoDim, Degrees... > >
 Tensor-product uniform B-spline.
 

Enumerations

enum class  iganet::deriv : short_t {
  iganet::func = 0 , iganet::dx = 1 , iganet::dy = 10 , iganet::dz = 100 ,
  iganet::dt = 1000
}
 Enumerator for specifying the derivative of B-spline evaluation. More...
 
enum class  iganet::init : short_t {
  iganet::none = 0 , iganet::zeros = 1 , iganet::ones = 2 , iganet::linear ,
  iganet::random = 4 , iganet::greville = 5 , iganet::linspace = 6
}
 Enumerator for specifying the initialization of B-spline coefficients. More...
 
enum class  iganet::detail::SerializationFormat { iganet::detail::xml , iganet::detail::json }
 

Functions

template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
std::shared_ptr< iganet::BSplinePatch< real_t, GeoDim, ParDim > > iganet::createNonUniformBSpline (const nlohmann::json &json, iganet::Options< real_t > options=iganet::Options< real_t >{})
 Creates a tensor-product non-uniform B-spline from a JSON object.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
std::shared_ptr< iganet::BSplinePatch< real_t, GeoDim, ParDim > > iganet::createNonUniformBSpline (const pugi::xml_document &doc, int id=0, const std::string &label="", int index=-1, iganet::Options< real_t > options=iganet::Options< real_t >{})
 Creates a tensor-product non-uniform B-spline from an XML document.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
std::shared_ptr< iganet::BSplinePatch< real_t, GeoDim, ParDim > > iganet::createNonUniformBSpline (const pugi::xml_node &root, int id=0, const std::string &label="", int index=-1, iganet::Options< real_t > options=iganet::Options< real_t >{})
 Creates a tensor-product non-uniform B-spline from an XML node.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
std::shared_ptr< iganet::BSplinePatch< real_t, GeoDim, ParDim > > iganet::createNonUniformBSpline (const std::array< iganet::short_t, ParDim > &degrees, const std::array< int64_t, ParDim > &ncoeffs, enum iganet::init init=iganet::init::greville, iganet::Options< real_t > options=iganet::Options< real_t >{})
 Create tensor-product non-uniform B-spline.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
std::shared_ptr< iganet::BSplinePatch< real_t, GeoDim, ParDim > > iganet::createUniformBSpline (const nlohmann::json &json, iganet::Options< real_t > options=iganet::Options< real_t >{})
 Creates a tensor-product uniform B-spline from a JSON object.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
std::shared_ptr< iganet::BSplinePatch< real_t, GeoDim, ParDim > > iganet::createUniformBSpline (const pugi::xml_document &doc, int id=0, const std::string &label="", int index=-1, iganet::Options< real_t > options=iganet::Options< real_t >{})
 Creates a tensor-product uniform B-spline from an XML document.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
std::shared_ptr< iganet::BSplinePatch< real_t, GeoDim, ParDim > > iganet::createUniformBSpline (const pugi::xml_node &root, int id=0, const std::string &label="", int index=-1, iganet::Options< real_t > options=iganet::Options< real_t >{})
 Creates a tensor-product uniform B-spline from an XML node.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
std::shared_ptr< iganet::BSplinePatch< real_t, GeoDim, ParDim > > iganet::createUniformBSpline (const std::array< iganet::short_t, ParDim > &degrees, const std::array< int64_t, ParDim > &ncoeffs, enum iganet::init init=iganet::init::greville, iganet::Options< real_t > options=iganet::Options< real_t >{})
 Create tensor-product uniform B-spline.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
std::shared_ptr< iganet::BSplinePatch< real_t, GeoDim, ParDim > > iganet::detail::createUniformBSplineFromSerialized (const std::array< iganet::short_t, ParDim > &degrees, const std::string &serialized, SerializationFormat format, int id, const std::string &label, int index, iganet::Options< real_t > options)
 Loads a non-uniform B-spline and converts it to a uniform B-spline inside one JIT-generated dynamic library.
 
constexpr auto iganet::operator+ (deriv lhs, deriv rhs)
 Adds two enumerators for specifying the derivative of B-spline evaluation.
 
template<typename real_t , short_t GeoDim, short_t... Degrees>
std::ostream & iganet::operator<< (std::ostream &os, const NonUniformBSpline< real_t, GeoDim, Degrees... > &obj)
 Prints a NonUniformBSpline object.
 
template<typename real_t , short_t GeoDim, short_t... Degrees>
std::ostream & iganet::operator<< (std::ostream &os, const UniformBSpline< real_t, GeoDim, Degrees... > &obj)
 Prints a UniformBSpline object.
 
template<typename real_t , short_t GeoDim, short_t... Degrees>
torch::serialize::OutputArchive & iganet::operator<< (torch::serialize::OutputArchive &archive, const UniformBSplineCore< real_t, GeoDim, Degrees... > &obj)
 Serializes a B-spline object.
 
template<typename real_t , short_t GeoDim, short_t... Degrees>
torch::serialize::InputArchive & iganet::operator>> (torch::serialize::InputArchive &archive, UniformBSplineCore< real_t, GeoDim, Degrees... > &obj)
 Deserializes a B-spline object.
 
constexpr auto iganet::operator^ (deriv lhs, short_t rhs)
 Raises an enumerator for specifying the derivative of B-spline evaluation to a higher exponent.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
BSplineMetadata< ParDim > iganet::detail::parseBSplineMetadata (const nlohmann::json &json)
 Parses B-spline metadata from a JSON object.
 
template<typename real_t , iganet::short_t GeoDim, iganet::short_t ParDim>
BSplineMetadata< ParDim > iganet::detail::parseBSplineMetadata (const pugi::xml_node &root, int id, const std::string &label, int index)
 Parses B-spline metadata from an XML node.
 

Detailed Description

Multivariate B-splines.

Abstract patch function base class.

Author
Matthias Moller.

This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.


Class Documentation

◆ iganet::detail::BSplineMetadata

struct iganet::detail::BSplineMetadata
template<iganet::short_t ParDim>
struct iganet::detail::BSplineMetadata< ParDim >
Class Members
array< short_t, ParDim > degrees {}
array< int64_t, ParDim > ncoeffs {}

Macro Definition Documentation

◆ GENERATE_EXPR_SEQ

#define GENERATE_EXPR_SEQ   (curl)(div)(grad)(hess)(jac)(lapl)

Sequence of expression (parametric coordinates).

For each item in this sequence corresponding expressions will be generated for function spaces, boundary spaces, etc.

◆ GENERATE_IEXPR_SEQ

#define GENERATE_IEXPR_SEQ   (icurl)(idiv)(igrad)(ihess)(ijac)(ilapl)

Sequence of expression (physical coordinates).

For each item in this sequence corresponding expressions will be generated for function spaces, boundary spaces, etc.