Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Arrays;
- import java.util.concurrent.BrokenBarrierException;
- import java.util.concurrent.CyclicBarrier;
- class Executor extends Thread {
- private static void printMatrix(final Vertex v, int size, int nrhs) {
- for (int i = 1; i <= size; ++i) {
- for (int j = 1; j <= size; ++j) {
- System.out.printf("%6.2f ", v.m_a[i][j]);
- }
- System.out.printf(" | ");
- for (int j = 1; j <= nrhs; ++j) {
- System.out.printf("%6.2f ", v.m_b[i][j]);
- }
- System.out.printf(" | ");
- for (int j = 1; j <= nrhs; ++j) {
- System.out.printf("%6.2f ", v.m_x[i][j]);
- }
- System.out.println();
- }
- }
- public synchronized void run()
- {
- // BUILDING ELEMENT PARTITION TREE
- try
- {
- int n = 18; // number of B-splines along x axis
- int m = 18; // number of B-splines along y axis
- double dx = 1.0 / n; // mesh size along x
- double dy = 1.0 / m; // mesh size along y
- int p = 2; // polynomial order of approximation
- // Mesh
- MeshData mesh = new MeshData(dx, dy, n, m, p);
- Vertex S = new Vertex(null, null, null, null, "Sx", 0, mesh.m_nelemx, mesh);
- // This code processes 8 intervals (elemens)
- // Please enlarge this tree to process 12 intervals (elemes)
- // Build tree along x
- // [(P1)]
- CyclicBarrier barrier = new CyclicBarrier(1 + 1);
- P1 p1 = new P1(S, barrier, mesh);
- p1.start();
- barrier.await();
- // [(P2)1(P2)2]
- barrier = new CyclicBarrier(2 + 1);
- P2 p2a = new P2(p1.m_vertex.m_left, barrier, mesh);
- P2 p2b = new P2(p1.m_vertex.m_right, barrier, mesh);
- p2a.start();
- p2b.start();
- barrier.await();
- barrier = new CyclicBarrier(4 + 1);
- P2 p2b1 = new P2(p2b.m_vertex.m_left, barrier, mesh);
- P2 p2b2 = new P2(p2b.m_vertex.m_right, barrier, mesh);
- P3 p3a1 = new P3(p2a.m_vertex.m_left, barrier, mesh);
- P3 p3a2 = new P3(p2a.m_vertex.m_right, barrier, mesh);
- p2b1.start();
- p2b2.start();
- p3a1.start();
- p3a2.start();
- barrier.await();
- // [(P3)1(P3)2(P3)3(P3)4]
- barrier = new CyclicBarrier(4 + 1);
- P3 p3c1 = new P3(p2b.m_vertex.m_left, barrier, mesh);
- P3 p3c2 = new P3(p2b.m_vertex.m_right, barrier, mesh);
- P3 p3d1 = new P3(p2b.m_vertex.m_left, barrier, mesh);
- P3 p3d2 = new P3(p2b.m_vertex.m_right, barrier, mesh);
- p3c1.start();
- p3c2.start();
- p3d1.start();
- p3d2.start();
- barrier.await();
- // MFS along x
- // [A^12]
- barrier = new CyclicBarrier(18 + 1);
- A1 a1 = new A1(p3a1.m_vertex.m_left, barrier, mesh);
- A a2 = new A(p3a1.m_vertex.m_middle, barrier, mesh);
- A a3 = new A(p3a1.m_vertex.m_right, barrier, mesh);
- A a4 = new A(p3a2.m_vertex.m_left, barrier, mesh);
- A a5 = new A(p3a2.m_vertex.m_middle, barrier, mesh);
- A a6 = new A(p3a2.m_vertex.m_right, barrier, mesh);
- A a7 = new A(p3c1.m_vertex.m_left, barrier, mesh);
- A a8 = new A(p3c1.m_vertex.m_middle, barrier, mesh);
- A a9 = new A(p3c1.m_vertex.m_right, barrier, mesh);
- A a10 = new A(p3c2.m_vertex.m_left, barrier, mesh);
- A a11 = new A(p3c2.m_vertex.m_middle, barrier, mesh);
- A a12 = new A(p3c2.m_vertex.m_right, barrier, mesh);
- A a13 = new A(p3d1.m_vertex.m_left, barrier, mesh);
- A a14 = new A(p3d1.m_vertex.m_middle, barrier, mesh);
- A a15 = new A(p3d1.m_vertex.m_right, barrier, mesh);
- A a16 = new A(p3d2.m_vertex.m_left, barrier, mesh);
- A a17 = new A(p3d2.m_vertex.m_middle, barrier, mesh);
- AN a18 = new AN(p3d2.m_vertex.m_right, barrier, mesh);
- a1.start();
- a2.start();
- a3.start();
- a4.start();
- a5.start();
- a6.start();
- a7.start();
- a8.start();
- a9.start();
- a10.start();
- a11.start();
- a12.start();
- a13.start();
- a14.start();
- a15.start();
- a16.start();
- a17.start();
- a18.start();
- barrier.await();
- // [A2_3^4]
- barrier = new CyclicBarrier(6 + 1);
- A2_3 a2a = new A2_3(p3a1.m_vertex, barrier, mesh);
- A2_3 a2b = new A2_3(p3a2.m_vertex, barrier, mesh);
- A2_3 a2c = new A2_3(p3c1.m_vertex, barrier, mesh);
- A2_3 a2d = new A2_3(p3c2.m_vertex, barrier, mesh);
- A2_3 a2e = new A2_3(p3d1.m_vertex, barrier, mesh);
- A2_3 a2f = new A2_3(p3d2.m_vertex, barrier, mesh);
- a2a.start();
- a2b.start();
- a2c.start();
- a2d.start();
- a2e.start();
- a2f.start();
- barrier.await();
- // [E2_1_5^4]
- barrier = new CyclicBarrier(6 + 1);
- E2_1_5 e2a = new E2_1_5(p3a1.m_vertex, barrier, mesh);
- E2_1_5 e2b = new E2_1_5(p3a2.m_vertex, barrier, mesh);
- E2_1_5 e2c = new E2_1_5(p3c1.m_vertex, barrier, mesh);
- E2_1_5 e2d = new E2_1_5(p3c2.m_vertex, barrier, mesh);
- E2_1_5 e2e = new E2_1_5(p3d1.m_vertex, barrier, mesh);
- E2_1_5 e2f = new E2_1_5(p3d2.m_vertex, barrier, mesh);
- e2a.start();
- e2b.start();
- e2c.start();
- e2d.start();
- e2e.start();
- e2e.start();
- e2f.start();
- barrier.await();
- // [A2_2^2]
- barrier = new CyclicBarrier(2 + 1);
- A2_2 a22a = new A2_2(p2a.m_vertex, barrier, mesh);
- A2_2 a22b = new A2_2(p2b.m_vertex, barrier, mesh);
- a22a.start();
- a22b.start();
- barrier.await();
- // [E2_2_6^2]
- barrier = new CyclicBarrier(2 + 1);
- E2_2_6 e26a = new E2_2_6(p2a.m_vertex, barrier, mesh);
- E2_2_6 e26b = new E2_2_6(p2b.m_vertex, barrier, mesh);
- e26a.start();
- e26b.start();
- barrier.await();
- //Aroot
- barrier = new CyclicBarrier(1 + 1);
- Aroot aroot = new Aroot(p1.m_vertex, barrier, mesh);
- aroot.start();
- barrier.await();
- printMatrix(aroot.m_vertex, 6, mesh.m_dofsy);
- // [Eroot]
- barrier = new CyclicBarrier(1 + 1);
- Eroot eroot = new Eroot(p1.m_vertex, barrier, mesh);
- eroot.start();
- barrier.await();
- printMatrix(eroot.m_vertex, 6, mesh.m_dofsy);
- // [BS_1_5^2]
- barrier = new CyclicBarrier(2 + 1);
- BS_2_6 bs1a = new BS_2_6(p2a.m_vertex, barrier, mesh);
- BS_2_6 bs1b = new BS_2_6(p2b.m_vertex, barrier, mesh);
- bs1a.start();
- bs1b.start();
- barrier.await();
- barrier = new CyclicBarrier(2 + 1);
- BS_2_6 bs1c = new BS_2_6(p2b1.m_vertex, barrier, mesh);
- BS_2_6 bs1d = new BS_2_6(p2b2.m_vertex, barrier, mesh);
- bs1c.start();
- bs1d.start();
- barrier.await();
- // [BS_2_6^4]
- barrier = new CyclicBarrier(6 + 1);
- BS_1_5 bs2a = new BS_1_5(p3a1.m_vertex, barrier, mesh);
- BS_1_5 bs2b = new BS_1_5(p3a2.m_vertex, barrier, mesh);
- BS_1_5 bs2c = new BS_1_5(p3c1.m_vertex, barrier, mesh);
- BS_1_5 bs2d = new BS_1_5(p3c2.m_vertex, barrier, mesh);
- BS_1_5 bs2e = new BS_1_5(p3d1.m_vertex, barrier, mesh);
- BS_1_5 bs2f = new BS_1_5(p3d2.m_vertex, barrier, mesh);
- bs2a.start();
- bs2b.start();
- bs2c.start();
- bs2d.start();
- bs2e.start();
- bs2f.start();
- barrier.await();
- TestSolution tester = new TestSolution();
- boolean result = tester.test(S, 0, 18, 18);
- if (result)
- System.out.println("OK");
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement