// Diese Header-Datei enthält einen _Vorschlag_, wie Du // vorgehen kannst, um das Euler Verfahren zu implementieren. // Du musst Dich nicht an die Reihenfolge oder die // vorgeschlagenen Namen halten... // // Wenn Du etwas nicht verstehst, oder nicht wisst, wie Du // es umsetzen kannst, dann schreibe an die entsprechende // Stelle einen Kommentar, und führe das './feedback.sh' // Skript aus. // 1. Definiere Include Guards für diesen Header // 7. Füge fehlende Include-Dateien hinzu. // 2. Schreibe ein Interface für einen Ortsoperator mit virtuellen Methoden für // die apply() Methode und eine setTime() Methode. Vergleiche mit dem // Interface für Function. // ACHTUNG: Dokumentieren nicht vergessen... class SpaceOperator { // apply methode // ... // setTime Methode // ... // Member variablen // ... }; // 3. Leite den DiscreteSpaceOperator in finite_volume.hh von SpaceOperator ab, // nenne ihn um, z.B. in FVHyperbolicOperator, und erweitere ihn, so dass er // das Interface erfüllt. // 4. Schreibe einen weitere Implementierung für einen SpaceOperator, dessen // apply() Methode eine Konstante Funktion @f$ t \cdot \Id @f$ zurück gibt. class ConstantOperator { // apply Methode // ... // setTime Methode // ... //... }; // 5. Schreibe eine Klasse, die ein Euler Schema in der Zeit für einen // beliebigen Ortsoperator implementiert. //! Simple Euler ODE Solver template class EulerSolver { public: // constructor // 5a. Was für Objekte benötigt ein EulerSolver, um zu funktionieren? EulerSolver(/* argumente */) /*: initialisierungen */ { // Initialisierungen??? } // 5b. Die solve() Methode, die Anfangsdaten bekommt, und // dann eine Lösungstrajektorie erstellt. Der Zieltyp // "Trajectory" wird weiter unten unter 6. definiert. void solve( DofVectorType const & init, Trajectory & destOutput ) { // ... } private: // 5c. member variables // ... }; // 5d. (optional) Schreibe ein Interface für ein allgemeines // Lösungsverfahren zum Lösen einer Gewöhnlichen // Differentialgleichung und leite die EulerSolver Klasse // davon ab. // 6. Schreibe eine Klasse zum Speichern der // Lösungstrajektorie class Trajectory { public: // constructor Trajectory() : traj_( timeGrid.npoints() ) void addSolution(int timeStep, DofVectorType & snapshot) { } private: Grid & timeGrid_; std::vector traj_; // further members? // ... }; // 8. Überlege Dir eine Ordnung für die erstellten Klassen // und teile sie auf Header-Dateien auf. // 9. Schreibe einen Test für den Euler Solver, siehe dazu // auch die Datei test_euler.cc