+++ /dev/null
-// Copyright (C) 2007-2008 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.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef __POLYHEDRONINTERSECTOR_HXX__
-#define __POLYHEDRONINTERSECTOR_HXX__
-
-#include "Intersector3DP0P0.hxx"
-#include "SplitterTetra.hxx"
-#include "NormalizedUnstructuredMesh.hxx"
-
-namespace INTERP_KERNEL
-{
-
-
- /**
- * \brief Class responsible for calculating intersection between a hexahedron target element and
- * the source elements.
- *
- */
- template<class MyMeshType, class MyMatrix>
- class PolyhedronIntersector : public Intersector3DP0P0<MyMeshType,MyMatrix>
- {
- public:
- static const int SPACEDIM=MyMeshType::MY_SPACEDIM;
- static const int MESHDIM=MyMeshType::MY_MESHDIM;
- typedef typename MyMeshType::MyConnType ConnType;
- static const NumberingPolicy numPol=MyMeshType::My_numPol;
- public:
-
- PolyhedronIntersector(const MyMeshType& targetMesh, const MyMeshType& srcMesh, SplittingPolicy policy = GENERAL_24);
-
- ~PolyhedronIntersector();
-
- void intersectCells(ConnType targetCell, const std::vector<ConnType>& srcCells, MyMatrix& res);
-
- private:
- void releaseArrays();
- private:
- /// pointers to the SplitterTetra objects representing the tetrahedra
- /// that result from the splitting of the hexahedron target cell
- std::vector< SplitterTetra<MyMeshType>* > _tetra;
-
- SplitterTetra2<MyMeshType> _split;
-
- };
-}
-
-#endif
+++ /dev/null
-// Copyright (C) 2007-2008 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.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef __POLYHEDRONINTERSECTOR_TXX__
-#define __POLYHEDRONINTERSECTOR_TXX__
-
-#include "PolyhedronIntersector.hxx"
-#include "Intersector3DP0P0.txx"
-#include "MeshUtils.hxx"
-
-#include "SplitterTetra.txx"
-
-namespace INTERP_KERNEL
-{
-
- /**
- * Constructor creating object from target cell global number
- * The constructor first calculates the necessary nodes,
- * (depending on the splitting policy) and then splits the hexahedron into
- * tetrahedra, placing these in the internal vector _tetra.
- *
- * @param targetMesh mesh containing the target elements
- * @param srcMesh mesh containing the source elements
- * @param policy splitting policy to be used
- */
- template<class MyMeshType, class MyMatrix>
- PolyhedronIntersector<MyMeshType,MyMatrix>::PolyhedronIntersector(const MyMeshType& targetMesh, const MyMeshType& srcMesh, SplittingPolicy policy):Intersector3DP0P0<MyMeshType,MyMatrix>(targetMesh,srcMesh),_split(targetMesh,srcMesh,policy)
- {
- }
-
- /**
- * Destructor.
- * Liberates the SplitterTetra objects and potential sub-node points that have been allocated.
- *
- */
- template<class MyMeshType, class MyMatrix>
- PolyhedronIntersector<MyMeshType,MyMatrix>::~PolyhedronIntersector()
- {
- releaseArrays();
- }
-
- template<class MyMeshType, class MyMatrix>
- void PolyhedronIntersector<MyMeshType,MyMatrix>::releaseArrays()
- {
- for(typename std::vector< SplitterTetra<MyMeshType>* >::iterator iter = _tetra.begin(); iter != _tetra.end(); ++iter)
- delete *iter;
- _split.releaseArrays();
- _tetra.clear();
- }
-
- /**
- * Calculates the volume of intersection of an element in the source mesh and the target element
- * represented by the object.
- * The calculation is performed by calling the corresponding method for
- * each SplitterTetra object created by the splitting.
- *
- * @param targetCell in C mode.
- * @param srcCells in C mode.
- *
- */
- template<class MyMeshType, class MyMatrix>
- void PolyhedronIntersector<MyMeshType,MyMatrix>::intersectCells(ConnType targetCell, const std::vector<ConnType>& srcCells, MyMatrix& res)
- {
- int nbOfNodesT=Intersector3D<MyMeshType,MyMatrix>::_target_mesh.getNumberOfNodesOfElement(OTT<ConnType,numPol>::indFC(targetCell));
- releaseArrays();
- _split.splitTargetCell(targetCell,nbOfNodesT,_tetra);
- for(typename std::vector<ConnType>::const_iterator iterCellS=srcCells.begin();iterCellS!=srcCells.end();iterCellS++)
- {
- double volume = 0.;
- for(typename std::vector<SplitterTetra<MyMeshType>*>::iterator iter = _tetra.begin(); iter != _tetra.end(); ++iter)
- volume += (*iter)->intersectSourceCell(*iterCellS);
- if(volume!=0.)
- res[targetCell].insert(std::make_pair(OTT<ConnType,numPol>::indFC(*iterCellS), volume));
- }
- _split.releaseArrays();
- }
-}
-
-#endif