]> SALOME platform Git repositories - modules/med.git/blob - src/MEDMEM/MEDMEM_Group.cxx
Salome HOME
update from the MedMemory V1.0.1
[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 ostream & operator<<(ostream &os, GROUP &myGroup)
30 {
31   os << (SUPPORT) myGroup;
32
33   int numberoffamilies = myGroup.getNumberOfFamilies();
34   os << "  - Families ("<<numberoffamilies<<") :"<<endl;
35   for (int j=1;j<numberoffamilies+1;j++)
36     os << "    * "<<myGroup.getFamily(j)->getName().c_str()<<endl ;
37
38   return os;
39 };
40
41 GROUP::GROUP(const string & name, const list<FAMILY*> & families) throw (MEDEXCEPTION)
42 {
43   const char * LOC = "GROUP( const string & , const list<FAMILY*> & ) : " ;
44   
45   BEGIN_OF(LOC);
46
47   MESSAGE(LOC<<name);
48
49   int numberOfFamilies = families.size();
50   _name = name ;
51   // description : none !
52   // first FAMILY to set all !
53   FAMILY * myFamily = families.front() ;
54   _mesh =  myFamily->getMesh() ;
55   _entity = myFamily->getEntity() ;
56   bool isOnAllElts = myFamily->isOnAllElements() ;
57
58   SCRUTE(isOnAllElts);
59   SCRUTE(numberOfFamilies);
60
61
62   if ((numberOfFamilies==1)&(isOnAllElts))
63     {
64       _numberOfFamilies = numberOfFamilies;
65       _isOnAllElts = isOnAllElts ;
66       _family.resize(_numberOfFamilies) ;
67       _family[0] = myFamily;
68       update();
69       return;
70     }
71   else if ((!(numberOfFamilies==1))&(isOnAllElts))
72     throw MEDEXCEPTION(LOCALIZED(STRING(LOC) << "building of a GROUP object from several FAMILY, and one of them is on all entities"  )) ;
73
74   _numberOfGeometricType = myFamily->getNumberOfTypes() ;
75   _geometricType = new medGeometryElement[_numberOfGeometricType];
76   //_geometricTypeNumber = new int[_numberOfGeometricType] ;
77   _numberOfGaussPoint = new int[_numberOfGeometricType] ;
78   _numberOfElements = new int[_numberOfGeometricType] ;
79   const medGeometryElement * geometricType = myFamily->getTypes() ;
80   //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
81   const int * numberOfGaussPoint = myFamily->getNumberOfGaussPoint() ;
82
83   SCRUTE(_numberOfGeometricType);
84
85   for (int i=0 ; i<_numberOfGeometricType; i++) {
86     _geometricType[i]= geometricType[i] ;
87     // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
88     _numberOfGaussPoint[i] = numberOfGaussPoint[i] ;
89     _numberOfElements[i]=myFamily->getNumberOfElements(geometricType[i]);
90     MESSAGE(LOC << " Type : " << _geometricType[i] << " number of element(s) " << _numberOfElements[i]);
91   }
92   _isOnAllElts = false ;
93   //_totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
94   _number = new MEDSKYLINEARRAY(*myFamily->getnumber()) ;
95
96   _numberOfFamilies = families.size();
97   _family.resize(_numberOfFamilies) ;
98   list<FAMILY*>::const_iterator li ;
99
100   MESSAGE(LOC<<"Printing of the object GROUP built right before the blending"<< (SUPPORT) *this);
101
102
103   int it = 0 ;
104   for (li=families.begin();li!=families.end();li++) {
105     blending(*li);
106     _family[it] = (*li) ;
107     it++ ;
108   }
109
110   MESSAGE(LOC<<"Printing of the object GROUP built "<< *this);
111
112   END_OF(LOC);
113 };
114
115 GROUP::GROUP(const GROUP & m):SUPPORT(m)
116 {
117   _numberOfFamilies = m._numberOfFamilies;
118   _family = m._family;
119 };
120
121 // void GROUP::init(const list<FAMILY*> & families)
122 // {
123 //   const char * LOC = "GROUP::init( const list<FAMILY*> & ) : " ;
124   
125 //   BEGIN_OF(LOC);
126   
127 //   FAMILY * myFamily = families.front() ;
128 //   _mesh =  myFamily->getMesh() ;
129
130 //   _isOnAllElts = myFamily->isOnAllElements() ;
131
132 //   SCRUTE(_mesh);
133
134 //   SCRUTE(_isOnAllElts);
135
136 //   _entity = myFamily->getEntity() ;
137
138 //   SCRUTE(_mesh->getNumberOfTypes(_entity));
139
140 //   _numberOfGeometricType = myFamily->getNumberOfTypes() ;
141 //   _geometricType = new medGeometryElement[_numberOfGeometricType];
142 //   //_geometricTypeNumber = new int[_numberOfGeometricType] ;
143 //   _numberOfGaussPoint = new int[_numberOfGeometricType] ;
144 //   _numberOfElements = new int[_numberOfGeometricType] ;
145 //   medGeometryElement * geometricType = myFamily->getTypes() ;
146 //   //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
147 //   int * numberOfGaussPoint = myFamily->getNumberOfGaussPoint() ;
148 //   for (int i=0 ; i<_numberOfGeometricType; i++) {
149 //     _geometricType[i]= geometricType[i] ;
150 //     // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
151 //     _numberOfGaussPoint[i] = numberOfGaussPoint[i] ;
152 //     _numberOfElements[i]=myFamily->getNumberOfElements(geometricType[i]);
153 //   }
154 //   _isOnAllElts = false ;
155 //   _totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
156 //   _number = new MEDSKYLINEARRAY(*myFamily->getnumber()) ;
157   
158 //   _numberOfFamilies = families.size();
159 //   _family.resize(_numberOfFamilies) ;
160 //   list<FAMILY*>::const_iterator liIni = families.begin() ;
161 //   _family[0]=(*liIni);
162 //   liIni++;
163 //   list<FAMILY*>::const_iterator li ;
164 //   int it = 1 ;
165 //   for (li=liIni;li!=families.end();li++) {
166 //     blending(*li);
167 //     _family[it] = (*li) ;
168 //     it++ ;
169 //   }
170   
171 //   END_OF(LOC);
172 // };
173