ibgopoints.cxx
来自「有限元学习研究用源代码(老外的),供科研人员参考」· CXX 代码 · 共 82 行
CXX
82 行
#include "ibgoctree.hxx"
#include "wzgrid.hxx"
#include "cogwarnings.hxx"
void ibgGetPoints(wzpoints p, ibgoctree oct)
{
try{
oct->test();
}catch(...){
}
oct->getPointList(p);
}
void ibgOctreeData::getPointList(wzpoints p)
{
wzPoint *n;
wzIndex bn;
ibgiNode i; cogFace s;
int e,v,j,k,nn = 0;
int cregion=0,cface=0,cedge=0,cvertex=0;
wzArray<int> nindex(nodes,1,0);
wzArray<int> findex(faces,1,0);
p->boxDim = GridDim;
nindex[0] = 0;
wzRangeLoop(nodes,i){
bn = nBoundary[i];
if(bn && (bnType[bn] & ibgoHidden)){
nindex[i] = 0;
continue;
}
j = p->create(); nindex[i] = j;
n = &(p->Point[j]);
*n = nPoint[i];
p->Near[j] = nindex[nOld[i]];
}
cregion = j;
wzRangeLoop(faces,i){
if(fType[i] & ibgoHidden){
findex[i] = 0;
continue;
}
j = p->create();
findex[i] = j;
n = &(p->Point[j]);
*n = fPoint[i];
if((k = -fUp[i])>0 && k<i && findex[k]) p->Near[j] = findex[k];
else if(k<0) p->Near[j] = nindex[bnBase[-k]];
else if((k= -fDown[i])>0&&k<i&&findex[k]) p->Near[j] = findex[k];
else if(k<0) p->Near[j] = nindex[bnBase[-k]];
else p->Near[j] = 0;
}
cface = j-cregion;
/* // this variant makes only one edge per plane
wzRangeLoop(planes,i){
e = pEdge[i];
if(!e) continue;
j = p->create(); cedge++;
n = &(p->Point[j]);
*n = ePoint[e];
p->Near[j] = nindex[bnBase[pNode[0][i]]];
}
*/
wzRangeLoop(edges,e){
j = p->create(); cedge++;
n = &(p->Point[j]);
*n = ePoint[e];
p->Near[j] = nindex[bnBase[pNode[0][ePlane[e]]]];
}
wzRangeLoop(bcells,i){
v = bcVertex[i];
if(!v) continue;
nn = p->create(); cvertex++;
n = &(p->Point[nn]);
*n = vPoint[v];
p->Near[nn] = nindex[cNode[0][bcBase[i]]];
}
cogInfoGenerate
("with <> points (in region <>, on face <>, on edge <>, vertices <>)")
<< p->length(), cregion, cface, cedge, cvertex;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?