Changeset 514 in Sophya for trunk/SophyaLib/NTools/difeq.h
- Timestamp:
- Oct 25, 1999, 6:43:04 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/difeq.h
r508 r514 5 5 #include "machdefs.h" 6 6 #include "pexceptions.h" 7 #include "cvector.h" 8 9 namespace PlanckDPC {class GeneralFunction;} 7 #include "tvector.h" 8 9 namespace PlanckDPC { 10 11 class GeneralFunction; 10 12 11 13 // <summary> fonction pour equadifs </summary> … … 28 30 29 31 // Calcule les valeurs des derivees fpi a partir des valeurs des fonctions fi 30 virtual void ComputeV( OVector& fpi, OVector const& fi)32 virtual void ComputeV(Vector& fpi, Vector const& fi) 31 33 { Compute(fpi(0), fi(0)); } 32 34 … … 44 46 // Pour ajuster vecteur de depart quand il y a des fonctions a usage 45 47 // interne... 46 virtual void AdjustStart( OVector& /*start*/, double /*tstart*/)48 virtual void AdjustStart(Vector& /*start*/, double /*tstart*/) 47 49 {} 48 50 protected: … … 87 89 // Implementation de Compute qui va utiliser la fonction fournie 88 90 // au constructeur. 89 virtual void ComputeV( OVector& fpi, OVector const& fi);91 virtual void ComputeV(Vector& fpi, Vector const& fi); 90 92 91 93 // Implementation de AdjustStart qui gere la fonction a usage interne. 92 virtual void AdjustStart( OVector& start, double tstart);94 virtual void AdjustStart(Vector& start, double tstart); 93 95 protected: 94 96 DIFEQFCNT1 mFcn; … … 102 104 DiffEqFcn2(DIFEQFCN2); 103 105 104 virtual void ComputeV( OVector& fpi, OVector const& fi);106 virtual void ComputeV(Vector& fpi, Vector const& fi); 105 107 protected: 106 108 DIFEQFCN2 mFcn; … … 121 123 // Implementation de Compute qui va utiliser la fonction fournie 122 124 // au constructeur. 123 virtual void ComputeV( OVector& fpi, OVector const& fi);125 virtual void ComputeV(Vector& fpi, Vector const& fi); 124 126 125 127 // Implementation de AdjustStart qui gere la fonction a usage interne. 126 virtual void AdjustStart( OVector& start, double tstart);128 virtual void AdjustStart(Vector& start, double tstart); 127 129 protected: 128 130 DIFEQFCNT2 mFcn; … … 130 132 131 133 // Cas y'' = f(y',y) avec des 3-vecteurs 132 typedef void(*DIFEQFCNV)( OVector&, OVector const&, OVector const&);134 typedef void(*DIFEQFCNV)(Vector&, Vector const&, Vector const&); 133 135 134 136 // <summary> y'' = f(y',y,t) </summary> 135 137 // Cas y'' = f(y',y,t), on fournit la fonction f, sous la forme 136 // double f( OVector), et ca construit la bonne DiffEqFunction138 // double f(Vector), et ca construit la bonne DiffEqFunction 137 139 class DiffEqFcnV : public DiffEqFunction { 138 140 public: 139 // Constructeur, on fournit une fonction ( OVector)->double141 // Constructeur, on fournit une fonction (Vector)->double 140 142 // qui donne y'' en fonction du vecteur (t, y, y') 141 143 DiffEqFcnV(DIFEQFCNV); … … 143 145 // Implementation de Compute qui va utiliser la fonction fournie 144 146 // au constructeur. 145 virtual void ComputeV( OVector& fpi, OVector const& fi);147 virtual void ComputeV(Vector& fpi, Vector const& fi); 146 148 protected: 147 149 DIFEQFCNV mFcn; 148 OVector tmp1, tmp2, tmp3;150 Vector tmp1, tmp2, tmp3; 149 151 }; 150 152 … … 176 178 // Change les conditions initiales. Notation chainee possible. 177 179 // <group> 178 DiffEqSolver& StartV( OVector const& yi, double t);180 DiffEqSolver& StartV(Vector const& yi, double t); 179 181 // si NFunc == 1 180 182 DiffEqSolver& Start1(double yi, double t); … … 184 186 // Lance la resolution, avec ou sans conservation de n valeurs intermediaires 185 187 // <group> 186 virtual void SolveV( OVector& yf, double tf);188 virtual void SolveV(Vector& yf, double tf); 187 189 // si NFunc == 1 188 190 virtual void Solve1(double& yf, double tf); 189 191 virtual void Solve(double* yf, double tf); 190 virtual void SolveArr( OMatrix& y, double* t, double tf, int n)=0;192 virtual void SolveArr(Matrix& y, double* t, double tf, int n)=0; 191 193 // si NFunc == 1 192 194 virtual void SolveArr1(double* y, double* t, double tf, int n); … … 198 200 bool mOwnFunc; 199 201 200 OVector mYStart;202 Vector mYStart; 201 203 double mXStart; 202 204 double mStep; … … 215 217 216 218 // Implementation de RK4 217 virtual void SolveArr( OMatrix& y, double* t, double tf, int n);219 virtual void SolveArr(Matrix& y, double* t, double tf, int n); 218 220 219 221 protected: 220 222 // Un pas RK4 221 void RKStep( OVector& newY, OVector const& y0, double dt);223 void RKStep(Vector& newY, Vector const& y0, double dt); 222 224 // Vecteurs utilises en interne, pour ne pas les reallouer. 223 OVector k1, k2, k3, k4; 224 }; 225 226 225 Vector k1, k2, k3, k4; 226 }; 227 228 229 } // Fin du namespace 227 230 228 231 #endif
Note:
See TracChangeset
for help on using the changeset viewer.