00001
00002
00004
00005 #if !defined(AFX_QUALITYCONTROLCASHKARPMOVER_H__7A659FAB_B4E9_4A82_8E20_65464EB830BC__INCLUDED_)
00006 #define AFX_QUALITYCONTROLCASHKARPMOVER_H__7A659FAB_B4E9_4A82_8E20_65464EB830BC__INCLUDED_
00007
00008 #if _MSC_VER > 1000
00009 #pragma once
00010 #endif // _MSC_VER > 1000
00011
00012 #ifndef _WIN32
00013 #define __min min
00014 #define __max max
00015 #endif
00016
00017 #include "DifferentialEquationMover.h"
00018 #include <cmath>
00019 #include <stdlib.h>
00020 #include <iomanip>
00021 using namespace std;
00022
00023 class CQualityControlCashKarpMover : public CDifferentialEquationMover
00024 {
00025 public:
00026 CQualityControlCashKarpMover(double frequency, double stepSize, double eps=1.0e-5);
00027 virtual ~CQualityControlCashKarpMover();
00028 void Stepper(int nRHS, double *y, double *dydt);
00029 void CashKarpStep(int nRHS, double *y, double *dydt);
00030 virtual void Move(double xInitial, double xFinal, ReactionNetwork *pReactionNetwork);
00031 protected:
00032 double *m_pdError;
00033 double *m_pdScale;
00034 double m_dEps;
00035 double m_dLastStep,m_dNextStep,m_dInitialStepSize;
00036 static const double m_scdA[6];
00037 static const double m_scdB[6][5];
00038 static const double m_scdC[6];
00039 static const double m_scdCStar[6];
00040 static const double m_scdSAFETY;
00041 static const double m_scdPGROW;
00042 static const double m_scdPSHRINK;
00043 static const double m_scdERRCON;
00044 static const double m_scdTINY;
00045
00046 };
00047
00048 #endif // !defined(AFX_QUALITYCONTROLCASHKARPMOVER_H__7A659FAB_B4E9_4A82_8E20_65464EB830BC__INCLUDED_)