@q $Id: first_order.hweb 2345 2009-03-24 11:50:48Z kamenik $ @> @q Copyright 2004, Ondra Kamenik @> @*2 First order at deterministic steady. Start of {\tt first\_order.h} file. @s GeneralMatrix int @s ConstGeneralMatrix int @s FirstOrder int @s FirstOrderDerivs int @c #ifndef FIRST_ORDER_H #define FIRST_ORDER_H #include "korder.h" @<|FirstOrder| class declaration@>; @<|FirstOrderDerivs| class declaration@>; #endif @ @<|FirstOrder| class declaration@>= template class FirstOrderDerivs; class FirstOrder { template friend class FirstOrderDerivs; PartitionY ypart; int nu; TwoDMatrix gy; TwoDMatrix gu; bool bk_cond; double b_error; int sdim; Vector alphar; Vector alphai; Vector beta; double qz_criterium; Journal& journal; public:@; FirstOrder(int num_stat, int num_pred, int num_both, int num_forw, int num_u, const FSSparseTensor& f, Journal& jr, double qz_crit) : ypart(num_stat, num_pred, num_both, num_forw), nu(num_u), gy(ypart.ny(), ypart.nys()), gu(ypart.ny(), nu), alphar(ypart.ny()+ypart.nboth), alphai(ypart.ny()+ypart.nboth), beta(ypart.ny()+ypart.nboth), qz_criterium(qz_crit), journal(jr) {@+ solve(FFSTensor(f)); @+} bool isStable() const {@+ return bk_cond;@+} const TwoDMatrix& getGy() const {@+ return gy;@+} const TwoDMatrix& getGu() const {@+ return gu;@+} protected:@; void solve(const TwoDMatrix& f); void journalEigs(); }; @ This class only converts the derivatives $g_{y^*}$ and $g_u$ to a folded or unfolded container. @<|FirstOrderDerivs| class declaration@>= template class FirstOrderDerivs : public ctraits::Tg { public:@; FirstOrderDerivs(const FirstOrder& fo) : ctraits::Tg(4) { IntSequence nvs(4); nvs[0] = fo.ypart.nys(); nvs[1] = fo.nu; nvs[2] = fo.nu; nvs[3] = 1; _Ttensor* ten = new _Ttensor(fo.ypart.ny(), TensorDimens(Symmetry(1,0,0,0),nvs)); ten->zeros(); ten->add(1.0, fo.gy); this->insert(ten); ten = new _Ttensor(fo.ypart.ny(), TensorDimens(Symmetry(0,1,0,0), nvs)); ten->zeros(); ten->add(1.0, fo.gu); this->insert(ten); } }; @ End of {\tt first\_order.h} file.