Go to the documentation of this file.00001
00002
00003 #ifndef zeroTang_hh
00004 #define zeroTang_hh
00005
00006 #include <iostream>
00007 #include "geometry/connector.hh"
00008 #include "toolbox/dynArray.hh"
00009 #include "constraints.hh"
00010
00011 using concepts::Real;
00012
00013 namespace linearFEM {
00014 class Element;
00015 }
00016
00017
00018
00023 template<typename F>
00024 class ZeroTangentialValue : public constraints::AnalyticalConstraint<F> {
00025 public:
00029 ZeroTangentialValue(concepts::Attribute a) : attr_(a), linElm_(0),
00030 ctrl0_(2, 10, (uint)-1) {}
00031 ZeroTangentialValue(const ZeroTangentialValue& z) :
00032 attr_(z.attr_), linElm_(z.linElm_), ctrl0_(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 linearFEM::Element* linElm_;
00048 const concepts::Connector2& assertions_(const concepts::Element<F>& e) const;
00050 concepts::DynArray<uint> ctrl0_;
00051 };
00052
00053 #endif // zeroTang_hh