00001
00002
00003
00004
00005
00006 #ifndef CAPEXPLICIT_HPP
00007 #define CAPEXPLICIT_HPP
00008
00009 #include <Intrepid_MiniTensor.h>
00010 #include "Phalanx_ConfigDefs.hpp"
00011 #include "Phalanx_Evaluator_WithBaseImpl.hpp"
00012 #include "Phalanx_Evaluator_Derived.hpp"
00013 #include "Phalanx_MDField.hpp"
00014 #include "Albany_Layouts.hpp"
00015
00016 namespace LCM {
00021
00022 template<typename EvalT, typename Traits>
00023 class CapExplicit: public PHX::EvaluatorWithBaseImpl<Traits>,
00024 public PHX::EvaluatorDerived<EvalT, Traits> {
00025
00026 public:
00027
00031 CapExplicit(const Teuchos::ParameterList& p,
00032 const Teuchos::RCP<Albany::Layouts>& dl);
00033
00037 void postRegistrationSetup(typename Traits::SetupData d,
00038 PHX::FieldManager<Traits>& vm);
00039
00043 void evaluateFields(typename Traits::EvalData d);
00044
00045 private:
00046
00047 typedef typename EvalT::ScalarT ScalarT;
00048 typedef typename EvalT::MeshScalarT MeshScalarT;
00049
00053 ScalarT
00054 compute_f(Intrepid::Tensor<ScalarT> & sigma,
00055 Intrepid::Tensor<ScalarT> & alpha, ScalarT & kappa);
00056
00057 Intrepid::Tensor<ScalarT>
00058 compute_dfdsigma(Intrepid::Tensor<ScalarT> & sigma,
00059 Intrepid::Tensor<ScalarT> & alpha, ScalarT & kappa);
00060
00061 Intrepid::Tensor<ScalarT>
00062 compute_dgdsigma(Intrepid::Tensor<ScalarT> & sigma,
00063 Intrepid::Tensor<ScalarT> & alpha, ScalarT & kappa);
00064
00065 ScalarT
00066 compute_dfdkappa(Intrepid::Tensor<ScalarT> & sigma,
00067 Intrepid::Tensor<ScalarT> & alpha, ScalarT & kappa);
00068
00069 ScalarT
00070 compute_Galpha(ScalarT & J2_alpha);
00071
00072 Intrepid::Tensor<ScalarT>
00073 compute_halpha(Intrepid::Tensor<ScalarT> & dgdsigma, ScalarT & J2_alpha);
00074
00075 ScalarT compute_dedkappa(ScalarT & kappa);
00076
00080 unsigned int numQPs;
00081
00085 unsigned int numDims;
00086
00090 PHX::MDField<ScalarT, Cell, QuadPoint, Dim, Dim> strain;
00091
00095 PHX::MDField<ScalarT, Cell, QuadPoint> elasticModulus;
00096
00100 PHX::MDField<ScalarT, Cell, QuadPoint> poissonsRatio;
00101
00105 RealType A;
00106 RealType B;
00107 RealType C;
00108 RealType theta;
00109 RealType R;
00110 RealType kappa0;
00111 RealType W;
00112 RealType D1;
00113 RealType D2;
00114 RealType calpha;
00115 RealType psi;
00116 RealType N;
00117 RealType L;
00118 RealType phi;
00119 RealType Q;
00120
00121 std::string strainName, stressName;
00122 std::string backStressName, capParameterName, eqpsName,volPlasticStrainName;
00123
00127 PHX::MDField<ScalarT, Cell, QuadPoint, Dim, Dim> stress;
00128
00132 PHX::MDField<ScalarT, Cell, QuadPoint, Dim, Dim> backStress;
00133
00137 PHX::MDField<ScalarT, Cell, QuadPoint> capParameter;
00138
00142
00143
00147
00148
00152 PHX::MDField<ScalarT, Cell, QuadPoint> eqps;
00153
00157 PHX::MDField<ScalarT, Cell, QuadPoint> volPlasticStrain;
00158
00162
00163
00167 Intrepid::Tensor4<ScalarT> Celastic, compliance, id1, id2, id3;
00168 Intrepid::Tensor<ScalarT> I;
00169 Intrepid::Tensor<ScalarT> depsilon, sigmaN, strainN, sigmaVal, alphaVal;
00170 Intrepid::Tensor<ScalarT> deps_plastic, sigmaTr, alphaTr;
00171 Intrepid::Tensor<ScalarT> dfdsigma, dgdsigma, dfdalpha, halpha;
00172 Intrepid::Tensor<ScalarT> dfdotCe, sigmaK, alphaK, dsigma, dev_plastic;
00173 Intrepid::Tensor<ScalarT> xi, sN, s, strainCurrent;
00174 Intrepid::Tensor<ScalarT> dJ3dsigma, eps_dev;
00175
00176
00177 };
00178 }
00179
00180 #endif
00181