Project

General

Profile

Download (26.9 KB) Statistics
| Branch: | Tag: | Revision:
1
#include <stdlib.h>
2
#include <assert.h>
3
#include "ALT_2.lustrec.h"
4

    
5
/* C code generated by main_lustre_compiler.native
6
   SVN version number 355
7
   Code is C99 compliant */
8
   
9
/* Imported nodes declarations */
10

    
11
/* Global constants (definitions) */
12

    
13
void top_reset (struct top_mem *self) {
14
  AltitudeControl_reset(&self->ni_0);
15
  return;
16
}
17

    
18
void top_step (_Bool AltEng, double AltCmd, double Altitude, double gskts,
19
               double hdot, double hdotChgRate, 
20
               _Bool (*obs),
21
               struct top_mem *self) {
22
  /*@ensures Ctrans_top(AltEng,
23
                        AltCmd,
24
                        Altitude,
25
                        gskts,
26
                        hdot,
27
                        hdotChgRate,
28
                        *obs,
29
                        \at(*self, Pre),
30
                        (*self));
31
  assigns *obs, *self;
32
  */
33
  {
34
  
35
  double altgammaCmd;
36
  double tempAlt;
37
  
38
  
39
  /* Asserting trans predicate: locals are [altgammaCmd: real] */
40
  /*@ensures \exists real altgammaCmd;
41
  trans_top(AltEng,
42
            AltCmd,
43
            Altitude,
44
            gskts,
45
            hdot,
46
            hdotChgRate,
47
            *obs,
48
            \at(*self, Pre),
49
            (*self),
50
            altgammaCmd,
51
            tempAlt);
52
  assigns *obs, *self, altgammaCmd, tempAlt;
53
  */
54
  {
55
  
56
  /*@ensures trans_top(AltEng,
57
                       AltCmd,
58
                       Altitude,
59
                       gskts,
60
                       hdot,
61
                       hdotChgRate,
62
                       *obs,
63
                       \at(*self, Pre),
64
                       (*self),
65
                       altgammaCmd,
66
                       tempAlt);
67
  assigns *obs, *self, altgammaCmd, tempAlt;
68
  */
69
  {
70
  /*@     ensures (tempAlt == (AltEng?(1.):(0.)));
71
       ensures Ctrans_AltitudeControl((double) tempAlt,
72
                                      (double) AltCmd,
73
                                      (double) Altitude,
74
                                      (double) gskts,
75
                                      (double) hdot,
76
                                      (double) hdotChgRate,
77
                                      altgammaCmd,
78
                                      \at(*self, Pre).ni_0,
79
                                      (*self).ni_0);
80
       ensures ((!*obs) == (!(altgammaCmd == 0.)));
81
  assigns *obs, *self, altgammaCmd, tempAlt;
82
  */ {
83
  
84
  tempAlt = (AltEng?(1.):(0.));
85
  AltitudeControl_step (tempAlt, AltCmd, Altitude, gskts, hdot, hdotChgRate, &altgammaCmd, &self->ni_0);
86
  *obs = (altgammaCmd == 0.);
87
  }}}}return;
88
}
89

    
90
void AltitudeControl_reset (struct AltitudeControl_mem *self) {
91
  VariableRateLimit_reset(&self->ni_1);
92
  return;
93
}
94

    
95
void AltitudeControl_step (double AntEng_Out1_19, double AltCmd_Out1_29,
96
                           double Alt_Out1_39, double GsKts_Out1_49,
97
                           double hdot_Out1_59, double hdotChgRate_Out1_69, 
98
                           double (*altgammacmd_In1_661),
99
                           struct AltitudeControl_mem *self) {
100
  /*@ensures Ctrans_AltitudeControl(AntEng_Out1_19,
101
                                    AltCmd_Out1_29,
102
                                    Alt_Out1_39,
103
                                    GsKts_Out1_49,
104
                                    hdot_Out1_59,
105
                                    hdotChgRate_Out1_69,
106
                                    *altgammacmd_In1_661,
107
                                    \at(*self, Pre),
108
                                    (*self));
109
  assigns *altgammacmd_In1_661, *self;
110
  */
111
  {
112
  
113
  double Abs_Out1_144;
114
  double Kh_Out1_193;
115
  _Bool Logical_Operator_In1_197;
116
  _Bool Logical_Operator_Out1_198;
117
  double Saturation1_Out1_213;
118
  double Sum3_Out1_296;
119
  double Sum_Out1_286;
120
  _Bool Switch1_In2_312;
121
  double Switch1_Out1_314;
122
  _Bool Switch_In2_303;
123
  double Switch_Out1_305;
124
  double Variable_Limit_Saturation_0_Out1_509;
125
  double Variable__Rate_Limit_Out1_324;
126
  _Bool __AltitudeControl_1;
127
  _Bool __AltitudeControl_2;
128
  double k_Out1_585;
129
  double kts2fps_Out1_594;
130
  double r2d_Out1_603;
131
  
132
  
133
  /* Asserting trans predicate: locals are [Saturation1_Out1_213: real, Variable_Limit_Saturation_0_Out1_509: real, Variable__Rate_Limit_Out1_324: real] */
134
  /*@ensures \exists real Saturation1_Out1_213;
135
  \exists real Variable_Limit_Saturation_0_Out1_509;
136
  \exists real Variable__Rate_Limit_Out1_324;
137
  trans_AltitudeControl(AntEng_Out1_19,
138
                        AltCmd_Out1_29,
139
                        Alt_Out1_39,
140
                        GsKts_Out1_49,
141
                        hdot_Out1_59,
142
                        hdotChgRate_Out1_69,
143
                        *altgammacmd_In1_661,
144
                        \at(*self, Pre),
145
                        (*self),
146
                        Abs_Out1_144,
147
                        Kh_Out1_193,
148
                        Logical_Operator_In1_197,
149
                        Logical_Operator_Out1_198,
150
                        Saturation1_Out1_213,
151
                        Sum3_Out1_296,
152
                        Sum_Out1_286,
153
                        Switch1_In2_312,
154
                        Switch1_Out1_314,
155
                        Switch_In2_303,
156
                        Switch_Out1_305,
157
                        Variable_Limit_Saturation_0_Out1_509,
158
                        Variable__Rate_Limit_Out1_324,
159
                        __AltitudeControl_1,
160
                        __AltitudeControl_2,
161
                        k_Out1_585,
162
                        kts2fps_Out1_594,
163
                        r2d_Out1_603);
164
  assigns *altgammacmd_In1_661, *self, Abs_Out1_144, Kh_Out1_193,
165
          Logical_Operator_In1_197, Logical_Operator_Out1_198,
166
          Saturation1_Out1_213, Sum3_Out1_296, Sum_Out1_286, Switch1_In2_312,
167
          Switch1_Out1_314, Switch_In2_303, Switch_Out1_305,
168
          Variable_Limit_Saturation_0_Out1_509,
169
          Variable__Rate_Limit_Out1_324, __AltitudeControl_1,
170
          __AltitudeControl_2, k_Out1_585, kts2fps_Out1_594, r2d_Out1_603;
171
  */
172
  {
173
  
174
  /*@ensures \exists real Variable_Limit_Saturation_0_Out1_509;
175
  \exists real Variable__Rate_Limit_Out1_324;
176
  trans_AltitudeControl(AntEng_Out1_19,
177
                        AltCmd_Out1_29,
178
                        Alt_Out1_39,
179
                        GsKts_Out1_49,
180
                        hdot_Out1_59,
181
                        hdotChgRate_Out1_69,
182
                        *altgammacmd_In1_661,
183
                        \at(*self, Pre),
184
                        (*self),
185
                        Abs_Out1_144,
186
                        Kh_Out1_193,
187
                        Logical_Operator_In1_197,
188
                        Logical_Operator_Out1_198,
189
                        Saturation1_Out1_213,
190
                        Sum3_Out1_296,
191
                        Sum_Out1_286,
192
                        Switch1_In2_312,
193
                        Switch1_Out1_314,
194
                        Switch_In2_303,
195
                        Switch_Out1_305,
196
                        Variable_Limit_Saturation_0_Out1_509,
197
                        Variable__Rate_Limit_Out1_324,
198
                        __AltitudeControl_1,
199
                        __AltitudeControl_2,
200
                        k_Out1_585,
201
                        kts2fps_Out1_594,
202
                        r2d_Out1_603);
203
  assigns *altgammacmd_In1_661, *self, Abs_Out1_144, Kh_Out1_193,
204
          Logical_Operator_In1_197, Logical_Operator_Out1_198,
205
          Saturation1_Out1_213, Sum3_Out1_296, Sum_Out1_286, Switch1_In2_312,
206
          Switch1_Out1_314, Switch_In2_303, Switch_Out1_305,
207
          Variable_Limit_Saturation_0_Out1_509,
208
          Variable__Rate_Limit_Out1_324, __AltitudeControl_1,
209
          __AltitudeControl_2, k_Out1_585, kts2fps_Out1_594, r2d_Out1_603;
210
  */
211
  {
212
  
213
  /*@ensures \exists real Variable__Rate_Limit_Out1_324;
214
  trans_AltitudeControl(AntEng_Out1_19,
215
                        AltCmd_Out1_29,
216
                        Alt_Out1_39,
217
                        GsKts_Out1_49,
218
                        hdot_Out1_59,
219
                        hdotChgRate_Out1_69,
220
                        *altgammacmd_In1_661,
221
                        \at(*self, Pre),
222
                        (*self),
223
                        Abs_Out1_144,
224
                        Kh_Out1_193,
225
                        Logical_Operator_In1_197,
226
                        Logical_Operator_Out1_198,
227
                        Saturation1_Out1_213,
228
                        Sum3_Out1_296,
229
                        Sum_Out1_286,
230
                        Switch1_In2_312,
231
                        Switch1_Out1_314,
232
                        Switch_In2_303,
233
                        Switch_Out1_305,
234
                        Variable_Limit_Saturation_0_Out1_509,
235
                        Variable__Rate_Limit_Out1_324,
236
                        __AltitudeControl_1,
237
                        __AltitudeControl_2,
238
                        k_Out1_585,
239
                        kts2fps_Out1_594,
240
                        r2d_Out1_603);
241
  assigns *altgammacmd_In1_661, *self, Abs_Out1_144, Kh_Out1_193,
242
          Logical_Operator_In1_197, Logical_Operator_Out1_198,
243
          Saturation1_Out1_213, Sum3_Out1_296, Sum_Out1_286, Switch1_In2_312,
244
          Switch1_Out1_314, Switch_In2_303, Switch_Out1_305,
245
          Variable_Limit_Saturation_0_Out1_509,
246
          Variable__Rate_Limit_Out1_324, __AltitudeControl_1,
247
          __AltitudeControl_2, k_Out1_585, kts2fps_Out1_594, r2d_Out1_603;
248
  */
249
  {
250
  
251
  /*@ensures trans_AltitudeControl(AntEng_Out1_19,
252
                                   AltCmd_Out1_29,
253
                                   Alt_Out1_39,
254
                                   GsKts_Out1_49,
255
                                   hdot_Out1_59,
256
                                   hdotChgRate_Out1_69,
257
                                   *altgammacmd_In1_661,
258
                                   \at(*self, Pre),
259
                                   (*self),
260
                                   Abs_Out1_144,
261
                                   Kh_Out1_193,
262
                                   Logical_Operator_In1_197,
263
                                   Logical_Operator_Out1_198,
264
                                   Saturation1_Out1_213,
265
                                   Sum3_Out1_296,
266
                                   Sum_Out1_286,
267
                                   Switch1_In2_312,
268
                                   Switch1_Out1_314,
269
                                   Switch_In2_303,
270
                                   Switch_Out1_305,
271
                                   Variable_Limit_Saturation_0_Out1_509,
272
                                   Variable__Rate_Limit_Out1_324,
273
                                   __AltitudeControl_1,
274
                                   __AltitudeControl_2,
275
                                   k_Out1_585,
276
                                   kts2fps_Out1_594,
277
                                   r2d_Out1_603);
278
  assigns *altgammacmd_In1_661, *self, Abs_Out1_144, Kh_Out1_193,
279
          Logical_Operator_In1_197, Logical_Operator_Out1_198,
280
          Saturation1_Out1_213, Sum3_Out1_296, Sum_Out1_286, Switch1_In2_312,
281
          Switch1_Out1_314, Switch_In2_303, Switch_Out1_305,
282
          Variable_Limit_Saturation_0_Out1_509,
283
          Variable__Rate_Limit_Out1_324, __AltitudeControl_1,
284
          __AltitudeControl_2, k_Out1_585, kts2fps_Out1_594, r2d_Out1_603;
285
  */
286
  {
287
  /*@     ensures (__AltitudeControl_1 == (hdot_Out1_59 < 0.));
288
       ensures (Abs_Out1_144 == (__AltitudeControl_1?((- hdot_Out1_59)):(hdot_Out1_59)));
289
       ensures (Sum3_Out1_296 == (Abs_Out1_144 + 10.));
290
       ensures (k_Out1_585 == (- Sum3_Out1_296));
291
       ensures (__AltitudeControl_2 == (AntEng_Out1_19 == 0.));
292
       ensures ((!Logical_Operator_In1_197) == (!(__AltitudeControl_2?(0):(1))));
293
       ensures ((!Logical_Operator_Out1_198) == (!(!Logical_Operator_In1_197)));
294
       ensures ((!Switch_In2_303) == (!(__AltitudeControl_2?(0):(1))));
295
       ensures (Sum_Out1_286 == (AltCmd_Out1_29 + (- Alt_Out1_39)));
296
       ensures (Kh_Out1_193 == (0.08 * Sum_Out1_286));
297
       ensures (Switch_Out1_305 == (Switch_In2_303?(Kh_Out1_193):(0.)));
298
       ensures Ctrans_VariableLimitSaturation((double) Sum3_Out1_296,
299
                                              (double) Switch_Out1_305,
300
                                              (double) k_Out1_585,
301
                                              Variable_Limit_Saturation_0_Out1_509);
302
       ensures Ctrans_VariableRateLimit((double) hdotChgRate_Out1_69,
303
                                        (double) Variable_Limit_Saturation_0_Out1_509,
304
                                        (_Bool) ((Logical_Operator_Out1_198)?1:0),
305
                                        (double) hdot_Out1_59,
306
                                        Variable__Rate_Limit_Out1_324,
307
                                        \at(*self, Pre).ni_1,
308
                                        (*self).ni_1);
309
       ensures (r2d_Out1_603 == (57.2958 * Variable__Rate_Limit_Out1_324));
310
       ensures (kts2fps_Out1_594 == (1.6878 * GsKts_Out1_49));
311
       ensures ((!Switch1_In2_312) == (!(__AltitudeControl_2?(0):(1))));
312
       ensures (Switch1_Out1_314 == (Switch1_In2_312?(r2d_Out1_603):(0.)));
313
       ensures (*altgammacmd_In1_661 == Switch1_Out1_314);
314
       ensures Ctrans_Saturation((double) kts2fps_Out1_594,
315
                                 Saturation1_Out1_213);
316
  assigns *altgammacmd_In1_661, *self, Abs_Out1_144, Kh_Out1_193,
317
          Logical_Operator_In1_197, Logical_Operator_Out1_198,
318
          Saturation1_Out1_213, Sum3_Out1_296, Sum_Out1_286, Switch1_In2_312,
319
          Switch1_Out1_314, Switch_In2_303, Switch_Out1_305,
320
          Variable_Limit_Saturation_0_Out1_509,
321
          Variable__Rate_Limit_Out1_324, __AltitudeControl_1,
322
          __AltitudeControl_2, k_Out1_585, kts2fps_Out1_594, r2d_Out1_603;
323
  */ {
324
  
325
  __AltitudeControl_1 = (hdot_Out1_59 < 0.);
326
  Abs_Out1_144 = (__AltitudeControl_1?((- hdot_Out1_59)):(hdot_Out1_59));
327
  Sum3_Out1_296 = (Abs_Out1_144 + 10.);
328
  k_Out1_585 = (- Sum3_Out1_296);
329
  __AltitudeControl_2 = (AntEng_Out1_19 == 0.);
330
  Logical_Operator_In1_197 = (__AltitudeControl_2?(0):(1));
331
  Logical_Operator_Out1_198 = (!Logical_Operator_In1_197);
332
  Switch_In2_303 = (__AltitudeControl_2?(0):(1));
333
  Sum_Out1_286 = (AltCmd_Out1_29 + (- Alt_Out1_39));
334
  Kh_Out1_193 = (0.08 * Sum_Out1_286);
335
  Switch_Out1_305 = (Switch_In2_303?(Kh_Out1_193):(0.));
336
/*@
337
       ensures Ctrans_VariableLimitSaturation((double) Sum3_Out1_296,
338
                                              (double) Switch_Out1_305,
339
                                              (double) k_Out1_585,
340
                                              Variable_Limit_Saturation_0_Out1_509);
341
  assigns Variable_Limit_Saturation_0_Out1_509;
342
*/ {
343
  VariableLimitSaturation_step (Sum3_Out1_296, Switch_Out1_305, k_Out1_585, &Variable_Limit_Saturation_0_Out1_509);
344
}
345
/*@
346
       ensures Ctrans_VariableRateLimit((double) hdotChgRate_Out1_69,
347
                                        (double) Variable_Limit_Saturation_0_Out1_509,
348
                                        (_Bool) ((Logical_Operator_Out1_198)?1:0),
349
                                        (double) hdot_Out1_59,
350
                                        Variable__Rate_Limit_Out1_324,
351
                                        \at(*self, Pre).ni_1,
352
                                        (*self).ni_1);
353
  assigns Variable__Rate_Limit_Out1_324, self->ni_1;
354
*/ {
355
  VariableRateLimit_step (hdotChgRate_Out1_69, Variable_Limit_Saturation_0_Out1_509, Logical_Operator_Out1_198, hdot_Out1_59, &Variable__Rate_Limit_Out1_324, &self->ni_1);
356
}
357
  r2d_Out1_603 = (57.2958 * Variable__Rate_Limit_Out1_324);
358
  kts2fps_Out1_594 = (1.6878 * GsKts_Out1_49);
359
  Switch1_In2_312 = (__AltitudeControl_2?(0):(1));
360
  Switch1_Out1_314 = (Switch1_In2_312?(r2d_Out1_603):(0.));
361
  *altgammacmd_In1_661 = Switch1_Out1_314;
362
  Saturation_step (kts2fps_Out1_594, &Saturation1_Out1_213);
363
  }}}}}}return;
364
}
365

    
366
void VariableRateLimit_reset (struct VariableRateLimit_mem *self) {
367
  _arrow_reset(&self->ni_3);
368
  integrator_reset_reset(&self->ni_2);
369
  return;
370
}
371

    
372
void VariableRateLimit_step (double ratelim_Out1_334, double input_Out1_344,
373
                             _Bool ICtrig_Out1_354, double IC_Out1_364, 
374
                             double (*output_In1_489),
375
                             struct VariableRateLimit_mem *self) {
376
  /*@ensures Ctrans_VariableRateLimit(ratelim_Out1_334,
377
                                      input_Out1_344,
378
                                      ICtrig_Out1_354,
379
                                      IC_Out1_364,
380
                                      *output_In1_489,
381
                                      \at(*self, Pre),
382
                                      (*self));
383
  assigns *output_In1_489, *self;
384
  */
385
  {
386
  
387
  double Gain1_Out1_382;
388
  double Gain_Out1_373;
389
  double Integrator1_Out1_391;
390
  double Sum2_Out1_401;
391
  double Variable_Limit_Saturation_Out1_410;
392
  _Bool __VariableRateLimit_1;
393
  double __VariableRateLimit_2;
394
  
395
  
396
  /* Asserting trans predicate: locals are [Variable_Limit_Saturation_Out1_410: real, __VariableRateLimit_2: real] */
397
  /*@ensures \exists real Variable_Limit_Saturation_Out1_410;
398
  \exists real __VariableRateLimit_2;
399
  trans_VariableRateLimit(ratelim_Out1_334,
400
                          input_Out1_344,
401
                          ICtrig_Out1_354,
402
                          IC_Out1_364,
403
                          *output_In1_489,
404
                          \at(*self, Pre),
405
                          (*self),
406
                          Gain1_Out1_382,
407
                          Gain_Out1_373,
408
                          Integrator1_Out1_391,
409
                          Sum2_Out1_401,
410
                          Variable_Limit_Saturation_Out1_410,
411
                          __VariableRateLimit_1,
412
                          __VariableRateLimit_2);
413
  assigns *output_In1_489, *self, Gain1_Out1_382, Gain_Out1_373,
414
          Integrator1_Out1_391, Sum2_Out1_401,
415
          Variable_Limit_Saturation_Out1_410, __VariableRateLimit_1,
416
          __VariableRateLimit_2;
417
  */
418
  {
419
  
420
  /*@ensures \exists real __VariableRateLimit_2;
421
  trans_VariableRateLimit(ratelim_Out1_334,
422
                          input_Out1_344,
423
                          ICtrig_Out1_354,
424
                          IC_Out1_364,
425
                          *output_In1_489,
426
                          \at(*self, Pre),
427
                          (*self),
428
                          Gain1_Out1_382,
429
                          Gain_Out1_373,
430
                          Integrator1_Out1_391,
431
                          Sum2_Out1_401,
432
                          Variable_Limit_Saturation_Out1_410,
433
                          __VariableRateLimit_1,
434
                          __VariableRateLimit_2);
435
  assigns *output_In1_489, *self, Gain1_Out1_382, Gain_Out1_373,
436
          Integrator1_Out1_391, Sum2_Out1_401,
437
          Variable_Limit_Saturation_Out1_410, __VariableRateLimit_1,
438
          __VariableRateLimit_2;
439
  */
440
  {
441
  
442
  /*@ensures trans_VariableRateLimit(ratelim_Out1_334,
443
                                     input_Out1_344,
444
                                     ICtrig_Out1_354,
445
                                     IC_Out1_364,
446
                                     *output_In1_489,
447
                                     \at(*self, Pre),
448
                                     (*self),
449
                                     Gain1_Out1_382,
450
                                     Gain_Out1_373,
451
                                     Integrator1_Out1_391,
452
                                     Sum2_Out1_401,
453
                                     Variable_Limit_Saturation_Out1_410,
454
                                     __VariableRateLimit_1,
455
                                     __VariableRateLimit_2);
456
  assigns *output_In1_489, *self, Gain1_Out1_382, Gain_Out1_373,
457
          Integrator1_Out1_391, Sum2_Out1_401,
458
          Variable_Limit_Saturation_Out1_410, __VariableRateLimit_1,
459
          __VariableRateLimit_2;
460
  */
461
  {
462
  /*@     ensures (__VariableRateLimit_1==(\at(*self, Pre).ni_3._reg._first?(1):(0)));
463
       ensures ((*self).ni_3._reg._first==0);
464
       ensures (Integrator1_Out1_391 == (__VariableRateLimit_1?(IC_Out1_364):(\at(*self, Pre)._reg.__VariableRateLimit_3)));
465
       ensures (*output_In1_489 == Integrator1_Out1_391);
466
       ensures (Gain1_Out1_382 == (- ratelim_Out1_334));
467
       ensures (Sum2_Out1_401 == (input_Out1_344 + (- Integrator1_Out1_391)));
468
       ensures (Gain_Out1_373 == (20. * Sum2_Out1_401));
469
       ensures Ctrans_VariableLimitSaturation((double) ratelim_Out1_334,
470
                                              (double) Gain_Out1_373,
471
                                              (double) Gain1_Out1_382,
472
                                              Variable_Limit_Saturation_Out1_410);
473
       ensures Ctrans_integrator_reset((double) Variable_Limit_Saturation_Out1_410,
474
                                       ICtrig_Out1_354,
475
                                       (double) IC_Out1_364,
476
                                       __VariableRateLimit_2,
477
                                       \at(*self, Pre).ni_2,
478
                                       (*self).ni_2);
479
       ensures ((*self)._reg.__VariableRateLimit_3 == __VariableRateLimit_2);
480
  assigns *output_In1_489, *self, Gain1_Out1_382, Gain_Out1_373,
481
          Integrator1_Out1_391, Sum2_Out1_401,
482
          Variable_Limit_Saturation_Out1_410, __VariableRateLimit_1,
483
          __VariableRateLimit_2;
484
  */ {
485
  
486
  _arrow_step (1, 0, &__VariableRateLimit_1, &self->ni_3);
487
  Integrator1_Out1_391 = (__VariableRateLimit_1?(IC_Out1_364):(self->_reg.__VariableRateLimit_3));
488
/*@
489
       ensures (*output_In1_489 == Integrator1_Out1_391);
490
       assigns *output_In1_489; */
491
{
492
  *output_In1_489 = Integrator1_Out1_391;
493
}
494
  Gain1_Out1_382 = (- ratelim_Out1_334);
495
  Sum2_Out1_401 = (input_Out1_344 + (- Integrator1_Out1_391));
496
  Gain_Out1_373 = (20. * Sum2_Out1_401);
497
/*@
498
       ensures Ctrans_VariableLimitSaturation((double) ratelim_Out1_334,
499
                                              (double) Gain_Out1_373,
500
                                              (double) Gain1_Out1_382,
501
                                              Variable_Limit_Saturation_Out1_410);
502
       assigns Variable_Limit_Saturation_Out1_410; */
503
{
504
  VariableLimitSaturation_step (ratelim_Out1_334, Gain_Out1_373, Gain1_Out1_382, &Variable_Limit_Saturation_Out1_410);
505
}
506
/*@
507
       ensures Ctrans_integrator_reset((double) Variable_Limit_Saturation_Out1_410,
508
                                       (_Bool) ((ICtrig_Out1_354)),
509
                                       (double) IC_Out1_364,
510
                                       __VariableRateLimit_2,
511
                                       \at(*self, Pre).ni_2,
512
                                       (*self).ni_2);
513
       assigns __VariableRateLimit_2, self->ni_2; */
514
{
515
  integrator_reset_step (Variable_Limit_Saturation_Out1_410, ICtrig_Out1_354, IC_Out1_364, &__VariableRateLimit_2, &self->ni_2);
516
}
517
  self->_reg.__VariableRateLimit_3 = __VariableRateLimit_2;
518
  }}}}}return;
519
}
520

    
521
void Saturation_step (double Signal, 
522
                      double (*s_out)
523
                      ) {
524
  /*@ensures Ctrans_Saturation(Signal,
525
                               *s_out);
526
  assigns *s_out;
527
  */
528
  {
529
  
530
  _Bool __Saturation_1;
531
  _Bool __Saturation_2;
532
  double enforce_lo_lim;
533
  
534
  
535
  /* Asserting trans predicate: locals are [] */
536
  /*@ensures trans_Saturation(Signal,
537
                              *s_out,
538
                              __Saturation_1,
539
                              __Saturation_2,
540
                              enforce_lo_lim);
541
  assigns *s_out, __Saturation_1, __Saturation_2, enforce_lo_lim;
542
  */
543
  {
544
  /*@     ensures (__Saturation_1 == (0.0001 >= Signal));
545
       ensures (enforce_lo_lim == (__Saturation_1?(0.0001):(Signal)));
546
       ensures (__Saturation_2 == (1000. <= enforce_lo_lim));
547
       ensures (*s_out == (__Saturation_2?(1000.):(enforce_lo_lim)));
548
  assigns *s_out, __Saturation_1, __Saturation_2, enforce_lo_lim;
549
  */ {
550
  __Saturation_1 = (0.0001 >= Signal);
551
  enforce_lo_lim = (__Saturation_1?(0.0001):(Signal));
552
  __Saturation_2 = (1000. <= enforce_lo_lim);
553
  *s_out = (__Saturation_2?(1000.):(enforce_lo_lim));
554
  }}}return;
555
}
556

    
557
void integrator_reset_reset (struct integrator_reset_mem *self) {
558
  _arrow_reset(&self->ni_4);
559
  return;
560
}
561

    
562
void integrator_reset_step (double Fx, _Bool ResetLevel, double x0, 
563
                            double (*ir_out),
564
                            struct integrator_reset_mem *self) {
565
  /*@ensures Ctrans_integrator_reset(Fx,
566
                                     ResetLevel,
567
                                     x0,
568
                                     *ir_out,
569
                                     \at(*self, Pre),
570
                                     (*self));
571
  assigns *ir_out, *self;
572
  */
573
  {
574
  
575
  _Bool __integrator_reset_1;
576
  
577
  
578
  /* Asserting trans predicate: locals are [] */
579
  /*@ensures trans_integrator_reset(Fx,
580
                                    ResetLevel,
581
                                    x0,
582
                                    *ir_out,
583
                                    \at(*self, Pre),
584
                                    (*self),
585
                                    __integrator_reset_1);
586
  assigns *ir_out, *self, __integrator_reset_1;
587
  */
588
  {
589
  /*@     ensures (__integrator_reset_1==(\at(*self, Pre).ni_4._reg._first?(1):(0))) && ((*self).ni_4._reg._first==0);
590
       ensures (*ir_out == (__integrator_reset_1?(x0):((ResetLevel?(x0):(((Fx * 1.) + \at(*self, Pre)._reg.__integrator_reset_2))))));
591
       ensures ((*self)._reg.__integrator_reset_2 == *ir_out);
592
  assigns *ir_out, *self, __integrator_reset_1;
593
  */ {
594
  
595
  _arrow_step (1, 0, &__integrator_reset_1, &self->ni_4);
596
  *ir_out = (__integrator_reset_1?(x0):((ResetLevel?(x0):(((Fx * 1.) + self->_reg.__integrator_reset_2)))));
597
  self->_reg.__integrator_reset_2 = *ir_out;
598
  }}}return;
599
}
600

    
601
void VariableLimitSaturation_step (double up_lim, double Signal,
602
                                   double lo_lim, 
603
                                   double (*out)
604
                                   ) {
605
  /*@ensures Ctrans_VariableLimitSaturation(up_lim,
606
                                            Signal,
607
                                            lo_lim,
608
                                            *out);
609
  assigns *out;
610
  */
611
  {
612
  
613
  _Bool __VariableLimitSaturation_1;
614
  _Bool __VariableLimitSaturation_2;
615
  double enforce_lo_lim;
616
  
617
  
618
  /* Asserting trans predicate: locals are [] */
619
  /*@ensures trans_VariableLimitSaturation(up_lim,
620
                                           Signal,
621
                                           lo_lim,
622
                                           *out,
623
                                           __VariableLimitSaturation_1,
624
                                           __VariableLimitSaturation_2,
625
                                           enforce_lo_lim);
626
  assigns *out, __VariableLimitSaturation_1, __VariableLimitSaturation_2,
627
          enforce_lo_lim;
628
  */
629
  {
630
  /*@     ensures (__VariableLimitSaturation_1 == (Signal >= lo_lim));
631
       ensures (enforce_lo_lim == (__VariableLimitSaturation_1?(Signal):(lo_lim)));
632
       ensures (__VariableLimitSaturation_2 == (enforce_lo_lim <= up_lim));
633
       ensures (*out == (__VariableLimitSaturation_2?(enforce_lo_lim):(up_lim)));
634
  assigns *out, __VariableLimitSaturation_1, __VariableLimitSaturation_2,
635
          enforce_lo_lim;
636
  */ {
637
  __VariableLimitSaturation_1 = (Signal >= lo_lim);
638
  enforce_lo_lim = (__VariableLimitSaturation_1?(Signal):(lo_lim));
639
  __VariableLimitSaturation_2 = (enforce_lo_lim <= up_lim);
640
  *out = (__VariableLimitSaturation_2?(enforce_lo_lim):(up_lim));
641
  }}}return;
642
}
643

    
(1-1/2)