1 import java.io.PrintStream;
4 public class SerialDelaunayrefinement {
6 public SerialDelaunayrefinement() {
9 public static void main(String args[]) {
11 long lasttime = 0xffffffffL;
12 long mintime = 0xffffffffL;
13 for(long run = 0L; (run < 3L || Math.abs(lasttime - runtime) * 64L > Math.min(lasttime, runtime)) && run < 7L; run++) {
24 System.err.println((new StringBuilder("minimum runtime: ")).append(mintime).append(" ms").toString());
25 System.err.println("");
28 public static long run(String args[]) {
31 System.err.println("Lonestar Benchmark Suite v2.1");
32 System.err.println("Copyright (C) 2007, 2008, 2009 The University of Texas at Austin");
33 System.err.println("http://iss.ices.utexas.edu/lonestar/");
35 System.err.println("application: Delaunay Mesh Refinement (serial version)");
36 System.err.println("Refines a Delaunay triangulation mesh such that no angle");
37 System.err.println("in the mesh is less than 30 degrees");
38 System.err.println("http://iss.ices.utexas.edu/lonestar/delaunayrefinement.html");
42 throw new Error("Arguments: <input file> [verify]");
43 EdgeGraph mesh = new UndirectedEdgeGraph();
45 (new Mesh()).read(mesh, args[0]);
50 Stack worklist = new Stack();
51 worklist.addAll(Mesh.getBad(mesh));
52 Cavity cavity = new Cavity(mesh);
54 System.err.println((new StringBuilder("configuration: ")).append(mesh.getNumNodes()).append(" total triangles, ").append(worklist.size()).append(" bad triangles").toString());
57 long id = Time.getNewTimeId();
58 while(!worklist.isEmpty()) {
59 Node bad_element = (Node)worklist.pop();
60 if(bad_element != null && mesh.containsNode(bad_element)) {
61 cavity.initialize(bad_element);
65 for(Iterator iterator = cavity.getPre().getNodes().iterator(); iterator.hasNext(); mesh.removeNode(node))
66 node = (Node)iterator.next();
68 for(Iterator iterator1 = cavity.getPost().getNodes().iterator(); iterator1.hasNext(); mesh.addNode(node))
69 node = (Node)iterator1.next();
72 for(Iterator iterator2 = cavity.getPost().getEdges().iterator(); iterator2.hasNext(); mesh.addEdge(edge))
73 edge = (Edge)iterator2.next();
75 worklist.addAll(cavity.getPost().newBad(mesh));
76 if(mesh.containsNode(bad_element))
77 worklist.add(bad_element);
80 long time = Time.elapsedTime(id);
81 System.err.println((new StringBuilder("runtime: ")).append(time).append(" ms").toString());
82 if(isFirstRun && args.length > 1)
88 public static void verify(Object res) {
89 EdgeGraph result = (EdgeGraph)res;
90 if(!Mesh.verify(result))
91 throw new IllegalStateException("refinement failed.");
92 int size = Mesh.getBad(result).size();
94 throw new IllegalStateException((new StringBuilder("refinement failed\nstill have ")).append(size).append(" bad triangles left.\n").toString());
96 System.out.println("OK");
101 private static boolean isFirstRun = true;