27 #ifndef OOMPH_PML_HELMHOLTZ_ELEMENTS_HEADER
28 #define OOMPH_PML_HELMHOLTZ_ELEMENTS_HEADER
33 #include <oomph-lib-config.h>
40 #include "../generic/nodes.h"
41 #include "../generic/Qelements.h"
42 #include "../generic/oomph_utilities.h"
43 #include "../generic/pml_meshes.h"
44 #include "../generic/projection.h"
45 #include "../generic/pml_mapping_functions.h"
59 template<
unsigned DIM>
67 std::complex<double>& f);
93 return std::complex<unsigned>(0, 1);
110 "Please set pointer to k_squared using access fct to pointer!",
111 OOMPH_CURRENT_FUNCTION,
112 OOMPH_EXCEPTION_LOCATION);
142 const unsigned& nplot)
const
149 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
161 file_out << u.real() << std::endl;
166 file_out << u.imag() << std::endl;
172 std::stringstream error_stream;
173 error_stream <<
"PML Helmholtz elements only store 2 fields (real "
175 <<
"so i must be 0 or 1 rather "
176 <<
"than " <<
i << std::endl;
178 OOMPH_CURRENT_FUNCTION,
179 OOMPH_EXCEPTION_LOCATION);
189 std::ofstream& file_out,
191 const unsigned& nplot,
205 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
214 (*exact_soln_pt)(x, exact_soln);
222 file_out << exact_soln[0] << std::endl;
227 file_out << exact_soln[1] << std::endl;
233 std::stringstream error_stream;
234 error_stream <<
"PML Helmholtz elements only store 2 fields (real "
236 <<
"so i must be 0 or 1 rather "
237 <<
"than " <<
i << std::endl;
239 OOMPH_CURRENT_FUNCTION,
240 OOMPH_EXCEPTION_LOCATION);
259 return "Imaginary part";
265 std::stringstream error_stream;
266 error_stream <<
"PML Helmholtz elements only store 2 fields (real "
268 <<
"so i must be 0 or 1 rather "
269 <<
"than " <<
i << std::endl;
271 OOMPH_CURRENT_FUNCTION,
272 OOMPH_EXCEPTION_LOCATION);
284 const unsigned n_plot = 5;
290 void output(std::ostream& outfile,
const unsigned& n_plot);
299 std::ostream& outfile,
302 const unsigned& nplot);
312 const unsigned& n_plot);
320 const unsigned& n_plot);
325 const unsigned n_plot = 5;
331 void output(FILE* file_pt,
const unsigned& n_plot);
336 const unsigned& n_plot,
342 std::ostream& outfile,
343 const unsigned& n_plot,
348 "There is no time-dependent output_fct() for PMLHelmholtz elements.",
349 OOMPH_CURRENT_FUNCTION,
350 OOMPH_EXCEPTION_LOCATION);
361 const unsigned& n_plot,
371 const unsigned& n_plot,
390 "There is no time-dependent compute_error() for PMLHelmholtz elements.",
391 OOMPH_CURRENT_FUNCTION,
392 OOMPH_EXCEPTION_LOCATION);
418 std::complex<double>& source)
const
423 source = std::complex<double>(0.0, 0.0);
428 (*Source_fct_pt)(x, source);
438 values_to_pin.resize(2);
440 values_to_pin[0] = 0;
441 values_to_pin[1] = 1;
447 Vector<std::complex<double>>& flux)
const
450 const unsigned n_node =
nnode();
455 DShape dpsidx(n_node, DIM);
461 const std::complex<double> zero(0.0, 0.0);
462 for (
unsigned j = 0; j < DIM; j++)
468 for (
unsigned l = 0; l < n_node; l++)
471 const std::complex<double> u_value(
475 for (
unsigned j = 0; j < DIM; j++)
477 flux[j] += u_value * dpsidx(l, j);
509 const unsigned n_node =
nnode();
518 std::complex<double> interpolated_u(0.0, 0.0);
525 for (
unsigned l = 0; l < n_node; l++)
528 const std::complex<double> u_value(
532 interpolated_u += u_value * psi[l];
534 return interpolated_u;
549 Vector<std::complex<double>>& pml_laplace_factor,
550 std::complex<double>& pml_k_squared_factor)
554 for (
unsigned k = 0; k < DIM; k++)
562 for (
unsigned k = 0; k < DIM; k++)
576 for (
unsigned k = 0; k < DIM; k++)
582 nu[k], pml_width[k], k_squared_local,
alpha());
596 pml_laplace_factor[0] = pml_gamma[1] / pml_gamma[0];
597 pml_laplace_factor[1] = pml_gamma[0] / pml_gamma[1];
598 pml_k_squared_factor = pml_gamma[0] * pml_gamma[1];
602 pml_laplace_factor[0] = pml_gamma[1] * pml_gamma[2] / pml_gamma[0];
603 pml_laplace_factor[1] = pml_gamma[0] * pml_gamma[2] / pml_gamma[1];
604 pml_laplace_factor[2] = pml_gamma[0] * pml_gamma[1] / pml_gamma[2];
605 pml_k_squared_factor = pml_gamma[0] * pml_gamma[1] * pml_gamma[2];
612 for (
unsigned k = 0; k < DIM; k++)
614 pml_laplace_factor[k] = std::complex<double>(1.0, 0.0);
617 pml_k_squared_factor = std::complex<double>(1.0, 0.0);
651 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const
654 std::pair<unsigned, unsigned> dof_lookup;
657 unsigned n_node = this->
nnode();
660 for (
unsigned n = 0; n < n_node; n++)
671 dof_lookup.first = this->
eqn_number(local_eqn_number);
672 dof_lookup.second = 0;
675 dof_lookup_list.push_front(dof_lookup);
686 dof_lookup.first = this->
eqn_number(local_eqn_number);
687 dof_lookup.second = 1;
690 dof_lookup_list.push_front(dof_lookup);
704 DShape& dtestdx)
const = 0;
714 DShape& dtestdx)
const = 0;
721 const unsigned& flag);
751 template<
unsigned DIM,
unsigned NNODE_1D>
792 void output(std::ostream& outfile,
const unsigned& n_plot)
804 const unsigned& n_plot)
815 const unsigned& n_plot)
831 void output(FILE* file_pt,
const unsigned& n_plot)
840 const unsigned& n_plot,
854 const unsigned& n_plot,
858 outfile, phi, n_plot, exact_soln_pt);
868 const unsigned& n_plot,
872 outfile, phi, n_plot, exact_soln_pt);
880 const unsigned& n_plot,
885 outfile, n_plot, time, exact_soln_pt);
918 template<
unsigned DIM,
unsigned NNODE_1D>
927 const double J = this->dshape_eulerian(
s, psi, dpsidx);
944 template<
unsigned DIM,
unsigned NNODE_1D>
953 const double J = this->dshape_eulerian_at_knot(ipt, psi, dpsidx);
974 template<
unsigned DIM,
unsigned NNODE_1D>
976 :
public virtual QElement<DIM - 1, NNODE_1D>
993 template<
unsigned NNODE_1D>
1012 template<
class HELMHOLTZ_ELEMENT>
1029 std::stringstream error_stream;
1030 error_stream <<
"PMLHelmholtz elements only store 2 fields so fld = "
1031 << fld <<
" is illegal \n";
1033 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1038 unsigned nnod = this->
nnode();
1042 for (
unsigned j = 0; j < nnod; j++)
1045 data_values[j] = std::make_pair(this->
node_pt(j), fld);
1065 std::stringstream error_stream;
1066 error_stream <<
"PMLHelmholtz elements only store two fields so fld = "
1067 << fld <<
" is illegal\n";
1069 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1091 std::stringstream error_stream;
1092 error_stream <<
"PMLHelmholtz elements only store two fields so fld = "
1093 << fld <<
" is illegal.\n";
1095 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1098 unsigned n_dim = this->
dim();
1099 unsigned n_node = this->
nnode();
1101 DShape dpsidx(n_node, n_dim), dtestdx(n_node, n_dim);
1102 double J = this->dshape_and_dtest_eulerian_helmholtz(
1103 s, psi, dpsidx, test, dtestdx);
1111 const unsigned& fld,
1117 std::stringstream error_stream;
1118 error_stream <<
"PMLHelmholtz elements only store two fields so fld = "
1119 << fld <<
" is illegal\n";
1121 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1125 std::complex<unsigned> complex_u_nodal_index = this->u_index_helmholtz();
1126 unsigned u_nodal_index = 0;
1129 u_nodal_index = complex_u_nodal_index.real();
1133 u_nodal_index = complex_u_nodal_index.imag();
1138 unsigned n_node = this->
nnode();
1142 this->
shape(s, psi);
1145 double interpolated_u = 0.0;
1148 for (
unsigned l = 0; l < n_node; l++)
1150 interpolated_u += this->
nodal_value(t, l, u_nodal_index) * psi[l];
1152 return interpolated_u;
1162 std::stringstream error_stream;
1163 error_stream <<
"PMLHelmholtz elements only store two fields so fld = "
1164 << fld <<
" is illegal\n";
1166 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1169 return this->
nnode();
1179 std::stringstream error_stream;
1180 error_stream <<
"PMLHelmholtz elements only store two fields so fld = "
1181 << fld <<
" is illegal\n";
1183 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1186 std::complex<unsigned> complex_u_nodal_index = this->u_index_helmholtz();
1187 unsigned u_nodal_index = 0;
1190 u_nodal_index = complex_u_nodal_index.real();
1194 u_nodal_index = complex_u_nodal_index.imag();
1201 void output(std::ostream& outfile,
const unsigned& nplot)
1212 template<
class ELEMENT>
1228 template<
unsigned NNODE_1D>
A mapping function propsed by Bermudez et al, appears to be the best for the Helmholtz equations and ...
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
unsigned ntstorage() const
Return total number of doubles stored per value to record time history of each value (one for steady ...
FaceGeometry()
Constructor: Call the constructor for the appropriate lower-dimensional QElement.
FaceGeometry()
Constructor: Call the constructor for the appropriate lower-dimensional QElement.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
A general Finite Element class.
virtual unsigned nplot_points_paraview(const unsigned &nplot) const
Return the number of actual plot points for paraview plot with parameter nplot. Broken virtual; can b...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
double nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n. Produces suitably interpolated values for hanging nodes...
virtual void shape(const Vector< double > &s, Shape &psi) const =0
Calculate the geometric shape functions at local coordinate s. This function must be overloaded for e...
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Return the local equation number corresponding to the i-th value at the n-th local node.
unsigned dim() const
Return the spatial dimension of the element, i.e. the number of local coordinates required to paramet...
unsigned nnode() const
Return the number of nodes.
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Function pointer for function that computes vector-valued steady "exact solution" as .
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Get cector of local coordinates of plot point i (when plotting nplot points in each "coordinate direc...
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Compute the geometric shape functions and also first derivatives w.r.t. global coordinates at local c...
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Function pointer for function that computes Vector-valued time-dependent function as .
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number.
int local_eqn_number(const unsigned long &ieqn_global) const
Return the local equation number corresponding to the ieqn_global-th global equation number....
static DenseMatrix< double > Dummy_matrix
Empty dense matrix used as a dummy argument to combined residual and jacobian functions in the case w...
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
An OomphLibError object which should be thrown when an run-time error is encountered....
///////////////////////////////////////////////////////////////////// ///////////////////////////////...
bool Pml_is_enabled
Boolean indicating if element is used in pml mode.
std::vector< bool > Pml_direction_active
Coordinate direction along which pml boundary is constant; alternatively: coordinate direction in whi...
Vector< double > Pml_outer_boundary
Coordinate of outer pml boundary (Storage is provided for any coordinate direction; only the entries ...
Vector< double > Pml_inner_boundary
Coordinate of inner pml boundary (Storage is provided for any coordinate direction; only the entries ...
A class for all isoparametric elements that solve the Helmholtz equations with pml capabilities....
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Add the element's contribution to its residual vector and element Jacobian matrix (wrapper)
PMLHelmholtzSourceFctPt Source_fct_pt
Pointer to source function:
void values_to_be_pinned_on_outer_pml_boundary(Vector< unsigned > &values_to_pin)
Pure virtual function in which we specify the values to be pinned (and set to zero) on the outer edge...
virtual void fill_in_generic_residual_contribution_helmholtz(Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag)
Compute element residual Vector only (if flag=and/or element Jacobian matrix.
void compute_error(std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
Dummy, time dependent error checker.
void get_flux(const Vector< double > &s, Vector< std::complex< double >> &flux) const
Get flux: flux[i] = du/dx_i for real and imag part.
virtual double dshape_and_dtest_eulerian_at_knot_helmholtz(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
Shape/test functions and derivs w.r.t. to global coords at integration point ipt; return Jacobian of ...
void output(std::ostream &outfile)
Output with default number of plot points.
PMLMapping * Pml_mapping_pt
Pointer to class which holds the pml mapping function, also known as gamma.
virtual void get_source_helmholtz(const unsigned &ipt, const Vector< double > &x, std::complex< double > &source) const
Get source term at (Eulerian) position x. This function is virtual to allow overloading in multi-phys...
PMLHelmholtzSourceFctPt & source_fct_pt()
Access function: Pointer to source function.
virtual std::complex< unsigned > u_index_helmholtz() const
Broken assignment operator.
virtual void output_fct(std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Output exact soln: (dummy time-dependent version to keep intel compiler happy)
virtual double dshape_and_dtest_eulerian_helmholtz(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
Shape/test functions and derivs w.r.t. to global coords at local coord. s; return Jacobian of mapping...
std::string scalar_name_paraview(const unsigned &i) const
Name of the i-th scalar field. Default implementation returns V1 for the first one,...
double k_squared()
Get the square of wavenumber.
PMLHelmholtzSourceFctPt source_fct_pt() const
Access function: Pointer to source function. Const version.
void compute_pml_coefficients(const unsigned &ipt, const Vector< double > &x, Vector< std::complex< double >> &pml_laplace_factor, std::complex< double > &pml_k_squared_factor)
Compute pml coefficients at position x and integration point ipt. pml_laplace_factor is used in the r...
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
Create a list of pairs for all unknowns in this element, so that the first entry in each pair contain...
PMLHelmholtzEquations(const PMLHelmholtzEquations &dummy)=delete
Broken copy constructor.
void scalar_value_fct_paraview(std::ofstream &file_out, const unsigned &i, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) const
Write values of the i-th scalar field at the plot points. Needs to be implemented for each new specif...
void compute_norm(double &norm)
Compute norm of fe solution.
void output_imag_fct(std::ostream &outfile, const double &phi, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output function for imaginary part of full time-dependent fct u = Im( (u_r +i u_i) exp(-i omega t)) a...
void output_real(std::ostream &outfile, const double &phi, const unsigned &n_plot)
Output function for real part of full time-dependent solution u = Re( (u_r +i u_i) exp(-i omega t)) a...
void output(FILE *file_pt)
C_style output with default number of plot points.
static BermudezPMLMapping Default_pml_mapping
Static so that the class doesn't need to instantiate a new default everytime it uses it.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Add the element's contribution to its residual vector (wrapper)
PMLHelmholtzEquations()
Constructor.
void(* PMLHelmholtzSourceFctPt)(const Vector< double > &x, std::complex< double > &f)
Function pointer to source function fct(x,f(x)) – x is a Vector!
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: real and imag...
PMLMapping *const & pml_mapping_pt() const
Return a pointer to the PML Mapping object (const version)
double * Alpha_pt
Pointer to wavenumber complex shift.
double * K_squared_pt
Pointer to wave number (must be set!)
double *& k_squared_pt()
Get pointer to k_squared.
const double & alpha() const
Alpha, wavenumber complex shift.
double *& alpha_pt()
Pointer to Alpha, wavenumber complex shift.
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Get error against and norm of exact solution.
std::complex< double > interpolated_u_pml_helmholtz(const Vector< double > &s) const
Return FE representation of function value u_helmholtz(s) at local coordinate s.
unsigned nscalar_paraview() const
Number of scalars/fields output by this element. Reimplements broken virtual function in base class.
void output_imag(std::ostream &outfile, const double &phi, const unsigned &n_plot)
Output function for imaginary part of full time-dependent solution u = Im( (u_r +i u_i) exp(-i omega ...
static double Default_Physical_Constant_Value
Static default value for the physical constants (initialised to zero)
void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact soln: x,y,u_re_exact,u_im_exact or x,y,z,u_re_exact,u_im_exact at n_plot^DIM plot points...
void scalar_value_paraview(std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const
Write values of the i-th scalar field at the plot points. Needs to be implemented for each new specif...
unsigned self_test()
Self-test: Return 0 for OK.
PMLMapping *& pml_mapping_pt()
Return a pointer to the PML Mapping object.
void output_real_fct(std::ostream &outfile, const double &phi, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output function for real part of full time-dependent fct u = Re( (u_r +i u_i) exp(-i omega t) at phas...
void output_total_real(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt incoming_wave_fct_pt, const double &phi, const unsigned &nplot)
Output function for real part of full time-dependent solution constructed by adding the scattered fie...
PMLLayerElement()
Constructor: Call the constructor for the appropriate QElement.
General definition of policy class defining the elements to be used in the actual PML layers....
Class to hold the mapping function (gamma) for the Pml which defines how the coordinates are transfor...
virtual std::complex< double > gamma(const double &nu_i, const double &pml_width_i, const double &wavenumber_squared, const double &alpha_shift=0.0)=0
Pure virtual to return Pml mapping gamma, where gamma is the as function of where where h is the v...
/////////////////////////////////////////////////////////////////////// /////////////////////////////...
Wrapper class for projectable elements. Adds "projectability" to the underlying ELEMENT.
///////////////////////////////////////////////////////////////////// ///////////////////////////////...
ProjectablePMLHelmholtzElement()
Constructor [this was only required explicitly from gcc 4.5.2 onwards...].
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld: One per node.
double get_field(const unsigned &t, const unsigned &fld, const Vector< double > &s)
Return interpolated field fld at local coordinate s, at time level t (t=0: present; t>0: history valu...
unsigned nhistory_values_for_coordinate_projection()
Number of positional history values (Note: count includes current value!)
Vector< std::pair< Data *, unsigned > > data_values_of_field(const unsigned &fld)
Specify the values associated with field fld. The information is returned in a vector of pairs which ...
unsigned nhistory_values_for_projection(const unsigned &fld)
Number of history values to be stored for fld-th field. (Note: count includes current value!...
double jacobian_and_shape_of_field(const unsigned &fld, const Vector< double > &s, Shape &psi)
Return Jacobian of mapping and shape functions of field fld at local coordinate s.
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
unsigned nfields_for_projection()
Number of fields to be projected: 2 (real and imag part)
void output(std::ostream &outfile, const unsigned &nplot)
Output FE representation of soln: x,y,u or x,y,z,u at n_plot^DIM plot points.
/////////////////////////////////////////////////////////////////////// /////////////////////////////...
//////////////////////////////////////////////////////////////////////// ////////////////////////////...
QPMLHelmholtzElement(const QPMLHelmholtzElement< DIM, NNODE_1D > &dummy)=delete
Broken copy constructor.
void output_fct(std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Output function for a time-dependent exact solution. x,y,u_exact or x,y,z,u_exact at n_plot^DIM plot ...
static const unsigned Initial_Nvalue
Static int that holds the number of variables at nodes: always the same.
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function: x,y,u or x,y,z,u at n_plot^DIM plot points.
void output(FILE *file_pt)
C-style output function: x,y,u or x,y,z,u.
void output_real(std::ostream &outfile, const double &phi, const unsigned &n_plot)
Output function for real part of full time-dependent solution u = Re( (u_r +i u_i) exp(-i omega t) at...
void output_imag(std::ostream &outfile, const double &phi, const unsigned &n_plot)
Output function for imaginary part of full time-dependent solution u = Im( (u_r +i u_i) exp(-i omega ...
double dshape_and_dtest_eulerian_at_knot_helmholtz(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Shape, test functions & derivs. w.r.t. to global coords. at integration point ipt....
QPMLHelmholtzElement()
Constructor: Call constructors for QElement and PMLHelmholtz equations.
double dshape_and_dtest_eulerian_helmholtz(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Shape, test functions & derivs. w.r.t. to global coords. Return Jacobian.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function: x,y,u or x,y,z,u at n_plot^DIM plot points.
void output_real_fct(std::ostream &outfile, const double &phi, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output function for real part of full time-dependent fct u = Re( (u_r +i u_i) exp(-i omega t) at phas...
unsigned required_nvalue(const unsigned &n) const
Broken assignment operator.
void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output function for an exact solution: x,y,u_exact or x,y,z,u_exact at n_plot^DIM plot points.
void output(std::ostream &outfile)
Output function: x,y,u or x,y,z,u.
void output_imag_fct(std::ostream &outfile, const double &phi, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output function for imaginary part of full time-dependent fct u = Im( (u_r +i u_i) exp(-i omega t)) a...
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
unsigned ntstorage() const
Return the number of doubles required to represent history (one for steady)
void output()
Doc the command line arguments.
std::string string(const unsigned &i)
Return the i-th string or "" if the relevant string hasn't been defined.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...