7 #include "MEDMEM_Group.hxx"
8 #include "MEDMEM_Family.hxx"
11 using namespace MEDMEM;
12 using namespace MED_EN;
14 GROUP::GROUP():_numberOfFamilies(0),_family()
24 GROUP & GROUP::operator=(const GROUP &group)
26 MESSAGE("GROUP::operator=");
27 _numberOfFamilies = group._numberOfFamilies ;
28 _family = group._family ;
32 ostream & MEDMEM::operator<<(ostream &os, GROUP &myGroup)
34 os << (SUPPORT) myGroup;
36 int numberoffamilies = myGroup.getNumberOfFamilies();
37 os << " - Families ("<<numberoffamilies<<") :"<<endl;
38 for (int j=1;j<numberoffamilies+1;j++)
39 os << " * "<<myGroup.getFamily(j)->getName().c_str()<<endl ;
44 GROUP::GROUP(const string & name, const list<FAMILY*> & families) throw (MEDEXCEPTION)
46 const char * LOC = "GROUP( const string & , const list<FAMILY*> & ) : " ;
52 int numberOfFamilies = families.size();
54 _description = "GROUP";
55 // description : none !
56 // first FAMILY to set all !
57 FAMILY * myFamily = families.front() ;
58 _mesh = myFamily->getMesh() ;
59 _entity = myFamily->getEntity() ;
60 bool isOnAllElts = myFamily->isOnAllElements() ;
63 SCRUTE(numberOfFamilies);
66 if ((numberOfFamilies==1) && (isOnAllElts))
68 _numberOfFamilies = numberOfFamilies;
69 _isOnAllElts = isOnAllElts ;
70 _family.resize(_numberOfFamilies) ;
71 _family[0] = myFamily;
75 else if ((!(numberOfFamilies==1)) && (isOnAllElts))
76 throw MEDEXCEPTION(LOCALIZED(STRING(LOC) << "building of a GROUP object from several FAMILY, and one of them is on all entities" )) ;
78 _numberOfGeometricType = myFamily->getNumberOfTypes() ;
79 _geometricType = new medGeometryElement[_numberOfGeometricType];
80 //_geometricTypeNumber = new int[_numberOfGeometricType] ;
81 _numberOfGaussPoint = new int[_numberOfGeometricType] ;
82 _numberOfElements = new int[_numberOfGeometricType] ;
83 const medGeometryElement * geometricType = myFamily->getTypes() ;
84 //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
85 const int * numberOfGaussPoint = myFamily->getNumberOfGaussPoint() ;
87 SCRUTE(_numberOfGeometricType);
89 for (int i=0 ; i<_numberOfGeometricType; i++) {
90 _geometricType[i]= geometricType[i] ;
91 // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
92 _numberOfGaussPoint[i] = numberOfGaussPoint[i] ;
93 _numberOfElements[i]=myFamily->getNumberOfElements(geometricType[i]);
94 MESSAGE(LOC << " Type : " << _geometricType[i] << " number of element(s) " << _numberOfElements[i]);
96 _isOnAllElts = false ;
97 //_totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
100 MEDSKYLINEARRAY * famNumber = myFamily->getnumber();
102 const int * famNumberValue = myFamily->getNumber(MED_ALL_ELEMENTS);
104 const int * famNumberIndex = myFamily->getNumberIndex();
106 int famNumberCount = famNumber->getNumberOf();
107 int famNumberLength = famNumber->getLength();
110 SCRUTE(famNumberCount);
111 SCRUTE(famNumberLength);
112 SCRUTE(famNumberValue);
113 SCRUTE(famNumberIndex);
115 // _number = new MEDSKYLINEARRAY(*famNumber) ;
116 _number = new MEDSKYLINEARRAY(famNumberCount,famNumberLength,
117 famNumberIndex,famNumberValue) ;
121 _numberOfFamilies = families.size();
123 SCRUTE(numberOfFamilies);
125 //SCRUTE(_numberOfFamilies);
127 _family.resize(_numberOfFamilies) ;
128 list<FAMILY*>::const_iterator li ;
130 // MESSAGE(LOC<<"Printing of the object GROUP built right before the blending"<< (SUPPORT) *this);
134 for (li=families.begin();li!=families.end();li++) {
136 _family[it] = (*li) ;
140 //MESSAGE(LOC<<"Printing of the object GROUP built "<< (GROUP)*this);
145 GROUP::GROUP(const GROUP & m):SUPPORT(m)
147 _numberOfFamilies = m._numberOfFamilies;
151 // void GROUP::init(const list<FAMILY*> & families)
153 // const char * LOC = "GROUP::init( const list<FAMILY*> & ) : " ;
157 // FAMILY * myFamily = families.front() ;
158 // _mesh = myFamily->getMesh() ;
160 // _isOnAllElts = myFamily->isOnAllElements() ;
164 // SCRUTE(_isOnAllElts);
166 // _entity = myFamily->getEntity() ;
168 // SCRUTE(_mesh->getNumberOfTypes(_entity));
170 // _numberOfGeometricType = myFamily->getNumberOfTypes() ;
171 // _geometricType = new medGeometryElement[_numberOfGeometricType];
172 // //_geometricTypeNumber = new int[_numberOfGeometricType] ;
173 // _numberOfGaussPoint = new int[_numberOfGeometricType] ;
174 // _numberOfElements = new int[_numberOfGeometricType] ;
175 // medGeometryElement * geometricType = myFamily->getTypes() ;
176 // //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
177 // int * numberOfGaussPoint = myFamily->getNumberOfGaussPoint() ;
178 // for (int i=0 ; i<_numberOfGeometricType; i++) {
179 // _geometricType[i]= geometricType[i] ;
180 // // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
181 // _numberOfGaussPoint[i] = numberOfGaussPoint[i] ;
182 // _numberOfElements[i]=myFamily->getNumberOfElements(geometricType[i]);
184 // _isOnAllElts = false ;
185 // _totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
186 // _number = new MEDSKYLINEARRAY(*myFamily->getnumber()) ;
188 // _numberOfFamilies = families.size();
189 // _family.resize(_numberOfFamilies) ;
190 // list<FAMILY*>::const_iterator liIni = families.begin() ;
191 // _family[0]=(*liIni);
193 // list<FAMILY*>::const_iterator li ;
195 // for (li=liIni;li!=families.end();li++) {
197 // _family[it] = (*li) ;