Salome HOME
NRI : Update 1.1a and New organisation.
[modules/med.git] / src / MEDMEM / MEDMEM_Group.cxx
1 using namespace std;
2 /*
3  File Group.cxx
4  $Header$
5 */
6 #include <list>
7
8 #include "MEDMEM_Group.hxx"
9 #include "MEDMEM_Family.hxx"
10
11 GROUP::GROUP():_numberOfFamilies(0),_family() 
12 {
13   MESSAGE("GROUP()");
14 };
15
16 GROUP::~GROUP() 
17 {
18   MESSAGE("~GROUP()");
19 };
20   
21 GROUP & GROUP::operator=(const GROUP &group) 
22 {
23   MESSAGE("GROUP::operator=");
24   _numberOfFamilies = group._numberOfFamilies ;
25   _family           = group._family ;
26   return *this;
27 };
28
29 GROUP::GROUP(const string & name, const list<FAMILY*> & families) throw (MEDEXCEPTION)
30 {
31   const char * LOC = "GROUP( const string & , const list<FAMILY*> & ) : " ;
32   
33   BEGIN_OF(LOC);
34
35   MESSAGE(LOC<<name);
36
37   int numberOfFamilies = families.size();
38   _name = name ;
39   // description : none !
40   // first FAMILY to set all !
41   FAMILY * myFamily = families.front() ;
42   _mesh =  myFamily->getMesh() ;
43   _entity = myFamily->getEntity() ;
44   bool isOnAllElts = myFamily->isOnAllElements() ;
45   if ((numberOfFamilies==1)&(isOnAllElts))
46     {
47       _numberOfFamilies = numberOfFamilies;
48       _isOnAllElts = false ;
49       _family.resize(_numberOfFamilies) ;
50       _family[0] = myFamily;
51       return;
52     }
53   else if ((!(numberOfFamilies==1))&(isOnAllElts))
54     throw MEDEXCEPTION(LOCALIZED(STRING(LOC) << "building of a GROUP object from several FAMILY, and one of them is on all entities"  )) ;
55
56   _numberOfGeometricType = myFamily->getNumberOfTypes() ;
57   _geometricType = new medGeometryElement[_numberOfGeometricType];
58   //_geometricTypeNumber = new int[_numberOfGeometricType] ;
59   _numberOfGaussPoint = new int[_numberOfGeometricType] ;
60   _numberOfEntities = new int[_numberOfGeometricType] ;
61   medGeometryElement * geometricType = myFamily->getTypes() ;
62   //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
63   int * numberOfGaussPoint = myFamily->getNumberOfGaussPoint() ;
64   for (int i=0 ; i<_numberOfGeometricType; i++) {
65     _geometricType[i]= geometricType[i] ;
66     // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
67     _numberOfGaussPoint[i] = numberOfGaussPoint[i] ;
68     _numberOfEntities[i]=myFamily->getNumberOfElements(geometricType[i]);
69   }
70   _isOnAllElts = false ;
71   _totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
72   _number = new MEDSKYLINEARRAY(*myFamily->getnumber()) ;
73
74   _numberOfFamilies = families.size();
75   _family.resize(_numberOfFamilies) ;
76   list<FAMILY*>::const_iterator li ;
77   int it = 0 ;
78   for (li=families.begin();li!=families.end();li++) {
79     blending(*li);
80     _family[it] = (*li) ;
81     it++ ;
82   }
83
84   END_OF(LOC);
85 };
86
87 GROUP::GROUP(GROUP & m):SUPPORT(m)
88 {
89   _numberOfFamilies = m._numberOfFamilies;
90   _family = m._family;
91 };
92
93 // void GROUP::init(const list<FAMILY*> & families)
94 // {
95 //   const char * LOC = "GROUP::init( const list<FAMILY*> & ) : " ;
96   
97 //   BEGIN_OF(LOC);
98   
99 //   FAMILY * myFamily = families.front() ;
100 //   _mesh =  myFamily->getMesh() ;
101
102 //   _isOnAllElts = myFamily->isOnAllElements() ;
103
104 //   SCRUTE(_mesh);
105
106 //   SCRUTE(_isOnAllElts);
107
108 //   _entity = myFamily->getEntity() ;
109
110 //   SCRUTE(_mesh->getNumberOfTypes(_entity));
111
112 //   _numberOfGeometricType = myFamily->getNumberOfTypes() ;
113 //   _geometricType = new medGeometryElement[_numberOfGeometricType];
114 //   //_geometricTypeNumber = new int[_numberOfGeometricType] ;
115 //   _numberOfGaussPoint = new int[_numberOfGeometricType] ;
116 //   _numberOfEntities = new int[_numberOfGeometricType] ;
117 //   medGeometryElement * geometricType = myFamily->getTypes() ;
118 //   //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
119 //   int * numberOfGaussPoint = myFamily->getNumberOfGaussPoint() ;
120 //   for (int i=0 ; i<_numberOfGeometricType; i++) {
121 //     _geometricType[i]= geometricType[i] ;
122 //     // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
123 //     _numberOfGaussPoint[i] = numberOfGaussPoint[i] ;
124 //     _numberOfEntities[i]=myFamily->getNumberOfElements(geometricType[i]);
125 //   }
126 //   _isOnAllElts = false ;
127 //   _totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
128 //   _number = new MEDSKYLINEARRAY(*myFamily->getnumber()) ;
129   
130 //   _numberOfFamilies = families.size();
131 //   _family.resize(_numberOfFamilies) ;
132 //   list<FAMILY*>::const_iterator liIni = families.begin() ;
133 //   _family[0]=(*liIni);
134 //   liIni++;
135 //   list<FAMILY*>::const_iterator li ;
136 //   int it = 1 ;
137 //   for (li=liIni;li!=families.end();li++) {
138 //     blending(*li);
139 //     _family[it] = (*li) ;
140 //     it++ ;
141 //   }
142   
143 //   END_OF(LOC);
144 // };
145