15 #if !defined(KRATOS_NURBS_SURFACE_GEOMETRY_H_INCLUDED )
16 #define KRATOS_NURBS_SURFACE_GEOMETRY_H_INCLUDED
36 template <
int TWorkingSpaceDimension,
class TContainerPo
intType>
43 typedef typename TContainerPointType::value_type
NodeType;
74 :
BaseType(rThisPoints, &msGeometryData)
80 CheckAndFitKnotVectors();
91 :
BaseType(rThisPoints, &msGeometryData)
98 CheckAndFitKnotVectors();
101 <<
"Number of control points and weights do not match!" << std::endl;
105 :
BaseType(ThisPoints, &msGeometryData)
112 , mPolynomialDegreeU(rOther.mPolynomialDegreeU)
113 , mPolynomialDegreeV(rOther.mPolynomialDegreeV)
114 , mKnotsU(rOther.mKnotsU)
115 , mKnotsV(rOther.mKnotsV)
116 , mWeights(rOther.mWeights)
117 , mpGeometryParent(rOther.mpGeometryParent)
125 , mPolynomialDegreeU(rOther.mPolynomialDegreeU)
126 , mPolynomialDegreeV(rOther.mPolynomialDegreeV)
127 , mKnotsU(rOther.mKnotsU)
128 , mKnotsV(rOther.mKnotsV)
129 , mWeights(rOther.mWeights)
130 , mpGeometryParent(rOther.mpGeometryParent)
145 mPolynomialDegreeU = rOther.mPolynomialDegreeU;
146 mPolynomialDegreeV = rOther.mPolynomialDegreeV;
147 mKnotsU = rOther.mKnotsU;
148 mKnotsV = rOther.mKnotsV;
149 mWeights = rOther.mWeights;
150 mpGeometryParent = rOther.mpGeometryParent;
155 template<
class TOtherContainerPo
intType>
160 mPolynomialDegreeU = rOther.mPolynomialDegreeU;
161 mPolynomialDegreeV = rOther.mPolynomialDegreeV;
162 mKnotsU = rOther.mKnotsU;
163 mKnotsV = rOther.mKnotsV;
164 mWeights = rOther.mWeights;
165 mpGeometryParent = rOther.mpGeometryParent;
176 return Kratos::make_shared<NurbsSurfaceGeometry>(ThisPoints);
185 return *mpGeometryParent;
190 mpGeometryParent = pGeometryParent;
200 if (LocalDirectionIndex == 0) {
203 else if (LocalDirectionIndex == 1) {
206 KRATOS_ERROR <<
"Possible direction index in NurbsSurfaceGeometry reaches from 0-1. Given direction index: "
207 << LocalDirectionIndex << std::endl;
218 <<
"Trying to access polynomial degree in direction " << LocalDirectionIndex
219 <<
" from NurbsSurfaceGeometry #" << this->
Id() <<
". Nurbs surfaces have only two directions."
222 if (LocalDirectionIndex == 0) {
223 return mPolynomialDegreeU;
226 return mPolynomialDegreeV;
239 if (rVariable == CHARACTERISTIC_GEOMETRY_LENGTH)
258 this->
Points() = rThisPoints;
265 CheckAndFitKnotVectors();
268 <<
"Number of control points and weights do not match!" << std::endl;
274 return mPolynomialDegreeU;
280 return mPolynomialDegreeV;
302 return mKnotsU.size();
308 return mKnotsV.size();
315 if (mWeights.size() == 0)
319 if (std::abs(mWeights[
i] - 1.0) > 1
e-8) {
349 if (DirectionIndex == 0) {
351 if (std::abs(mKnotsU[
i] - mKnotsU[
i + 1]) > 1
e-6) {
356 else if (DirectionIndex == 1) {
358 if (std::abs(mKnotsV[
i] - mKnotsV[
i + 1]) > 1
e-6) {
363 KRATOS_ERROR <<
"NurbsSurfaceGeometry::NumberOfKnotSpans: Direction index: "
364 << DirectionIndex <<
" not available. Options are: 0 and 1." << std::endl;
366 return knot_span_counter;
377 if (DirectionIndex == 0) {
378 rSpans[0] = mKnotsU[0];
382 if (std::abs(mKnotsU[
i] - mKnotsU[
i + 1]) > 1
e-6) {
388 else if (DirectionIndex == 1) {
389 rSpans[0] = mKnotsV[0];
393 if (std::abs(mKnotsV[
i] - mKnotsV[
i + 1]) > 1
e-6) {
399 KRATOS_ERROR <<
"NurbsSurfaceGeometry::Spans: Direction index: "
400 << DirectionIndex <<
" not available. Options are: 0 and 1." << std::endl;
410 mKnotsU[mPolynomialDegreeU - 1],
420 mKnotsV[mPolynomialDegreeV - 1],
429 const SizeType first_span = mPolynomialDegreeU - 1;
432 const SizeType number_of_spans = last_span - first_span + 1;
434 std::vector<NurbsInterval> result(number_of_spans);
437 const double t0 = mKnotsU[first_span +
i];
438 const double t1 = mKnotsU[first_span +
i + 1];
451 const SizeType first_span = mPolynomialDegreeV - 1;
454 const SizeType number_of_spans = last_span - first_span + 1;
456 std::vector<NurbsInterval> result(number_of_spans);
459 const double t0 = mKnotsV[first_span +
i];
460 const double t1 = mKnotsV[first_span +
i + 1];
477 p1[0] = mKnotsU[SpanU];
478 p1[1] = mKnotsV[SpanV];
481 p2[0] = mKnotsU[SpanU + 1];
482 p2[1] = mKnotsV[SpanV];
485 p3[0] = mKnotsU[SpanU + 1];
486 p3[1] = mKnotsV[SpanV + 1];
489 p4[0] = mKnotsU[SpanU];
490 p4[1] = mKnotsV[SpanV + 1];
498 rKnotLengthness[0] = (
norm_2(gp1 - gp2) +
norm_2(gp3 - gp4)) / 2;
499 rKnotLengthness[1] = (
norm_2(gp1 - gp4) +
norm_2(gp2 - gp3)) / 2;
500 rKnotLengthness[2] = 0;
530 rIntegrationPoints, points_in_u, points_in_v);
546 const SizeType number_of_integration_points =
547 knot_span_intervals_u.size() * knot_span_intervals_v.size()
548 * NumPointsPerSpanU * NumPointsPerSpanV;
550 if (rIntegrationPoints.size() != number_of_integration_points) {
551 rIntegrationPoints.resize(number_of_integration_points);
554 typename IntegrationPointsArrayType::iterator integration_point_iterator = rIntegrationPoints.begin();
556 for (
IndexType i = 0;
i < knot_span_intervals_u.size(); ++
i) {
557 for (
IndexType j = 0;
j < knot_span_intervals_v.size(); ++
j) {
559 integration_point_iterator,
560 NumPointsPerSpanU, NumPointsPerSpanV,
561 knot_span_intervals_u[
i].GetT0(), knot_span_intervals_u[
i].GetT1(),
562 knot_span_intervals_v[
j].GetT0(), knot_span_intervals_v[
j].GetT1());
583 IndexType NumberOfShapeFunctionDerivatives,
589 mPolynomialDegreeU, mPolynomialDegreeV, NumberOfShapeFunctionDerivatives);
592 if (rResultGeometries.
size() != rIntegrationPoints.size())
593 rResultGeometries.
resize(rIntegrationPoints.size());
600 for (
IndexType i = 0;
i < NumberOfShapeFunctionDerivatives - 1;
i++) {
601 shape_function_derivatives[
i].
resize(num_nonzero_cps,
i + 2);
604 for (
IndexType i = 0;
i < rIntegrationPoints.size(); ++
i)
608 mKnotsU, mKnotsV, mWeights, rIntegrationPoints[
i][0], rIntegrationPoints[
i][1]);
612 mKnotsU, mKnotsV, rIntegrationPoints[
i][0], rIntegrationPoints[
i][1]);
620 nonzero_control_points(
j) =
pGetPoint(cp_indices[
j]);
624 N(0,
j) = shape_function_container(
j, 0);
628 if (NumberOfShapeFunctionDerivatives > 0) {
630 for (
IndexType n = 0;
n < NumberOfShapeFunctionDerivatives - 1;
n++) {
633 shape_function_derivatives[
n](
j,
k) = shape_function_container(
j, shape_derivative_index +
k);
636 shape_derivative_index +=
n + 2;
641 default_method, rIntegrationPoints[
i],
642 N, shape_function_derivatives);
683 const double Tolerance = std::numeric_limits<double>::epsilon()
689 rProjectedPointLocalCoordinates,
690 rPointGlobalCoordinates,
691 point_global_coordinates,
712 mKnotsU, mKnotsV, mWeights, rLocalCoordinates[0], rLocalCoordinates[1]);
716 mKnotsU, mKnotsV, rLocalCoordinates[0], rLocalCoordinates[1]);
728 rResult += (*this)[index] * shape_function_container(
u,
v, 0);
743 std::vector<CoordinatesArrayType>& rGlobalSpaceDerivatives,
745 const SizeType DerivativeOrder)
const override
751 mKnotsU, mKnotsV, mWeights, rLocalCoordinates[0], rLocalCoordinates[1]);
755 mKnotsU, mKnotsV, rLocalCoordinates[0], rLocalCoordinates[1]);
764 shape_function_row_i++) {
774 rGlobalSpaceDerivatives[shape_function_row_i] =
775 (*this)[index] * shape_function_container(
u,
v, shape_function_row_i);
777 rGlobalSpaceDerivatives[shape_function_row_i] +=
778 (*this)[index] * shape_function_container(
u,
v, shape_function_row_i);
805 rResult[
i] = shape_function_container(
i, 0);
824 if (rResult.size1() != 2
829 rResult(0,
i) = shape_function_container(
i, 1);
830 rResult(1,
i) = shape_function_container(
i, 2);
853 std::string
Info()
const override
855 return std::to_string(TWorkingSpaceDimension) +
" dimensional nurbs surface.";
860 rOStream << TWorkingSpaceDimension <<
" dimensional nurbs surface.";
887 BaseType* mpGeometryParent =
nullptr;
898 void CheckAndFitKnotVectors()
902 if (num_control_points !=
905 if (num_control_points ==
909 for (
SizeType i = 0;
i < mKnotsU.size() - 2; ++
i) {
915 for (
SizeType i = 0;
i < mKnotsV.size() - 2; ++
i) {
921 <<
"Number of controls points and polynomial degrees and number of knots do not match! " << std::endl
922 <<
" P: " << mPolynomialDegreeU <<
", Q: " << mPolynomialDegreeV
923 <<
", number of knots u: " << mKnotsU.size() <<
", number of knots v: " << mKnotsV.size()
924 <<
", number of control points: " << num_control_points << std::endl
925 <<
"Following condition must be achieved: ControlPoints.size() = (KnotsU.size() - P + 1) * (KnotsV.size() - Q + 1)"
937 void save(
Serializer& rSerializer)
const override
940 rSerializer.
save(
"PolynomialDegreeU", mPolynomialDegreeU);
941 rSerializer.
save(
"PolynomialDegreeV", mPolynomialDegreeV);
942 rSerializer.
save(
"KnotsU", mKnotsU);
943 rSerializer.
save(
"KnotsV", mKnotsV);
944 rSerializer.
save(
"Weights", mWeights);
945 rSerializer.
save(
"pGeometryParent", mpGeometryParent);
951 rSerializer.
load(
"PolynomialDegreeU", mPolynomialDegreeU);
952 rSerializer.
load(
"PolynomialDegreeV", mPolynomialDegreeV);
953 rSerializer.
load(
"KnotsU", mKnotsU);
954 rSerializer.
load(
"KnotsV", mKnotsV);
955 rSerializer.
load(
"Weights", mWeights);
956 rSerializer.
load(
"pGeometryParent", mpGeometryParent);
965 template<
int TWorkingSpaceDimension,
class TPo
intType>
966 const GeometryData NurbsSurfaceGeometry<TWorkingSpaceDimension, TPointType>::msGeometryData(
971 template<
int TWorkingSpaceDimension,
class TPo
intType>
static GeometryPointerType CreateQuadraturePoint(SizeType WorkingSpaceDimension, SizeType LocalSpaceDimension, GeometryShapeFunctionContainer< GeometryData::IntegrationMethod > &rShapeFunctionContainer, PointsArrayType rPoints, GeometryType *pGeometryParent)
Definition: quadrature_points_utility.h:159
Definition: geometry_data.h:60
KratosGeometryType
Definition: geometry_data.h:110
KratosGeometryFamily
Definition: geometry_data.h:91
Definition: geometry_dimension.h:42
Geometry base class.
Definition: geometry.h:71
SizeType size() const
Definition: geometry.h:518
Geometry & operator=(const Geometry &rOther)
Definition: geometry.h:400
std::vector< IntegrationPointType > IntegrationPointsArrayType
Definition: geometry.h:161
std::size_t SizeType
Definition: geometry.h:144
const TPointType::Pointer pGetPoint(const int Index) const
Definition: geometry.h:1790
std::size_t IndexType
Definition: geometry.h:137
IndexType const & Id() const
Id of this Geometry.
Definition: geometry.h:964
virtual void CreateQuadraturePointGeometries(GeometriesArrayType &rResultGeometries, IndexType NumberOfShapeFunctionDerivatives, const IntegrationPointsArrayType &rIntegrationPoints, IntegrationInfo &rIntegrationInfo)
Definition: geometry.h:2331
const PointsArrayType & Points() const
Definition: geometry.h:1768
IntegrationMethod GetDefaultIntegrationMethod() const
Definition: geometry.h:2004
SizeType WorkingSpaceDimension() const
Definition: geometry.h:1287
TPointType const & GetPoint(const int Index) const
Definition: geometry.h:1816
Definition: geometry_shape_function_container.h:60
Integration information for the creation of integration points.
Definition: integration_info.h:35
static void IntegrationPoints2D(typename IntegrationPointsArrayType::iterator &rIntegrationPointsBegin, SizeType PointsInU, SizeType PointsInV, double U0, double U1, double V0, double V1)
Definition: integration_point_utilities.cpp:125
void resize(std::size_t NewSize1, std::size_t NewSize2, bool preserve=0)
Definition: amatrix_interface.h:224
Class for optimized use of intervals.
Definition: nurbs_interval.h:36
Definition: nurbs_surface_geometry.h:38
SizeType NumberOfControlPointsU() const
Definition: nurbs_surface_geometry.h:335
void CreateIntegrationPoints(IntegrationPointsArrayType &rIntegrationPoints, SizeType NumPointsPerSpanU, SizeType NumPointsPerSpanV) const
Definition: nurbs_surface_geometry.h:538
void Calculate(const Variable< array_1d< double, 3 >> &rVariable, array_1d< double, 3 > &rOutput) const override
Calculate with array_1d<double, 3>
Definition: nurbs_surface_geometry.h:235
void SetInternals(const PointsArrayType &rThisPoints, const SizeType PolynomialDegreeU, const SizeType PolynomialDegreeV, const Vector &rKnotsU, const Vector &rKnotsV, const Vector &rWeights)
Definition: nurbs_surface_geometry.h:250
bool IsRational() const
Definition: nurbs_surface_geometry.h:313
GeometryData::KratosGeometryType GetGeometryType() const override
Definition: nurbs_surface_geometry.h:845
NurbsSurfaceGeometry(NurbsSurfaceGeometry< TWorkingSpaceDimension, TOtherContainerPointType > const &rOther)
Copy constructor from a geometry with different point type.
Definition: nurbs_surface_geometry.h:122
Vector & ShapeFunctionsValues(Vector &rResult, const CoordinatesArrayType &rCoordinates) const override
Definition: nurbs_surface_geometry.h:788
SizeType PolynomialDegreeV() const
Definition: nurbs_surface_geometry.h:278
void SetGeometryParent(BaseType *pGeometryParent) override
Definition: nurbs_surface_geometry.h:188
std::string Info() const override
Return geometry information as a string.
Definition: nurbs_surface_geometry.h:853
int ProjectionPointGlobalToLocalSpace(const CoordinatesArrayType &rPointGlobalCoordinates, CoordinatesArrayType &rProjectedPointLocalCoordinates, const double Tolerance=std::numeric_limits< double >::epsilon()) const override
Projects a certain point on the geometry, or finds the closest point, depending on the provided initi...
Definition: nurbs_surface_geometry.h:680
SizeType NumberOfKnotsV() const
Definition: nurbs_surface_geometry.h:306
BaseType::IntegrationPointsArrayType IntegrationPointsArrayType
Definition: nurbs_surface_geometry.h:53
SizeType PolynomialDegree(IndexType LocalDirectionIndex) const override
Return polynomial degree of the surface in direction 0 or 1.
Definition: nurbs_surface_geometry.h:215
SizeType NumberOfKnotsU() const
Definition: nurbs_surface_geometry.h:300
NurbsSurfaceGeometry & operator=(NurbsSurfaceGeometry< TWorkingSpaceDimension, TOtherContainerPointType > const &rOther)
Assignment operator for geometries with different point type.
Definition: nurbs_surface_geometry.h:156
BaseType::Pointer Create(PointsArrayType const &ThisPoints) const override
Definition: nurbs_surface_geometry.h:173
BaseType::CoordinatesArrayType CoordinatesArrayType
Definition: nurbs_surface_geometry.h:50
NurbsSurfaceGeometry & operator=(const NurbsSurfaceGeometry &rOther)
Assignment operator.
Definition: nurbs_surface_geometry.h:142
const Vector & KnotsU() const
Definition: nurbs_surface_geometry.h:286
void SpansLocalSpace(std::vector< double > &rSpans, IndexType DirectionIndex) const override
Definition: nurbs_surface_geometry.h:373
const TPointType::Pointer pGetPoint(const int Index) const
Definition: geometry.h:1790
std::vector< NurbsInterval > KnotSpanIntervalsU() const
Definition: nurbs_surface_geometry.h:427
IntegrationInfo GetDefaultIntegrationInfo() const override
Provides the default integration dependent on the polynomial degree of the underlying surface.
Definition: nurbs_surface_geometry.h:508
SizeType NumberOfControlPointsV() const
Definition: nurbs_surface_geometry.h:340
CoordinatesArrayType & GlobalCoordinates(CoordinatesArrayType &rResult, const CoordinatesArrayType &rLocalCoordinates) const override
Definition: nurbs_surface_geometry.h:703
KRATOS_CLASS_POINTER_DEFINITION(NurbsSurfaceGeometry)
Counted pointer of NurbsSurfaceGeometry.
const Vector & Weights() const
Definition: nurbs_surface_geometry.h:330
SizeType NumberOfKnotSpans(IndexType DirectionIndex) const
Returns the number of spans in DirectionIndex=0:U and DirectionIndex=1:V (which are larger than 0).
Definition: nurbs_surface_geometry.h:346
void CalculateEstimatedKnotLengthness(CoordinatesArrayType &rKnotLengthness, const CoordinatesArrayType &rLocalCoordinates) const
Definition: nurbs_surface_geometry.h:468
GeometryData::KratosGeometryFamily GetGeometryFamily() const override
Definition: nurbs_surface_geometry.h:840
const Vector & KnotsV() const
Definition: nurbs_surface_geometry.h:294
BaseType::GeometriesArrayType GeometriesArrayType
Definition: nurbs_surface_geometry.h:52
BaseType::IndexType IndexType
Definition: nurbs_surface_geometry.h:47
TContainerPointType::value_type NodeType
Definition: nurbs_surface_geometry.h:43
std::vector< NurbsInterval > KnotSpanIntervalsV() const
Definition: nurbs_surface_geometry.h:449
NurbsSurfaceGeometry(NurbsSurfaceGeometry< TWorkingSpaceDimension, TContainerPointType > const &rOther)
Copy constructor.
Definition: nurbs_surface_geometry.h:110
~NurbsSurfaceGeometry() override=default
Destructor.
NurbsSurfaceGeometry(const PointsArrayType &rThisPoints, const SizeType PolynomialDegreeU, const SizeType PolynomialDegreeV, const Vector &rKnotsU, const Vector &rKnotsV, const Vector &rWeights)
Conctructor for NURBS surfaces.
Definition: nurbs_surface_geometry.h:84
void CreateQuadraturePointGeometries(GeometriesArrayType &rResultGeometries, IndexType NumberOfShapeFunctionDerivatives, const IntegrationPointsArrayType &rIntegrationPoints, IntegrationInfo &rIntegrationInfo) override
Definition: nurbs_surface_geometry.h:581
Geometry< NodeType > BaseType
Definition: nurbs_surface_geometry.h:45
Matrix & ShapeFunctionsLocalGradients(Matrix &rResult, const CoordinatesArrayType &rCoordinates) const override
Definition: nurbs_surface_geometry.h:811
NurbsSurfaceGeometry(const PointsArrayType &rThisPoints, const SizeType PolynomialDegreeU, const SizeType PolynomialDegreeV, const Vector &rKnotsU, const Vector &rKnotsV)
Conctructor for B-Spline surfaces.
Definition: nurbs_surface_geometry.h:68
void GlobalSpaceDerivatives(std::vector< CoordinatesArrayType > &rGlobalSpaceDerivatives, const CoordinatesArrayType &rLocalCoordinates, const SizeType DerivativeOrder) const override
Definition: nurbs_surface_geometry.h:742
SizeType PointsNumberInDirection(IndexType LocalDirectionIndex) const override
Returns number of points per direction.
Definition: nurbs_surface_geometry.h:198
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: nurbs_surface_geometry.h:858
NurbsInterval DomainIntervalU() const
Definition: nurbs_surface_geometry.h:407
NurbsSurfaceGeometry(const PointsArrayType &ThisPoints)
Definition: nurbs_surface_geometry.h:104
NurbsInterval DomainIntervalV() const
Definition: nurbs_surface_geometry.h:417
BaseType::PointsArrayType PointsArrayType
Definition: nurbs_surface_geometry.h:51
BaseType & GetGeometryParent(IndexType Index) const override
Some geometries require relations to other geometries. This is the case for e.g. quadrature points....
Definition: nurbs_surface_geometry.h:183
BaseType::SizeType SizeType
Definition: nurbs_surface_geometry.h:48
void CreateIntegrationPoints(IntegrationPointsArrayType &rIntegrationPoints, IntegrationInfo &rIntegrationInfo) const override
Definition: nurbs_surface_geometry.h:522
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: nurbs_surface_geometry.h:863
SizeType PolynomialDegreeU() const
Definition: nurbs_surface_geometry.h:272
Definition: nurbs_surface_shape_functions.h:31
void ComputeNurbsShapeFunctionValues(const Vector &rKnotsU, const Vector &rKnotsV, const Vector &Weights, const double ParameterU, const double ParameterV)
Definition: nurbs_surface_shape_functions.h:379
std::vector< int > ControlPointIndices(SizeType NumberOfControlPointsU, SizeType NumberOfControlPointsV) const
Definition: nurbs_surface_shape_functions.h:175
static constexpr SizeType NumberOfShapeFunctionRows(const SizeType DerivativeOrder) noexcept
Definition: nurbs_surface_shape_functions.h:66
IndexType GetFirstNonzeroControlPointU() const
Definition: nurbs_surface_shape_functions.h:229
IndexType GetFirstNonzeroControlPointV() const
Definition: nurbs_surface_shape_functions.h:239
SizeType NumberOfNonzeroControlPoints() const
Definition: nurbs_surface_shape_functions.h:151
void ComputeBSplineShapeFunctionValues(const Vector &rKnotsU, const Vector &rKnotsV, const double ParameterU, const double ParameterV)
Definition: nurbs_surface_shape_functions.h:280
PointerVector is a container like stl vector but using a vector to store pointers to its data.
Definition: pointer_vector.h:72
size_type size() const
Definition: pointer_vector.h:255
void resize(size_type dim)
Definition: pointer_vector.h:314
static bool NewtonRaphsonSurface(CoordinatesArrayType &rProjectedPointLocalCoordinates, const CoordinatesArrayType &rPointGlobalCoordinates, CoordinatesArrayType &rProjectedPointGlobalCoordinates, const NurbsSurfaceGeometry< TDimension, TPointType > &rNurbsSurface, const int MaxIterations=20, const double Accuracy=1e-6)
Definition: projection_nurbs_geometry_utilities.h:129
The serialization consists in storing the state of an object into a storage format like data file or ...
Definition: serializer.h:123
void load(std::string const &rTag, TDataType &rObject)
Definition: serializer.h:207
void save(std::string const &rTag, std::array< TDataType, TDataSize > const &rObject)
Definition: serializer.h:545
Variable class contains all information needed to store and retrive data from a data container.
Definition: variable.h:63
Short class definition.
Definition: array_1d.h:61
#define KRATOS_SERIALIZE_SAVE_BASE_CLASS(Serializer, BaseType)
Definition: define.h:812
#define KRATOS_SERIALIZE_LOAD_BASE_CLASS(Serializer, BaseType)
Definition: define.h:815
#define KRATOS_ERROR
Definition: exception.h:161
#define KRATOS_ERROR_IF(conditional)
Definition: exception.h:162
#define KRATOS_DEBUG_ERROR_IF(conditional)
Definition: exception.h:171
IndexType GetLowerSpan(const SizeType PolynomialDegree, const Vector &rKnots, const double ParameterT)
Definition: nurbs_utilities.h:64
SizeType GetNumberOfControlPoints(const SizeType PolynomialDegree, const SizeType NumberOfKnots)
Definition: nurbs_utilities.h:99
static constexpr IndexType GetVectorIndexFromMatrixIndices(const SizeType NumberPerRow, const SizeType NumberPerColumn, const IndexType RowIndex, const IndexType ColumnIndex) noexcept
Definition: nurbs_utilities.h:133
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
TExpressionType::data_type norm_2(AMatrix::MatrixExpression< TExpressionType, TCategory > const &TheExpression)
Definition: amatrix_interface.h:625
Internals::Matrix< double, AMatrix::dynamic, 1 > Vector
Definition: amatrix_interface.h:472
std::size_t SizeType
The definition of the size type.
Definition: mortar_classes.h:43
const GeometryData BrepCurve< TContainerPointType, TContainerPointEmbeddedType >::msGeometryData & msGeometryDimension
Definition: brep_curve.h:483
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
v
Definition: generate_convection_diffusion_explicit_element.py:114
u
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:30
string t0
Definition: kernel_approximation_error.py:61
def load(f)
Definition: ode_solve.py:307
int n
manufactured solution and derivatives (u=0 at z=0 dudz=0 at z=domain_height)
Definition: ode_solve.py:402
int k
Definition: quadrature.py:595
int j
Definition: quadrature.py:648
int counter
Definition: script_THERMAL_CORRECT.py:218
N
Definition: sensitivityMatrix.py:29
integer i
Definition: TensorModule.f:17
e
Definition: run_cpp_mpi_tests.py:31