Advertisement
Guest User

Untitled

a guest
May 19th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.47 KB | None | 0 0
  1. double approx::rhs_elem (int k)
  2. {
  3.  
  4.   int i, j;
  5.   int n = msh->n_mesh;
  6.   int res = 0;
  7.   k2ij (n, i, j, k);
  8.   bool a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;
  9.   double D = msh->box_d;
  10.   double l = msh->box_l;
  11.   double dx = msh->dx;
  12.   double dy = msh->dy;
  13.  
  14.   if (! (msh->ptempl[j * (n + 1) + i]))
  15.     {
  16.       return 0;
  17.     }
  18.  
  19.   // +0, +1
  20.   if (j == msh->n_mesh) res += 0;
  21.   else if (msh->ptempl[(j + 1) * (n + 1) + i])
  22.     {
  23.       a = 1;
  24.     }
  25.  
  26.   // +1, +1
  27.   if (j == n) res += 0;
  28.   else if (i == n) res += 0;
  29.   else if (msh->ptempl[(j + 1) * (n + 1) + i + 1])
  30.     {
  31.       b = 1;
  32.     }
  33.  
  34.   // +1, +0
  35.   if (i == n) res += 0;
  36.   else if (msh->ptempl[j * (n + 1) + i + 1])
  37.     {
  38.       c = 1;
  39.     }
  40.  
  41.   // +0, -1
  42.   if (j == 0) res += 0;
  43.   else if (msh->ptempl[(j - 1) * (n + 1) + i])
  44.     {
  45.       d = 1;
  46.     }
  47.  
  48.   // -1, -1
  49.   if (j == 0) res += 0;
  50.   else if (i == 0) res += 0;
  51.   else if (msh->ptempl[(j - 1) * (n + 1) + i - 1])
  52.     {
  53.       e = 1;
  54.     }
  55.  
  56.   //-1, 0
  57.   if (i == 0) res += 0;
  58.   else if (msh->ptempl[j * (n + 1) + i - 1])
  59.     {
  60.       f = 1;
  61.     }
  62.  
  63.  
  64.   double r = 0;
  65.  
  66.   if (a && b)
  67.     {
  68.       r += 1./12. * 1./4. * F (l + i * dx, D + j * dy);
  69.       r += 1./12. * 1./4. * 1./2. * (F (l + i * dx, D + j * dy + dy/2) + F (l + i * dx + dx/2, D + j * dy + dy/2));
  70.     }
  71.  
  72.   if (c && b)
  73.     {
  74.       r += 1./12. * 1./4. * F (l + i * dx, D + j * dy);
  75.       r += 1./12. * 1./4. * 1./2. * (F (l + i * dx + dx/2, D + j * dy) + F (l + i * dx + dx/2, D + j * dy + dy/2));
  76.     }
  77.  
  78.   if (c && d)
  79.     {
  80.       if (msh->ptempl[(j - 1) * (n + 1) + i + 1])
  81.         {
  82.           r += 1./12. * 1./4. * F (l + i * dx, D + j * dy);
  83.           r += 1./12. * 1./4. * 1./2. * (F (l + i * dx + dx/2, D + j * dy) + F (l + i * dx, D + j * dy - dy/2));
  84.         }
  85.     }
  86.  
  87.   if (e && d)
  88.     {
  89.       r += 1./12. * 1./4. * F (l + i * dx, D + j * dy);
  90.       r += 1./12. * 1./4. * 1./2. * (F (l + i * dx - dx/2, D + j * dy - dy/2) + F (l + i * dx, D + j * dy - dy/2));
  91.     }
  92.  
  93.   if (e && f)
  94.     {
  95.       r += 1./12. * 1./4. * F (l + i * dx, D + j * dy);
  96.       r += 1./12. * 1./4. * 1./2. * (F (l + i * dx - dx/2, D + j * dy - dy/2) + F (l + i * dx - dx/2, D + j * dy));
  97.     }
  98.  
  99.   if (a && f)
  100.     {
  101.       if (msh->ptempl[(j + 1) * (n + 1) + i - 1])
  102.         {
  103.           r += 1./12. * 1./4. * F (l + i * dx, D + j * dy);
  104.           r += 1./12. * 1./4. * 1./2. * (F (l + i * dx, D + j * dy + dy/2) + F (l + i * dx - dx/2, D + j * dy));
  105.         }
  106.     }
  107.   (void)res;
  108.   return r;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement