Go to the documentation of this file.00001 #ifndef equivalentStress_hh
00002 #define equivalentStress_hh
00003
00004 #include "basics/typedefs.hh"
00005 #include "function/vector.hh"
00006 #include "elasticityTensor.hh"
00007 #include "vectorial.hh"
00008 #include "linDG2D/space.hh"
00009 #include "operator/compositions.hh"
00010
00011 using concepts::Real;
00012
00013
00014
00018 template<int dim>
00019 class EquivalentStressHypothesis {
00020 public:
00022 virtual Real operator() (concepts::Mapping<Real, dim>& sigma) const = 0;
00024 virtual concepts::Point<Real, dim>
00025 principalStresses(concepts::Mapping<Real, dim>& sigma) const;
00026 };
00027
00028
00029
00033 template<int dim>
00034 class MaximumPrincipalStressHypothesis :
00035 public EquivalentStressHypothesis<dim> {
00036 public:
00038 virtual Real operator() (concepts::Mapping<Real, dim>& sigma) const;
00039 };
00040
00041
00042
00046 template<int dim>
00047 class MaximumShearStressHypothesis :
00048 public EquivalentStressHypothesis<dim> {
00049 public:
00051 virtual Real operator() (concepts::Mapping<Real, dim>& sigma) const;
00052 };
00053
00054
00055
00059 template<int dim>
00060 class MaximumShearStrainEnergyHypothesis :
00061 public EquivalentStressHypothesis<dim> {
00062 public:
00064 virtual Real operator() (concepts::Mapping<Real, dim>& sigma) const;
00065 };
00066
00067
00068
00074 class EquivalentStress2d : public concepts::Operator<Real> {
00075 public:
00080 EquivalentStress2d(const EquivalentStressHypothesis<2>& esh,
00081 const ElasticityTensor<2>& et,
00082 const vectorial::Space<Real>& spc)
00083 : concepts::Operator<Real>(spc.get(0)->dim(), spc.dim())
00084 , esh_(esh), et_(et), spc_(spc) {
00085 conceptsAssert(spc.vdim() == 2, concepts::Assertion());
00086 }
00093 void operator()
00094 (const concepts::Function<Real>& fncY, concepts::Function<Real>& fncX);
00096 const concepts::Space<Real>& spaceX() const { return *spc_.get(0); }
00098 const concepts::Space<Real>& spaceY() const { return spc_; }
00099 protected:
00100 virtual std::ostream& info (std::ostream &os) const;
00101 private:
00102 const EquivalentStressHypothesis<2>& esh_;
00103 const ElasticityTensor<2>& et_;
00104 const vectorial::Space<Real>& spc_;
00105 };
00106
00107 #endif // equivalentStress_hh