Path: blob/devel/ElmerGUI/netgen/libsrc/meshing/improve3.hpp
3206 views
#ifndef FILE_IMPROVE31#define FILE_IMPROVE323456///7class MeshOptimize3d8{9public:10void CombineImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY);11void SplitImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY);12void SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY,13const BitArray * working_elements = NULL);14void SwapImproveSurface (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY,15const BitArray * working_elements = NULL,16const ARRAY< ARRAY<int,PointIndex::BASE>* > * idmaps = NULL);17void SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY);18};19202122extern double CalcBad (const Mesh::T_POINTS & points, const Element & elem,23double h);2425extern double CalcTotalBad (const Mesh::T_POINTS & points,26const Mesh::T_VOLELEMENTS & elements);2728extern int WrongOrientation (const Mesh::T_POINTS & points, const Element & el);293031/* Functional depending of inner point inside triangular surface */323334class MinFunctionSum : public MinFunction35{36protected:37ARRAY<MinFunction*> functions;3839public:4041virtual double Func (const Vector & x) const;42virtual void Grad (const Vector & x, Vector & g) const;43virtual double FuncGrad (const Vector & x, Vector & g) const;44virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const;45virtual double GradStopping (const Vector & x) const;4647void AddFunction(MinFunction & fun);4849const MinFunction & Function(int i) const;50MinFunction & Function(int i);51};52535455class PointFunction1 : public MinFunction56{57Mesh::T_POINTS & points;58const ARRAY<INDEX_3> & faces;59double h;60public:61PointFunction1 (Mesh::T_POINTS & apoints,62const ARRAY<INDEX_3> & afaces,63double ah);6465virtual double Func (const Vector & x) const;66virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const;67virtual double FuncGrad (const Vector & x, Vector & g) const;68virtual double GradStopping (const Vector & x) const;69};707172class JacobianPointFunction : public MinFunction73{74public:75Mesh::T_POINTS & points;76const Mesh::T_VOLELEMENTS & elements;77TABLE<INDEX> elementsonpoint;78PointIndex actpind;7980bool onplane;81Vec<3> nv;8283public:84JacobianPointFunction (Mesh::T_POINTS & apoints,85const Mesh::T_VOLELEMENTS & aelements);8687virtual void SetPointIndex (PointIndex aactpind);88virtual double Func (const Vector & x) const;89virtual double FuncGrad (const Vector & x, Vector & g) const;90virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const;9192inline void SetNV(const Vec<3> & anv) {nv = anv; onplane = true;}93inline void UnSetNV(void) {onplane = false;}94};95969798#endif99100101