1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
28 #include "MEDMEM_Group.hxx"
29 #include "MEDMEM_Family.hxx"
32 using namespace MEDMEM;
33 using namespace MED_EN;
35 GROUP::GROUP():SUPPORT(),_numberOfFamilies(0),_family()
37 MESSAGE_MED("GROUP()");
42 MESSAGE_MED("~GROUP()");
45 GROUP & GROUP::operator=(const GROUP &group)
47 MESSAGE_MED("GROUP::operator=");
48 if ( &group == this ) return *this;
49 SUPPORT::operator=(group);
50 _numberOfFamilies = group._numberOfFamilies ;
51 _family = group._family ;
55 ostream & MEDMEM::operator<<(ostream &os, GROUP &myGroup)
57 os << (SUPPORT) myGroup;
59 int numberoffamilies = myGroup.getNumberOfFamilies();
60 os << " - Families ("<<numberoffamilies<<") :"<<endl;
61 for (int j=1;j<numberoffamilies+1;j++)
62 os << " * "<<myGroup.getFamily(j)->getName().c_str()<<endl ;
67 GROUP::GROUP(const string & name, const list<FAMILY*> & families) throw (MEDEXCEPTION)
69 const char * LOC = "GROUP( const string & , const list<FAMILY*> & ) : " ;
73 MESSAGE_MED(LOC<<name);
75 int numberOfFamilies = families.size();
77 _description = "GROUP";
78 // description : none !
79 // first FAMILY to set all !
80 FAMILY * myFamily = families.front() ;
81 _mesh = myFamily->getMesh() ;
82 _entity = myFamily->getEntity() ;
83 bool isOnAllElts = myFamily->isOnAllElements() ;
85 SCRUTE_MED(isOnAllElts);
86 SCRUTE_MED(numberOfFamilies);
89 if ((numberOfFamilies==1) && (isOnAllElts))
91 _numberOfFamilies = numberOfFamilies;
92 _isOnAllElts = isOnAllElts ;
93 _family.resize(_numberOfFamilies) ;
94 _family[0] = myFamily;
98 else if ((!(numberOfFamilies==1)) && (isOnAllElts))
99 throw MEDEXCEPTION(LOCALIZED(STRING(LOC) << "building of a GROUP object from several FAMILY, and one of them is on all entities" )) ;
101 _numberOfGeometricType = myFamily->getNumberOfTypes() ;
103 _geometricType.set(_numberOfGeometricType);
104 _numberOfElements.set(_numberOfGeometricType) ;
106 const medGeometryElement * geometricType = myFamily->getTypes() ;
107 //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
109 SCRUTE_MED(_numberOfGeometricType);
111 for (int i=0 ; i<_numberOfGeometricType; i++) {
112 _geometricType[i]= geometricType[i] ;
113 // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
114 _numberOfElements[i]=myFamily->getNumberOfElements(geometricType[i]);
115 MESSAGE_MED(LOC << " Type : " << _geometricType[i] << " number of element(s) " << _numberOfElements[i]);
117 _isOnAllElts = false ;
118 //_totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
121 MEDSKYLINEARRAY * famNumber = myFamily->getnumber();
123 const int * famNumberValue = myFamily->getNumber(MED_ALL_ELEMENTS);
125 const int * famNumberIndex = myFamily->getNumberIndex();
127 int famNumberCount = famNumber->getNumberOf();
128 int famNumberLength = famNumber->getLength();
130 SCRUTE_MED(famNumber);
131 SCRUTE_MED(famNumberCount);
132 SCRUTE_MED(famNumberLength);
133 SCRUTE_MED(famNumberValue);
134 SCRUTE_MED(famNumberIndex);
136 // _number = new MEDSKYLINEARRAY(*famNumber) ;
137 _number = new MEDSKYLINEARRAY(famNumberCount,famNumberLength,
138 famNumberIndex,famNumberValue) ;
142 _numberOfFamilies = families.size();
144 SCRUTE_MED(numberOfFamilies);
146 //SCRUTE_MED(_numberOfFamilies);
148 _family.resize(_numberOfFamilies) ;
149 list<FAMILY*>::const_iterator li ;
151 // MESSAGE_MED(LOC<<"Printing of the object GROUP built right before the blending"<< (SUPPORT) *this);
155 for (li=families.begin();li!=families.end();li++) {
157 _family[it] = (*li) ;
161 //MESSAGE_MED(LOC<<"Printing of the object GROUP built "<< (GROUP)*this);
166 GROUP::GROUP(const GROUP & m):SUPPORT(m)
168 _numberOfFamilies = m._numberOfFamilies;
169 _family = m._family; //Copie profonde dans FAMILY Rmq from EF
172 // void GROUP::init(const list<FAMILY*> & families)
175 // BEGIN_OF_MED(LOC);
177 // FAMILY * myFamily = families.front() ;
178 // _mesh = myFamily->getMesh() ;
180 // _isOnAllElts = myFamily->isOnAllElements() ;
182 // SCRUTE_MED(_mesh);
184 // SCRUTE_MED(_isOnAllElts);
186 // _entity = myFamily->getEntity() ;
188 // SCRUTE_MED(_mesh->getNumberOfTypes(_entity));
190 // _numberOfGeometricType = myFamily->getNumberOfTypes() ;
191 // _geometricType = new medGeometryElement[_numberOfGeometricType];
192 // //_geometricTypeNumber = new int[_numberOfGeometricType] ;
193 // _numberOfGaussPoints = new int[_numberOfGeometricType] ;
194 // _numberOfElements = new int[_numberOfGeometricType] ;
195 // medGeometryElement * geometricType = myFamily->getTypes() ;
196 // //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
197 // int * numberOfGaussPoints = myFamily->getNumberOfGaussPoints() ;
198 // for (int i=0 ; i<_numberOfGeometricType; i++) {
199 // _geometricType[i]= geometricType[i] ;
200 // // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
201 // _numberOfGaussPoints[i] = numberOfGaussPoints[i] ;
202 // _numberOfElements[i]=myFamily->getNumberOfElements(geometricType[i]);
204 // _isOnAllElts = false ;
205 // _totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
206 // _number = new MEDSKYLINEARRAY(*myFamily->getnumber()) ;
208 // _numberOfFamilies = families.size();
209 // _family.resize(_numberOfFamilies) ;
210 // list<FAMILY*>::const_iterator liIni = families.begin() ;
211 // _family[0]=(*liIni);
213 // list<FAMILY*>::const_iterator li ;
215 // for (li=liIni;li!=families.end();li++) {
217 // _family[it] = (*li) ;