Path: blob/devel/ElmerGUI/netgen/libsrc/csg/identify.hpp
3206 views
1#ifndef FILE_IDENTIFY2#define FILE_IDENTIFY34/**************************************************************************/5/* File: identify.hh */6/* Author: Joachim Schoeberl */7/* Date: 1. Aug. 99 */8/**************************************************************************/910/**11Identify surfaces for periodic b.c. or12thin domains13*/141516class SpecialPoint;17class Identification18{19protected:20const CSGeometry & geom;21// identified faces, index sorted22INDEX_2_HASHTABLE<int> identfaces;23int nr;2425public:26Identification (int anr, const CSGeometry & ageom);27virtual ~Identification ();28virtual void Print (ostream & ost) const = 0;29virtual void GetData (ostream & ost) const = 0;3031/// obsolete32// virtual void IdentifySpecialPoints (ARRAY<class SpecialPoint> & points);3334/// can identify both special points (fixed direction)35/// (identified points, same tangent)36virtual int Identifyable (const SpecialPoint & sp1, const SpecialPoint & sp2,37const TABLE<int> & specpoint2solid,38const TABLE<int> & specpoint2surface) const;39///40virtual int Identifyable (const Point<3> & p1, const Point<3> & sp2) const;41/// is it possible to identify sp1 with some other ?42virtual int IdentifyableCandidate (const SpecialPoint & sp1) const;4344/// are points (if connected) by a short edge (direction anyhow) ?45virtual int ShortEdge (const SpecialPoint & sp1, const SpecialPoint & sp2) const;4647/// add entries in mesh identification tables48virtual void IdentifyPoints (class Mesh & mesh);4950/// add entries to identified faces (based on segment infos)51virtual void IdentifyFaces (class Mesh & mesh);5253/// get point on other surface, add entry in mesh identifications54virtual int GetIdentifiedPoint (class Mesh & mesh, int pi1);5556/// copy surfaces, or fill rectangles57virtual void BuildSurfaceElements (ARRAY<class Segment> & segs,58class Mesh & mesh,59const Surface * surf);6061/// insert volume elements in thin layers62virtual void BuildVolumeElements (ARRAY<class Element2d> & surfels,63class Mesh & mesh);6465/// get list of identified faces66virtual void GetIdentifiedFaces (ARRAY<INDEX_2> & idfaces) const;6768friend ostream & operator<< (ostream & ost, Identification & ident);69};707172class PeriodicIdentification : public Identification73{74const Surface * s1;75const Surface * s2;76public:77PeriodicIdentification (int anr,78const CSGeometry & ageom,79const Surface * as1,80const Surface * as2);81virtual ~PeriodicIdentification ();82virtual void Print (ostream & ost) const;83virtual void GetData (ostream & ost) const;848586// virtual void IdentifySpecialPoints (ARRAY<class SpecialPoint> & points);87virtual int Identifyable (const SpecialPoint & sp1, const SpecialPoint & sp2,88const TABLE<int> & specpoint2solid,89const TABLE<int> & specpoint2surface) const;9091virtual int Identifyable (const Point<3> & p1, const Point<3> & sp2) const;92virtual int GetIdentifiedPoint (class Mesh & mesh, int pi1);93virtual void IdentifyPoints (class Mesh & mesh);94virtual void IdentifyFaces (class Mesh & mesh);95virtual void BuildSurfaceElements (ARRAY<class Segment> & segs,96class Mesh & mesh,97const Surface * surf);98};99100101///102class TopLevelObject;103class CloseSurfaceIdentification : public Identification104{105const Surface * s1;106const Surface * s2;107const TopLevelObject * domain;108///109int dom_nr;110/// number of refinement levels (in Z-refinement)111int ref_levels;112/// number of refinement levels for layer next to s1 (in Z-refinement)113int ref_levels_s1;114/// number of refinement levels for layer next to s2 (in Z-refinement)115int ref_levels_s2;116///117double eps_n;118ARRAY<double> slices;119/// used only for domain-local identification:120ARRAY<int> domain_surfaces;121///122bool dom_surf_valid;123124///125Vec<3> direction;126///127bool usedirection;128public:129CloseSurfaceIdentification (int anr,130const CSGeometry & ageom,131const Surface * as1,132const Surface * as2,133const TopLevelObject * adomain,134const Flags & flags);135virtual ~CloseSurfaceIdentification ();136137virtual void Print (ostream & ost) const;138virtual void GetData (ostream & ost) const;139140141// virtual void IdentifySpecialPoints (ARRAY<class SpecialPoint> & points);142virtual int Identifyable (const SpecialPoint & sp1, const SpecialPoint & sp2,143const TABLE<int> & specpoint2solid,144const TABLE<int> & specpoint2surface) const;145virtual int Identifyable (const Point<3> & p1, const Point<3> & sp2) const;146virtual int IdentifyableCandidate (const SpecialPoint & sp1) const;147virtual int ShortEdge (const SpecialPoint & sp1, const SpecialPoint & sp2) const;148virtual int GetIdentifiedPoint (class Mesh & mesh, int pi1);149const ARRAY<double> & GetSlices () const { return slices; }150virtual void IdentifyPoints (class Mesh & mesh);151virtual void IdentifyFaces (class Mesh & mesh);152virtual void BuildSurfaceElements (ARRAY<class Segment> & segs,153class Mesh & mesh,154const Surface * surf);155void BuildSurfaceElements2 (ARRAY<class Segment> & segs,156class Mesh & mesh,157const Surface * surf);158159virtual void BuildVolumeElements (ARRAY<class Element2d> & surfels,160class Mesh & mesh);161162int RefLevels () const { return ref_levels; }163int RefLevels1 () const { return ref_levels_s1; }164int RefLevels2 () const { return ref_levels_s2; }165166bool IsSkewIdentification(void) const {return usedirection;}167const Vec<3> & GetDirection(void) const {return direction;}168169const Surface & GetSurface1(void) const170{ return *s1;}171const Surface & GetSurface2(void) const172{ return *s2;}173};174175176class CloseEdgesIdentification : public Identification177{178const Surface * facet;179const Surface * s1;180const Surface * s2;181public:182CloseEdgesIdentification (int anr,183const CSGeometry & ageom,184const Surface * afacet,185const Surface * as1,186const Surface * as2);187virtual ~CloseEdgesIdentification ();188virtual void Print (ostream & ost) const;189virtual void GetData (ostream & ost) const;190191// virtual void IdentifySpecialPoints (ARRAY<class SpecialPoint> & points);192virtual int Identifyable (const SpecialPoint & sp1, const SpecialPoint & sp2,193const TABLE<int> & specpoint2solid,194const TABLE<int> & specpoint2surface) const;195196197virtual void IdentifyPoints (class Mesh & mesh);198virtual void BuildSurfaceElements (ARRAY<class Segment> & segs,199class Mesh & mesh,200const Surface * surf);201};202203#endif204205206