00001
00002
00003
00004
00005 #ifndef INCLUDED_VODESOLV_H
00006 #define INCLUDED_VODESOLV_H
00007
00008
00009 #include "orderctrl.h"
00010 #include "initencl.h"
00011 #include "tgtencl.h"
00012
00013
00014 class VODE_SOLVER;
00015
00017 typedef VODE_SOLVER* PtrVODESolver;
00018
00019
00025 class VODE_SOLVER : public ODE_SOLVER
00026 {
00027 public:
00028
00045 VODE_SOLVER( const PtrODENumeric ODE ,
00046 const PtrDataRepr Data,
00047 const PtrOrderCtrl Order,
00048 const PtrStepCtrl Step,
00049 const PtrInitEncl Init,
00050 const PtrTightEncl Tight );
00051
00052
00055 void IntegrateTo( double tEnd, bool Continue = false );
00056
00062 void SetOrderCtrl ( const PtrOrderCtrl Order );
00063
00072 void SetInitEncl ( const PtrInitEncl Init );
00073
00081 void SetTightEncl ( const PtrTightEncl Tight );
00082
00088 PtrTightEncl GetTightEncl () const;
00089
00091 virtual ~VODE_SOLVER();
00092
00093
00094 protected:
00095
00097 void InitSolver ();
00098
00099
00100 protected:
00101
00103 PtrOrderCtrl OrderControl;
00104
00108 PtrInitEncl InitEncl;
00109
00112 PtrTightEncl TightEncl;
00113
00115 INTERVAL_VECTOR LocalError;
00116
00118 INTERVAL_VECTOR Ytight;
00119
00121 INTERVAL_VECTOR Yinit;
00122
00123 private:
00124
00129 void ResizeSpace( int n );
00130
00131 };
00132
00133
00134
00135 inline VODE_SOLVER :: VODE_SOLVER( const PtrODENumeric ODE,
00136 const PtrDataRepr Data,
00137 const PtrOrderCtrl Order,
00138 const PtrStepCtrl Step,
00139 const PtrInitEncl Init,
00140 const PtrTightEncl Tight )
00141
00142 : ODE_SOLVER(ODE,Data,Step), OrderControl(Order),
00143 InitEncl(Init), TightEncl(Tight)
00144 {
00145 assert( NotNull(Order) );
00146 assert( NotNull(Init) );
00147 assert( NotNull(Tight) );
00148 }
00149
00150
00151 inline void VODE_SOLVER :: SetOrderCtrl ( const PtrOrderCtrl Order )
00152 {
00153 assert(Order);
00154 DELETE(OrderControl);
00155 OrderControl = Order;
00156 }
00157
00158
00159 inline void VODE_SOLVER :: SetInitEncl ( const PtrInitEncl Init )
00160 {
00161 assert(Init);
00162 DELETE(InitEncl);
00163 InitEncl = Init;
00164 }
00165
00166
00167 inline void VODE_SOLVER :: SetTightEncl ( const PtrTightEncl Tight )
00168 {
00169 assert(Tight);
00170 DELETE(TightEncl);
00171 TightEncl = Tight;
00172 }
00173
00174 inline PtrTightEncl VODE_SOLVER :: GetTightEncl () const
00175 {
00176 assert(NotNull(TightEncl));
00177 return TightEncl;
00178 }
00179
00180
00181 #endif