MIDAS  0.75
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
geomcomp.h
Go to the documentation of this file.
1 #ifndef MIDAS_GEOMCOMP_H
2 #define MIDAS_GEOMCOMP_H
3 
4 #include "geometry.h"
5 #include "attribute.h"
6 
7 #include "gelib.h"
8 #include "arrays.h"
9 
10 
17 namespace midaspace {
18 
23 {
24  private:
25  // Property HELP
26  // =============
27  // - p. slouzi pro prirazeni vlastnosti nejakemu komponentu (uzlu/elementu).
28  // - jeden komponent muze mit zadnou, jednu nebo vice hodnot property, nevim ale, jak to bude s prednosti dedeni, zatim pouzivam jednu
29  // - property je typu integer
30  // - p. by mela byt kladna nenulova, pak zarucuji funkcnost
31  // - muze byt i zaporna (nedoporucuji, neni duvod) i nulova (nedoporucuji, t3d pri neurcene prop priradi prop 0)
32  // - zadani jako mesh: zadat muzu property ve VTK na puvodni siti
33  // - zadani jako model: property je ID (lidske cislovani od 1) rodicovskeho komponentu z modelu
34  // ==================
35  // UZEL - main prop. - vertexu prop z modelu, na kterym uzel lezi; 1 i vice hodnot, pokud T3d slouci 2 vertexy modelu do jednoho uzlu meshe
36  // other prop. - edge, face, volume prop z modelu, na kterym uzel lezi; 1 i vice hodnot zcela bezne
37  // IMPLEMENTACE mprop je zde, tj. geomcomp.h; oprop je v point.h
38  // a) rucni prirazeni - mprop je jedna, podle ni se priradi informace z ctrl.txt; oprop se ignorujou
39  // b) meshovani v midasu, tj. existuje "master model geometry"
40  // - attributes se budou dedit prioritne ze vsech property, zatim se dedi jen podepreni:
41  // if (jedina mpop) tak se podepreni zdedi z vertexu
42  // else if (edge oprop) tak se podepreni zdedi z z edge (tj. edge existujici v modelu); pokud budou 2 nenulove edge oprop, tak je to chyba, pak musi byt nenulova mprop
43  // else if (face oprop) tak se podepreni zdedi z z face (tj. face existujici v modelu); pokud budou 2 nenulove face oprop, tak je to chyba, pak musi byt nenulove neco predchazejici
44  //
45  // ELEMENT - main property - asi jen jedna (pokud vic tak je to divny, proc by t3d slucovalo elementy)
46  // - other property - zadna
47  // IMPLEMENTACE
48  // a) rucni prirazeni - mprop je jedna, podle ni se priradi informace z ctrl.txt
49  // b) meshovani v midasu, tj. existuje "master model geometry" a attributes se zdedi
50  //
51  // FACEDGE - other property - zadna
52  // - main property - muze mit i vice property, napr. kdyz mam 2 uzly a mezi nemi lezi 2 pruty, tak ja z nich udelam jednu edge
53  // IMPLEMENTACE
54  // a) rucni prirazeni
55  // - edgi priradim property pouze v t3d (mozna v jktk, ale to zatim nepodporuju)
56  // - mprop je jedna, tu kterou jsme uvedl u "curve", pokud jich bude vic, tak tak error = nepodporuju to
57  // pak podle ni se priradi informace z ctrl.txt primo edgi
58  // b) meshovani v midasu, tj. existuje "master model geometry" a attributes se zdedi,, zatim se dedi jen zatizeni, na edgi hranove na face plosne
59  // - mprop = 0 - zadnej master, nic se nededi
60  // mprop != 0 - dedi se jen z virtualniho mastra, skutecnej master zatizeni ma
61  // pokud jsou 2 virtualni tak error
62 
63  // edge zatizeni dam na z attribudu elementu na attribut edge
64 
65  // dodelam gravity
66 
67  protected:
68  Lvctr mproperty; // main property of component (NULL if nonactivated)
69  long origid; // original ID from input file
70  bool fordelete; // flag - under sentence of deletion
71 
73  Attributes *attributes; // attributes of geometry component
74 
75  public:
77  GeometryComponent (const Geometry *owner, long gid, long oid, long prop) : GeometrySubject (gid, owner) {
78  if (prop) this->set_mprop(prop);
79  origid = oid;
80  fordelete= false;
81  attributes = NULL;
82  }
85  mproperty = src->mproperty;
86  origid = src->origid;
87  fordelete = src->fordelete;
88  attributes = NULL;
89  }
91  virtual ~GeometryComponent() { delete attributes; }
92 
99 #ifdef DEBUG
100  if (mproperty.give_number_of_zeros()) _errorr("zero property");
101 #endif
102  } // if (attributes == NULL) errol;
104  //void Element :: initialize (void)
105  //void Element :: finitialize (void)
106  //void Element :: checkConsistency (void) const
107 
108 
110 # ifndef DEBUG
111  virtual void set_mprop (long val) { if (mproperty.give_size() == 0) { mproperty.resize_ignore_vals(1); mproperty[0] = val; } else _errorr("main property set already"); }
112  void reset_mprop (long val) { if (mproperty.give_size() == 0) mproperty.resize_ignore_vals(1); mproperty[0] = val; }
113  bool checkset_mprop (long val) { if (mproperty.give_size() == 0) { mproperty.resize_ignore_vals(1); mproperty[0] = val; return true; } else if (mproperty[0] != val) _errorr("different mproperty[0]"); return false; }
114 # else
115  virtual void set_mprop (long val) { if (val == 0) errol; if (mproperty.give_size() == 0) { mproperty.resize_ignore_vals(1); mproperty[0] = val; } else _errorr("main property set already"); }
116  void reset_mprop (long val) { if (val == 0) errol; if (mproperty.give_size() == 0) mproperty.resize_ignore_vals(1); mproperty[0] = val; }
117  bool checkset_mprop (long val) { if (val == 0) errol; if (mproperty.give_size() == 0) { mproperty.resize_ignore_vals(1); mproperty[0] = val; return true; } else if (mproperty[0] != val) _errorr("different mproperty[0]"); return false; }
118 # endif
119  //
120  void set_origID (long val) { origid = val; }
121  void set_delete_flag (bool val) { fordelete = val; }
122  //
123  virtual void set_model_prop (long val, const Model *model, bool flag=false) { errol; }
124 
126  long give_mproperty () const {
127  if (!mproperty.give_size())
128  _errorr ("Property not initiated");
129  return mproperty[0];
130  }
131  const Lvctr* give_mproperty_ptr (void) const { return &mproperty; }
132  long give_mpropertyORzero(void) const { return (mproperty.give_size() ? mproperty[0] : 0); }
133  long give_mproperty_cnt (void) const { return mproperty.give_size(); }
134  bool has_mproperty (long prop) const { return (mproperty.give_size() ? (mproperty[0] == prop ? true : false) : false); }
135  //
136  long give_origID () const { return origid; }
137  bool give_delete_flag () const { return fordelete; }
140  const Attributes *give_attributes (void) const { return attributes; }
141 
142 
144  bool Parallel (void) const { return ((Mesh*)Geom)->give_Parallel(); }
145  long NumDomains (void) const { return ((Mesh*)Geom)->give_NumDomains(); }
146  void check_connectivity (void) const {
147  if (!((Mesh*)Geom)->connectivity_is_assembled())
148  _errorr ("Globla connectivity is not assembled");
149  }
150  void mg_connectivity_assembling (void) { ((Geometry*)Geom)->connectivity_assembling(); }
151 
153  virtual void print_row (FILE *stream, femFileFormat fff, bool endline=true, long did=0) const = 0;
154 
155 
156 };
157 
158 } // namespace midaspace
159 
160 #endif // MIDAS_GEOMCOMP_H
long NumDomains(void) const
Definition: geomcomp.h:145
void set_delete_flag(bool val)
Definition: geomcomp.h:121
GeometryComponent(const GeometryComponent *src)
CONSTRUCTOR COPY.
Definition: geomcomp.h:84
virtual ~GeometryComponent()
DESTRUCTOR.
Definition: geomcomp.h:91
femFileFormat
Definition: alias.h:632
virtual void initialize(void)
= 0; = 0;
Definition: subject.h:37
void set_origID(long val)
Definition: geomcomp.h:120
General functions.
virtual void checkConsistency(void) const
Checks data consistency.
Definition: subject.h:41
virtual void finitialize(void)
finalize preprocessing
Definition: geomcomp.h:96
virtual void print_row(FILE *stream, femFileFormat fff, bool endline=true, long did=0) const =0
*** PRINT ***
long give_mproperty_cnt(void) const
Definition: geomcomp.h:133
void check_connectivity(void) const
Definition: geomcomp.h:146
virtual long give_size(void) const
Definition: arrays.h:387
bool checkset_mprop(long val)
Definition: geomcomp.h:113
long give_ID() const
Definition: subject.h:45
#define errol
Definition: gelib.h:142
Attributes * attributes
ATTRIBUTES.
Definition: geomcomp.h:73
void reset_mprop(long val)
Definition: geomcomp.h:112
const Attributes * give_attributes(void) const
Definition: geomcomp.h:140
bool Parallel(void) const
*** FEMesh ***
Definition: geomcomp.h:144
Attributes.
Structs Elem3D, PoinT and VectoR; classes Array, Array1d, Xscal, Dscal, Xvctr, Lvctr, Dvctr, Xmtrx, Lmtrx and Dmtrx.
const Lvctr * give_mproperty_ptr(void) const
Definition: geomcomp.h:131
virtual void set_model_prop(long val, const Model *model, bool flag=false)
Definition: geomcomp.h:123
Geometry description.
Definition: geometry.h:29
GeometryComponent(const Geometry *owner, long gid, long oid, long prop)
CONSTRUCTOR.
Definition: geomcomp.h:77
virtual void checkConsistency(void) const
Checks data consistency.
Definition: geomcomp.h:98
long give_mproperty() const
*** GET ***
Definition: geomcomp.h:126
virtual void set_mprop(long val)
*** SET ***
Definition: geomcomp.h:111
const Geometry * Geom
Pointer to owner == parent geometry.
Definition: subject.h:59
Lvctr * resize_ignore_vals(long newsize)
resize, ignore values
Definition: arrays.h:472
bool has_mproperty(long prop) const
Definition: geomcomp.h:134
#define _errorr(_1)
Definition: gelib.h:151
Attributes * give_attributes(void)
Definition: geomcomp.h:139
bool give_delete_flag() const
Definition: geomcomp.h:137
*** *** *** *** CLASS COMPONENT *** *** *** ***
Definition: geomcomp.h:22
long give_number_of_zeros(void) const
Definition: arrays.cpp:150
long give_origID() const
Definition: geomcomp.h:136
void mg_connectivity_assembling(void)
Definition: geomcomp.h:150
Class Geometry, Model and Mesh.
virtual void initialize(void)
initiate/sets data
Definition: geomcomp.h:94
long give_mpropertyORzero(void) const
Definition: geomcomp.h:132
virtual void finitialize(void)
finalize problem preprocessing
Definition: subject.h:39