next up previous contents
Next: SIMLIB-3D rozšíření Up: Kombinovaná simulace Previous: Příklad:

Příklad kombinovaného modelu

Jako příklad kombinovaného modelu použijeme model skákajícího míčku. Spojité chování míčku odpovídá volnému pádu, pro detekci dopadu míčku používáme stavovou podmínku. Stavová událost (dopad míčku) vyvolá skokovou změnu rychlosti míčku.

//  model  MICEK.CPP -  skákající  míček

#include "simlib.h"

const double g = 9.81;       // gravitační zrychlení

class Micek : BoolCondition {
  Graph G;
  Integrator v,y;
  int Test() { return y.Value()<0; }
  void Action() {
      Print(" Odraz míčku v čase t=%g \n",Time);
      G();
      v = -0.8 * v.Value();
      y = 0;  // nutné pro detekci následujícího dopadu
    }
  }
public:
  Micek(double position) :
     G("Výška míčku",y,0.05),
     y(v,position), v(-g)  {
    Mode(DetectUP);
  }
};

Micek  micek(1);             // vytvoření objektu micek

int main() {                 // popis experimentu
  Print(" Model skákajícího míčku v C++ \n");
  OpenOutputFile("micek.out");
  Init(0,5);                 // inicializace experimentu
  SetStep(1e-10,0.5);        // krok integrace
  SetAccuracy(1e-5,0.001);   // max. povolená chyba integrace
  Run();                     // simulace
  Print(" Konec simulace \n");
  return 0;
}

Chování míčku je popsáno jako volný pád. Integrátor v integruje tíhové zrychlení g a jeho hodnota je rovna rychlosti míčku. Integrátor y integruje rychlost a jeho hodnota představuje výšku míčku nad zemí.

Pro detekci okamžiku dopadu míčku na zem (y=0) je použito stavové podmínky y.Value()<0 v metodě Test. Tato metoda je volána systémem řízení simulace při každém kroku numerické integrace. V případě změny hodnoty podmínky se krok zkracuje tak, abychom okamžik dopadu míčku určili s maximální přesností (přesnost určení doby dopadu je dána minimální délkou kroku, tj. hodnotou proměnné MinStep). V okamžiku dopadu míčku se provede akce, popsaná v metodě Action, tj. obrácení a zmenšení vektoru rychlosti. Tímto způsobem modelujeme ztrátu energie při dopadu míčku.

Řízení experimentu popisuje funkce main. Po volání Init následuje nastavení povoleného rozsahu kroku integrace (SetStep) a určení požadované přesnosti integrace (SetAccuracy). Běh simulace se odstartuje voláním funkce Run. Výstup se řeší podobně, jako u spojité simulace, je zde však nutné zajistit výstup též v okamžicích dopadu míčku na zem.



Petr Peringer
Mon Dec 8 13:24:19 CET 1997