My Project
0.0.16
QUCS Mapping
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
DownLoad
QUCS-src
qucs-0.0.16
qucs-core
src
components
iac.cpp
Go to the documentation of this file.
1
/*
2
* iac.cpp - AC current source class implementation
3
*
4
* Copyright (C) 2004, 2006, 2007, 2008 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: iac.cpp 1825 2011-03-11 20:42:14Z ela $
22
*
23
*/
24
25
#if HAVE_CONFIG_H
26
# include <config.h>
27
#endif
28
29
#include "
component.h
"
30
#include "
iac.h
"
31
32
iac::iac () :
circuit
(2) {
33
type
=
CIR_IAC
;
34
setISource
(
true
);
35
}
36
37
void
iac::initSP
(
void
) {
38
allocMatrixS
();
39
setS
(
NODE_1
,
NODE_1
, 1.0);
40
setS
(
NODE_1
,
NODE_2
, 0.0);
41
setS
(
NODE_2
,
NODE_1
, 0.0);
42
setS
(
NODE_2
,
NODE_2
, 1.0);
43
}
44
45
void
iac::initDC
(
void
) {
46
allocMatrixMNA
();
47
clearI
();
48
}
49
50
void
iac::initAC
(
void
) {
51
nr_double_t a =
getPropertyDouble
(
"I"
);
52
nr_double_t p =
getPropertyDouble
(
"Phase"
);
53
nr_complex_t
i
=
polar
(a,
rad
(p));
54
allocMatrixMNA
();
55
setI
(
NODE_1
, +i);
setI
(
NODE_2
, -i);
56
}
57
58
void
iac::calcTR
(nr_double_t
t
) {
59
nr_double_t f =
getPropertyDouble
(
"f"
);
60
nr_double_t p =
getPropertyDouble
(
"Phase"
);
61
nr_double_t d =
getPropertyDouble
(
"Theta"
);
62
nr_double_t a =
getPropertyDouble
(
"I"
);
63
nr_double_t
s
=
getNet
()->
getSrcFactor
();
64
nr_double_t o = 2 *
M_PI
* f;
65
nr_double_t
T
= p / f / 360;
66
nr_double_t
i
= s * a *
exp
(-(t + T) * d * f) *
sin
(o * t +
rad
(p));
67
setI
(
NODE_1
, +i);
setI
(
NODE_2
, -i);
68
}
69
70
// properties
71
PROP_REQ
[] = {
72
{
"I"
,
PROP_REAL
, { 1
e
-3,
PROP_NO_STR
},
PROP_NO_RANGE
},
PROP_NO_PROP
};
73
PROP_OPT
[] = {
74
{
"Phase"
,
PROP_REAL
, { 0,
PROP_NO_STR
},
PROP_RNGII
(-360, 360) },
75
{
"Theta"
,
PROP_REAL
, { 0,
PROP_NO_STR
},
PROP_POS_RANGE
},
76
{
"f"
,
PROP_REAL
, { 1e9,
PROP_NO_STR
},
PROP_POS_RANGE
},
77
PROP_NO_PROP
};
78
struct
define_t
iac
::cirdef =
79
{
"Iac"
, 2,
PROP_COMPONENT
,
PROP_NO_SUBSTRATE
,
PROP_LINEAR
,
PROP_DEF
};
Generated on Tue Dec 25 2012 14:28:06 for My Project by
1.8.2