Branch data Line data Source code
1 : : /*
2 : : * integrator.cpp - integrator class implementation
3 : : *
4 : : * Copyright (C) 2004, 2005, 2006 Stefan Jahn <stefan@lkcc.org>
5 : : *
6 : : * This is free software; you can redistribute it and/or modify
7 : : * it under the terms of the GNU General Public License as published by
8 : : * the Free Software Foundation; either version 2, or (at your option)
9 : : * any later version.
10 : : *
11 : : * This software is distributed in the hope that it will be useful,
12 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : : * GNU General Public License for more details.
15 : : *
16 : : * You should have received a copy of the GNU General Public License
17 : : * along with this package; see the file COPYING. If not, write to
18 : : * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
19 : : * Boston, MA 02110-1301, USA.
20 : : *
21 : : * $Id$
22 : : *
23 : : */
24 : :
25 : : #if HAVE_CONFIG_H
26 : : # include <config.h>
27 : : #endif
28 : :
29 : : #include <stdio.h>
30 : : #include <stdlib.h>
31 : : #include <string.h>
32 : :
33 : : #include "integrator.h"
34 : :
35 : : // Some definitions for the save-state variables.
36 : : #define STATE_SHIFT 3
37 : : #define STATE_NUM 8
38 : : #define STATE_MASK 7
39 : :
40 : : namespace qucs {
41 : :
42 : : // Constructor creates an unnamed instance of the integrator class.
43 : 125988 : integrator::integrator () : states<nr_double_t> () {
44 : 125988 : coefficients = NULL;
45 : 125988 : order = 0;
46 : 125988 : state = 0;
47 : 125988 : integrate_func = NULL;
48 : 125988 : conductor_func = NULL;
49 : 125988 : }
50 : :
51 : : /* The copy constructor creates a new instance based on the given
52 : : integrator object. */
53 : 0 : integrator::integrator (const integrator & c) : states<nr_double_t> (c) {
54 : 0 : coefficients = c.coefficients;
55 : 0 : order = c.order;
56 : 0 : state = c.state;
57 : 0 : integrate_func = c.integrate_func;
58 : 0 : conductor_func = c.conductor_func;
59 : 0 : }
60 : :
61 : : // Destructor deletes a integrator object.
62 : 125988 : integrator::~integrator () {
63 : 125988 : }
64 : :
65 : : /* The function evaluates the state of the integration-using component
66 : : and runs the appropriate integrator function. */
67 : 1462316 : void integrator::integrate (int qstate, nr_double_t cap, nr_double_t& geq,
68 : : nr_double_t& ceq) {
69 : 1462316 : int cstate = qstate + 1;
70 [ + + ]: 1462316 : if (state & MODE_INIT) fillState (qstate, getState (qstate));
71 : 1462316 : (*integrate_func) (this, qstate, cap, geq, ceq);
72 [ + + ]: 1462316 : if (state & MODE_INIT) fillState (cstate, getState (cstate));
73 : 1462316 : }
74 : :
75 : : /* This function runs the appropriate conductor function. */
76 : 72850 : void integrator::conductor (nr_double_t cap, nr_double_t& geq) {
77 : 72850 : (*conductor_func) (this, cap, geq);
78 : 72850 : }
79 : :
80 : : } // namespace qucs
|