void f(Real x, Real y, Real z, Scalar (&val)[3]) { Scalar ev[3], dx[3], dy[3], dz[3]; exact_sln(x, y, z, ev, dx, dy, dz); val[0] = 4*x*z + 18*x*y*z - 2*x*x*x + 9*x*x*y*y*z*z*z - ev[0]; val[1] = -4*y*z + 3*z*z - 9*z*y*y + 6*y*x*x - 6*x*y*y*y*z*z*z - 6*z*x*x*x*y*y*y - ev[1]; val[2] = 24*x + 2*x*x + 9*x*x*x*y*y*z*z - 3*y*y*y - ev[2]; }
void f(S x, S y, S z, T (&val)[3]) { T ev[3], dx[3], dy[3], dz[3]; exact_sln(x, y, z, ev, dx, dy, dz); T curlpart[3] = { 2*(1 - y*y)*(1 - 2*x*x*x + x*z) + 2*(1 - z*z)*(1 - 2*x*x*x + x*z) - 6*x*y*y*(1 - z*z) - 3*y*(1 - x*x)*(1 - y*y) - 2*x*(1 - y*y)*(2*z - 3*x*y) + 4*x*z*(1 - y*y), 2*(1 - x*x)*(y*y*y + 2*x) + 2*(1 - z*z)*(y*y*y + 2*x) + 8*x*(1 - z*z) - 3*x*(1 - x*x)*(1 - y*y) - 2*y*(1 - x*x)*(2*z - 3*x*y) - 2*y*(1 - z*z)*(z - 6*x*x), (1 - y*y)*(1 - z*z) + 2*(1 - x*x)*(z*z - 3*x*y*z) + 2*(1 - y*y)*(z*z - 3*x*y*z) - 6*z*y*y*(1 - x*x) - 2*z*(1 - y*y)*(z - 6*x*x) - 12*x*y*z*(1 - x*x) - 12*x*y*z*(1 - y*y) }; val[0] = curlpart[0] - alpha * ev[0]; val[1] = curlpart[1] - alpha * ev[1]; val[2] = curlpart[2] - alpha * ev[2]; }
Scalar linear_form_surf(int n, double *wt, Func<Scalar> *u_ext[], Func<Real> *v, Geom<Real> *e, ExtData<Scalar> *data) { Scalar result = 0.0; for (int i = 0; i < n; i++) { Scalar ev[3], dx[3], dy[3], dz[3]; exact_sln(e->x[i], e->y[i], e->z[i], ev, dx, dy, dz); Scalar curl_e[3]; calc_curl(dx, dy, dz, curl_e); Scalar tpe[3]; calc_tan_proj(e->nx[i], e->ny[i], e->nz[i], ev, tpe); Scalar g[3] = { (e->nz[i] * curl_e[1] - e->ny[i] * curl_e[2]) - img * tpe[0], (e->nx[i] * curl_e[2] - e->nz[i] * curl_e[0]) - img * tpe[1], (e->ny[i] * curl_e[0] - e->nx[i] * curl_e[1]) - img * tpe[2], }; result += wt[i] * (v->val0[i] * g[0] + v->val1[i] * g[1] + v->val2[i] * g[2]); } return result; }
void f(S x, S y, S z, T (&val)[3]) { _F_ T ev[3], dx[3], dy[3], dz[3]; exact_sln(x, y, z, ev, dx, dy, dz); #ifdef FN4 T curlpart[3] = { 2*(1 - y*y)*(1 - 2*x*x*x + x*z) + 2*(1 - z*z)*(1 - 2*x*x*x + x*z) - 6*x*y*y*(1 - z*z) - 3*y*(1 - x*x)*(1 - y*y) - 2*x*(1 - y*y)*(2*z - 3*x*y) + 4*x*z*(1 - y*y), 2*(1 - x*x)*(y*y*y + 2*x) + 2*(1 - z*z)*(y*y*y + 2*x) + 8*x*(1 - z*z) - 3*x*(1 - x*x)*(1 - y*y) - 2*y*(1 - x*x)*(2*z - 3*x*y) - 2*y*(1 - z*z)*(z - 6*x*x), (1 - y*y)*(1 - z*z) + 2*(1 - x*x)*(z*z - 3*x*y*z) + 2*(1 - y*y)*(z*z - 3*x*y*z) - 6*z*y*y*(1 - x*x) - 2*z*(1 - y*y)*(z - 6*x*x) - 12*x*y*z*(1 - x*x) - 12*x*y*z*(1 - y*y) }; #elif defined X2_Y2_Z2 // \nabla x \nabla x val T curlpart[3] = { 4 * x * (1 - y*y) * z, 4 * (1 - x*x) * y * z, 2 * (1 - y*y) * (1 - z*z) + 2 * (1 - x*x) * (1 - z*z) }; #endif val[0] = curlpart[0] - alpha * ev[0]; val[1] = curlpart[1] - alpha * ev[1]; val[2] = curlpart[2] - alpha * ev[2]; }