74 (*North_boundary_fn_pt)(1.0,
x_N);
76 (*East_boundary_fn_pt)(1.0,
x_E);
79 error_message <<
"North and East Boundaries do not meet at the "
80 <<
"North East Corner.\n"
81 <<
"North Boundary : x[0] = " <<
x_N[0] <<
"\n"
82 <<
" x[1] = " <<
x_N[1] <<
"\n"
83 <<
"East Boundary : x[0] = " <<
x_E[0] <<
"\n"
84 <<
" x[1] = " <<
x_E[1] <<
"\n\n";
91 (*South_boundary_fn_pt)(1.0,
x_S);
93 (*East_boundary_fn_pt)(-1.0,
x_E);
96 error_message <<
"South and East Boundaries do not meet at the "
97 <<
"South East Corner.\n"
98 <<
"South Boundary : x[0] = " <<
x_S[0] <<
"\n"
99 <<
" x[1] = " <<
x_S[1] <<
"\n"
100 <<
"East Boundary : x[0] = " <<
x_E[0] <<
"\n"
101 <<
" x[1] = " <<
x_E[1] <<
"\n\n";
108 (*South_boundary_fn_pt)(-1.0,
x_S);
110 (*West_boundary_fn_pt)(-1.0,
x_W);
113 error_message <<
"South and West Boundaries do not meet at the "
114 <<
"South West Corner.\n"
115 <<
"South Boundary : x[0] = " <<
x_S[0] <<
"\n"
116 <<
" x[1] = " <<
x_S[1] <<
"\n"
117 <<
"West Boundary : x[0] = " <<
x_W[0] <<
"\n"
118 <<
" x[1] = " <<
x_W[1] <<
"\n\n";
125 (*North_boundary_fn_pt)(-1.0,
x_N);
127 (*West_boundary_fn_pt)(1.0,
x_W);
130 error_message <<
"North and West Boundaries do not meet at the "
131 <<
"North West Corner.\n"
132 <<
"North Boundary : x[0] = " <<
x_N[0] <<
"\n"
133 <<
" x[1] = " <<
x_N[1] <<
"\n"
134 <<
"West Boundary : x[0] = " <<
x_W[0] <<
"\n"
135 <<
" x[1] = " <<
x_W[1] <<
"\n\n";
153 const double&
l_x,
const double& l_y)
302#ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES
305 "Order of function arguments has changed between versions 0.8 and 0.85",
306 "TopologicallyRectangularDomain::macro_element_boundary(...)",
338#ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES
341 "Order of function arguments has changed between versions 0.8 and 0.85",
342 "TopologicallyRectangularDomain::dmacro_element_boundary(...)",
375#ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES
378 "Order of function arguments has changed between versions 0.8 and 0.85",
379 "TopologicallyRectangularDomain::d2macro_element_boundary(...)",
405 (*North_boundary_fn_pt)(
s[0],
f);
424 (*East_boundary_fn_pt)(
s[0],
f);
443 (*South_boundary_fn_pt)(
s[0],
f);
463 (*West_boundary_fn_pt)(
s[0],
f);
487 (*dNorth_boundary_fn_pt)(
s[0],
dr);
492 const double h = 10
e-8;
494 (*North_boundary_fn_pt)(
s[0] - 0.5 *
h,
x_N_left);
496 (*North_boundary_fn_pt)(
s[0] + 0.5 *
h,
x_N_right);
523 (*dEast_boundary_fn_pt)(
s[0],
dr);
528 const double h = 10
e-8;
530 (*East_boundary_fn_pt)(
s[0] - 0.5 *
h,
x_E_down);
532 (*East_boundary_fn_pt)(
s[0] + 0.5 *
h,
x_E_up);
559 (*dSouth_boundary_fn_pt)(
s[0],
dr);
564 const double h = 10
e-8;
566 (*South_boundary_fn_pt)(
s[0] - 0.5 *
h,
x_N_left);
568 (*South_boundary_fn_pt)(
s[0] + 0.5 *
h,
x_N_right);
595 (*dWest_boundary_fn_pt)(
s[0],
dr);
600 const double h = 10
e-8;
602 (*West_boundary_fn_pt)(
s[0] - 0.5 *
h,
x_W_down);
604 (*West_boundary_fn_pt)(
s[0] + 0.5 *
h,
x_W_up);
631 (*d2North_boundary_fn_pt)(
s[0],
d2r);
639 const double h = 10
e-8;
641 (*dNorth_boundary_fn_pt)(
s[0] - 0.5 *
h,
dx_N_left);
650 const double h = 10
e-8;
652 (*North_boundary_fn_pt)(
s[0] -
h,
N_left);
654 (*North_boundary_fn_pt)(
s[0] +
h,
N_right);
684 (*d2East_boundary_fn_pt)(
s[0],
d2r);
692 const double h = 10
e-8;
703 const double h = 10
e-8;
705 (*East_boundary_fn_pt)(
s[0] -
h,
E_left);
707 (*East_boundary_fn_pt)(
s[0] +
h,
E_right);
737 (*d2South_boundary_fn_pt)(
s[0],
d2r);
745 const double h = 10
e-8;
747 (*dSouth_boundary_fn_pt)(
s[0] - 0.5 *
h,
dx_S_left);
756 const double h = 10
e-8;
758 (*South_boundary_fn_pt)(
s[0] -
h,
S_left);
760 (*South_boundary_fn_pt)(
s[0] +
h,
S_right);
790 (*d2West_boundary_fn_pt)(
s[0],
d2r);
798 const double h = 10
e-8;
809 const double h = 10
e-8;
811 (*West_boundary_fn_pt)(
s[0] -
h,
W_left);
813 (*West_boundary_fn_pt)(
s[0] +
h,
W_right);
Unstructured tet mesh based on output from Tetgen: http://wias-berlin.de/software/tetgen/.
void r_E(const Vector< double > &s, Vector< double > &f)
takes the macro element coordinate position along the east boundary and returns the global coordinate...
void d2macro_element_boundary(const unsigned &t, const unsigned &i_macro, const unsigned &i_direct, const Vector< double > &s, Vector< double > &f)
returns the second derivates of the global coordinate position (f) wrt to the macro element coordinat...
BoundaryFctPt d2North_boundary_fn_pt
Function pointer to prescribe the second derivates of global coordinates wrt to the macro element coo...
void dmacro_element_boundary(const unsigned &t, const unsigned &i_macro, const unsigned &i_direct, const Vector< double > &s, Vector< double > &f)
returns the derivates of the global coordinate position (f) wrt to the macro element coordinate at ma...
void dr_E(const Vector< double > &s, Vector< double > &dr)
takes the macro element coordinate position along the E boundary and returns the derivates of the glo...
void dr_S(const Vector< double > &s, Vector< double > &dr)
takes the macro element coordinate position along the south boundary and returns the derivates of the...
Vector< double > x_south_west
coordinate position of south west corner of domain (only used if boundary functions are not used)
BoundaryFctPt d2East_boundary_fn_pt
Function pointer to prescribe the second derivates of global coordinates wrt to the macro element coo...
void d2r_W(const Vector< double > &s, Vector< double > &d2r)
takes the macro element coordinate position along the west boundary and returns the second derivates ...
BoundaryFctPt South_boundary_fn_pt
Function pointer to prescribe the north boundary of this topologically rectangular domain.
void macro_element_boundary(const unsigned &t, const unsigned &i_macro, const unsigned &i_direct, const Vector< double > &s, Vector< double > &f)
returns the global coordinate position (f) of macro element position s on boundary i_direct (e....
BoundaryFctPt dEast_boundary_fn_pt
Function pointer to prescribe the derivates of global coordinates wrt to the macro element coordinate...
BoundaryFctPt d2West_boundary_fn_pt
Function pointer to prescribe the second derivates of global coordinates wrt to the macro element coo...
void set_boundary_second_derivative_functions(BoundaryFctPt d2_north_pt, BoundaryFctPt d2_east_pt, BoundaryFctPt d2_south_pt, BoundaryFctPt d2_west_pt)
allows the boundary second derivate function pointers to be set. To compute the second derivatives of...
void r_N(const Vector< double > &s, Vector< double > &f)
takes the macro element coordinate position along the north boundary and returns the global coordinat...
void d2r_N(const Vector< double > &s, Vector< double > &d2r)
takes the macro element coordinate position along the north boundary and returns the second derivates...
BoundaryFctPt d2South_boundary_fn_pt
Function pointer to prescribe the second derivates of global coordinates wrt to the macro element coo...
void r_S(const Vector< double > &s, Vector< double > &f)
takes the macro element coordinate position along the south boundary and returns the global coordinat...
BoundaryFctPt North_boundary_fn_pt
Function pointer to prescribe the north boundary of this topologically rectangular domain.
void set_boundary_derivative_functions(BoundaryFctPt d_north_pt, BoundaryFctPt d_east_pt, BoundaryFctPt d_south_pt, BoundaryFctPt d_west_pt)
allows the boundary derivate function pointers to be set. To compute the derivatives of the problem d...
BoundaryFctPt dWest_boundary_fn_pt
Function pointer to prescribe the derivates of global coordinates wrt to the macro element coordinate...
void dr_W(const Vector< double > &s, Vector< double > &dr)
takes the macro element coordinate position along the W boundary and returns the derivates of the glo...
void r_W(const Vector< double > &s, Vector< double > &f)
takes the macro element coordinate position along the west boundary and returns the global coordinate...
void d2r_E(const Vector< double > &s, Vector< double > &d2r)
takes the macro element coordinate position along the east boundary and returns the second derivates ...
BoundaryFctPt West_boundary_fn_pt
Function pointer to prescribe the west boundary of this topologically rectangular domain.
BoundaryFctPt East_boundary_fn_pt
Function pointer to prescribe the east boundary of this topologically rectangular domain.
TopologicallyRectangularDomain(BoundaryFctPt north_pt, BoundaryFctPt east_pt, BoundaryFctPt south_pt, BoundaryFctPt west_pt)
Constructor - domain boundaries are described with four boundary function pointers describing the top...
void dr_N(const Vector< double > &s, Vector< double > &dr)
takes the macro element coordinate position along the north boundary and returns the derivates of the...
void d2r_S(const Vector< double > &s, Vector< double > &d2r)
takes the macro element coordinate position along the south boundary and returns the second derivates...
Vector< double > x_north_east
coordinate position of north east corner of domain (only used if boundary functions are not used)
BoundaryFctPt dSouth_boundary_fn_pt
Function pointer to prescribe the derivates of global coordinates wrt to the macro element coordinate...
BoundaryFctPt dNorth_boundary_fn_pt
Function pointer to prescribe the derivates of global coordinates wrt to the macro element coordinate...
////////////////////////////////////////////////////////////////////// //////////////////////////////...