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:
Arne Morten Kvarving
2017-11-06 13:37:05 +01:00
parent d1dca5088c
commit 8b825190d7
9 changed files with 65 additions and 0 deletions

View File

@@ -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
// =============================

View File

@@ -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();

View File

@@ -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

View File

@@ -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) *

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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