Branch data Line data Source code
1 : : /*
2 : : * analysis.h - analysis class definitions
3 : : *
4 : : * Copyright (C) 2003, 2004, 2005, 2006, 2007 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: analysis.h 1869 2013-03-06 12:50:21Z crobarcro $
22 : : *
23 : : */
24 : :
25 : : /*! \file analysis.h
26 : : * \brief The analysis class header file.
27 : : *
28 : : * Contains the analysis class definition.
29 : : */
30 : :
31 : : #ifndef __ANALYSIS_H__
32 : : #define __ANALYSIS_H__
33 : :
34 : : #include "object.h"
35 : : #include "ptrlist.h"
36 : :
37 : : #define SAVE_OPS 1 // save operating points
38 : : #define SAVE_ALL 2 // also save subcircuit nodes and operating points
39 : : #define SAVE_CVS 4 // save characteristic values
40 : :
41 : : #define ACREATOR(val) \
42 : : val (); \
43 : : static analysis * create (void) { return new val (); } \
44 : : static struct define_t anadef; \
45 : : static struct define_t * definition (void) { return &anadef; }
46 : :
47 : : namespace qucs {
48 : :
49 : : class dataset;
50 : : class net;
51 : : class environment;
52 : : class sweep;
53 : : class vector;
54 : :
55 : : /*! \enum analysis_type
56 : : * \brief enumerates the analysis types available.
57 : : *
58 : : * Enumerates the analysis types available.
59 : : *
60 : : */
61 : : enum analysis_type
62 : : {
63 : : ANALYSIS_UNKNOWN = -1,
64 : : ANALYSIS_SWEEP,
65 : : ANALYSIS_DC,
66 : : ANALYSIS_AC,
67 : : ANALYSIS_HBALANCE,
68 : : ANALYSIS_TRANSIENT,
69 : : ANALYSIS_SPARAMETER,
70 : : ANALYSIS_E_TRANSIENT
71 : : };
72 : :
73 : : /*! \class analysis
74 : : * \brief class for performing circuit analyses.
75 : : *
76 : : * This class is used for performing all the anlyses specified in
77 : : * a circuit description. The actual solver classes for specific
78 : : * analysis types inheirit from this class and override it's
79 : : * methods.
80 : : *
81 : : */
82 : : class analysis : public object
83 : : {
84 : : public:
85 : :
86 : : /*! \fn analysis
87 : : * \brief Constructor (Unnamed)
88 : : *
89 : : * Constructor. Creates an unnamed instance of the analysis class.
90 : : */
91 : : analysis ();
92 : :
93 : : /*! \fn analysis
94 : : * \brief Constructor (Named)
95 : : *
96 : : * Constructor. Creates a named instance of the analysis class.
97 : : */
98 : : analysis (char *);
99 : :
100 : : /*! \fn analysis
101 : : * \brief Copy Constructor
102 : : *
103 : : * Constructor. Creates an instance of the analysis class
104 : : * from an existing analysis object.
105 : : */
106 : : analysis (analysis &);
107 : :
108 : : /*! \fn ~analysis
109 : : * \brief Destructor
110 : : *
111 : : * Destructor. Destroys an analysis object.
112 : : */
113 : : ~analysis ();
114 : :
115 : : /*! \fn solve
116 : : * \brief placehoder for solution function
117 : : *
118 : : * Virtual solution function intended to be overridden by the
119 : : * inheiriting class's solution function.
120 : : */
121 : 0 : virtual int solve (void)
122 : : {
123 : 0 : return 0;
124 : : }
125 : :
126 : : /*! \fn initialize
127 : : * \brief placehoder for initialization function
128 : : *
129 : : * Virtual initialize function intended to be overridden by the
130 : : * inheiriting class's initialization function.
131 : : */
132 : 122 : virtual int initialize (void)
133 : : {
134 : 122 : return 0;
135 : : }
136 : :
137 : : /*! \fn cleanup
138 : : * \brief placehoder for cleanup function
139 : : *
140 : : * Virtual cleanup function intended to be overridden by the
141 : : * inheiriting class's cleanup function.
142 : : */
143 : 122 : virtual int cleanup (void)
144 : : {
145 : 122 : return 0;
146 : : }
147 : :
148 : : /*! \fn isExternal
149 : : * \brief informs whether this is an external sim
150 : : *
151 : : * External simulations will be ignored by qucsator. This
152 : : * function is used to determine whether the analysis is
153 : : * external or not.
154 : : */
155 : 547 : virtual bool isExternal (void)
156 : : {
157 : 547 : return false;
158 : : }
159 : :
160 : : dataset * getData (void)
161 : : {
162 : : return data;
163 : : }
164 : :
165 : 181 : void setData (dataset * d)
166 : : {
167 : 181 : data = d;
168 : 181 : }
169 : :
170 : 667760 : net * getNet (void)
171 : : {
172 : 667760 : return subnet;
173 : : }
174 : :
175 : 181 : void setNet (net * netlist)
176 : : {
177 : 181 : subnet = netlist;
178 : 181 : }
179 : :
180 : 122 : environment * getEnv (void)
181 : : {
182 : 122 : return env;
183 : : }
184 : :
185 : 181 : void setEnv (environment * e)
186 : : {
187 : 181 : env = e;
188 : 181 : }
189 : :
190 : 23278 : ptrlist<analysis> * getAnalysis (void)
191 : : {
192 : 23278 : return actions;
193 : : }
194 : :
195 : 103 : void setAnalysis (ptrlist<analysis> * a)
196 : : {
197 : 103 : actions = a;
198 : 103 : }
199 : :
200 : : /*! \fn addAnalysis
201 : : * \param analysis pointer to existing analysis object
202 : : *
203 : : * Adds the given analysis to the actions being
204 : : * associated with the current analysis object.
205 : : */
206 : : void addAnalysis (analysis *);
207 : :
208 : : /*! \fn delAnalysis
209 : : * \param analysis pointer to existing analysis object
210 : : *
211 : : * Deletes the given analysis from the actions being associated
212 : : * with the current analysis object.
213 : : */
214 : : void delAnalysis (analysis *);
215 : :
216 : 23932 : int getType (void)
217 : : {
218 : 23932 : return type;
219 : : }
220 : :
221 : : void setType (int t)
222 : : {
223 : : type = t;
224 : : }
225 : :
226 : : /*! \fn createSweep
227 : : * \brief create a named sweep object
228 : : * \param n pointer to a character array contining the name
229 : : * of the sweep to be created
230 : : * \param sweep pointer to the created sweep object
231 : : *
232 : : * Creates a named sweep object depending on the analysis's properties.
233 : : * Supported sweep types are: linear, logarithmic, lists and constants.
234 : : *
235 : : */
236 : : sweep * createSweep (const char *);
237 : :
238 : : /*! \fn saveVariable
239 : : * \brief Save variable into analysis dataset.
240 : : * \param n Name of the variable
241 : : * \param z The variable to be added to the dataset
242 : : * \param f
243 : : *
244 : : * Saves the given variable into the dataset associated with the
245 : : * analysis. Creates the dataset vector if necessary.
246 : : */
247 : : void saveVariable (const char *, nr_complex_t, qucs::vector *);
248 : :
249 : : /*! \fn getProgress
250 : : * \brief get
251 : : * \param progress
252 : : *
253 : : */
254 : : bool getProgress (void)
255 : : {
256 : : return progress;
257 : : }
258 : :
259 : : /*! \fn setProgress
260 : : * \brief Sets the progress
261 : : * \param p new value of the progress
262 : : *
263 : : * Sets the progress.
264 : : */
265 : 59 : void setProgress (bool p)
266 : : {
267 : 59 : progress = p;
268 : 59 : }
269 : :
270 : : protected:
271 : : int runs;
272 : : int type;
273 : : net * subnet;
274 : : dataset * data;
275 : : environment * env;
276 : : ptrlist<analysis> * actions;
277 : : bool progress;
278 : : };
279 : :
280 : : } // namespace qucs
281 : :
282 : : #endif /* __ANALYSIS_H__ */
|