dg_fem_context.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2014 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 
19 
20 #ifndef LIBMESH_DG_FEM_CONTEXT_H
21 #define LIBMESH_DG_FEM_CONTEXT_H
22 
23 // Local Includes
24 #include "libmesh/fem_context.h"
25 
26 
27 namespace libMesh
28 {
29 
36 // ------------------------------------------------------------
37 // DGFEMContext class definition
38 
39 class DGFEMContext : public FEMContext
40 {
41 public:
42 
46  explicit
47  DGFEMContext (const System &sys);
48 
52  virtual ~DGFEMContext ();
53 
59  virtual void side_fe_reinit ();
60 
67 
71  const std::vector<dof_id_type>& get_neighbor_dof_indices() const
72  { return _neighbor_dof_indices; }
73 
78  const std::vector<dof_id_type>& get_neighbor_dof_indices( unsigned int var ) const
79  { return _neighbor_dof_indices_var[var]; }
80 
85  { return _neighbor_residual; }
86 
91  { return _neighbor_residual; }
92 
97  const DenseSubVector<Number>& get_neighbor_residual( unsigned int var ) const
98  { return *(_neighbor_subresiduals[var]); }
99 
105  { return *(_neighbor_subresiduals[var]); }
106 
111  { return _elem_elem_jacobian; }
112 
117  { return _elem_elem_jacobian; }
118 
123  const DenseSubMatrix<Number>& get_elem_elem_jacobian( unsigned int var1, unsigned int var2 ) const
124  { return *(_elem_elem_subjacobians[var1][var2]); }
125 
130  DenseSubMatrix<Number>& get_elem_elem_jacobian( unsigned int var1, unsigned int var2 )
131  { return *(_elem_elem_subjacobians[var1][var2]); }
132 
137  { return _elem_neighbor_jacobian; }
138 
143  { return _elem_neighbor_jacobian; }
144 
149  const DenseSubMatrix<Number>& get_elem_neighbor_jacobian( unsigned int var1, unsigned int var2 ) const
150  { return *(_elem_neighbor_subjacobians[var1][var2]); }
151 
156  DenseSubMatrix<Number>& get_elem_neighbor_jacobian( unsigned int var1, unsigned int var2 )
157  { return *(_elem_neighbor_subjacobians[var1][var2]); }
158 
163  { return _neighbor_elem_jacobian; }
164 
169  { return _neighbor_elem_jacobian; }
170 
175  const DenseSubMatrix<Number>& get_neighbor_elem_jacobian( unsigned int var1, unsigned int var2 ) const
176  { return *(_neighbor_elem_subjacobians[var1][var2]); }
177 
182  DenseSubMatrix<Number>& get_neighbor_elem_jacobian( unsigned int var1, unsigned int var2 )
183  { return *(_neighbor_elem_subjacobians[var1][var2]); }
184 
189  { return _neighbor_neighbor_jacobian; }
190 
195  { return _neighbor_neighbor_jacobian; }
196 
201  const DenseSubMatrix<Number>& get_neighbor_neighbor_jacobian( unsigned int var1, unsigned int var2 ) const
202  { return *(_neighbor_neighbor_subjacobians[var1][var2]); }
203 
208  DenseSubMatrix<Number>& get_neighbor_neighbor_jacobian( unsigned int var1, unsigned int var2 )
209  { return *(_neighbor_neighbor_subjacobians[var1][var2]); }
210 
219  void set_neighbor(const Elem& neighbor)
220  { _neighbor = &neighbor; }
221 
225  const Elem& get_neighbor() const
226  { return *_neighbor; }
227 
231  bool dg_terms_are_active() const
232  { return _dg_terms_active; }
233 
237  template<typename OutputShape>
238  void get_neighbor_side_fe( unsigned int var, FEGenericBase<OutputShape> *& fe ) const;
239 
240 private:
241 
245  const Elem *_neighbor;
246 
251 
260 
264  std::vector<DenseSubVector<Number> *> _neighbor_subresiduals;
265  std::vector<std::vector<DenseSubMatrix<Number> *> > _elem_elem_subjacobians;
266  std::vector<std::vector<DenseSubMatrix<Number> *> > _elem_neighbor_subjacobians;
267  std::vector<std::vector<DenseSubMatrix<Number> *> > _neighbor_elem_subjacobians;
268  std::vector<std::vector<DenseSubMatrix<Number> *> > _neighbor_neighbor_subjacobians;
269 
273  std::vector<dof_id_type> _neighbor_dof_indices;
274  std::vector<std::vector<dof_id_type> > _neighbor_dof_indices_var;
275 
283  std::map<FEType, FEAbstract *> _neighbor_side_fe;
284 
289  std::vector<FEAbstract *> _neighbor_side_fe_var;
290 
296 };
297 
298 template<typename OutputShape>
299 inline
301 {
302  libmesh_assert_less ( var, _neighbor_side_fe_var.size() );
303  fe = libmesh_cast_ptr<FEGenericBase<OutputShape>*>( _neighbor_side_fe_var[var] );
304 }
305 
306 } // namespace libMesh
307 
308 #endif // LIBMESH_FEM_CONTEXT_H

Site Created By: libMesh Developers
Last modified: February 07 2014 16:57:04 UTC

Hosted By:
SourceForge.net Logo