42 const double& azimuthal_fraction,
46 Ellipse ellipse(a, a);
50 Vector<double> base(2);
52 const unsigned n_node = this->nnode();
53 for (
unsigned n = 0; n < n_node; n++)
56 Node* nod_pt = this->node_pt(n);
61 xi[0] = (1.0 - 1.0e-10) * (-azimuthal_fraction * nod_pt->x(0)) * 2.0 *
62 MathematicalConstants::Pi +
63 MathematicalConstants::Pi -
64 (1.0 - azimuthal_fraction) * 2.0 * MathematicalConstants::Pi;
70 double w = nod_pt->x(1);
73 ellipse.position(xi, base);
76 double norm = sqrt(base[0] * base[0] + base[1] * base[1]);
77 N[0] = base[0] / norm;
78 N[1] = base[1] / norm;
81 nod_pt->x(0) = base[0] + w * (h + a - norm) * N[0];
82 nod_pt->x(1) = base[1] + w * (h + a - norm) * N[1];
85 Vector<double> xi_bound(1);
88 if (nod_pt->is_on_boundary(0))
90 xi_bound[0] = atan2(nod_pt->x(1), nod_pt->x(0));
91 nod_pt->set_coordinates_on_boundary(0, xi_bound);
95 if (nod_pt->is_on_boundary(1))
97 xi_bound[0] = sqrt(pow(nod_pt->x(0), 2) + pow(nod_pt->x(1), 2));
98 nod_pt->set_coordinates_on_boundary(1, xi_bound);
102 if (nod_pt->is_on_boundary(2))
104 xi_bound[0] = atan2(nod_pt->x(1), nod_pt->x(0));
105 nod_pt->set_coordinates_on_boundary(2, xi_bound);
109 if (nod_pt->is_on_boundary(3))
111 xi_bound[0] = sqrt(pow(nod_pt->x(0), 2) + pow(nod_pt->x(1), 2));
112 nod_pt->set_coordinates_on_boundary(3, xi_bound);
116 this->set_boundary_coordinate_exists(0);
117 this->set_boundary_coordinate_exists(1);
118 this->set_boundary_coordinate_exists(2);
119 this->set_boundary_coordinate_exists(3);