Advertisement
Guest User

Untitled

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