39 template<
unsigned DIM>
47 template<
unsigned DIM>
51 template<
unsigned DIM>
55 template<
unsigned DIM>
59 template<
unsigned DIM>
69 template<
unsigned DIM>
104 unsigned n_pres = npres_nst();
125 for (
unsigned i = 0;
i <
n_dim;
i++)
144 for (
unsigned i = 0;
i <
n_dim;
i++)
185 template<
unsigned DIM>
209 for (
unsigned i = 0;
i <
DIM;
i++)
223 for (
unsigned i = 0;
i <
DIM;
i++)
226 u = this->interpolated_u_nst(
s,
i);
238 template<
unsigned DIM>
242 norm.resize(
DIM + 1, 0.0);
254 for (
unsigned i = 0;
i <
DIM;
i++)
270 for (
unsigned i = 0;
i <
DIM;
i++)
273 norm[
i] += std::pow(interpolated_u_nst(
s,
i), 2) * W;
277 norm[
DIM] += std::pow(interpolated_p_nst(
s), 2) * W;
288 template<
unsigned DIM>
308 outfile <<
"ZONE" << std::endl;
317 for (
unsigned i = 0;
i <
DIM;
i++)
338 for (
unsigned i = 0;
i <
DIM;
i++)
346 for (
unsigned i = 0;
i <
DIM;
i++)
352 for (
unsigned i = 0;
i <
DIM;
i++)
367 template<
unsigned DIM>
387 outfile <<
"ZONE" << std::endl;
396 for (
unsigned i = 0;
i <
DIM;
i++)
417 for (
unsigned i = 0;
i <
DIM;
i++)
425 for (
unsigned i = 0;
i <
DIM;
i++)
431 for (
unsigned i = 0;
i <
DIM;
i++)
445 template<
unsigned DIM>
471 for (
unsigned i = 0;
i <
DIM;
i++)
492 for (
unsigned i = 0;
i <
DIM;
i++)
507 template<
unsigned DIM>
535 for (
unsigned i = 0;
i <
DIM;
i++)
556 for (
unsigned i = 0;
i <
DIM;
i++)
572 template<
unsigned DIM>
575 const unsigned&
nplot,
604 for (
unsigned i = 0;
i <
DIM;
i++)
628 template<
unsigned DIM>
631 const unsigned&
nplot,
661 for (
unsigned i = 0;
i <
DIM;
i++)
686 template<
unsigned DIM>
688 const unsigned&
nplot,
716 for (
unsigned i = 0;
i <
DIM;
i++)
719 interpolated_u[
i] = 0.0;
731 for (
unsigned i = 0;
i <
DIM;
i++)
737 for (
unsigned i = 0;
i <
DIM;
i++)
739 outfile << interpolated_u[
i] <<
" ";
755 template<
unsigned DIM>
757 const unsigned&
nplot)
773 for (
unsigned i = 0;
i <
DIM;
i++)
779 for (
unsigned i = 0;
i <
DIM;
i++)
781 outfile << interpolated_u_nst(
s,
i) <<
" ";
785 outfile << interpolated_p_nst(
s) <<
" ";
802 template<
unsigned DIM>
819 for (
unsigned i = 0;
i <
DIM;
i++)
825 for (
unsigned i = 0;
i <
DIM;
i++)
846 template<
unsigned DIM>
848 const unsigned&
nplot)
886 for (
unsigned i = 0;
i <
DIM;
i++)
891 for (
unsigned j = 0;
j <
DIM;
j++)
893 interpolated_dudx(
i,
j) = 0.0;
901 for (
unsigned i = 0;
i <
DIM;
i++)
912 for (
unsigned j = 0;
j <
DIM;
j++)
914 interpolated_dudx(
i,
j) +=
922 for (
unsigned i = 0;
i <
DIM;
i++)
925 for (
unsigned k = 0;
k <
DIM;
k++)
933 for (
unsigned i = 0;
i <
DIM;
i++)
939 for (
unsigned i = 0;
i <
DIM;
i++)
941 outfile << interpolated_u_nst(
s,
i) <<
" ";
945 outfile << interpolated_p_nst(
s) <<
" ";
948 for (
unsigned i = 0;
i <
DIM;
i++)
977 template<
unsigned DIM>
979 const unsigned&
nplot)
996 std::string error_message =
997 "Can't output vorticity in 1D - in fact, what do you mean\n";
998 error_message +=
"by the 1D Navier-Stokes equations?\n";
1015 for (
unsigned i = 0;
i <
DIM;
i++)
1045 template<
unsigned DIM>
1061 for (
unsigned i = 0;
i <
DIM;
i++)
1078 for (
unsigned i = 0;
i <
DIM;
i++)
1080 for (
unsigned j = 0;
j <
DIM;
j++)
1097 template<
unsigned DIM>
1107 double press = interpolated_p_nst(
s);
1110 for (
unsigned i = 0;
i <
DIM;
i++)
1113 for (
unsigned j = 0;
j <
DIM;
j++)
1126 template<
unsigned DIM>
1140 double press = interpolated_p_nst(
s);
1143 for (
unsigned i = 0;
i <
DIM;
i++)
1147 for (
unsigned j = 0;
j <
DIM;
j++)
1161 template<
unsigned DIM>
1170 for (
unsigned i = 0;
i <
DIM;
i++)
1172 for (
unsigned j = 0;
j <
DIM;
j++)
1184 template<
unsigned DIM>
1191 std::ostringstream error_message;
1192 error_message <<
"The strain rate has incorrect dimensions "
1194 <<
" Not " <<
DIM << std::endl;
1215 for (
unsigned i = 0;
i <
DIM;
i++)
1217 for (
unsigned j = 0;
j <
DIM;
j++)
1224 for (
unsigned i = 0;
i <
DIM;
i++)
1229 for (
unsigned j = 0;
j <
DIM;
j++)
1240 for (
unsigned i = 0;
i <
DIM;
i++)
1243 for (
unsigned j = 0;
j <
DIM;
j++)
1262 std::ostringstream error_message;
1263 error_message <<
"Computation of vorticity in 2D requires a 1D vector\n"
1264 <<
"which contains the only non-zero component of the\n"
1265 <<
"vorticity vector. You've passed a vector of size "
1290 for (
unsigned i = 0;
i <
DIM;
i++)
1292 for (
unsigned j = 0;
j <
DIM;
j++)
1299 for (
unsigned i = 0;
i <
DIM;
i++)
1304 for (
unsigned j = 0;
j <
DIM;
j++)
1332 get_vorticity(
s,
vort);
1349 std::ostringstream error_message;
1350 error_message <<
"Computation of vorticity in 3D requires a 3D vector\n"
1351 <<
"which contains the only non-zero component of the\n"
1352 <<
"vorticity vector. You've passed a vector of size "
1377 for (
unsigned i = 0;
i <
DIM;
i++)
1379 for (
unsigned j = 0;
j <
DIM;
j++)
1386 for (
unsigned i = 0;
i <
DIM;
i++)
1391 for (
unsigned j = 0;
j <
DIM;
j++)
1415 template<
unsigned DIM>
1431 for (
unsigned i = 0;
i <
DIM;
i++)
1444 for (
unsigned i = 0;
i <
DIM;
i++)
1459 template<
unsigned DIM>
1479 unsigned u_index[
DIM];
1480 for (
unsigned i = 0;
i <
DIM;
i++)
1482 u_index[
i] = this->u_index_nst(
i);
1501 for (
unsigned i = 0;
i <
DIM;
i++)
1517 for (
unsigned i = 0;
i <
DIM;
i++)
1521 for (
unsigned j = 0;
j <
DIM;
j++)
1523 interpolated_dudx(
i,
j) +=
1530 for (
unsigned i = 0;
i <
DIM;
i++)
1532 for (
unsigned k = 0;
k <
DIM;
k++)
1542 for (
unsigned i = 0;
i <
DIM;
i++)
1557 template<
unsigned DIM>
1573 for (
unsigned i = 0;
i <
DIM;
i++)
1588 double press = interpolated_p_nst(
s);
1603 template<
unsigned DIM>
1609 if (
ndof() == 0)
return;
1615 unsigned n_pres = npres_nst();
1619 for (
unsigned i = 0;
i <
DIM;
i++)
1641 double scaled_re = re() * density_ratio();
1674 for (
unsigned i = 0;
i <
DIM;
i++)
1686 for (
unsigned i = 0;
i <
DIM;
i++)
1696 double source = 0.0;
1697 if (Press_adv_diff_source_fct_pt != 0)
1711 for (
unsigned k = 0;
k <
DIM;
k++)
1732 for (
unsigned k = 0;
k <
DIM;
k++)
1745 Pinned_fp_pressure_eqn))
1758 unsigned nrobin = Pressure_advection_diffusion_robin_element_pt.
size();
1761 Pressure_advection_diffusion_robin_element_pt[
e]
1762 ->fill_in_generic_residual_contribution_fp_press_adv_diff_robin_bc(
1773 template<
unsigned DIM>
1781 if (
ndof() == 0)
return;
1790 unsigned n_pres = npres_nst();
1794 for (
unsigned i = 0;
i <
DIM;
i++)
1814 double scaled_re = re() * density_ratio();
1832 double J = dshape_and_dtest_eulerian_at_knot_nst(
1843 double interpolated_p = 0.0;
1852 interpolated_p += p_nst(
l) *
psip[
l];
1860 for (
unsigned i = 0;
i <
DIM;
i++)
1869 for (
unsigned j = 0;
j <
DIM;
j++)
1882 for (
unsigned i = 0;
i <
DIM;
i++)
1904 for (
unsigned i = 0;
i <
DIM;
i++)
1923 for (
unsigned k = 0;
k <
DIM;
k++)
1927 (interpolated_dudx(
i,
k) + Gamma[
i] * interpolated_dudx(
k,
i)) *
1937 for (
unsigned k = 0;
k <
DIM;
k++)
1967 for (
unsigned k = 0;
k <
DIM;
k++)
1999 for (
unsigned k = 0;
k <
DIM;
k++)
2044 double aux = -source;
2047 for (
unsigned k = 0;
k <
DIM;
k++)
2050 aux += interpolated_dudx(
k,
k);
2086 template<
unsigned DIM>
2103 template<
unsigned DIM>
2122 template<
unsigned DIM>
2139 const unsigned n_pres = npres_nst();
2143 for (
unsigned i = 0;
i <
DIM;
i++)
2178 double scaled_re = re() * density_ratio();
2191 for (
unsigned q = 0; q <
n_node; q++)
2196 if (
nod_pt->has_auxiliary_node_update_fct_pt())
2202 for (
unsigned i = 0;
i <
DIM;
i++)
2208 for (
unsigned p = 0;
p <
DIM;
p++)
2218 nod_pt->perform_auxiliary_node_update_fct();
2228 nod_pt->perform_auxiliary_node_update_fct();
2240 for (
unsigned i = 0;
i <
DIM;
i++)
2249 const double J = dshape_and_dtest_eulerian_at_knot_nst(
ipt,
2263 double interpolated_p = 0.0;
2273 interpolated_p += p_nst(
l) *
psip[
l];
2282 for (
unsigned i = 0;
i <
DIM;
i++)
2291 for (
unsigned j = 0;
j <
DIM;
j++)
2304 for (
unsigned i = 0;
i <
DIM;
i++)
2312 for (
unsigned q = 0; q <
n_node; q++)
2315 for (
unsigned p = 0;
p <
DIM;
p++)
2317 for (
unsigned i = 0;
i <
DIM;
i++)
2319 for (
unsigned k = 0;
k <
DIM;
k++)
2352 get_body_force_gradient_nst(
2370 for (
unsigned i = 0;
i <
DIM;
i++)
2380 for (
unsigned p = 0;
p <
DIM;
p++)
2383 for (
unsigned q = 0; q <
n_node; q++)
2401 for (
unsigned k = 0;
k <
DIM;
k++)
2404 (interpolated_dudx(
i,
k) +
2405 Gamma[
i] * interpolated_dudx(
k,
i)) *
2415 for (
unsigned k = 0;
k <
DIM;
k++)
2439 for (
unsigned k = 0;
k <
DIM;
k++)
2442 Gamma[
i] * interpolated_dudx(
k,
i)) *
2450 for (
unsigned k = 0;
k <
DIM;
k++)
2462 interpolated_dudx(
i,
p) *
testf(
l);
2478 for (
unsigned k = 0;
k <
DIM;
k++)
2509 for (
unsigned p = 0;
p <
DIM;
p++)
2512 for (
unsigned q = 0; q <
n_node; q++)
2518 double aux = -source;
2521 for (
unsigned k = 0;
k <
DIM;
k++)
2523 aux += interpolated_dudx(
k,
k);
2535 for (
unsigned k = 0;
k <
DIM;
k++)
2567 2, 2, 2, 2, 2, 2, 2, 2, 2};
2573 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
2574 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
2580 template<
unsigned DIM>
2582 const unsigned&
n)
const
2584 return Initial_Nvalue[
n];
2597 template<
unsigned DIM>
2602 unsigned u_index[
DIM];
2603 for (
unsigned i = 0;
i <
DIM;
i++)
2605 u_index[
i] = this->u_index_nst(
i);
2614 for (
unsigned i = 0;
i <
DIM;
i++)
2634 template<
unsigned DIM>
2644 for (
unsigned j = 0;
j <
nval;
j++)
2661 template<
unsigned DIM>
2669 unsigned n_press = this->npres_nst();
2705 for (
unsigned v = 0;
v <
nv;
v++)
2735 3, 2, 3, 2, 2, 2, 3, 2, 3};
2745 4, 3, 4, 3, 3, 3, 4, 3, 4, 3, 3, 3, 3, 3,
2746 3, 3, 3, 3, 4, 3, 4, 3, 3, 3, 4, 3, 4};
2761 template<
unsigned DIM>
2766 unsigned u_index[
DIM];
2767 for (
unsigned i = 0;
i <
DIM;
i++)
2769 u_index[
i] = this->u_index_nst(
i);
2778 for (
unsigned i = 0;
i <
DIM;
i++)
2797 template<
unsigned DIM>
2802 unsigned p_index =
static_cast<unsigned>(this->p_nodal_index_nst());
2805 unsigned n_pres = npres_nst();
2824 template<
unsigned DIM>
2844 for (
unsigned v = 0;
v <
nv;
v++)
bool ALE_is_disabled
Boolean flag to indicate if ALE formulation is disabled when time-derivatives are computed....
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
virtual double J_eulerian(const Vector< double > &s) const
Return the Jacobian of mapping from local to global coordinates at local position s.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
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 std::string tecplot_zone_string(const unsigned &nplot) const
Return string for tecplot zone header (when plotting nplot points in each "coordinate direction")
virtual double dshape_eulerian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidx) const
Return the geometric shape functions and also first derivatives w.r.t. global coordinates at the ipt-...
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
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...
virtual unsigned nplot_points(const unsigned &nplot) const
Return total number of plot points (when plotting nplot points in each "coordinate direction")
double nodal_position(const unsigned &n, const unsigned &i) const
Return the i-th coordinate at local node n. If the node is hanging, the appropriate interpolation is ...
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...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
virtual double J_eulerian_at_knot(const unsigned &ipt) const
Return the Jacobian of the mapping from local to global coordinates at the ipt-th integration point.
double raw_dnodal_position_dt(const unsigned &n, const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt at local node n. Do not use the hanging node repre...
double raw_nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n but do NOT take hanging nodes into account.
double raw_nodal_position(const unsigned &n, const unsigned &i) const
Return the i-th coordinate at local node n. Do not use the hanging node representation....
virtual void write_tecplot_zone_footer(std::ostream &outfile, const unsigned &nplot) const
Add tecplot zone "footer" to output stream (when plotting nplot points in each "coordinate direction"...
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Function pointer for function that computes Vector-valued time-dependent function as .
double dnodal_position_dt(const unsigned &n, const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt at local node n.
virtual void shape_at_knot(const unsigned &ipt, Shape &psi) const
Return the geometric shape function at the ipt-th integration point.
static double Default_fd_jacobian_step
Double used for the default finite difference step in elemental jacobian calculations.
unsigned ndof() const
Return the number of equations/dofs in the element.
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number.
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
int local_eqn_number(const unsigned long &ieqn_global) const
Return the local equation number corresponding to the ieqn_global-th global equation number....
unsigned ninternal_data() const
Return the number of internal data objects.
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
void get_vorticity(const Vector< double > &s, Vector< double > &vorticity) const
Compute the vorticity vector at local coordinate s.
double kin_energy() const
Get integral of kinetic energy over element.
static int Pressure_not_stored_at_node
Static "magic" number that indicates that the pressure is not stored at a node.
void fill_in_contribution_to_hessian_vector_products(Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
Compute the hessian tensor vector products required to perform continuation of bifurcations analytica...
void get_pressure_and_velocity_mass_matrix_diagonal(Vector< double > &press_mass_diag, Vector< double > &veloc_mass_diag, const unsigned &which_one=0)
Compute the diagonal of the velocity/pressure mass matrices. If which one=0, both are computed,...
void compute_error(std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
Validate against exact solution at given time Solution is provided via function pointer....
virtual void fill_in_generic_pressure_advection_diffusion_contribution_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Compute the residuals for the associated pressure advection diffusion problem. Used by the Fp precond...
virtual void get_dresidual_dnodal_coordinates(RankThreeTensor< double > &dresidual_dnodal_coordinates)
Compute derivatives of elemental residual vector with respect to nodal coordinates....
void strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Strain-rate tensor: 1/2 (du_i/dx_j + du_j/dx_i)
double d_kin_energy_dt() const
Get integral of time derivative of kinetic energy over element.
void compute_norm(double &norm)
Compute norm of solution: square of the L2 norm of the velocities.
static double Default_Physical_Constant_Value
Static default value for the physical constants (all initialised to zero)
void full_output(std::ostream &outfile)
Full output function: x,y,[z],u,v,[w],p,du/dt,dv/dt,[dw/dt],dissipation in tecplot format....
virtual void fill_in_generic_dresidual_contribution_nst(double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam, unsigned flag)
Compute the derivatives of the residuals for the Navier–Stokes equations with respect to a parameter ...
void output_veloc(std::ostream &outfile, const unsigned &nplot, const unsigned &t)
Output function: x,y,[z],u,v,[w] in tecplot format. nplot points in each coordinate direction at time...
static double Default_Physical_Ratio_Value
Static default value for the physical ratios (all are initialised to one)
void get_traction(const Vector< double > &s, const Vector< double > &N, Vector< double > &traction)
Compute traction (on the viscous scale) exerted onto the fluid at local coordinate s....
virtual void fill_in_generic_residual_contribution_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Compute the residuals for the Navier–Stokes equations. Flag=1 (or 0): do (or don't) compute the Jacob...
double pressure_integral() const
Integral of pressure over element.
static Vector< double > Default_Gravity_vector
Static default value for the gravity vector.
void output(std::ostream &outfile)
Output function: x,y,[z],u,v,[w],p in tecplot format. Default number of plot points.
void output_vorticity(std::ostream &outfile, const unsigned &nplot)
Output function: x,y,[z], [omega_x,omega_y,[and/or omega_z]] in tecplot format. nplot points in each ...
double dissipation() const
Return integral of dissipation over element.
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact solution specified via function pointer at a given number of plot points....
static Vector< double > Gamma
Vector to decide whether the stress-divergence form is used or not.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
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....
Crouzeix_Raviart elements are Navier–Stokes elements with quadratic interpolation for velocities and ...
virtual unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at local node n.
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...
void identify_pressure_data(std::set< std::pair< Data *, unsigned > > &paired_pressure_data)
Add to the set paired_pressure_data pairs containing.
void identify_load_data(std::set< std::pair< Data *, unsigned > > &paired_load_data)
Add to the set paired_load_data pairs containing.
Taylor–Hood elements are Navier–Stokes elements with quadratic interpolation for velocities and posit...
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...
void identify_pressure_data(std::set< std::pair< Data *, unsigned > > &paired_pressure_data)
Add to the set paired_pressure_data pairs containing.
void identify_load_data(std::set< std::pair< Data *, unsigned > > &paired_load_data)
Add to the set paired_load_data pairs containing.
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
unsigned required_nvalue(const unsigned &n) const
Access function for Nvalue: # of ‘values’ (pinned or dofs) at node n (always returns the same value a...
TAdvectionDiffusionReactionElement()
Constructor: Call constructors for TElement and AdvectionDiffusionReaction equations.
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
Time *const & time_pt() const
Access function for the pointer to time (const version)
double & time()
Return the current value of the continuous time.
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).