if ( fields )
for ( int i = 0; i < fields->getNumberOfFields(); ++i )
{
- MEDFileFieldMultiTS * f = fields->getFieldAtPos(i);
+ MEDFileAnyTypeFieldMultiTS * fB = fields->getFieldAtPos(i);
+ MEDFileFieldMultiTS * f = dynamic_cast<MEDFileFieldMultiTS *>(fB);
+ if(!f)
+ continue;// fields on int32 not managed
if ( f->getMeshName() == _fileMesh->getName() )
{
vector< vector<TypeOfField> > fTypes = f->getTypesOfFieldAvailable();
//================================================================================
/*!
- * \brief fill sub-mehses of groups
+ * \brief fill sub-meshes of groups
*/
//================================================================================
const vector<string>& famNames = g2ff->second;
if ( famNames.empty() ) continue;
std::vector<SubMesh*> famSubMeshes( famNames.size() );
+ std::size_t k = 0;
for ( size_t i = 0; i < famNames.size(); ++i )
{
int famID = _fileMesh->getFamilyId( famNames[i].c_str() );
map< int, SubMesh* >::iterator i2f = _famIDs2Sub.find( famID );
- if ( i2f == _famIDs2Sub.end() )
- THROW_IK_EXCEPTION("SauvWriter::fillGroupSubMeshes(): unknown family ID: " << famID);
- famSubMeshes[ i ] = i2f->second;
+ if ( i2f != _famIDs2Sub.end() )
+ {
+ famSubMeshes[ k ] = i2f->second;
+ ++k;
+ }
}
+ // if a family exists but has no element, no submesh has been found for this family
+ // => we have to resize famSubMeshes with the number of submeshes stored
+ if (k != famNames.size())
+ famSubMeshes.resize(k);
SubMesh* grpSubMesh = addSubMesh( groupName, famSubMeshes[0]->_dimRelExt );
grpSubMesh->_subs.swap( famSubMeshes );
}
}
+
//================================================================================
/*!
- * \brief fill sub-mehses of profiles
+ * \brief fill sub-meshes of profiles
*/
//================================================================================
vector< vector<TypeOfField> > typesF;
vector< vector<string> > pfls, locs;
fields[i]->getFieldSplitedByType( iters[0].first, iters[0].second,
- _fileMesh->getName(), types, typesF, pfls, locs);
+ _fileMesh->getName().c_str(), types, typesF, pfls, locs);
int dimRelExt;
for ( size_t iType = 0; iType < types.size(); ++iType )
{
vector< vector<TypeOfField> > typesF;
vector< vector<string> > pfls, locs;
_cellFields[i]->getFieldSplitedByType( iters[0].first, iters[0].second,
- _fileMesh->getName(), types, typesF, pfls, locs);
+ _fileMesh->getName().c_str(), types, typesF, pfls, locs);
nb += 2 * types.size(); // x 2 - a type can be on nodes and on cells at the same time
}
vector< vector<TypeOfField> > typesF;
vector< vector<string> > pfls, locs;
vector< vector< std::pair<int,int> > > valsVec;
- valsVec=_nodeFields[iF]->getFieldSplitedByType( it.first, it.second, _fileMesh->getName(),
+ valsVec=_nodeFields[iF]->getFieldSplitedByType( it.first, it.second, _fileMesh->getName().c_str(),
types, typesF, pfls, locs);
// believe that there can be only one type in a nodal field,
// so do not use a loop on types
vector< vector<TypeOfField> > typesF;
vector< vector<string> > pfls, locs;
vector< vector< std::pair<int,int> > > valsVec;
- valsVec = _nodeFields[iF]->getFieldSplitedByType( it.first, it.second, _fileMesh->getName(),
+ valsVec = _nodeFields[iF]->getFieldSplitedByType( it.first, it.second, _fileMesh->getName().c_str(),
types, typesF, pfls, locs);
// believe that there can be only one type in a nodal field,
// so do not perform a loop on types
vector< vector<TypeOfField> > typesF;
vector< vector<string> > pfls, locs;
vector< vector< std::pair<int,int> > > valsVec;
- valsVec = _cellFields[iF]->getFieldSplitedByType( it.first, it.second, _fileMesh->getName(),
+ valsVec = _cellFields[iF]->getFieldSplitedByType( it.first, it.second, _fileMesh->getName().c_str(),
types, typesF, pfls, locs);
for ( size_t i = 0; i < valsVec.size(); ++i )
nbSub += valsVec[i].size();
vector<INTERP_KERNEL::NormalizedCellType> types;
vector< vector<TypeOfField> > typesF;
vector< vector<string> > pfls, locs;
- _cellFields[iF]->getFieldSplitedByType( it.first, it.second, _fileMesh->getName(),
+ _cellFields[iF]->getFieldSplitedByType( it.first, it.second, _fileMesh->getName().c_str(),
types, typesF, pfls, locs);
for ( size_t iType = 0; iType < pfls.size(); ++iType )
for ( size_t iP = 0; iP < pfls[iType].size(); ++iP )
vector< vector<TypeOfField> > typesF;
vector< vector<string> > pfls, locs;
vector< vector< std::pair<int,int> > > valsVec;
- valsVec = _cellFields[iF]->getFieldSplitedByType( iter, order, _fileMesh->getName(),
+ valsVec = _cellFields[iF]->getFieldSplitedByType( iter, order, _fileMesh->getName().c_str(),
types, typesF, pfls, locs);
for ( size_t iType = 0; iType < pfls.size(); ++iType )
for ( size_t iP = 0; iP < pfls[iType].size(); ++iP )