ASMbase::getElementCoordinates: add flag to force integration basis

required as this is used to obtain coordinates for integration elements
in CFL calculations and in ASMu2D evalPoint
This commit is contained in:
Arne Morten Kvarving 2023-08-31 14:08:56 +02:00
parent 1e01b45c9b
commit 574bffdfb1
21 changed files with 26 additions and 23 deletions

View File

@ -233,9 +233,11 @@ public:
virtual void getNodalCoordinates(Matrix& X) const = 0;
//! \brief Returns a matrix with nodal coordinates for an element.
//! \param[in] iel 1-based element index local to current patch
//! \param[in] forceItg If true force returning integration basis coordinates
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
virtual bool getElementCoordinates(Matrix& X, int iel) const = 0;
virtual bool getElementCoordinates(Matrix& X, int iel,
bool forceItg = false) const = 0;
//! \brief Finds the global (or patch-local) node numbers on a patch boundary.
//! \param[in] lIndex Local index of the boundary face/edge

View File

@ -652,7 +652,7 @@ Tensor ASMs1D::getRotation (size_t inod) const
}
bool ASMs1D::getElementCoordinates (Matrix& X, int iel) const
bool ASMs1D::getElementCoordinates (Matrix& X, int iel, bool) const
{
return this->getElementCoordinates(X,iel,MNPC,curv);
}

View File

@ -87,7 +87,7 @@ public:
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
//! \param[in] iel Element index
virtual bool getElementCoordinates(Matrix& X, int iel) const;
virtual bool getElementCoordinates(Matrix& X, int iel, bool = false) const;
//! \brief Returns a matrix with nodal coordinates for an element.
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes

View File

@ -130,7 +130,7 @@ Vec3 ASMs1DLag::getCoord (size_t inod) const
}
bool ASMs1DLag::getElementCoordinates (Matrix& X, int iel) const
bool ASMs1DLag::getElementCoordinates (Matrix& X, int iel, bool) const
{
if (iel < 1 || (size_t)iel > MNPC.size())
{

View File

@ -55,7 +55,7 @@ public:
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
//! \param[in] iel Element index
virtual bool getElementCoordinates(Matrix& X, int iel) const;
virtual bool getElementCoordinates(Matrix& X, int iel, bool = true) const;
//! \brief Returns a matrix with all nodal coordinates within the patch.
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes

View File

@ -1353,7 +1353,7 @@ Vec3 ASMs2D::getCoord (size_t inod) const
}
bool ASMs2D::getElementCoordinates (Matrix& X, int iel) const
bool ASMs2D::getElementCoordinates (Matrix& X, int iel, bool forceItg) const
{
#ifdef INDEX_CHECK
if (iel < 1 || (size_t)iel > MNPC.size())
@ -1364,7 +1364,7 @@ bool ASMs2D::getElementCoordinates (Matrix& X, int iel) const
}
#endif
const Go::SplineSurface* geo = this->getBasis(ASM::GEOMETRY_BASIS);
const Go::SplineSurface* geo = forceItg ? surf : this->getBasis(ASM::GEOMETRY_BASIS);
int lnod0 = this->getFirstItgElmNode();
if (geo != surf) {

View File

@ -241,7 +241,8 @@ public:
//! \param[in] iel Element index
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
virtual bool getElementCoordinates(Matrix& X, int iel) const;
//! \param[in] forceItg If true return integration basis element coordinates
virtual bool getElementCoordinates(Matrix& X, int iel, bool forceItg = false) const;
//! \brief Returns a matrix with all nodal coordinates within the patch.
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes

View File

@ -221,7 +221,7 @@ void ASMs2DLag::setCoord (size_t inod, const Vec3& Xnod)
}
bool ASMs2DLag::getElementCoordinates (Matrix& X, int iel) const
bool ASMs2DLag::getElementCoordinates (Matrix& X, int iel, bool) const
{
if (iel < 1 || (size_t)iel > MNPC.size())
{

View File

@ -111,7 +111,7 @@ public:
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
//! \param[in] iel Element index
virtual bool getElementCoordinates(Matrix& X, int iel) const;
virtual bool getElementCoordinates(Matrix& X, int iel, bool = true) const;
//! \brief Returns a matrix with all nodal coordinates within the patch.
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes

View File

@ -1622,7 +1622,7 @@ Vec3 ASMs3D::getCoord (size_t inod) const
}
bool ASMs3D::getElementCoordinates (Matrix& X, int iel) const
bool ASMs3D::getElementCoordinates (Matrix& X, int iel, bool) const
{
#ifdef INDEX_CHECK
if (iel < 1 || (size_t)iel > MNPC.size())

View File

@ -256,7 +256,7 @@ public:
//! \param[in] iel Element index
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
virtual bool getElementCoordinates(Matrix& X, int iel) const;
virtual bool getElementCoordinates(Matrix& X, int iel, bool = false) const;
//! \brief Returns a matrix with all nodal coordinates within the patch.
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes

View File

@ -246,7 +246,7 @@ void ASMs3DLag::setCoord (size_t inod, const Vec3& Xnod)
}
bool ASMs3DLag::getElementCoordinates (Matrix& X, int iel) const
bool ASMs3DLag::getElementCoordinates (Matrix& X, int iel, bool) const
{
if (iel < 1 || (size_t)iel > MNPC.size())
{

View File

@ -111,7 +111,7 @@ public:
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
//! \param[in] iel Element index
virtual bool getElementCoordinates(Matrix& X, int iel) const;
virtual bool getElementCoordinates(Matrix& X, int iel, bool = true) const;
//! \brief Returns a matrix with all nodal coordinates within the patch.
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes

View File

@ -391,7 +391,7 @@ void ASMs3Dmx::closeBoundaries (int dir, int, int)
}
bool ASMs3Dmx::getElementCoordinates (Matrix& X, int iel) const
bool ASMs3Dmx::getElementCoordinates (Matrix& X, int iel, bool) const
{
#ifdef INDEX_CHECK
if (iel < 1 || (size_t)iel > MNPC.size())

View File

@ -66,7 +66,7 @@ public:
//! \param[in] iel Element index
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
virtual bool getElementCoordinates(Matrix& X, int iel) const;
virtual bool getElementCoordinates(Matrix& X, int iel, bool = true) const;
//! \brief Returns the global coordinates for the given node.
//! \param[in] inod 1-based node index local to current patch

View File

@ -197,7 +197,7 @@ void ASMsupel::getNodalCoordinates (Matrix& X) const
}
bool ASMsupel::getElementCoordinates (Matrix& X, int iel) const
bool ASMsupel::getElementCoordinates (Matrix& X, int iel, bool) const
{
if (iel != 1)
return false;

View File

@ -66,7 +66,7 @@ public:
//! \param[in] iel 1-based element index local to current patch
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
virtual bool getElementCoordinates(Matrix& X, int iel) const;
virtual bool getElementCoordinates(Matrix& X, int iel, bool = false) const;
//! \brief Finds the global (or patch-local) node numbers on a patch boundary.
//! \param[in] lIndex Local index of the boundary face/edge

View File

@ -974,7 +974,7 @@ bool ASMu2D::getCoordinates (Matrix& X, unsigned char nsd,
}
bool ASMu2D::getElementCoordinates (Matrix& X, int iel) const
bool ASMu2D::getElementCoordinates (Matrix& X, int iel, bool) const
{
#ifdef INDEX_CHECK
if (iel < 1 || iel > lrspline->nElements())
@ -1909,7 +1909,7 @@ int ASMu2D::evalPoint (int iel, const double* param, Vec3& X) const
return -1;
Matrix Xnod;
if (!this->getElementCoordinates(Xnod,1+iel))
if (!this->getElementCoordinates(Xnod,1+iel,true))
return -1;
X = Xnod * fe.N;

View File

@ -161,7 +161,7 @@ public:
//! \param[in] iel 1-based element index
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
virtual bool getElementCoordinates(Matrix& X, int iel) const;
virtual bool getElementCoordinates(Matrix& X, int iel, bool = false) const;
//! \brief Obtain element neighbours.
virtual void getElmConnectivities(IntMat& neighs) const;

View File

@ -705,7 +705,7 @@ double ASMu3D::getParametricVolume (int iel) const
}
bool ASMu3D::getElementCoordinates (Matrix& X, int iel) const
bool ASMu3D::getElementCoordinates (Matrix& X, int iel, bool) const
{
#ifdef INDEX_CHECK
if (iel < 1 || (size_t)iel > MNPC.size())

View File

@ -147,7 +147,7 @@ public:
//! \param[in] iel 1-based element index
//! \param[out] X 3\f$\times\f$n-matrix, where \a n is the number of nodes
//! in one element
virtual bool getElementCoordinates(Matrix& X, int iel) const;
virtual bool getElementCoordinates(Matrix& X, int iel, bool = false) const;
//! \brief Obtain element neighbours.
virtual void getElmConnectivities(IntMat& neighs) const;