DiffContext Class Reference

#include <diff_context.h>

Inheritance diagram for DiffContext:

List of all members.

Public Member Functions

 DiffContext (const DifferentiableSystem &)
virtual ~DiffContext ()
virtual void elem_reinit (Real)
virtual void elem_side_reinit (Real)

Public Attributes

bool postprocess_sides
Real time
DenseVector< Numberelem_solution
std::vector< DenseSubVector
< Number > * > 
elem_subsolutions
DenseVector< Numberelem_fixed_solution
std::vector< DenseSubVector
< Number > * > 
elem_fixed_subsolutions
bool request_jacobian
Real elem_solution_derivative
Real fixed_solution_derivative
DenseVector< Numberelem_residual
DenseMatrix< Numberelem_jacobian
std::vector< Numberelem_qoi
std::vector< DenseVector
< Number > > 
elem_qoi_derivative
std::vector< std::vector
< DenseSubVector< Number > * > > 
elem_qoi_subderivatives
std::vector< DenseSubVector
< Number > * > 
elem_subresiduals
std::vector< std::vector
< DenseSubMatrix< Number > * > > 
elem_subjacobians
std::vector< unsigned int > dof_indices
std::vector< std::vector
< unsigned int > > 
dof_indices_var


Detailed Description

This class provides all data required for a physics package (e.g. a DifferentiableSystem subclass) to perform local element residual and jacobian integrations.

This class is part of the new DifferentiableSystem framework, which is still experimental. Users of this framework should beware of bugs and future API changes.

Author:
Roy H. Stogner 2009

Definition at line 52 of file diff_context.h.


Constructor & Destructor Documentation

DiffContext::DiffContext ( const DifferentiableSystem sys  ) 

Constructor. Optionally initializes required data structures.

Definition at line 26 of file diff_context.C.

References elem_fixed_solution, elem_fixed_subsolutions, elem_jacobian, elem_qoi, elem_qoi_derivative, elem_qoi_subderivatives, elem_residual, elem_solution, elem_subjacobians, elem_subresiduals, elem_subsolutions, System::n_vars(), n_vars, System::qoi, and DifferentiableSystem::use_fixed_solution.

00026                                                          :
00027   time(sys.time),
00028   elem_solution_derivative(1.),
00029   fixed_solution_derivative(0.),
00030   dof_indices_var(sys.n_vars())
00031 {
00032   // Finally initialize solution/residual/jacobian data structures
00033   unsigned int n_vars = sys.n_vars();
00034 
00035   elem_subsolutions.reserve(n_vars);
00036   elem_subresiduals.reserve(n_vars);
00037   elem_subjacobians.resize(n_vars);
00038   if (sys.use_fixed_solution)
00039     elem_fixed_subsolutions.reserve(n_vars);
00040 
00041   // If the user resizes sys.qoi, it will invalidate us
00042   unsigned int n_qoi = sys.qoi.size();
00043   elem_qoi.resize(n_qoi);
00044   elem_qoi_derivative.resize(n_qoi);
00045   elem_qoi_subderivatives.resize(n_qoi);
00046   for (unsigned int q=0; q != n_qoi; ++q)
00047     elem_qoi_subderivatives[q].reserve(n_vars);
00048 
00049   for (unsigned int i=0; i != n_vars; ++i)
00050     {
00051       elem_subsolutions.push_back(new DenseSubVector<Number>(elem_solution));
00052       elem_subresiduals.push_back(new DenseSubVector<Number>(elem_residual));
00053       for (unsigned int q=0; q != n_qoi; ++q)
00054         elem_qoi_subderivatives[q].push_back(new DenseSubVector<Number>(elem_qoi_derivative[q]));
00055       elem_subjacobians[i].reserve(n_vars);
00056 
00057       if (sys.use_fixed_solution)
00058         elem_fixed_subsolutions.push_back
00059           (new DenseSubVector<Number>(elem_fixed_solution));
00060 
00061       for (unsigned int j=0; j != n_vars; ++j)
00062         elem_subjacobians[i].push_back
00063           (new DenseSubMatrix<Number>(elem_jacobian));
00064     }
00065 }

DiffContext::~DiffContext (  )  [virtual]

Destructor.

Definition at line 69 of file diff_context.C.

References elem_fixed_subsolutions, elem_qoi_subderivatives, elem_subjacobians, elem_subresiduals, and elem_subsolutions.

00070 {
00071   for (unsigned int i=0; i != elem_subsolutions.size(); ++i)
00072     {
00073       delete elem_subsolutions[i];
00074       delete elem_subresiduals[i];
00075       for (unsigned int q=0; q != elem_qoi_subderivatives.size(); ++q)
00076         delete elem_qoi_subderivatives[q][i];
00077       if (!elem_fixed_subsolutions.empty())
00078         delete elem_fixed_subsolutions[i];
00079 
00080       for (unsigned int j=0; j != elem_subjacobians[i].size(); ++j)
00081         delete elem_subjacobians[i][j];
00082     }
00083 }


Member Function Documentation

virtual void DiffContext::elem_reinit ( Real   )  [inline, virtual]

Gives derived classes the opportunity to reinitialize data (FE objects in FEMSystem, for example) needed for an interior integration at a new point within a timestep

Reimplemented in FEMContext.

Definition at line 78 of file diff_context.h.

Referenced by EulerSolver::element_residual(), and Euler2Solver::element_residual().

00078 {}

virtual void DiffContext::elem_side_reinit ( Real   )  [inline, virtual]

Gives derived classes the opportunity to reinitialize data needed for a side integration at a new point within a timestep

Reimplemented in FEMContext.

Definition at line 84 of file diff_context.h.

Referenced by EulerSolver::side_residual(), and Euler2Solver::side_residual().

00084 {}


Member Data Documentation

Element by element components of nonlinear_solution at a fixed point in a timestep, for optional use by e.g. stabilized methods

Definition at line 105 of file diff_context.h.

Referenced by DiffContext(), SteadySolver::element_residual(), EulerSolver::element_residual(), Euler2Solver::element_residual(), FEMContext::reinit(), SteadySolver::side_residual(), EulerSolver::side_residual(), and Euler2Solver::side_residual().

Element quantity of interest contributions

Definition at line 142 of file diff_context.h.

Referenced by FEMSystem::assemble_qoi(), and DiffContext().

Element quantity of interest derivative contributions

Definition at line 147 of file diff_context.h.

Referenced by FEMSystem::assemble_qoi_derivative(), DiffContext(), and FEMContext::reinit().

Definition at line 148 of file diff_context.h.

Referenced by DiffContext(), FEMContext::reinit(), and ~DiffContext().

The derivative of elem_solution with respect to the nonlinear solution, for use by systems constructing jacobians with elem_fixed_solution based methods

Definition at line 119 of file diff_context.h.

Referenced by EulerSolver::element_residual(), Euler2Solver::element_residual(), FEMSystem::mass_residual(), EulerSolver::side_residual(), and Euler2Solver::side_residual().

Element residual subvectors and Jacobian submatrices

Definition at line 153 of file diff_context.h.

Referenced by DiffContext(), FEMSystem::eulerian_residual(), FEMSystem::mass_residual(), FEMContext::reinit(), and ~DiffContext().

The derivative of elem_fixed_solution with respect to the nonlinear solution, for use by systems constructing jacobians with elem_fixed_solution based methods

Definition at line 126 of file diff_context.h.

Referenced by SteadySolver::element_residual(), EulerSolver::element_residual(), Euler2Solver::element_residual(), SteadySolver::side_residual(), EulerSolver::side_residual(), and Euler2Solver::side_residual().

If postprocess_sides is true (it is false by default), the postprocessing loop will loop over all sides as well as all elements.

Definition at line 71 of file diff_context.h.

A boolean to be set to true by the library whenever a jacobian evaluation is being requested.

Definition at line 112 of file diff_context.h.

For time-dependent problems, this is the time t for which the current nonlinear_solution is defined. FIXME - this needs to be tweaked mid-timestep by all transient solvers!

Definition at line 91 of file diff_context.h.


The documentation for this class was generated from the following files:

Site Created By: libMesh Developers
Last modified: November 25 2009 03:44:03.

Hosted By:
SourceForge.net Logo