@@ -37,16 +37,36 @@ struct OutputData
37
37
scalar_type v2mag;
38
38
scalar_type v3mag;
39
39
40
- OutputData operator -(const OutputData& other) const
40
+ OutputData (real_type t_in,
41
+ scalar_type gen2speed_in,
42
+ scalar_type gen3speed_in,
43
+ scalar_type v2mag_in,
44
+ scalar_type v3mag_in)
45
+ : t(t_in),
46
+ gen2speed (gen2speed_in),
47
+ gen3speed(gen3speed_in),
48
+ v2mag(v2mag_in),
49
+ v3mag(v3mag_in)
50
+ {
51
+ }
52
+
53
+ OutputData (const OutputData& data)
54
+ : t(data.t),
55
+ gen2speed(data.gen2speed),
56
+ gen3speed(data.gen3speed),
57
+ v2mag(data.v2mag),
58
+ v3mag(data.v3mag)
59
+ {
60
+ }
61
+
62
+ OutputData& operator -=(const OutputData& other)
41
63
{
42
64
assert (t == other.t );
43
- return {
44
- .t = t,
45
- .gen2speed = gen2speed - other.gen2speed ,
46
- .gen3speed = gen3speed - other.gen3speed ,
47
- .v2mag = v2mag - other.v2mag ,
48
- .v3mag = v3mag - other.v3mag ,
49
- };
65
+ gen2speed -= other.gen2speed ;
66
+ gen3speed -= other.gen3speed ;
67
+ v2mag -= other.v2mag ;
68
+ v3mag -= other.v3mag ;
69
+ return *this ;
50
70
}
51
71
52
72
double norm () const
@@ -60,6 +80,11 @@ struct OutputData
60
80
}
61
81
};
62
82
83
+ const OutputData operator -(const OutputData& lhs, const OutputData& rhs)
84
+ {
85
+ return OutputData (lhs) -= rhs;
86
+ }
87
+
63
88
std::ostream& operator <<(std::ostream& out, const OutputData& data)
64
89
{
65
90
out << data.t << " ,"
@@ -113,28 +138,36 @@ int main()
113
138
{
114
139
std::vector<double >& yval = sys.y ();
115
140
116
- output.push_back ({. t = t,
117
- . gen2speed = 1 + yval[5 ],
118
- . gen3speed = 1 + yval[26 ],
119
- . v2mag = sqrt (yval[0 ] * yval[0 ] + yval[1 ] * yval[1 ]),
120
- . v3mag = sqrt (yval[2 ] * yval[2 ] + yval[3 ] * yval[3 ])} );
141
+ output.push_back (OutputData ( t,
142
+ 1.0 + yval[5 ],
143
+ 1.0 + yval[26 ],
144
+ std:: sqrt (yval[0 ] * yval[0 ] + yval[1 ] * yval[1 ]),
145
+ std:: sqrt (yval[2 ] * yval[2 ] + yval[3 ] * yval[3 ])) );
121
146
};
122
147
123
- /* Set up simulation */
124
- Ida<scalar_type, index_type>
125
- ida (&sys);
148
+ // Set up simulation
149
+ Ida<scalar_type, index_type> ida (&sys);
126
150
ida.configureSimulation ();
127
151
128
- /* Run simulation */
152
+ // Run simulation, output each `dt` interval
129
153
scalar_type start = static_cast <scalar_type>(clock ());
130
154
ida.initializeSimulation (0.0 , false );
131
- ida.runSimulation (1.0 , std::round ((1.0 - 0.0 ) / dt), output_cb);
155
+
156
+ // Run for 1s
157
+ int nout = static_cast <int >(std::round ((1.0 - 0.0 ) / dt));
158
+ ida.runSimulation (1.0 , nout, output_cb);
159
+
160
+ // Introduce fault to ground and run for 0.1s
132
161
fault.setStatus (1 );
133
162
ida.initializeSimulation (1.0 , false );
134
- ida.runSimulation (1.1 , std::round ((1.1 - 1.0 ) / dt), output_cb);
163
+ nout = static_cast <int >(std::round ((1.1 - 1.0 ) / dt));
164
+ ida.runSimulation (1.1 , nout, output_cb);
165
+
166
+ // Clear fault and run until t = 10s.
135
167
fault.setStatus (0 );
136
168
ida.initializeSimulation (1.1 , false );
137
- ida.runSimulation (10.0 , std::round ((10.0 - 1.1 ) / dt), output_cb);
169
+ nout = static_cast <int >(std::round ((10.0 - 1.1 ) / dt));
170
+ ida.runSimulation (10.0 , nout, output_cb);
138
171
double stop = static_cast <double >(clock ());
139
172
140
173
/* Check worst-case error */
@@ -154,12 +187,11 @@ int main()
154
187
155
188
for (index_type i = 0 ; i < output.size (); ++i)
156
189
{
157
- OutputData ref = {
158
- .t = reference_solution[i + 1 ][0 ],
159
- .gen2speed = reference_solution[i + 1 ][1 ],
160
- .gen3speed = reference_solution[i + 1 ][2 ],
161
- .v2mag = reference_solution[i + 1 ][4 ],
162
- .v3mag = reference_solution[i + 1 ][5 ]};
190
+ OutputData ref (reference_solution[i + 1 ][0 ],
191
+ reference_solution[i + 1 ][1 ],
192
+ reference_solution[i + 1 ][2 ],
193
+ reference_solution[i + 1 ][4 ],
194
+ reference_solution[i + 1 ][5 ]);
163
195
OutputData out_data = output[i];
164
196
165
197
out << out_data << ' \n ' ;
0 commit comments