public void testIO() throws IOException,ClassNotFoundException { TetMesh.Node n000 = new TetMesh.Node(0.0f,0.0f,0.0f); TetMesh.Node n001 = new TetMesh.Node(0.0f,0.0f,1.0f); TetMesh.Node n010 = new TetMesh.Node(0.0f,1.0f,0.0f); TetMesh.Node n011 = new TetMesh.Node(0.0f,1.0f,1.0f); TetMesh.Node n100 = new TetMesh.Node(1.0f,0.0f,0.0f); TetMesh.Node n101 = new TetMesh.Node(1.0f,0.0f,1.0f); TetMesh.Node n110 = new TetMesh.Node(1.0f,1.0f,0.0f); TetMesh.Node n111 = new TetMesh.Node(1.0f,1.0f,1.0f); TetMesh tm = new TetMesh(); tm.addNode(n000);
float y = random.nextFloat(); float z = random.nextFloat(); TetMesh.Node node = new TetMesh.Node(x,y,z); tm.addNode(node); for (int ifind=0; ifind<nfind; ++ifind) { if (nfast[ifind]!=nslow[ifind]) { float xfast = nfast[ifind].x(); float yfast = nfast[ifind].y(); float zfast = nfast[ifind].z(); float xslow = nslow[ifind].x(); float yslow = nslow[ifind].y(); float zslow = nslow[ifind].z(); float dxfast = xfast-x[ifind]; float dyfast = yfast-y[ifind];
/** * Constructs a node with the specified coordinates. * (Does not add the node to the mesh.) * @param x the x coordinate. * @param y the y coordinate. * @param z the z coordinate. */ public Node(float x, float y, float z) { _prev = null; _next = null; _tet = null; _mark = 0; _hash = System.identityHashCode(this); setPosition(x,y,z); }
public void testFinds() { TetMesh tm = new TetMesh(); TetMesh.Node n0 = new TetMesh.Node(0.0f,0.0f,0.0f); TetMesh.Node n1 = new TetMesh.Node(1.0f,0.0f,0.0f); TetMesh.Node n2 = new TetMesh.Node(0.0f,1.0f,0.0f); TetMesh.Node n3 = new TetMesh.Node(0.0f,0.0f,1.0f); TetMesh.Node n4 = new TetMesh.Node(9.0f,9.0f,9.0f); tm.addNode(n0); tm.addNode(n1);
private void estimateGradient(TetMesh.Node n) { NodeData data = data(n); double fn = data.f; double xn = n.xp(); double yn = n.yp(); double zn = n.zp(); _mesh.removeNode(n); double vsum = computeVolumes((float)xn,(float)yn,(float)zn); double fm = f(m); double wm = volume(m); double xm = m.xp(); double ym = m.yp(); double zm = m.zp(); double df = fn-fm; double dx = xn-xm;
TetMesh.Node n = _nodes[in]; double fn = f(n); double xn = n.xp(); double yn = n.yp(); double zn = n.zp(); for (int ig=0; ig<ng; ++ig) { double xg = x[ig]; TetMesh.PointLocation pl = _mesh.locatePoint(xg,yg,zg); if (pl.isOutside()) { TetMesh.Node n = new TetMesh.Node(xg,yg,zg); n.index = -1-ig; // ghost nodes have negative indices _mesh.addNode(n);
public void testNabors() { TetMesh tm = new TetMesh(); TetMesh.Node n0 = new TetMesh.Node(1.0f,0.0f,0.0f); TetMesh.Node n1 = new TetMesh.Node(0.0f,1.0f,0.0f); TetMesh.Node n2 = new TetMesh.Node(0.0f,0.0f,1.0f); TetMesh.Node n3 = new TetMesh.Node(0.0f,0.0f,0.0f); TetMesh.Node n4 = new TetMesh.Node(1.1f,1.1f,1.1f); tm.addNode(n0); tm.addNode(n1);
TetMesh.Node node = new TetMesh.Node(x1i,x2i,x3i); boolean added = _mesh.addNode(node); Check.argument(added,"each sample has unique coordinates");
TetMesh.Node nc = tet.nodeC(); TetMesh.Node nd = tet.nodeD(); double xa = na.xp(), ya = na.yp(), za = na.zp(); double xb = nb.xp(), yb = nb.yp(), zb = nb.zp(); double xc = nc.xp(), yc = nc.yp(), zc = nc.zp(); double xd = nd.xp(), yd = nd.yp(), zd = nd.zp(); Geometry.centerSphere(xp,yp,zp,xb,yb,zb,xc,yc,zc,xd,yd,zd,_ca); Geometry.centerSphere(xp,yp,zp,xa,ya,za,xd,yd,zd,xc,yc,zc,_cb);
float y = random.nextFloat(); float z = random.nextFloat(); TetMesh.Node node = new TetMesh.Node(x,y,z); tm.addNode(node);
/** * Locates a point. */ private PointLocation locatePoint(double x, double y, double z) { // If no tets yet, search the node list for an exact match. // Here, we use unperturbed node coordinates. if (_troot==null) { if (_nroot!=null) { Node node = _nroot; do { if (x==node.x() && y==node.y() && z==node.z()) return new PointLocation(node); node = node._next; } while (node!=_nroot); } return new PointLocation(null,false); } // Otherwise, find a good tet in which to begin the recursive search. Node nmin = _nroot; double dmin = distanceSquared(nmin,x,y,z); for (Node n:_sampledNodes) { double d = distanceSquared(n,x,y,z); if (d<dmin) { dmin = d; nmin = n; } } Tet tet = nmin._tet; return locatePoint(tet,x,y,z); }
public void testCube() { TetMesh tm = new TetMesh(); TetMesh.Node n0 = new TetMesh.Node(0.0f,0.0f,0.0f); TetMesh.Node n1 = new TetMesh.Node(1.0f,0.0f,0.0f); TetMesh.Node n2 = new TetMesh.Node(0.0f,1.0f,0.0f); TetMesh.Node n3 = new TetMesh.Node(0.0f,0.0f,1.0f); TetMesh.Node n4 = new TetMesh.Node(1.0f,1.0f,0.0f); TetMesh.Node n5 = new TetMesh.Node(1.0f,0.0f,1.0f); TetMesh.Node n6 = new TetMesh.Node(0.0f,1.0f,1.0f); TetMesh.Node n7 = new TetMesh.Node(1.0f,1.0f,1.0f); tm.addNode(n0); tm.addNode(n1); tm.addNode(n2); tm.addNode(n3); tm.addNode(n4); tm.addNode(n5); tm.addNode(n6); tm.addNode(n7); tm.removeNode(n7); tm.removeNode(n6); tm.removeNode(n5); tm.removeNode(n4); tm.removeNode(n3); tm.removeNode(n2); tm.removeNode(n1); tm.removeNode(n0); tm.validate(); }
public void testAddFindRemove() { java.util.Random random = new java.util.Random(); TetMesh tm = new TetMesh(); //int nadd = 0; //int nremove = 0; for (int niter=0; niter<1000; ++niter) { float x = random.nextFloat(); float y = random.nextFloat(); float z = random.nextFloat(); if (tm.countNodes()<10 || random.nextFloat()>0.5f) { TetMesh.Node node = new TetMesh.Node(x,y,z); boolean ok = tm.addNode(node); assertTrue(ok); tm.validate(); //++nadd; } else if (tm.countNodes()>0) { TetMesh.Node node = tm.findNodeNearest(x,y,z); assertTrue(node!=null); TetMesh.Node nodeSlow = tm.findNodeNearestSlow(x,y,z); assertTrue(node==nodeSlow); tm.removeNode(node); tm.validate(); //++nremove; } } //System.out.println("Nodes added/removed = "+nadd+"/"+nremove); }