Panzer  Version of the Day
Panzer_Traits.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Panzer: A partial differential equation assembly
5 // engine for strongly coupled complex multiphysics systems
6 // Copyright (2011) Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39 // Eric C. Cyr (eccyr@sandia.gov)
40 // ***********************************************************************
41 // @HEADER
42 
43 #ifndef PANZER_TRAITS_HPP
44 #define PANZER_TRAITS_HPP
45 
46 #include "PanzerDiscFE_config.hpp"
47 
48 // Teuchos includes
49 #include "Teuchos_RCP.hpp"
50 
51 // mpl (Meta Programming Library) templates
52 #include "Sacado_mpl_vector.hpp"
53 #include "Sacado_mpl_find.hpp"
54 
55 // Scalar types
56 #include "Sacado.hpp"
57 //#include "Sacado_CacheFad_DFad.hpp"
58 //#include "Sacado_ELRFad_DFad.hpp"
59 //#include "Sacado_ELRCacheFad_DFad.hpp"
60 
61 #include "Phalanx_Traits.hpp"
62 
63 // Include User Data Types
64 //#include "Phalanx_Allocator_Contiguous.hpp"
65 #include "Panzer_Workset.hpp"
67 
68 // Debugging information
69 //#include "Phalanx_TypeStrings.hpp"
70 
71 namespace panzer {
72 
73  class LinearObjContainer;
74 
75  struct Traits {
76 
77  // ******************************************************************
78  // *** Scalar Types
79  // ******************************************************************
80 
81  // Scalar types we plan to use
82  typedef double RealType;
83  // typedef Sacado::Fad::DFad<double> FadType;
84  // typedef Sacado::CacheFad::DFad<double> FadType;
85  // typedef Sacado::ELRFad::DFad<double> FadType;
86  // typedef Sacado::ELRCacheFad::DFad<double> FadType;
87  // typedef Sacado::Fad::SLFad<double,8> FadType;
88  typedef PANZER_FADTYPE FadType;
89 
90 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
91  // typedef Sacado::Fad::SFad<FadType,1> HessianType;
92  typedef Sacado::Fad::DFad<Sacado::Fad::SFad<RealType,1> > HessianType;
93 #endif
94 
95  // ******************************************************************
96  // *** Evaluation Types
97  // ******************************************************************
98  struct Residual { typedef RealType ScalarT; };
99  struct Jacobian { typedef FadType ScalarT; };
100  struct Tangent { typedef FadType ScalarT; };
101 
102 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
103  struct Hessian { typedef HessianType ScalarT; };
104 #endif
105 
106  typedef Sacado::mpl::vector< Residual
107  , Jacobian
108  , Tangent
109 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
110  , Hessian
111 #endif
113 
114  // ******************************************************************
115  // *** User Defined Object Passed in for Evaluation Method
116  // ******************************************************************
117 
118  struct SD {
119  Teuchos::RCP< std::vector<panzer::Workset> > worksets_;
120  };
121  typedef SD SetupData;
122 
124 
125  typedef struct {
127 
130  } PreEvalData;
131 
132  typedef void* PostEvalData;
133 
134  };
135 
136 }
137 
138 namespace PHX {
139 
140  template<>
141  struct eval_scalar_types<panzer::Traits::Residual>
142  { typedef Sacado::mpl::vector<panzer::Traits::RealType,bool> type; };
143 
144  template<>
145  struct eval_scalar_types<panzer::Traits::Jacobian>
146  { typedef Sacado::mpl::vector<panzer::Traits::FadType,panzer::Traits::RealType,bool> type; };
147 
148  template<>
149  struct eval_scalar_types<panzer::Traits::Tangent>
150  { typedef Sacado::mpl::vector<panzer::Traits::FadType,panzer::Traits::RealType,bool> type; };
151 
152 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
153  template<>
154  struct eval_scalar_types<panzer::Traits::Hessian>
155  { typedef Sacado::mpl::vector<panzer::Traits::HessianType,bool> type; };
156 #endif
157 
158 }
159 
160 #endif
Sacado::mpl::vector< panzer::Traits::FadType, panzer::Traits::RealType, bool > type
Teuchos::RCP< std::vector< panzer::Workset > > worksets_
Sacado::mpl::vector< Residual, Jacobian, Tangent > EvalTypes
Sacado::mpl::vector< panzer::Traits::FadType, panzer::Traits::RealType, bool > type
panzer::Workset & EvalData
PHX::MDField< ScalarT > vector
PANZER_FADTYPE FadType
GlobalEvaluationDataContainer gedc
Sacado::mpl::vector< panzer::Traits::RealType, bool > type