Guest User

Untitled

a guest
May 30th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. void DifferenceScheme::solveOMP()
  2. {
  3. n = round((xMax - xMin) / xStep);
  4. m = round((tMax - tMin) / tStep);
  5. u = dMatrix(n + 1, dVector(m + 1, initValue));
  6. TridiagonalMatrix tm(n + 1);
  7. dVector F(n + 1);
  8. Progonka progonka(tm, F);
  9. double error;
  10.  
  11. workTime = clock();
  12. #pragma omp parallel for
  13. for (int i = 0; i <= n; i++)
  14. {
  15. u[i][0] = w(xMin + i * xStep, tMin);
  16. }
  17. #pragma omp parallel for
  18. for (int i = 0; i <= m; i++)
  19. {
  20. u[0][i] = w(xMin, tMin + i * tStep);
  21. u[n][i] = w(xMax, tMin + i * tStep);
  22. }
  23.  
  24. for (int j = 1; j <= m; j++)
  25. {
  26. do
  27. {
  28. #pragma omp parallel for
  29. for (int i = 1; i < n; i++)
  30. {
  31. tm.lower[i - 1] = dLeft(i, j);
  32. tm.main[i] = dCenter(i, j);
  33. tm.upper[i] = dRight(i, j);
  34. F[i] = -1 * f(i, j);
  35. }
  36. tm.main[0] = tm.main[n] = 1;
  37. F[0] = -1 * (u[0][j] - w(xMin, tMin + j * tStep));
  38. F[n] = -1 * (u[n][j] - w(xMax, tMin + j * tStep));
  39. progonka.solveOMP();
  40. #pragma omp parallel for
  41. for (int i = 1; i < n; i++)
  42. {
  43. u[i][j] += progonka.x[i];
  44. }
  45. error = 0;
  46. for (int i = 1; i < n; i++)
  47. if (fabs(progonka.x[i]) > error)
  48. error = fabs(progonka.x[i]);
  49. }
  50. while (error > accuracy);
  51. }
  52. workTime = clock() - workTime;
  53. }
Add Comment
Please, Sign In to add comment