ESScript  Revision_
ReferenceElementSets.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2013 by University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Open Software License version 3.0
9 * http://www.opensource.org/licenses/osl-3.0.php
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development since 2012 by School of Earth Sciences
13 *
14 *****************************************************************************/
15 
16 #ifndef __FINLEY_REFERENCEELEMENTSETS_H__
17 #define __FINLEY_REFERENCEELEMENTSETS_H__
18 
19 #include "ReferenceElements.h"
20 
21 namespace finley {
22 
26  ReferenceElementSet(ElementTypeId id, int order, int reduced_order)
27  {
30  id_info->BasisFunctions);
31  if (!noError()) return;
32 
33  if (order<0)
34  order=std::max(2*bf_info->numOrder, 0);
35 
36  referenceElement.reset(new ReferenceElement(id, order));
37  if (noError()) {
38  if (reduced_order<0)
39  reduced_order=std::max(2*(bf_info->numOrder-1), 0);
41  new ReferenceElement(id, reduced_order));
42  }
43 
44  if (noError()) {
45  if (referenceElement->getNumNodes() != referenceElementReducedQuadrature->getNumNodes()) {
46  setError(VALUE_ERROR, "ReferenceElementSet: numNodes in referenceElement and referenceElementReducedQuadrature don't match.");
47  }
48  }
49  }
50 
51  const_ShapeFunction_ptr borrowBasisFunctions(bool reducedShapefunction,
52  bool reducedIntegrationOrder) const
53  {
54  if (reducedShapefunction) {
55  return (reducedIntegrationOrder ?
56  referenceElementReducedQuadrature->LinearBasisFunctions :
57  referenceElement->LinearBasisFunctions);
58  }
59  return (reducedIntegrationOrder ?
60  referenceElementReducedQuadrature->BasisFunctions :
61  referenceElement->BasisFunctions);
62  }
63 
64  const_ShapeFunction_ptr borrowParametrization(bool reducedIntegrationOrder) const
65  {
66  return (reducedIntegrationOrder ?
67  referenceElementReducedQuadrature->Parametrization :
68  referenceElement->Parametrization);
69  }
70 
72  {
73  return (reducedIntOrder ? referenceElementReducedQuadrature :
75  }
76 
77  inline int getNumNodes() const { return referenceElement->getNumNodes(); }
78 
81 };
82 
83 
84 typedef boost::shared_ptr<const ReferenceElementSet> const_ReferenceElementSet_ptr;
85 
86 
87 } // namespace finley
88 
89 #endif // __FINLEY_REFERENCEELEMENTSETS_H__
90