Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #if !defined(LCM_CrystalPlasticityModel_hpp)
00008 #define LCM_CrystalPlasticityModel_hpp
00009
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 "LCM/models/ConstitutiveModel.hpp"
00016 #include <Intrepid_MiniTensor.h>
00017
00018 namespace LCM
00019 {
00020
00022 template<typename EvalT, typename Traits>
00023 class CrystalPlasticityModel: public LCM::ConstitutiveModel<EvalT, Traits>
00024 {
00025 public:
00026
00027 typedef typename EvalT::ScalarT ScalarT;
00028 typedef typename EvalT::MeshScalarT MeshScalarT;
00029
00030 using ConstitutiveModel<EvalT, Traits>::num_dims_;
00031 using ConstitutiveModel<EvalT, Traits>::num_pts_;
00032 using ConstitutiveModel<EvalT, Traits>::field_name_map_;
00033
00037 CrystalPlasticityModel(Teuchos::ParameterList* p,
00038 const Teuchos::RCP<Albany::Layouts>& dl);
00039
00043 virtual
00044 ~CrystalPlasticityModel()
00045 {};
00046
00050 virtual
00051 void
00052 computeState(typename Traits::EvalData workset,
00053 std::map<std::string, Teuchos::RCP<PHX::MDField<ScalarT> > > dep_fields,
00054 std::map<std::string, Teuchos::RCP<PHX::MDField<ScalarT> > > eval_fields);
00055
00056 private:
00057
00061 CrystalPlasticityModel(const CrystalPlasticityModel&);
00062
00066 CrystalPlasticityModel& operator=(const CrystalPlasticityModel&);
00067
00071 void
00072 computeStress(Intrepid::Tensor<ScalarT> const & F,
00073 Intrepid::Tensor<ScalarT> const & Fp,
00074 Intrepid::Tensor<ScalarT> & T,
00075 Intrepid::Tensor<ScalarT> & S);
00076
00080 RealType c11_,c12_,c44_;
00081 Intrepid::Tensor4<RealType> C_;
00082 Intrepid::Tensor<RealType> orientation_;
00083
00087 int num_slip_;
00088
00090 struct SlipSystemStruct {
00091
00092 SlipSystemStruct() {
00093
00094
00095
00096
00097
00098 }
00099
00100
00101 Intrepid::Vector<RealType> s_, n_;
00102
00103
00104 Intrepid::Tensor<RealType> projector_;
00105
00106
00107 RealType tau_critical_, gamma_dot_0_, gamma_exp_;
00108 };
00109
00113 std::vector<SlipSystemStruct> slip_systems_;
00114
00115
00119 Intrepid::Tensor<ScalarT> F_, Fpinv_, Fe_, E_;
00120 Intrepid::Tensor<RealType> I_;
00121 };
00122
00123
00124 }
00125
00126 #endif