1 // MED MEDMEM : MED files in memory
3 // Copyright (C) 2003 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : MEDMEM_Group.cxx
34 #include "MEDMEM_Group.hxx"
35 #include "MEDMEM_Family.hxx"
37 GROUP::GROUP():_numberOfFamilies(0),_family()
47 GROUP & GROUP::operator=(const GROUP &group)
49 MESSAGE("GROUP::operator=");
50 _numberOfFamilies = group._numberOfFamilies ;
51 _family = group._family ;
55 ostream & 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*> & ) : " ;
75 int numberOfFamilies = families.size();
77 // description : none !
78 // first FAMILY to set all !
79 FAMILY * myFamily = families.front() ;
80 _mesh = myFamily->getMesh() ;
81 _entity = myFamily->getEntity() ;
82 bool isOnAllElts = myFamily->isOnAllElements() ;
83 if ((numberOfFamilies==1)&(isOnAllElts))
85 _numberOfFamilies = numberOfFamilies;
86 _isOnAllElts = false ;
87 _family.resize(_numberOfFamilies) ;
88 _family[0] = myFamily;
91 else if ((!(numberOfFamilies==1))&(isOnAllElts))
92 throw MEDEXCEPTION(LOCALIZED(STRING(LOC) << "building of a GROUP object from several FAMILY, and one of them is on all entities" )) ;
94 _numberOfGeometricType = myFamily->getNumberOfTypes() ;
95 _geometricType = new medGeometryElement[_numberOfGeometricType];
96 //_geometricTypeNumber = new int[_numberOfGeometricType] ;
97 _numberOfGaussPoint = new int[_numberOfGeometricType] ;
98 _numberOfElements = new int[_numberOfGeometricType] ;
99 const medGeometryElement * geometricType = myFamily->getTypes() ;
100 //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
101 const int * numberOfGaussPoint = myFamily->getNumberOfGaussPoint() ;
102 for (int i=0 ; i<_numberOfGeometricType; i++) {
103 _geometricType[i]= geometricType[i] ;
104 // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
105 _numberOfGaussPoint[i] = numberOfGaussPoint[i] ;
106 _numberOfElements[i]=myFamily->getNumberOfElements(geometricType[i]);
108 _isOnAllElts = false ;
109 //_totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
110 _number = new MEDSKYLINEARRAY(*myFamily->getnumber()) ;
112 _numberOfFamilies = families.size();
113 _family.resize(_numberOfFamilies) ;
114 list<FAMILY*>::const_iterator li ;
116 for (li=families.begin();li!=families.end();li++) {
118 _family[it] = (*li) ;
125 GROUP::GROUP(const GROUP & m):SUPPORT(m)
127 _numberOfFamilies = m._numberOfFamilies;
131 // void GROUP::init(const list<FAMILY*> & families)
133 // const char * LOC = "GROUP::init( const list<FAMILY*> & ) : " ;
137 // FAMILY * myFamily = families.front() ;
138 // _mesh = myFamily->getMesh() ;
140 // _isOnAllElts = myFamily->isOnAllElements() ;
144 // SCRUTE(_isOnAllElts);
146 // _entity = myFamily->getEntity() ;
148 // SCRUTE(_mesh->getNumberOfTypes(_entity));
150 // _numberOfGeometricType = myFamily->getNumberOfTypes() ;
151 // _geometricType = new medGeometryElement[_numberOfGeometricType];
152 // //_geometricTypeNumber = new int[_numberOfGeometricType] ;
153 // _numberOfGaussPoint = new int[_numberOfGeometricType] ;
154 // _numberOfElements = new int[_numberOfGeometricType] ;
155 // medGeometryElement * geometricType = myFamily->getTypes() ;
156 // //int * geometricTypeNumber = myFamily->getGeometricTypeNumber() ;
157 // int * numberOfGaussPoint = myFamily->getNumberOfGaussPoint() ;
158 // for (int i=0 ; i<_numberOfGeometricType; i++) {
159 // _geometricType[i]= geometricType[i] ;
160 // // _geometricTypeNumber[i] = geometricTypeNumber[i] ;
161 // _numberOfGaussPoint[i] = numberOfGaussPoint[i] ;
162 // _numberOfElements[i]=myFamily->getNumberOfElements(geometricType[i]);
164 // _isOnAllElts = false ;
165 // _totalNumberOfEntities = myFamily->getNumberOfElements(MED_ALL_ELEMENTS) ;
166 // _number = new MEDSKYLINEARRAY(*myFamily->getnumber()) ;
168 // _numberOfFamilies = families.size();
169 // _family.resize(_numberOfFamilies) ;
170 // list<FAMILY*>::const_iterator liIni = families.begin() ;
171 // _family[0]=(*liIni);
173 // list<FAMILY*>::const_iterator li ;
175 // for (li=liIni;li!=families.end();li++) {
177 // _family[it] = (*li) ;