-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D
+// Copyright (C) 2007-2014 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//================================================================================
/*!
* \brief Makes ParaMEDMEM::MEDFileData from self
+ * \param [in] fix2DOri - to fix or not orientation of faces in 3D space
+ * \return ParaMEDMEM::MEDFileData* - conversion result
*/
//================================================================================
-ParaMEDMEM::MEDFileData* IntermediateMED::convertInMEDFileDS()
+ParaMEDMEM::MEDFileData* IntermediateMED::convertInMEDFileDS(bool fix2DOri)
{
- MEDCouplingAutoRefCountObjectPtr< MEDFileUMesh > mesh = makeMEDFileMesh();
+ MEDCouplingAutoRefCountObjectPtr< MEDFileUMesh > mesh = makeMEDFileMesh(fix2DOri);
MEDCouplingAutoRefCountObjectPtr< MEDFileFields > fields = makeMEDFileFields(mesh);
MEDCouplingAutoRefCountObjectPtr< MEDFileMeshes > meshes = MEDFileMeshes::New();
*/
//================================================================================
-ParaMEDMEM::MEDFileUMesh* IntermediateMED::makeMEDFileMesh()
+ParaMEDMEM::MEDFileUMesh* IntermediateMED::makeMEDFileMesh(bool fix2DOri)
{
// check if all needed piles are present
checkDataAvailability();
if ( _spaceDim == 2 || _spaceDim == 1 )
orientElements2D();
else if ( _spaceDim == 3 )
- orientElements3D();
+ orientElements3D( fix2DOri );
// process groups
decreaseHierarchicalDepthOfSubgroups();
*/
//================================================================================
-void IntermediateMED::orientElements3D()
+void IntermediateMED::orientElements3D(bool fix2DOri)
{
// set _reverse flags of faces
- orientFaces3D();
+ if ( fix2DOri )
+ orientFaces3D();
// -----------------
// fix connectivity
grp._medGroup = DataArrayInt::New();
grp._medGroup->setName( grp._name.c_str() );
grp._medGroup->alloc( cell2order.size(), /*nbOfCompo=*/1 );
- int * idsPrt = grp._medGroup->getPointer();
+ int * idsPtr = grp._medGroup->getPointer();
TCellToOrderMap::iterator cell2orderIt, cell2orderEnd = cell2order.end();
for ( cell2orderIt = cell2order.begin(); cell2orderIt != cell2orderEnd; ++cell2orderIt )
- *idsPrt++ = (*cell2orderIt).first->_number - 1;
+ *idsPtr++ = (*cell2orderIt).first->_number - 1;
// try to set the mesh name
if ( !isMeshNameSet &&
int dim = getDim( grp );
int nbElems = 0;
- CellsByDimIterator dimCells( *this, dim );
- while ( const std::set<Cell > * cells = dimCells.nextType() )
- nbElems += cells->size();
-
- const bool onAll = ( nbElems == grp->size() );
-
if ( dim == 0 )
- dimRel = 0;
+ {
+ nbElems = _nbNodes;
+ dimRel = 0;
+ }
else
{
+ CellsByDimIterator dimCells( *this, dim );
+ while ( const std::set<Cell > * cells = dimCells.nextType() )
+ nbElems += cells->size();
+
int meshDim = 3;
for ( ; meshDim > 0; --meshDim )
{
}
dimRel = dim - meshDim;
}
+
+ bool onAll = ( nbElems == grp->size() );
return onAll;
}
DataArrayDouble * coo = mesh->getCoords();
MEDCouplingAutoRefCountObjectPtr
<DataArrayDouble> subCoo = coo->selectByTupleId(support->_medGroup->begin(),
- support->_medGroup->end());
+ support->_medGroup->end());
MEDCouplingAutoRefCountObjectPtr< MEDCouplingUMesh > nodeSubMesh =
MEDCouplingUMesh::Build0DMeshFromCoords( subCoo );
timeStamp->setMesh( nodeSubMesh );
// set gauss points
if ( timeStamp->getTypeOfField() == ParaMEDMEM::ON_GAUSS_PT )
{
- TGaussDef gaussDef( support->_cellType, fld->_sub[iSub].nbGauss() );
- timeStamp->setGaussLocalizationOnType( support->_cellType,
+ TGaussDef gaussDef( fld->_sub[iSub]._support->_cellType,
+ fld->_sub[iSub].nbGauss() );
+ timeStamp->setGaussLocalizationOnType( fld->_sub[iSub]._support->_cellType,
gaussDef.myRefCoords,
gaussDef.myCoords,
gaussDef.myWeights );