Go to the documentation of this file.00001
00002
00003
00004 #ifndef zerotangential3D_hh
00005 #define zerotangential3D_hh
00006
00007 #include "constraints/analytical.hh"
00008 #include "geometry/connector.hh"
00009 #include "hp3D/hexahedron.hh"
00010 #include "toolbox/dynArray.hh"
00011
00012 namespace hp3D {
00013
00014
00015
00021 template<typename F>
00022 class ZeroTangentialValue : public constraints::AnalyticalConstraint<F> {
00023 public:
00027 ZeroTangentialValue(concepts::Attribute a) :
00028 attr_(a), scalElm_(0),
00029 ctrl0_(2, 10, (uint)-1), ctrl1_(2, 10, (uint)-1) {}
00030 ZeroTangentialValue(const ZeroTangentialValue& z) :
00031 attr_(z.attr_), scalElm_(z.scalElm_),
00032 ctrl0_(2, 10, (uint)-1), ctrl1_(2, 10, (uint)-1) {}
00033 virtual void lengthT(const concepts::Element<F>& e, uint& length);
00034 virtual void assembly(const concepts::Element<F>& e,
00035 concepts::TColumn<F>*& t, uint& n, uint& j,
00036 uint length);
00037 virtual constraints::AnalyticalConstraint<F>* clone() const;
00038 virtual void localMatrix(concepts::ElementMatrix<F>& em, uint& j,
00039 const constraints::Element<F>& elm) const;
00040 virtual void localVector(concepts::ElementMatrix<F>& em, uint& j,
00041 const constraints::Element<F>& elm) const;
00042 protected:
00043 virtual std::ostream& info(std::ostream& os) const;
00044 private:
00046 concepts::Attribute attr_;
00047 mutable const Hexahedron* scalElm_;
00048 const concepts::Connector3&
00049 assertions_(const concepts::Element<F>& e) const;
00051 concepts::DynArray<uint> ctrl0_;
00053 concepts::DynArray<uint> ctrl1_;
00054 void fillEM_(const uint ll[3], const ushort p[3], const uint offset,
00055 uint& j, const concepts::Real3d e,
00056 concepts::ElementMatrix<F>& em) const;
00057 };
00058
00059 }
00060
00061 #endif // zerotangential3D_hh