Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.11 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.concurrent.BrokenBarrierException;
  3. import java.util.concurrent.CyclicBarrier;
  4.  
  5. class Executor extends Thread {
  6.     private static void printMatrix(final Vertex v, int size, int nrhs) {
  7.         for (int i = 1; i <= size; ++i) {
  8.             for (int j = 1; j <= size; ++j) {
  9.                 System.out.printf("%6.2f ", v.m_a[i][j]);
  10.             }
  11.             System.out.printf("  |  ");
  12.             for (int j = 1; j <= nrhs; ++j) {
  13.                 System.out.printf("%6.2f ", v.m_b[i][j]);
  14.             }
  15.             System.out.printf("  |  ");
  16.             for (int j = 1; j <= nrhs; ++j) {
  17.                 System.out.printf("%6.2f ", v.m_x[i][j]);
  18.             }
  19.             System.out.println();
  20.         }
  21.     }
  22.  
  23.     public synchronized void run() {
  24.         // BUILDING ELEMENT PARTITION TREE
  25.         try {
  26.  
  27.             int n = 18; // number of B-splines along x axis
  28.             int m = 18; // number of B-splines along y axis
  29.             double dx = 1.0 / n; // mesh size along x
  30.             double dy = 1.0 / m; // mesh size along y
  31.             int p = 2; // polynomial order of approximation
  32.  
  33.            // Mesh
  34.             MeshData mesh = new MeshData(dx, dy, n, m, p);
  35.             Vertex S = new Vertex(null, null, null, null, "Sx", 0, mesh.m_nelemx, mesh);
  36.  
  37. //  This code processes 8 intervals (elemens)
  38. //  Please enlarge this tree to process 12 intervals (elemes)
  39.             // Build tree along x
  40.             // [(P1)]
  41.             CyclicBarrier barrier = new CyclicBarrier(1 + 1);
  42.             P1 p1 = new P1(S, barrier, mesh);
  43.             p1.start();
  44.             barrier.await();
  45.             // [(P2)1(P2)2]
  46.             barrier = new CyclicBarrier(2 + 1);
  47.             P2 p2a = new P2(p1.m_vertex.m_left, barrier, mesh);
  48.             P2 p2b = new P2(p1.m_vertex.m_right, barrier, mesh);
  49.             p2a.start();
  50.             p2b.start();
  51.             barrier.await();
  52.  
  53.             barrier = new CyclicBarrier(2 + 1);
  54.             P2 p2b1 = new P2(p2b.m_vertex.m_left, barrier, mesh);
  55.             P2 p2b2 = new P2(p2b.m_vertex.m_right, barrier, mesh);
  56.             p2b1.start();
  57.             p2b2.start();
  58.             barrier.await();
  59.  
  60.             // [(P3)1(P3)2(P3)3(P3)4]
  61.             barrier = new CyclicBarrier(6 + 1);
  62.             P3 p3a1 = new P3(p2a.m_vertex.m_left, barrier, mesh);
  63.             P3 p3a2 = new P3(p2a.m_vertex.m_right, barrier, mesh);
  64.             P3 p3c1 = new P3(p2b1.m_vertex.m_left, barrier, mesh);
  65.             P3 p3c2 = new P3(p2b1.m_vertex.m_right, barrier, mesh);
  66.             P3 p3d1 = new P3(p2b2.m_vertex.m_left, barrier, mesh);
  67.             P3 p3d2 = new P3(p2b2.m_vertex.m_right, barrier, mesh);
  68.             p3a1.start();
  69.             p3a2.start();
  70.             p3c1.start();
  71.             p3c2.start();
  72.             p3d1.start();
  73.             p3d2.start();
  74.             barrier.await();
  75.  
  76.             // MFS along x
  77.             // [A^12]
  78.             barrier = new CyclicBarrier(18 + 1);
  79.             A1 a1 = new A1(p3a1.m_vertex.m_left, barrier, mesh);
  80.             A a2 = new A(p3a1.m_vertex.m_middle, barrier, mesh);
  81.             A a3 = new A(p3a1.m_vertex.m_right, barrier, mesh);
  82.             A a4 = new A(p3a2.m_vertex.m_left, barrier, mesh);
  83.             A a5 = new A(p3a2.m_vertex.m_middle, barrier, mesh);
  84.             A a6 = new A(p3a2.m_vertex.m_right, barrier, mesh);
  85.             A a7 = new A(p3c1.m_vertex.m_left, barrier, mesh);
  86.             A a8 = new A(p3c1.m_vertex.m_middle, barrier, mesh);
  87.             A a9 = new A(p3c1.m_vertex.m_right, barrier, mesh);
  88.             A a10 = new A(p3c2.m_vertex.m_left, barrier, mesh);
  89.             A a11 = new A(p3c2.m_vertex.m_middle, barrier, mesh);
  90.             A a12 = new A(p3c2.m_vertex.m_right, barrier, mesh);
  91.             A a13 = new A(p3d1.m_vertex.m_left, barrier, mesh);
  92.             A a14 = new A(p3d1.m_vertex.m_middle, barrier, mesh);
  93.             A a15 = new A(p3d1.m_vertex.m_right, barrier, mesh);
  94.             A a16 = new A(p3d2.m_vertex.m_left, barrier, mesh);
  95.             A a17 = new A(p3d2.m_vertex.m_middle, barrier, mesh);
  96.             A a18 = new A(p3d2.m_vertex.m_right, barrier, mesh);
  97.             a1.start();
  98.             a2.start();
  99.             a3.start();
  100.             a4.start();
  101.             a5.start();
  102.             a6.start();
  103.             a7.start();
  104.             a8.start();
  105.             a9.start();
  106.             a10.start();
  107.             a11.start();
  108.             a12.start();
  109.             a13.start();
  110.             a14.start();
  111.             a15.start();
  112.             a16.start();
  113.             a17.start();
  114.             a18.start();
  115.             barrier.await();
  116.             // [A2_3^4]
  117.             barrier = new CyclicBarrier(6 + 1);
  118.             A2_3 a2a = new A2_3(p3a1.m_vertex, barrier, mesh);
  119.             A2_3 a2b = new A2_3(p3a2.m_vertex, barrier, mesh);
  120.             A2_3 a2c = new A2_3(p3c1.m_vertex, barrier, mesh);
  121.             A2_3 a2d = new A2_3(p3c2.m_vertex, barrier, mesh);
  122.             A2_3 a2e = new A2_3(p3d1.m_vertex, barrier, mesh);
  123.             A2_3 a2f = new A2_3(p3d2.m_vertex, barrier, mesh);
  124.             a2a.start();
  125.             a2b.start();
  126.             a2c.start();
  127.             a2d.start();
  128.             a2e.start();
  129.             a2f.start();
  130.             barrier.await();
  131.             // [E2_1_5^4]
  132.             barrier = new CyclicBarrier(6 + 1);
  133.             E2_1_5 e2a = new E2_1_5(p3a1.m_vertex, barrier, mesh);
  134.             E2_1_5 e2b = new E2_1_5(p3a2.m_vertex, barrier, mesh);
  135.             E2_1_5 e2c = new E2_1_5(p3c1.m_vertex, barrier, mesh);
  136.             E2_1_5 e2d = new E2_1_5(p3c2.m_vertex, barrier, mesh);
  137.             E2_1_5 e2e = new E2_1_5(p3d1.m_vertex, barrier, mesh);
  138.             E2_1_5 e2f = new E2_1_5(p3d2.m_vertex, barrier, mesh);
  139.             e2a.start();
  140.             e2b.start();
  141.             e2c.start();
  142.             e2d.start();
  143.             e2e.start();
  144.             e2f.start();
  145.             barrier.await();
  146.  
  147.             // [A2_2^2]
  148.             barrier = new CyclicBarrier(2 + 1);
  149.             A2_2 a22a = new A2_2(p2a.m_vertex, barrier, mesh);
  150.             A2_2 a22b = new A2_2(p2b.m_vertex, barrier, mesh);
  151.             a22a.start();
  152.             a22b.start();
  153.             barrier.await();
  154.             // [E2_2_6^2]
  155.             barrier = new CyclicBarrier(2 + 1);
  156.             E2_2_6 e26a = new E2_2_6(p2a.m_vertex, barrier, mesh);
  157.             E2_2_6 e26b = new E2_2_6(p2b.m_vertex, barrier, mesh);
  158.             e26a.start();
  159.             e26b.start();
  160.             barrier.await();
  161.  
  162.             //Aroot
  163.             barrier = new CyclicBarrier(1 + 1);
  164.             Aroot aroot = new Aroot(p1.m_vertex, barrier, mesh);
  165.             aroot.start();
  166.             barrier.await();
  167.             printMatrix(aroot.m_vertex, 6, mesh.m_dofsy);
  168.             // [Eroot]
  169.             barrier = new CyclicBarrier(1 + 1);
  170.             Eroot eroot = new Eroot(p1.m_vertex, barrier, mesh);
  171.             eroot.start();
  172.             barrier.await();
  173.             printMatrix(eroot.m_vertex, 6, mesh.m_dofsy);
  174.             // [BS_1_5^2]
  175.             barrier = new CyclicBarrier(2 + 1);
  176.             BS_2_6 bs1a = new BS_2_6(p2a.m_vertex, barrier, mesh);
  177.             BS_2_6 bs1b = new BS_2_6(p2b.m_vertex, barrier, mesh);
  178.             bs1a.start();
  179.             bs1b.start();
  180.             barrier.await();
  181.             // [BS_2_6^4]
  182.             barrier = new CyclicBarrier(6 + 1);
  183.             BS_1_5 bs2a = new BS_1_5(p3a1.m_vertex, barrier, mesh);
  184.             BS_1_5 bs2b = new BS_1_5(p3a2.m_vertex, barrier, mesh);
  185.             BS_1_5 bs2c = new BS_1_5(p3c1.m_vertex, barrier, mesh);
  186.             BS_1_5 bs2d = new BS_1_5(p3c2.m_vertex, barrier, mesh);
  187.             BS_1_5 bs2e = new BS_1_5(p3d1.m_vertex, barrier, mesh);
  188.             BS_1_5 bs2f = new BS_1_5(p3d2.m_vertex, barrier, mesh);
  189.             bs2a.start();
  190.             bs2b.start();
  191.             bs2c.start();
  192.             bs2d.start();
  193.             bs2e.start();
  194.             bs2f.start();
  195.             barrier.await();
  196.  
  197.  
  198.  
  199.         TestSolution tester = new TestSolution();
  200.              boolean result = tester.test(S,0,18,18);
  201.              if(result==true)
  202.              System.out.println("OK");
  203.  } catch (Exception e) {
  204.  e.printStackTrace();
  205.  }
  206.  }
  207.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement