116 Vector<double>& residuals)
123 const unsigned n_node = this->nnode();
127 DShape dpsifds(n_node, 1);
130 const unsigned n_intpt = this->integral_pt()->nweight();
136 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
139 s[0] = this->integral_pt()->knot(ipt, 0);
142 double W = this->integral_pt()->weight(ipt);
145 this->dshape_local_at_knot(ipt, psif, dpsifds);
148 Vector<double> interpolated_t1(2, 0.0);
149 Vector<double> interpolated_x(2, 0.0);
150 for (
unsigned l = 0; l < n_node; l++)
153 for (
unsigned i = 0; i < 2; i++)
155 interpolated_x[i] += this->nodal_position(l, i) * psif(l);
156 interpolated_t1[i] += this->nodal_position(l, i) * dpsifds(l, 0);
161 double tlength = interpolated_t1[0] * interpolated_t1[0] +
162 interpolated_t1[1] * interpolated_t1[1];
165 double J = sqrt(tlength);
168 Vector<double> interpolated_n(2);
169 this->outer_unit_normal(ipt, interpolated_n);
173 for (
unsigned k = 0; k < 2; k++)
175 dot += interpolated_x[k] * interpolated_n[k];
180 residuals[local_eqn] += 0.5 * dot * W * J;
195 const unsigned n_node = this->nnode();
199 DShape dpsifds(n_node, 1);
202 const unsigned n_intpt = this->integral_pt()->nweight();
208 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
211 s[0] = this->integral_pt()->knot(ipt, 0);
214 double W = this->integral_pt()->weight(ipt);
217 this->dshape_local_at_knot(ipt, psif, dpsifds);
220 Vector<double> interpolated_t1(2, 0.0);
221 Vector<double> interpolated_x(2, 0.0);
222 for (
unsigned l = 0; l < n_node; l++)
225 for (
unsigned i = 0; i < 2; i++)
227 interpolated_x[i] += this->nodal_position(l, i) * psif(l);
228 interpolated_t1[i] += this->nodal_position(l, i) * dpsifds(l, 0);
233 double tlength = interpolated_t1[0] * interpolated_t1[0] +
234 interpolated_t1[1] * interpolated_t1[1];
237 double J = sqrt(tlength);
240 Vector<double> interpolated_n(2);
241 this->outer_unit_normal(ipt, interpolated_n);
245 for (
unsigned k = 0; k < 2; k++)
247 dot += interpolated_x[k] * interpolated_n[k];
252 vol += 0.5 * dot * W * J;
273 const unsigned n_node = this->nnode();
277 DShape dpsifds(n_node, 1);
280 const unsigned n_intpt = this->integral_pt()->nweight();
286 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
289 s[0] = this->integral_pt()->knot(ipt, 0);
292 double W = this->integral_pt()->weight(ipt);
295 this->dshape_local_at_knot(ipt, psif, dpsifds);
298 Vector<double> interpolated_t1(2, 0.0);
299 Vector<double> interpolated_x(2, 0.0);
300 for (
unsigned l = 0; l < n_node; l++)
303 for (
unsigned i = 0; i < 2; i++)
305 interpolated_x[i] += this->nodal_position(l, i) * psif(l);
306 interpolated_t1[i] += this->nodal_position(l, i) * dpsifds(l, 0);
311 double tlength = interpolated_t1[0] * interpolated_t1[0] +
312 interpolated_t1[1] * interpolated_t1[1];
315 double J = sqrt(tlength) * interpolated_x[0];
318 Vector<double> interpolated_n(2);
319 this->outer_unit_normal(ipt, interpolated_n);
323 for (
unsigned k = 0; k < 2; k++)
325 dot += interpolated_x[k] * interpolated_n[k];
330 vol += dot * W * J / 3.0;
353 Vector<double>& residuals)
360 const unsigned n_node = this->nnode();
364 DShape dpsifds(n_node, 1);
367 const unsigned n_intpt = this->integral_pt()->nweight();
373 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
376 s[0] = this->integral_pt()->knot(ipt, 0);
379 double W = this->integral_pt()->weight(ipt);
382 this->dshape_local_at_knot(ipt, psif, dpsifds);
385 Vector<double> interpolated_t1(2, 0.0);
386 Vector<double> interpolated_x(2, 0.0);
387 for (
unsigned l = 0; l < n_node; l++)
390 for (
unsigned i = 0; i < 2; i++)
392 interpolated_x[i] += this->nodal_position(l, i) * psif(l);
393 interpolated_t1[i] += this->nodal_position(l, i) * dpsifds(l, 0);
398 double tlength = interpolated_t1[0] * interpolated_t1[0] +
399 interpolated_t1[1] * interpolated_t1[1];
403 double J = sqrt(tlength) * interpolated_x[0];
406 Vector<double> interpolated_n(2);
407 this->outer_unit_normal(ipt, interpolated_n);
411 for (
unsigned k = 0; k < 2; k++)
413 dot += interpolated_x[k] * interpolated_n[k];
418 residuals[local_eqn] += dot * W * J / 3.0;
436 Vector<double>& residuals)
443 const unsigned n_node = this->nnode();
447 DShape dpsifds(n_node, 2);
450 const unsigned n_intpt = this->integral_pt()->nweight();
456 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
459 for (
unsigned i = 0; i < 2; i++)
461 s[i] = this->integral_pt()->knot(ipt, i);
465 double W = this->integral_pt()->weight(ipt);
468 this->dshape_local_at_knot(ipt, psif, dpsifds);
471 DenseMatrix<double> interpolated_g(2, 3, 0.0);
472 Vector<double> interpolated_x(3, 0.0);
473 for (
unsigned l = 0; l < n_node; l++)
476 for (
unsigned i = 0; i < 3; i++)
479 const double x_ = this->nodal_position(l, i);
481 interpolated_x[i] += x_ * psif(l);
483 for (
unsigned j = 0; j < 2; j++)
485 interpolated_g(j, i) += x_ * dpsifds(l, j);
492 Vector<double> interpolated_n(3);
493 interpolated_n[0] = interpolated_g(0, 1) * interpolated_g(1, 2) -
494 interpolated_g(0, 2) * interpolated_g(1, 1);
495 interpolated_n[1] = interpolated_g(0, 2) * interpolated_g(1, 0) -
496 interpolated_g(0, 0) * interpolated_g(1, 2);
497 interpolated_n[2] = interpolated_g(0, 0) * interpolated_g(1, 1) -
498 interpolated_g(0, 1) * interpolated_g(1, 0);
506 for (
unsigned i = 0; i < 3; i++)
508 interpolated_n[i] *= this->normal_sign();
513 for (
unsigned k = 0; k < 3; k++)
515 dot += interpolated_x[k] * interpolated_n[k];
521 residuals[local_eqn] += dot * W / 3.0;