+
+ /*!
+ * \param [in] targetCell in C mode.
+ * \param [out] tetra is the output result tetra containers.
+ */
+ template<class MyMeshTypeT, class MyMeshTypeS>
+ void SplitterTetra2<MyMeshTypeT, MyMeshTypeS>::splitTargetCell2(typename MyMeshTypeT::MyConnType targetCell, typename std::vector< SplitterTetra<MyMeshTypeS>* >& tetra)
+ {
+ const int *refConn(_target_mesh.getConnectivityPtr());
+ const int *cellConn(refConn+_target_mesh.getConnectivityIndexPtr()[targetCell]);
+ INTERP_KERNEL::NormalizedCellType gt(_target_mesh.getTypeOfElement(targetCell));
+ std::vector<int> tetrasNodalConn;
+ std::vector<double> addCoords;
+ const double *coords(_target_mesh.getCoordinatesPtr());
+ SplitIntoTetras(_splitting_pol,gt,cellConn,refConn+_target_mesh.getConnectivityIndexPtr()[targetCell+1],coords,tetrasNodalConn,addCoords);
+ std::size_t nbTetras(tetrasNodalConn.size()/4); tetra.resize(nbTetras);
+ double tmp[12];
+ int tmp2[4];
+ for(std::size_t i=0;i<nbTetras;i++)
+ {
+ for(int j=0;j<4;j++)
+ {
+ int cellId(tetrasNodalConn[4*i+j]);
+ tmp2[j]=cellId;
+ if(cellId>=0)
+ {
+ tmp[j*3+0]=coords[3*cellId+0];
+ tmp[j*3+1]=coords[3*cellId+1];
+ tmp[j*3+2]=coords[3*cellId+2];
+ }
+ else
+ {
+ tmp[j*3+0]=addCoords[3*(-cellId-1)+0];
+ tmp[j*3+1]=addCoords[3*(-cellId-1)+1];
+ tmp[j*3+2]=addCoords[3*(-cellId-1)+2];
+ }
+ }
+ tetra[i]=new SplitterTetra<MyMeshTypeS>(_src_mesh,tmp,tmp2);
+ }
+ }