SIMLIB/C++ 3.09
Loading...
Searching...
No Matches
examples/rc.cc

Electrical RC circuit.

Electrical RC circuit

////////////////////////////////////////////////////////////////////////////
// Model rc.cc -- SIMLIB/C++ continuous model example
//
// 1997
// Manual conversion of circuit to differential equation
//
#include "simlib.h"
#if 0
Constant Uin(5); // try constant input voltage
#else
const double PI = 3.141592653589793;
Expression Uin( 0.5 * Sin(T*2*PI)+5 );
#endif
struct SystemRC {
// RC circuit:
// _____
// o----|_____|---o----o
// R |
// Uin === C Uout
// |
// o--------------o----o
//
// Uin - input voltage
// Uout - output voltage = Uc
//
// Parameters:
Parameter R; // serial resistance
Parameter C; // capacity
Expression Current;
Integrator Uout; // capacitor voltage
SystemRC(Input Uin, double R0, double C0, double U0=0):
R(R0), C(C0), Current( (Uin-Uout)/R ),
Uout( Current/C, U0 ) {}
};
////////////////////////////////////////////////////////////////////////////
SystemRC rc1(Uin, 1000 /*Ohm*/, 0.001 /*Farad*/); // instance of RC system
////////////////////////////////////////////////////////////////////////////
void Sample1() { // output from model (form suitable for GNUplot)
Print("%6.3f %g %g %g\n", T.Value(),
Uin.Value(), rc1.Uout.Value(), rc1.Current.Value() );
}
Sampler s(Sample1, 0.01);
int main() { // experiment control ...
SetOutput("rc.dat");
Print("# RC circuit simulation output\n");
Init(0,8); // initialization
SetStep(1e-6, 0.01);
Run(); // simulation run
}
//
int main()
Definition: _test_.cc:44
virtual double Value()=0
get block output value this method should be defined in classes derived from aContiBlock
aContiBlock & T
simulation time block reference
Definition: continuous.cc:276
void SetStep(double _dtmin, double _dtmax)
Set integration step interval.
Definition: intg.cc:92
void SetOutput(const char *name)
redirects Output(), Print() to file
Definition: print.cc:50
void Run()
run simulation experiment
Definition: run.cc:228
int Print(const char *fmt,...)
for Output methods, can be redirected
Definition: print.cc:92
void Init(double t0, double t1=SIMLIB_MAXTIME)
Initialize simulator and model time.
Definition: simlib.h:181
Main SIMLIB/C++ interface.