Added: Initialization of member nsd in the IntegrandBase constructor.
Changed: Using sprintf instead of stringstream, since that is used elsewhere. Changed: IntegrandBase::getNoSpaceDim does not need to be virtual. Changed: Static function Ierror removed.
This commit is contained in:
		@@ -19,21 +19,9 @@
 | 
			
		||||
#include "Field.h"
 | 
			
		||||
#include "Fields.h"
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <sstream>
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
  \brief Convenience function writing error message for non-implemented methods.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
static bool Ierror (const char* name)
 | 
			
		||||
{
 | 
			
		||||
  std::cerr <<" *** IntegrandBase::"<< name <<" not implemented."<< std::endl;
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
  The default implementation returns an ElmMats object with one left-hand-side
 | 
			
		||||
  matrix (unless we are doing a boundary integral) and one right-hand-side
 | 
			
		||||
@@ -126,7 +114,7 @@ bool IntegrandBase::initElementBou (const std::vector<int>& MNPC,
 | 
			
		||||
                                    const std::vector<size_t>& basis_sizes,
 | 
			
		||||
                                    LocalIntegral& elmInt)
 | 
			
		||||
{
 | 
			
		||||
  std::vector<int> MNPC1(MNPC.begin(), MNPC.begin()+elem_sizes.front());
 | 
			
		||||
  std::vector<int> MNPC1(MNPC.begin(),MNPC.begin()+elem_sizes.front());
 | 
			
		||||
  return this->initElementBou(MNPC1,elmInt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -134,7 +122,8 @@ bool IntegrandBase::initElementBou (const std::vector<int>& MNPC,
 | 
			
		||||
bool IntegrandBase::evalSol (Vector& s, const FiniteElement& fe,
 | 
			
		||||
                             const Vec3& X, const std::vector<int>& MNPC) const
 | 
			
		||||
{
 | 
			
		||||
  return Ierror("evalSol(Vector&,const FiniteElement& fe,const Vec3&,...)");
 | 
			
		||||
  std::cerr << __PRETTY_FUNCTION__ <<": Not implemented."<< std::endl;
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -143,26 +132,29 @@ bool IntegrandBase::evalSol (Vector& s, const MxFiniteElement& fe,
 | 
			
		||||
                             const std::vector<size_t>& elem_sizes,
 | 
			
		||||
                             const std::vector<size_t>& basis_sizes) const
 | 
			
		||||
{
 | 
			
		||||
  std::vector<int> MNPC1(MNPC.begin(), MNPC.begin()+elem_sizes.front());
 | 
			
		||||
  std::vector<int> MNPC1(MNPC.begin(),MNPC.begin()+elem_sizes.front());
 | 
			
		||||
  return this->evalSol(s,fe,X,MNPC1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool IntegrandBase::evalSol (Vector& s, const TensorFunc& asol, const Vec3& X) const
 | 
			
		||||
bool IntegrandBase::evalSol (Vector& s, const TensorFunc& asol,
 | 
			
		||||
                             const Vec3& X) const
 | 
			
		||||
{
 | 
			
		||||
  s = Vector(asol(X).ptr(),nsd*nsd);
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool IntegrandBase::evalSol (Vector& s, const STensorFunc& asol, const Vec3& X) const
 | 
			
		||||
bool IntegrandBase::evalSol (Vector& s, const STensorFunc& asol,
 | 
			
		||||
                             const Vec3& X) const
 | 
			
		||||
{
 | 
			
		||||
  s = Vector(asol(X).ptr(),nsd*(nsd+1)/2);
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool IntegrandBase::evalSol (Vector& s, const VecFunc& asol, const Vec3& X) const
 | 
			
		||||
bool IntegrandBase::evalSol (Vector& s, const VecFunc& asol,
 | 
			
		||||
                             const Vec3& X) const
 | 
			
		||||
{
 | 
			
		||||
  s = Vector(asol(X).ptr(),nsd);
 | 
			
		||||
  return true;
 | 
			
		||||
@@ -200,22 +192,20 @@ Vector* IntegrandBase::getNamedVector (const std::string& name) const
 | 
			
		||||
  return it == myFields.end() ? nullptr : it->second;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::string IntegrandBase::getField1Name(size_t idx, const char* prefix) const 
 | 
			
		||||
 | 
			
		||||
std::string IntegrandBase::getField1Name (size_t idx, const char* prefix) const 
 | 
			
		||||
{
 | 
			
		||||
  std::stringstream stream;
 | 
			
		||||
  if(prefix)
 | 
			
		||||
    stream << prefix << " ";
 | 
			
		||||
  stream << "primary solution " << idx+1;
 | 
			
		||||
  return stream.str();
 | 
			
		||||
  char name[32];
 | 
			
		||||
  sprintf(name,"primary solution %lu",1+idx);
 | 
			
		||||
  return prefix ? prefix +  std::string(" ") + name : name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::string IntegrandBase::getField2Name(size_t idx, const char* prefix) const 
 | 
			
		||||
 | 
			
		||||
std::string IntegrandBase::getField2Name (size_t idx, const char* prefix) const 
 | 
			
		||||
{
 | 
			
		||||
  std::stringstream stream;
 | 
			
		||||
  if(prefix)
 | 
			
		||||
    stream << prefix << " ";
 | 
			
		||||
  stream << "secondary solution " << idx+1;
 | 
			
		||||
  return stream.str();
 | 
			
		||||
  char name[32];
 | 
			
		||||
  sprintf(name,"secondary solution %lu",1+idx);
 | 
			
		||||
  return prefix ? prefix + std::string(" ") + name : name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ class IntegrandBase : public Integrand
 | 
			
		||||
{
 | 
			
		||||
protected:
 | 
			
		||||
  //! \brief The default constructor is protected to allow sub-classes only.
 | 
			
		||||
  IntegrandBase() : npv(1), m_mode(SIM::INIT) {}
 | 
			
		||||
  IntegrandBase(unsigned short int n = 0) : nsd(n), npv(1), m_mode(SIM::INIT) {}
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  //! \brief Empty destructor.
 | 
			
		||||
@@ -87,6 +87,7 @@ public:
 | 
			
		||||
  // Element-level initialization interface
 | 
			
		||||
  // ======================================
 | 
			
		||||
 | 
			
		||||
  using Integrand::getLocalIntegral;
 | 
			
		||||
  //! \brief Returns a local integral contribution object for the given element.
 | 
			
		||||
  //! \param[in] nen Number of nodes on element
 | 
			
		||||
  //! \param[in] iEl Global element number (1-based)
 | 
			
		||||
@@ -217,19 +218,19 @@ public:
 | 
			
		||||
  //! \brief Returns a pointer to an Integrand for nodal force evaluation.
 | 
			
		||||
  virtual ForceBase* getForceIntegrand() const { return 0; }
 | 
			
		||||
 | 
			
		||||
  //! \brief Returns number of spatial dimensions.
 | 
			
		||||
  virtual size_t getNoSpaceDim() const { return nsd; }
 | 
			
		||||
  //! \brief Returns the number of spatial dimensions.
 | 
			
		||||
  size_t getNoSpaceDim() const { return nsd; }
 | 
			
		||||
  //! \brief Returns the number of primary/secondary solution field components.
 | 
			
		||||
  virtual size_t getNoFields(int = 2) const { return 0; }
 | 
			
		||||
 | 
			
		||||
  //! \brief Returns the name of a primary solution field component.
 | 
			
		||||
  //! \param[in] idx     Identifier integer for multiple solutions
 | 
			
		||||
  //! \param[in] prefix  Field names will start with this string
 | 
			
		||||
  virtual std::string getField1Name(size_t idx, const char* prefix = 0) const ;
 | 
			
		||||
  //! \param[in] idx Field component index
 | 
			
		||||
  //! \param[in] prefix Name prefix for all components
 | 
			
		||||
  virtual std::string getField1Name(size_t idx, const char* prefix = 0) const;
 | 
			
		||||
  //! \brief Returns the name of a secondary solution field component.
 | 
			
		||||
  //! \param[in] idx     Identifier integer for multiple solutions
 | 
			
		||||
  //! \param[in] prefix  Field names will start with this string
 | 
			
		||||
  virtual std::string getField2Name(size_t idx, const char* prefix = 0) const ;
 | 
			
		||||
  //! \param[in] idx Field component index
 | 
			
		||||
  //! \param[in] prefix Name prefix for all components
 | 
			
		||||
  virtual std::string getField2Name(size_t idx, const char* prefix = 0) const;
 | 
			
		||||
 | 
			
		||||
  //! \brief Returns the number of solution vectors.
 | 
			
		||||
  size_t getNoSolutions() const { return primsol.size(); }
 | 
			
		||||
@@ -268,9 +269,9 @@ private:
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  unsigned short int nsd;     //!< Number of spatial dimensions (1,2 or, 3)
 | 
			
		||||
  Vectors            primsol; //!< Primary solution vectors for current patch
 | 
			
		||||
  unsigned short int npv;     //!< Number of primary solution variables per node
 | 
			
		||||
  SIM::SolutionMode  m_mode;  //!< Current solution mode
 | 
			
		||||
  Vectors            primsol; //!< Primary solution vectors for current patch
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user