00001
00002
00003
00004
00005
00006 #if !defined(CapExplicitModel_hpp)
00007 #define CapExplicitModel_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 #include "ConstitutiveModel.hpp"
00016
00017 namespace LCM
00018 {
00023
00024 template<typename EvalT, typename Traits>
00025 class CapExplicitModel: public LCM::ConstitutiveModel<EvalT, Traits>
00026 {
00027
00028 public:
00029
00030 typedef typename EvalT::ScalarT ScalarT;
00031 typedef typename EvalT::MeshScalarT MeshScalarT;
00032 typedef typename Sacado::mpl::apply<FadType, ScalarT>::type DFadType;
00033
00034 using ConstitutiveModel<EvalT, Traits>::num_dims_;
00035 using ConstitutiveModel<EvalT, Traits>::num_pts_;
00036 using ConstitutiveModel<EvalT, Traits>::field_name_map_;
00037
00041 CapExplicitModel(Teuchos::ParameterList* p,
00042 const Teuchos::RCP<Albany::Layouts>& dl);
00043
00047 virtual
00048 ~CapExplicitModel()
00049 {};
00050
00054 virtual
00055 void
00056 computeState(typename Traits::EvalData workset,
00057 std::map<std::string, Teuchos::RCP<PHX::MDField<ScalarT> > > dep_fields,
00058 std::map<std::string, Teuchos::RCP<PHX::MDField<ScalarT> > > eval_fields);
00059
00060 private:
00061
00065 CapExplicitModel(const CapExplicitModel&);
00066
00070 CapExplicitModel& operator=(const CapExplicitModel&);
00071
00075 ScalarT
00076 compute_f(Intrepid::Tensor<ScalarT> & sigma,
00077 Intrepid::Tensor<ScalarT> & alpha, ScalarT & kappa);
00078
00079 Intrepid::Tensor<ScalarT>
00080 compute_dfdsigma(Intrepid::Tensor<ScalarT> & sigma,
00081 Intrepid::Tensor<ScalarT> & alpha, ScalarT & kappa);
00082
00083 Intrepid::Tensor<ScalarT>
00084 compute_dgdsigma(Intrepid::Tensor<ScalarT> & sigma,
00085 Intrepid::Tensor<ScalarT> & alpha, ScalarT & kappa);
00086
00087 ScalarT
00088 compute_dfdkappa(Intrepid::Tensor<ScalarT> & sigma,
00089 Intrepid::Tensor<ScalarT> & alpha, ScalarT & kappa);
00090
00091 ScalarT
00092 compute_Galpha(ScalarT & J2_alpha);
00093
00094 Intrepid::Tensor<ScalarT>
00095 compute_halpha(Intrepid::Tensor<ScalarT> & dgdsigma, ScalarT & J2_alpha);
00096
00097 ScalarT compute_dedkappa(ScalarT & kappa);
00098
00102 RealType A;
00103 RealType B;
00104 RealType C;
00105 RealType theta;
00106 RealType R;
00107 RealType kappa0;
00108 RealType W;
00109 RealType D1;
00110 RealType D2;
00111 RealType calpha;
00112 RealType psi;
00113 RealType N;
00114 RealType L;
00115 RealType phi;
00116 RealType Q;
00117
00118 std::string strainName, stressName;
00119 std::string backStressName, capParameterName, eqpsName, volPlasticStrainName;
00120
00124 Intrepid::Tensor4<ScalarT> Celastic, compliance, id1, id2, id3;
00125 Intrepid::Tensor<ScalarT> I;
00126 Intrepid::Tensor<ScalarT> depsilon, sigmaN, strainN, sigmaVal, alphaVal;
00127 Intrepid::Tensor<ScalarT> deps_plastic, sigmaTr, alphaTr;
00128 Intrepid::Tensor<ScalarT> dfdsigma, dgdsigma, dfdalpha, halpha;
00129 Intrepid::Tensor<ScalarT> dfdotCe, sigmaK, alphaK, dsigma, dev_plastic;
00130 Intrepid::Tensor<ScalarT> xi, sN, s, strainCurrent;
00131 Intrepid::Tensor<ScalarT> dJ3dsigma, eps_dev;
00132
00133 };
00134 }
00135
00136 #endif
00137