DiffContext Class Reference
#include <diff_context.h>

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< Number > | elem_solution |
| std::vector< DenseSubVector < Number > * > | elem_subsolutions |
| DenseVector< Number > | elem_fixed_solution |
| std::vector< DenseSubVector < Number > * > | elem_fixed_subsolutions |
| bool | request_jacobian |
| Real | elem_solution_derivative |
| Real | fixed_solution_derivative |
| DenseVector< Number > | elem_residual |
| DenseMatrix< Number > | elem_jacobian |
| std::vector< Number > | elem_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.
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().
| 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().
Member Data Documentation
| std::vector<unsigned int> DiffContext::dof_indices |
Global Degree of freedom index lists
Definition at line 159 of file diff_context.h.
Referenced by FEMSystem::assemble_qoi_derivative(), FEMSystem::assembly(), EulerSolver::element_residual(), Euler2Solver::element_residual(), FEMContext::fixed_interior_gradient(), FEMContext::fixed_interior_hessian(), FEMContext::fixed_interior_value(), FEMContext::fixed_point_value(), FEMContext::fixed_side_gradient(), FEMContext::fixed_side_hessian(), FEMContext::fixed_side_value(), FEMContext::interior_gradient(), FEMContext::interior_hessian(), FEMContext::interior_value(), FEMSystem::numerical_jacobian(), FEMContext::point_value(), FEMContext::reinit(), FEMContext::side_gradient(), FEMContext::side_hessian(), EulerSolver::side_residual(), Euler2Solver::side_residual(), and FEMContext::side_value().
| std::vector<std::vector<unsigned int> > DiffContext::dof_indices_var |
Definition at line 160 of file diff_context.h.
Referenced by FEMSystem::eulerian_residual(), FEMContext::fixed_interior_gradient(), FEMContext::fixed_interior_hessian(), FEMContext::fixed_interior_value(), FEMContext::fixed_point_value(), FEMContext::fixed_side_gradient(), FEMContext::fixed_side_hessian(), FEMContext::fixed_side_value(), FEMContext::interior_gradient(), FEMContext::interior_hessian(), FEMContext::interior_value(), FEMSystem::mass_residual(), FEMSystem::mesh_position_get(), FEMSystem::numerical_jacobian(), FEMContext::point_value(), FEMContext::reinit(), FEMContext::side_gradient(), FEMContext::side_hessian(), and FEMContext::side_value().
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().
| std::vector<DenseSubVector<Number> *> DiffContext::elem_fixed_subsolutions |
Definition at line 106 of file diff_context.h.
Referenced by DiffContext(), FEMContext::fixed_interior_gradient(), FEMContext::fixed_interior_hessian(), FEMContext::fixed_interior_value(), FEMContext::fixed_point_value(), FEMContext::fixed_side_gradient(), FEMContext::fixed_side_hessian(), FEMContext::fixed_side_value(), FEMContext::reinit(), and ~DiffContext().
Element jacobian: derivatives of elem_residual with respect to elem_solution
Definition at line 137 of file diff_context.h.
Referenced by FEMSystem::assembly(), DiffContext(), EulerSolver::element_residual(), Euler2Solver::element_residual(), FEMSystem::numerical_jacobian(), FEMContext::reinit(), EulerSolver::side_residual(), and Euler2Solver::side_residual().
| std::vector<Number> DiffContext::elem_qoi |
Element quantity of interest contributions
Definition at line 142 of file diff_context.h.
Referenced by FEMSystem::assemble_qoi(), and DiffContext().
| std::vector<DenseVector<Number> > DiffContext::elem_qoi_derivative |
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().
| std::vector<std::vector<DenseSubVector<Number> *> > DiffContext::elem_qoi_subderivatives |
Definition at line 148 of file diff_context.h.
Referenced by DiffContext(), FEMContext::reinit(), and ~DiffContext().
Element residual vector
Definition at line 131 of file diff_context.h.
Referenced by FEMSystem::assembly(), DiffContext(), EulerSolver::element_residual(), Euler2Solver::element_residual(), FEMSystem::numerical_jacobian(), FEMContext::reinit(), EulerSolver::side_residual(), and Euler2Solver::side_residual().
Element by element components of nonlinear_solution as adjusted by a time_solver
Definition at line 97 of file diff_context.h.
Referenced by DiffContext(), SteadySolver::element_residual(), EulerSolver::element_residual(), Euler2Solver::element_residual(), FEMSystem::numerical_jacobian(), FEMContext::reinit(), SteadySolver::side_residual(), EulerSolver::side_residual(), and Euler2Solver::side_residual().
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().
| std::vector<std::vector<DenseSubMatrix<Number> *> > DiffContext::elem_subjacobians |
Definition at line 154 of file diff_context.h.
Referenced by DiffContext(), FEMSystem::eulerian_residual(), FEMSystem::mass_residual(), FEMContext::reinit(), and ~DiffContext().
| std::vector<DenseSubVector<Number> *> DiffContext::elem_subresiduals |
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().
| std::vector<DenseSubVector<Number> *> DiffContext::elem_subsolutions |
Definition at line 98 of file diff_context.h.
Referenced by DiffContext(), FEMContext::elem_position_get(), FEMContext::elem_position_set(), FEMContext::interior_gradient(), FEMContext::interior_hessian(), FEMContext::interior_value(), FEMSystem::mesh_position_get(), FEMContext::point_value(), FEMContext::reinit(), FEMContext::side_gradient(), FEMContext::side_hessian(), FEMContext::side_value(), 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: