added: ASMbase::getProjectedFields
this returns a Fields instance over the projection basis. implement this in ASMxxDmx where this is relevant.
This commit is contained in:
@@ -29,6 +29,7 @@ typedef MPCSet::const_iterator MPCIter; //!< Iterator over an MPC equation set
|
||||
struct TimeDomain;
|
||||
class ElementBlock;
|
||||
class Field;
|
||||
class Fields;
|
||||
class GlobalIntegral;
|
||||
class IntegrandBase;
|
||||
class Integrand;
|
||||
@@ -576,6 +577,10 @@ public:
|
||||
//! \brief Returns the number of projection nodes for this patch.
|
||||
virtual size_t getNoProjectionNodes() const { return this->getNoNodes(1); }
|
||||
|
||||
//! \brief Returns a field using the projection basis.
|
||||
virtual Fields* getProjectedFields(const Vector&, size_t) const
|
||||
{ return nullptr; }
|
||||
|
||||
// Methods for result extraction
|
||||
// =============================
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "CoordinateMapping.h"
|
||||
#include "GaussQuadrature.h"
|
||||
#include "SplineUtils.h"
|
||||
#include "SplineFields2D.h"
|
||||
#include "Utilities.h"
|
||||
#include "Profiler.h"
|
||||
#include "Vec3Oper.h"
|
||||
@@ -1217,6 +1218,15 @@ void ASMs2Dmx::getBoundaryNodes (int lIndex, IntVec& nodes, int basis,
|
||||
}
|
||||
|
||||
|
||||
Fields* ASMs2Dmx::getProjectedFields(const Vector& coefs, size_t nf) const
|
||||
{
|
||||
if (projBasis != m_basis[0])
|
||||
return new SplineFields2D(projBasis.get(), coefs, nf);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
size_t ASMs2Dmx::getNoProjectionNodes() const
|
||||
{
|
||||
return projBasis->numCoefs_u() * projBasis->numCoefs_v();
|
||||
|
||||
@@ -209,6 +209,11 @@ public:
|
||||
//! \brief Returns the number of projection nodes for this patch.
|
||||
virtual size_t getNoProjectionNodes() const;
|
||||
|
||||
//! \brief Returns a field using the projection basis.
|
||||
//! \param[in] coefs The coefficients for the field
|
||||
//! \param[in] nf Number of components
|
||||
virtual Fields* getProjectedFields(const Vector& coefs, size_t nf) const;
|
||||
|
||||
using ASMs2D::generateThreadGroups;
|
||||
//! \brief Generates element groups for multi-threading of interior integrals.
|
||||
//! \param[in] integrand Object with problem-specific data and methods
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "IntegrandBase.h"
|
||||
#include "CoordinateMapping.h"
|
||||
#include "GaussQuadrature.h"
|
||||
#include "SplineFields3D.h"
|
||||
#include "SplineUtils.h"
|
||||
#include "Utilities.h"
|
||||
#include "Profiler.h"
|
||||
@@ -1359,6 +1360,15 @@ void ASMs3Dmx::getBoundaryNodes (int lIndex, IntVec& nodes, int basis,
|
||||
}
|
||||
|
||||
|
||||
Fields* ASMs3Dmx::getProjectedFields(const Vector& coefs, size_t nf) const
|
||||
{
|
||||
if (projBasis != m_basis[0])
|
||||
return new SplineFields3D(projBasis.get(), coefs, nf);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
size_t ASMs3Dmx::getNoProjectionNodes() const
|
||||
{
|
||||
return projBasis->numCoefs(0) *
|
||||
|
||||
@@ -201,6 +201,11 @@ public:
|
||||
//! \brief Returns the number of projection nodes for this patch.
|
||||
virtual size_t getNoProjectionNodes() const;
|
||||
|
||||
//! \brief Returns a field using the projection basis.
|
||||
//! \param[in] coefs The coefficients for the field
|
||||
//! \param[in] nf Number of components
|
||||
virtual Fields* getProjectedFields(const Vector& coefs, size_t nf) const;
|
||||
|
||||
//! \brief Generates element groups for multi-threading of interior integrals.
|
||||
//! \param[in] integrand Object with problem-specific data and methods
|
||||
//! \param[in] silence If \e true, suppress threading group outprint
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "Profiler.h"
|
||||
#include "Vec3Oper.h"
|
||||
#include "Vec3.h"
|
||||
#include "LRSplineFields2D.h"
|
||||
|
||||
#include <array>
|
||||
#include <fstream>
|
||||
@@ -1156,3 +1157,12 @@ size_t ASMu2Dmx::getNoProjectionNodes() const
|
||||
{
|
||||
return projBasis->nBasisFunctions();
|
||||
}
|
||||
|
||||
|
||||
Fields* ASMu2Dmx::getProjectedFields(const Vector& coefs, size_t nf) const
|
||||
{
|
||||
if (projBasis != m_basis[0])
|
||||
return new LRSplineFields2D(projBasis.get(), coefs, nf);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -166,6 +166,11 @@ public:
|
||||
//! \brief Returns the number of projection nodes for this patch.
|
||||
virtual size_t getNoProjectionNodes() const;
|
||||
|
||||
//! \brief Returns a field using the projection basis.
|
||||
//! \param[in] coefs The coefficients for the field
|
||||
//! \param[in] nf Number of components
|
||||
virtual Fields* getProjectedFields(const Vector& coefs, size_t nf) const;
|
||||
|
||||
using ASMu2D::refine;
|
||||
//! \brief Refines the mesh adaptively.
|
||||
//! \param[in] prm Input data used to control the refinement
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "Profiler.h"
|
||||
#include "Vec3Oper.h"
|
||||
#include "Vec3.h"
|
||||
#include "LRSplineFields3D.h"
|
||||
|
||||
#include <array>
|
||||
#include <numeric>
|
||||
@@ -933,3 +934,12 @@ size_t ASMu3Dmx::getNoProjectionNodes() const
|
||||
{
|
||||
return projBasis->nBasisFunctions();
|
||||
}
|
||||
|
||||
|
||||
Fields* ASMu3Dmx::getProjectedFields(const Vector& coefs, size_t nf) const
|
||||
{
|
||||
if (projBasis != m_basis[0])
|
||||
return new LRSplineFields3D(projBasis.get(), coefs, nf);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -158,6 +158,11 @@ public:
|
||||
//! \brief Returns the number of projection nodes for this patch.
|
||||
virtual size_t getNoProjectionNodes() const;
|
||||
|
||||
//! \brief Returns a field using the projection basis.
|
||||
//! \param[in] coefs The coefficients for the field
|
||||
//! \param[in] nf Number of components
|
||||
virtual Fields* getProjectedFields(const Vector& coefs, size_t nf) const;
|
||||
|
||||
using ASMu3D::refine;
|
||||
//! \brief Refines the mesh adaptively.
|
||||
//! \param[in] prm Input data used to control the refinement
|
||||
|
||||
Reference in New Issue
Block a user