35 #ifndef UTILITIES_NEKMESH_NODEOPTI
36 #define UTILITIES_NEKMESH_NODEOPTI
62 std::map<LibUtilities::ShapeType, DerivUtilSharedPtr> d,
67 for (
int i = 0; i < e.size(); i++)
69 m_data[e[i]->GetEl()->GetShapeType()].push_back(e[i]);
73 size_t storageCount = 0;
76 for (
auto &typeIt :
m_data)
79 const int nElmt = typeIt.second.size();
81 storageCount = std::max(storageCount,
83 typeIt.second.size());
87 DerivArray(boost::extents[dim][nElmt][dim][pts])));
108 std::map<LibUtilities::ShapeType, std::vector<ElUtilSharedPtr> >
m_data;
111 std::unordered_map<LibUtilities::ShapeType, DerivArray, EnumHash>
m_derivs;
149 std::map<LibUtilities::ShapeType, DerivUtilSharedPtr> d,
162 std::map<LibUtilities::ShapeType, DerivUtilSharedPtr> d,
optiType o)
175 std::map<LibUtilities::ShapeType, DerivUtilSharedPtr> d,
188 std::map<LibUtilities::ShapeType, DerivUtilSharedPtr> d,
optiType o)
Provides a generic Factory class.
Base class for tasks to be sent to the ThreadManager to run.
static NodeOptiSharedPtr create(NodeSharedPtr n, std::vector< ElUtilSharedPtr > e, ResidualSharedPtr r, std::map< LibUtilities::ShapeType, DerivUtilSharedPtr > d, optiType o)
NodeOpti2D2D(NodeSharedPtr n, std::vector< ElUtilSharedPtr > e, ResidualSharedPtr r, std::map< LibUtilities::ShapeType, DerivUtilSharedPtr > d, optiType o)
NodeOpti3D3D(NodeSharedPtr n, std::vector< ElUtilSharedPtr > e, ResidualSharedPtr r, std::map< LibUtilities::ShapeType, DerivUtilSharedPtr > d, optiType o)
static NodeOptiSharedPtr create(NodeSharedPtr n, std::vector< ElUtilSharedPtr > e, ResidualSharedPtr r, std::map< LibUtilities::ShapeType, DerivUtilSharedPtr > d, optiType o)
NodeOpti(NodeSharedPtr n, std::vector< ElUtilSharedPtr > e, ResidualSharedPtr r, std::map< LibUtilities::ShapeType, DerivUtilSharedPtr > d, optiType o, int dim)
NekDouble GetFunctional(NekDouble &minJacNew, bool gradient=true)
Evaluate functional for elements connected to a node.
std::map< LibUtilities::ShapeType, DerivUtilSharedPtr > m_derivUtils
static NekDouble gradTol()
std::vector< NekDouble > m_tmpStore
std::map< LibUtilities::ShapeType, std::vector< ElUtilSharedPtr > > m_data
virtual void Optimise()=0
boost::multi_array< NekDouble, 4 > DerivArray
std::unordered_map< LibUtilities::ShapeType, DerivArray, EnumHash > m_derivs
int IsIndefinite()
Returns 1 if Hessian matrix is indefinite and 0 otherwise.
std::vector< NekDouble > m_grad
void MinEigen(NekDouble &val)
Calculates minimum eigenvalue of Hessian matrix.
static NekDouble alphaTol()
NodeOptiJob(NodeOpti *no)
std::shared_ptr< Node > NodeSharedPtr
NodeOptiFactory & GetNodeOptiFactory()
LibUtilities::NekFactory< int, NodeOpti, NodeSharedPtr, std::vector< ElUtilSharedPtr >, ResidualSharedPtr, std::map< LibUtilities::ShapeType, DerivUtilSharedPtr >, optiType > NodeOptiFactory
std::shared_ptr< NodeOpti > NodeOptiSharedPtr
std::shared_ptr< Residual > ResidualSharedPtr