37 const int writeOption = 0;
113 const int nMPM = particles.
getCount();
117 const shared_ptr<VecD3Array>& MPM_Points = solid.
getCoordinates();
118 const shared_ptr<VecD3Array>& MPM_Vels = solid.
getVelocities();
119 const shared_ptr<Array<int> >& particleTypes = solid.
getTypes();
123 cout<<
"count of cells is "<<nCells<<endl;
142 for(
int p=0; p<nMPM; p++){
143 const VecD3 MPM_point = (*MPM_Points)[p];
144 MPM_PointstoCells[p]=-1;
145 const int nearestCell = O.
getNode(MPM_point);
147 int inCellorNot=
inCell(nearestCell, MPM_point, faceCells, cellFaces,
148 faceArea,faceCentroid);
149 if (inCellorNot==1) {
151 MPM_PointstoCells[p]=nearestCell;
154 while (flag == 0 && levelCount <= 2){
156 const int nc = cellCells.
getCount(nearestCell);
157 for (
int c = 0; c < nc; c ++){
158 int cellCandidate = cellCells(nearestCell, c);
159 inCellorNot=
inCell(cellCandidate, MPM_point, faceCells, cellFaces,
160 faceArea,faceCentroid);
161 if (inCellorNot==1) {
163 MPM_PointstoCells[p]=cellCandidate;
176 const double radius = 2.5;
177 for(
int p=0; p<nMPM; p++){
178 const VecD3 MPM_point = (*MPM_Points)[p];
179 vector<int> cellIndexList;
180 O.
getNodes(MPM_point, radius, cellIndexList);
181 MPM_PointstoCells[p]=-1;
182 for (
int i=0; i< (int) cellIndexList.size(); i++) {
183 int cellCandidate = cellIndexList[i];
184 const int inCellorNot=
inCell(cellCandidate, MPM_point, faceCells, cellFaces,
185 faceArea,faceCentroid);
187 MPM_PointstoCells[p]=cellCandidate;
211 for(
int p=0; p<nMPM; p++){
212 VecD3 MPM_point = (*MPM_Points)[p];
213 MPM_PointstoCells[p]=-1;
214 for(
int i=0; i< nCells; i++) {
215 const int inCellorNot=
inCell(i, MPM_point, faceCells, cellFaces,
216 faceArea,faceCentroid);
218 MPM_PointstoCells[p]=i;
228 string fileName20=fileBase+
"particles.dat";
230 file20=&fileName20[0];
232 fp=fopen(file20,
"w");
233 for (
int c=0; c<nMPM; c++){
234 if((*particleTypes)[c]==1){
235 fprintf(fp,
"%i\t%e\t%e\t%e\n", c, (*MPM_Points)[c][0],(*MPM_Points)[c][1],(*MPM_Points)[c][2]);
243 shared_ptr<CRConnectivity> particleCellsCR =
255 string fileName14=fileBase+
"particletocells.dat";
257 file14=&fileName14[0];
259 fp=fopen(file14,
"w");
262 for(
int c=0; c<nMPM; c++){
266 for(
int p=0; p<np; p++){
267 fprintf(fp,
"%i\t%i\n", c, particleCells(c, p));
275 shared_ptr<CRConnectivity> cellParticlesCR = (*particleCellsCR).getTranspose();
287 string fileName13=fileBase+
"celltoparticles.dat";
289 file13=&fileName13[0];
291 fp=fopen(file13,
"w");
293 for(
int c=0; c<nCells; c++){
297 for(
int p=0; p<np; p++){
300 int pID = cellParticles(c,p);
301 if ((*particleTypes)[pID] == 1)
302 fprintf(fp,
"%i\t%e\t%e\t%e\t%i\n", c, (*MPM_Points)[pID][0],(*MPM_Points)[pID][1],(*MPM_Points)[pID][2],(*particleTypes)[pID]);
311 markCell ( mesh, nCells,nSelfCells, cellParticles, cellCells);
331 string fileName15=fileBase+
"ibfaces.dat";
333 file15=&fileName15[0];
335 fp=fopen(file15,
"w");
337 for(
int f=0; f<ibFaces.
getCount(); f++){
338 int fID = ibFaceList[f];
339 fprintf(fp,
"%i\t%e\t%e\t%e\n", fID, faceCentroid[fID][0],faceCentroid[fID][1],faceCentroid[fID][2]);
349 shared_ptr<CRConnectivity> ibFaceParticlesCR =
350 setibFaceParticles (mesh, ibFaces, ibFaceList, particles,faceCells, cellParticles, cellCells, *particleTypes);
361 shared_ptr<CRConnectivity> ibFaceCellsCR =
362 setibFaceCells (mesh, ibFaceList, ibFaces, cells, faceCells, cellFaces, faceCentroid);
373 string fileName11=fileBase+
"ibfacetoparticle.dat";
375 file11=&fileName11[0];
377 fp=fopen(file11,
"w");
379 for(
int f=0; f<ibFaces.
getCount(); f++){
380 const int faceIndex = ibFaceList[f];
383 int nc = ibFaceParticles.
getCount(f);
385 for(
int c=0; c<nc; c++){
386 int pID = ibFaceParticles(f,c);
389 fprintf(fp,
"%i\t%i\t%e\t%e\t%e\t%i\n", faceIndex,pID, (*MPM_Points)[pID][0],(*MPM_Points)[pID][1],(*MPM_Points)[pID][2],(*particleTypes)[pID]);
395 string fileName12=fileBase+
"ibfacetocell.dat";
397 file12=&fileName12[0];
399 fp=fopen(file12,
"w");
401 for(
int f=0; f<ibFaces.
getCount(); f++){
402 const int faceIndex = ibFaceList[f];
407 for(
int c=0; c<nc; c++){
410 int cID = ibFaceCells(f,c);
411 fprintf(fp,
"%i\t%i\t%e\t%e\t%e\n",faceIndex,cID, (cellCentroid)[cID][0],(cellCentroid)[cID][1],(cellCentroid)[cID][2]);
void checkIBFaces(const Array< int > &ibFaceList, const VectorT3Array &faceArea, const CRConnectivity &faceCells, const Mesh &mesh)
int getCount(const int i) const
const shared_ptr< Array< VecD3 > > & getCoordinates()
const StorageSite & getIBFaces() const
const CRConnectivity & getConnectivity(const StorageSite &from, const StorageSite &to) const
void CellMark_Impl(Mesh &mesh, const GeomFields &geomFields, const string fileBase, Octree &O, MPM &solid, const int option)
const shared_ptr< CRConnectivity > setParticleCells(const StorageSite &rowSite, const StorageSite &colSite, const Array< int > &connectivity)
const Array< int > & getIBFaceList() const
const shared_ptr< Array< VecD3 > > & getVelocities()
void setConnectivity(const StorageSite &rowSite, const StorageSite &colSite, shared_ptr< CRConnectivity > conn)
void markCell(Mesh &mesh, const int nCells, const int nSelfCells, const CRConnectivity &cellParticles, const CRConnectivity &cellCells)
void markIBFaces(Mesh &mesh, const int nFaces, const CRConnectivity &faceCells)
const CRConnectivity & getAllFaceCells() const
const CRConnectivity & getCellFaces() const
Array< VecD3 > VecD3Array
const StorageSite & getParticles() const
void getNodes(const VectorT3 coordinate, const double radius, vector< int > &cellList)
Get all objects closest to a x/y/z within a radius. search mechanism similar to getNode(coordinate) ...
const StorageSite & getFaces() const
const CRConnectivity & getCellCells() const
const StorageSite & getCells() const
const int getNode(const double x, const double y, const double z)
int inCell(const int cellIndex, const VectorT3 &point, const CRConnectivity &faceCells, const CRConnectivity &cellFaces, const VectorT3Array &faceArea, const VectorT3Array &faceCentroid)
void reportCellMark(const Mesh &mesh, const int nCells, const VectorT3Array &cellCentroid, const string fileBase)
const shared_ptr< CRConnectivity > setibFaceCells(const Mesh &mesh, const Array< int > &ibFaceList, const StorageSite &ibFaces, const StorageSite &cells, const CRConnectivity &faceCells, const CRConnectivity &cellFaces, const VecD3Array &faceCentroid)
const shared_ptr< Array< int > > & getTypes()
const shared_ptr< CRConnectivity > setibFaceParticles(const Mesh &mesh, const StorageSite &ibFaces, const Array< int > &ibFaceList, const StorageSite &particles, const CRConnectivity &faceCells, const CRConnectivity &cellParticles, const CRConnectivity &cellCells, const Array< int > &particleType)
Vector< double, 3 > VecD3