diff --git a/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_Co2Kpis.txt b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_Co2Kpis.txt new file mode 100644 index 0000000000..3d6cc2780c --- /dev/null +++ b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_Co2Kpis.txt @@ -0,0 +1,24 @@ +last-generated=2025-01-30 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "23", + "numerical Jacobians": "0" +} +time=[0e+00, 1.2e+02] +traCo2Con.y=[4e+02, 5.279999877929688e+02, 6.559999877929688e+02, 7.840000090225883e+02, 9.119999877929687e+02, 1.04e+03, 1.167999975585937e+03, 1.296000003487723e+03, 1.423999975585937e+03, 1.552000024414062e+03, 1.68e+03, 1.807999975585937e+03, 1.936000024414062e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 1.872000024414062e+03, 1.743999999999999e+03, 1.616000024414062e+03, 1.487999975585938e+03, 1.36e+03, 1.232000024414062e+03, 1.103999975585938e+03, 9.759999999999999e+02, 8.480000122070307e+02, 7.2e+02, 5.919999816894535e+02, 4.639999938964845e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 5.27999987792969e+02, 6.559999877929694e+02, 7.840000090225885e+02, 9.119999877929699e+02, 1.04e+03, 1.167999975585938e+03, 1.296000003487722e+03, 1.423999975585937e+03, 1.552000024414062e+03, 1.68e+03, 1.807999975585938e+03, 1.936000024414063e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 2e+03, 1.872000024414062e+03, 1.743999999999999e+03, 1.616000024414061e+03, 1.487999975585936e+03, 1.36e+03, 1.232000024414062e+03, 1.103999975585939e+03, 9.760000000000006e+02, 8.480000122070315e+02, 7.2e+02, 5.919999816894529e+02, 4.639999938964838e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02, 4e+02] +booPulAct.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +fixBou.ppmSecOutBou=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.5e+00, 1.408333374023436e+02, 4.115000008719309e+02, 8.554999877929686e+02, 1.436833361816406e+03, 2.1675e+03, 3.068833251953125e+03, 4.119499951171873e+03, 5.287500000000002e+03, 6.487500000000001e+03, 7.6875e+03, 8.8875e+03, 1.00875e+04, 1.12875e+04, 1.24875e+04, 1.36875e+04, 1.48875e+04, 1.60875e+04, 1.72875e+04, 1.84875e+04, 1.96875e+04, 2.0802166015625e+04, 2.17785e+04, 2.2583499609375e+04, 2.3250166015625e+04, 2.37675e+04, 2.4114166015625e+04, 2.4311499609375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.4375e+04, 2.43825e+04, 2.4515833984375e+04, 2.478650005580357e+04, 2.5230500390625e+04, 2.5811833984375e+04, 2.65425e+04, 2.7443833984375e+04, 2.849450039062501e+04, 2.966249999999999e+04, 3.08625e+04, 3.20625e+04, 3.32625e+04, 3.446250000000001e+04, 3.566250000000001e+04, 3.68625e+04, 3.80625e+04, 3.926249999999999e+04, 4.046249999999999e+04, 4.166249999999999e+04, 4.28625e+04, 4.40625e+04, 4.517716796875e+04, 4.615350000000001e+04, 4.695850078125e+04, 4.762516796875001e+04, 4.81425e+04, 4.848916796875e+04, 4.868650078125e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04, 4.875e+04] +fixBouAct.ppmSecOutBou=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.5e+00, 1.408333374023436e+02, 4.115000008719309e+02, 8.554999877929686e+02, 1.436833361816406e+03, 2.1675e+03, 3.068833251953125e+03, 4.119499951171873e+03, 5.287500000000002e+03, 6.487500000000001e+03, 7.6875e+03, 8.8875e+03, 1.00875e+04, 1.12875e+04, 1.24875e+04, 1.36875e+04, 1.48875e+04, 1.60875e+04, 1.72875e+04, 1.84875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.96875e+04, 1.9695e+04, 1.9828333984375e+04, 2.009900005580357e+04, 2.0543000390625e+04, 2.1124333984375e+04, 2.1855e+04, 2.2756333984375e+04, 2.380700039062501e+04, 2.497499999999999e+04, 2.6175e+04, 2.7375e+04, 2.8575e+04, 2.977500000000001e+04, 3.097500000000001e+04, 3.2175e+04, 3.3375e+04, 3.457499999999999e+04, 3.577499999999999e+04, 3.697499999999999e+04, 3.8175e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04, 3.9375e+04] +fixBouRes.ppmSecOutBou=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.5e+00, 1.408333374023436e+02, 4.115000008719309e+02, 8.554999877929686e+02, 1.436833361816406e+03, 2.1675e+03, 3.068833251953125e+03, 4.119499951171873e+03, 5.287500000000002e+03, 6.487500000000001e+03, 7.6875e+03, 8.8875e+03, 1.00875e+04, 1.12875e+04, 1.24875e+04, 1.36875e+04, 1.48875e+04, 1.60875e+04, 1.72875e+04, 1.84875e+04, 1.96875e+04, 2.0802166015625e+04, 2.17785e+04, 2.2583499609375e+04, 2.3250166015625e+04, 2.37675e+04, 2.4114166015625e+04, 2.4311499609375e+04, 1.267499999999993e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.5e+00, 1.408333374023443e+02, 4.115000008719284e+02, 8.554999877929664e+02, 1.436833361816405e+03, 2.1675e+03, 3.068833251953127e+03, 4.119499951171881e+03, 5.287499999999995e+03, 6.487499999999997e+03, 7.6875e+03, 8.887500000000004e+03, 1.008750000000001e+04, 1.128750000000001e+04, 1.24875e+04, 1.36875e+04, 1.488749999999999e+04, 1.608749999999999e+04, 1.728749999999999e+04, 1.84875e+04, 1.96875e+04, 2.0802166015625e+04, 2.17785e+04, 2.258349960937501e+04, 2.325016601562501e+04, 2.37675e+04, 2.4114166015625e+04, 2.4311499609375e+04, 1.267500000000029e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +fixBouTim.totTimeOutBou=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.75e-01, 1.574999999999999e+00, 2.775e+00, 3.975e+00, 5.174999999999999e+00, 6.375e+00, 7.574999999999999e+00, 8.774999999999999e+00, 9.975000000000001e+00, 1.1175e+01, 1.2375e+01, 1.3575e+01, 1.4775e+01, 1.5975e+01, 1.7175e+01, 1.8375e+01, 1.9575e+01, 2.0775e+01, 2.1975e+01, 2.3175e+01, 2.4375e+01, 2.5575e+01, 2.677500000000001e+01, 2.7975e+01, 2.9175e+01, 3.0375e+01, 3.1575e+01, 3.2775e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.375e+01, 3.4125e+01, 3.5325e+01, 3.652499999999999e+01, 3.772499999999999e+01, 3.8925e+01, 4.0125e+01, 4.1325e+01, 4.252500000000001e+01, 4.372499999999999e+01, 4.4925e+01, 4.6125e+01, 4.7325e+01, 4.852500000000001e+01, 4.972500000000001e+01, 5.0925e+01, 5.2125e+01, 5.332499999999999e+01, 5.452499999999999e+01, 5.572499999999999e+01, 5.6925e+01, 5.8125e+01, 5.9325e+01, 6.052500000000001e+01, 6.172500000000001e+01, 6.292500000000001e+01, 6.4125e+01, 6.5325e+01, 6.652499999999999e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01, 6.75e+01] +fixBouTimRes.totTimeOutBou=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.75e-01, 1.574999999999999e+00, 2.775e+00, 3.975e+00, 5.174999999999999e+00, 6.375e+00, 7.574999999999999e+00, 8.774999999999999e+00, 9.975000000000001e+00, 1.1175e+01, 1.2375e+01, 1.3575e+01, 1.4775e+01, 1.5975e+01, 1.7175e+01, 1.8375e+01, 1.9575e+01, 2.0775e+01, 2.1975e+01, 2.3175e+01, 2.4375e+01, 2.5575e+01, 2.677500000000001e+01, 2.7975e+01, 2.9175e+01, 3.0375e+01, 3.1575e+01, 3.2775e+01, 1.75499999999999e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.75e-01, 1.575000000000003e+00, 2.774999999999991e+00, 3.974999999999994e+00, 5.174999999999997e+00, 6.375e+00, 7.575000000000003e+00, 8.775000000000006e+00, 9.974999999999994e+00, 1.1175e+01, 1.2375e+01, 1.3575e+01, 1.477500000000001e+01, 1.597500000000001e+01, 1.7175e+01, 1.8375e+01, 1.957499999999999e+01, 2.077499999999999e+01, 2.197499999999999e+01, 2.3175e+01, 2.4375e+01, 2.5575e+01, 2.677500000000001e+01, 2.797500000000001e+01, 2.917500000000001e+01, 3.0375e+01, 3.1575e+01, 3.277499999999999e+01, 1.755000000000041e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +din16798Tim.totTimeOutBouCat1=[0e+00, 0e+00, 0e+00, 3.187499999999996e-01, 1.51875e+00, 2.71875e+00, 3.918749999999999e+00, 5.11875e+00, 6.31875e+00, 7.518749999999999e+00, 8.71875e+00, 9.918749999999999e+00, 1.111875e+01, 1.231875e+01, 1.351875e+01, 1.471875e+01, 1.591875e+01, 1.711875e+01, 1.831875e+01, 1.951875e+01, 2.071875e+01, 2.191875e+01, 2.311875e+01, 2.431875e+01, 2.551875e+01, 2.671875e+01, 2.791875e+01, 2.911875000000001e+01, 3.031875e+01, 3.151875e+01, 3.271875e+01, 3.391875e+01, 3.511875e+01, 3.631875e+01, 3.751875e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.84375e+01, 3.875625e+01, 3.995625000000001e+01, 4.115625e+01, 4.235625e+01, 4.355624999999999e+01, 4.475624999999999e+01, 4.595625e+01, 4.715625e+01, 4.835625e+01, 4.955625000000001e+01, 5.075624999999999e+01, 5.195625e+01, 5.315625e+01, 5.435625e+01, 5.555625000000001e+01, 5.675625000000001e+01, 5.795625e+01, 5.915625e+01, 6.035624999999999e+01, 6.155624999999999e+01, 6.275624999999999e+01, 6.395625e+01, 6.515625e+01, 6.635625e+01, 6.755625000000001e+01, 6.875625000000001e+01, 6.995625000000001e+01, 7.115625e+01, 7.235625e+01, 7.355624999999999e+01, 7.475624999999999e+01, 7.595625e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01, 7.6875e+01] +din16798Tim.totTimeOutBouCat2=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.4375e-01, 2.043749999999999e+00, 3.24375e+00, 4.44375e+00, 5.643749999999999e+00, 6.84375e+00, 8.043749999999999e+00, 9.243749999999999e+00, 1.044375e+01, 1.164375e+01, 1.284375e+01, 1.404375e+01, 1.524375e+01, 1.644375e+01, 1.764375e+01, 1.884375e+01, 2.004375e+01, 2.124375e+01, 2.244375e+01, 2.364375e+01, 2.484375e+01, 2.604375e+01, 2.724375000000001e+01, 2.844375e+01, 2.964375e+01, 3.084375e+01, 3.204375e+01, 3.324375e+01, 3.444375e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.553125e+01, 3.673125e+01, 3.793124999999999e+01, 3.913124999999999e+01, 4.033125e+01, 4.153125e+01, 4.273125e+01, 4.393125000000001e+01, 4.513124999999999e+01, 4.633125e+01, 4.753125e+01, 4.873125e+01, 4.993125000000001e+01, 5.113125000000001e+01, 5.233125e+01, 5.353125e+01, 5.473124999999999e+01, 5.593124999999999e+01, 5.713124999999999e+01, 5.833125e+01, 5.953125e+01, 6.073125e+01, 6.193125000000001e+01, 6.313125000000001e+01, 6.433125000000001e+01, 6.553125e+01, 6.673125e+01, 6.793124999999999e+01, 6.913124999999999e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01, 6.9375e+01] +din16798Tim.totTimeOutBouCat3=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.1625e+00, 2.362499999999999e+00, 3.5625e+00, 4.762499999999999e+00, 5.962499999999999e+00, 7.162500000000001e+00, 8.362500000000001e+00, 9.5625e+00, 1.07625e+01, 1.19625e+01, 1.31625e+01, 1.43625e+01, 1.55625e+01, 1.67625e+01, 1.79625e+01, 1.91625e+01, 2.03625e+01, 2.15625e+01, 2.27625e+01, 2.396250000000001e+01, 2.51625e+01, 2.63625e+01, 2.75625e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.8125e+01, 2.928749999999999e+01, 3.04875e+01, 3.16875e+01, 3.28875e+01, 3.408750000000001e+01, 3.528749999999999e+01, 3.64875e+01, 3.76875e+01, 3.88875e+01, 4.008750000000001e+01, 4.128750000000001e+01, 4.24875e+01, 4.36875e+01, 4.488749999999999e+01, 4.608749999999999e+01, 4.728749999999999e+01, 4.84875e+01, 4.96875e+01, 5.08875e+01, 5.208750000000001e+01, 5.328750000000001e+01, 5.448750000000001e+01, 5.56875e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01, 5.625e+01] +din16798Tim.totTimeOutBouCat4=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.437499999999993e-01, 1.743749999999999e+00, 2.943750000000001e+00, 4.143750000000001e+00, 5.34375e+00, 6.543749999999999e+00, 7.743750000000002e+00, 8.943749999999998e+00, 1.014375e+01, 1.134375e+01, 1.254375e+01, 1.374375e+01, 1.494375e+01, 1.614375e+01, 1.734375e+01, 1.854375e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 1.96875e+01, 2.023125e+01, 2.143125000000001e+01, 2.263124999999999e+01, 2.383125e+01, 2.503125e+01, 2.623125e+01, 2.743125000000001e+01, 2.863125000000001e+01, 2.983125e+01, 3.103125e+01, 3.223124999999999e+01, 3.343124999999999e+01, 3.463124999999999e+01, 3.583125e+01, 3.703125e+01, 3.823125e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01, 3.9375e+01] +din16798ActTim.totTimeOutBouCat1=[0e+00, 0e+00, 0e+00, 3.187499999999996e-01, 1.51875e+00, 2.71875e+00, 3.918749999999999e+00, 5.11875e+00, 6.31875e+00, 7.518749999999999e+00, 8.71875e+00, 9.918749999999999e+00, 1.111875e+01, 1.231875e+01, 1.351875e+01, 1.471875e+01, 1.591875e+01, 1.711875e+01, 1.831875e+01, 1.951875e+01, 2.071875e+01, 2.191875e+01, 2.311875e+01, 2.431875e+01, 2.551875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.671875e+01, 2.70375e+01, 2.823750000000001e+01, 2.94375e+01, 3.06375e+01, 3.183749999999999e+01, 3.303749999999999e+01, 3.42375e+01, 3.54375e+01, 3.66375e+01, 3.783750000000001e+01, 3.903749999999999e+01, 4.02375e+01, 4.14375e+01, 4.26375e+01, 4.383750000000001e+01, 4.503750000000001e+01, 4.62375e+01, 4.74375e+01, 4.863749999999999e+01, 4.983749999999999e+01, 5.103749999999999e+01, 5.22375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01, 5.34375e+01] +din16798ActTim.totTimeOutBouCat2=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.4375e-01, 2.043749999999999e+00, 3.24375e+00, 4.44375e+00, 5.643749999999999e+00, 6.84375e+00, 8.043749999999999e+00, 9.243749999999999e+00, 1.044375e+01, 1.164375e+01, 1.284375e+01, 1.404375e+01, 1.524375e+01, 1.644375e+01, 1.764375e+01, 1.884375e+01, 2.004375e+01, 2.124375e+01, 2.244375e+01, 2.364375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.484375e+01, 2.56875e+01, 2.68875e+01, 2.808749999999999e+01, 2.928749999999999e+01, 3.04875e+01, 3.16875e+01, 3.28875e+01, 3.408750000000001e+01, 3.528749999999999e+01, 3.64875e+01, 3.76875e+01, 3.88875e+01, 4.008750000000001e+01, 4.128750000000001e+01, 4.24875e+01, 4.36875e+01, 4.488749999999999e+01, 4.608749999999999e+01, 4.728749999999999e+01, 4.84875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01, 4.96875e+01] +din16798ActTim.totTimeOutBouCat3=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.1625e+00, 2.362499999999999e+00, 3.5625e+00, 4.762499999999999e+00, 5.962499999999999e+00, 7.162500000000001e+00, 8.362500000000001e+00, 9.5625e+00, 1.07625e+01, 1.19625e+01, 1.31625e+01, 1.43625e+01, 1.55625e+01, 1.67625e+01, 1.79625e+01, 1.91625e+01, 2.03625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.15625e+01, 2.272499999999999e+01, 2.3925e+01, 2.5125e+01, 2.6325e+01, 2.752500000000001e+01, 2.872499999999999e+01, 2.9925e+01, 3.1125e+01, 3.2325e+01, 3.352500000000001e+01, 3.472500000000001e+01, 3.5925e+01, 3.7125e+01, 3.832499999999999e+01, 3.952499999999999e+01, 4.072499999999999e+01, 4.1925e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01, 4.3125e+01] +din16798ActTim.totTimeOutBouCat4=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.437499999999993e-01, 1.743749999999999e+00, 2.943750000000001e+00, 4.143750000000001e+00, 5.34375e+00, 6.543749999999999e+00, 7.743750000000002e+00, 8.943749999999998e+00, 1.014375e+01, 1.134375e+01, 1.254375e+01, 1.374375e+01, 1.494375e+01, 1.614375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.734375e+01, 1.78875e+01, 1.908750000000001e+01, 2.028749999999999e+01, 2.14875e+01, 2.26875e+01, 2.38875e+01, 2.508750000000001e+01, 2.628750000000001e+01, 2.74875e+01, 2.86875e+01, 2.988749999999999e+01, 3.108749999999999e+01, 3.228749999999999e+01, 3.34875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01, 3.46875e+01] diff --git a/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_EnergyKpis.txt b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_EnergyKpis.txt new file mode 100644 index 0000000000..cf5e31ac64 --- /dev/null +++ b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_EnergyKpis.txt @@ -0,0 +1,20 @@ +last-generated=2025-01-30 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "9", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +pulQ_flow.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2.000000000000002e-01, -6.000000000000005e-01, -5.999999999999996e-01, 1.999999999999993e-01, 1e+00, 1.999999999999993e-01, -5.999999999999996e-01, -5.999999999999996e-01, 2.000000000000011e-01, 1e+00, 1.999999999999993e-01, -6.000000000000014e-01, -6.000000000000014e-01, 1.999999999999993e-01, 1e+00, 1.999999999999993e-01, -6.000000000000014e-01, -5.999999999999979e-01, 1.999999999999993e-01, 1e+00] +thmMtr.QHea=[0e+00, 4e-01, 8e-01, 1.2e+00, 1.6e+00, 2e+00, 2e+00, 2e+00, 2.2e+00, 2.6e+00, 3e+00, 3e+00, 3e+00, 3.2e+00, 3.600000000000001e+00, 4e+00, 4e+00, 4e+00, 4.199999999999999e+00, 4.6e+00, 5e+00, 5e+00, 5e+00, 5.200000000000001e+00, 5.6e+00, 6e+00] +thmMtr.QCoo=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -3.999999999999999e-01, -8.000000000000003e-01, -1e+00, -1e+00, -1e+00, -1.4e+00, -1.8e+00, -2e+00, -2e+00, -2e+00, -2.4e+00, -2.800000000000001e+00, -3e+00, -3e+00, -3e+00, -3.4e+00, -3.800000000000001e+00, -4e+00, -4e+00, -4e+00] +thmMtrTim.QHea=[0e+00, 4e-01, 8e-01, 1.2e+00, 1.6e+00, 2e+00, 2e+00, 2e+00, 2.2e+00, 2.6e+00, 3e+00, 3e+00, 3e+00, 3.2e+00, 3.600000000000001e+00, 4e+00, 4e+00, 4e+00, 4.199999999999999e+00, 4.6e+00, 5e+00, 5e+00, 5e+00, 5.200000000000001e+00, 5.6e+00, 6e+00] +thmMtrTim.QCoo=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -3.999999999999999e-01, -8.000000000000003e-01, -1e+00, -1e+00, -1e+00, -1.4e+00, -1.8e+00, -2e+00, -2e+00, -2e+00, -2.4e+00, -2.800000000000001e+00, -3e+00, -3e+00, -3e+00, -3.4e+00, -3.800000000000001e+00, -4e+00, -4e+00, -4e+00] +thmMtrTim.timeHea=[0e+00, 4e-01, 8e-01, 1.2e+00, 1.6e+00, 2e+00, 2e+00, 2e+00, 2.2e+00, 2.6e+00, 3e+00, 3e+00, 3e+00, 3.2e+00, 3.600000000000001e+00, 4e+00, 4e+00, 4e+00, 4.199999999999999e+00, 4.6e+00, 5e+00, 5e+00, 5e+00, 5.200000000000001e+00, 5.6e+00, 6e+00] +thmMtrTim.timeCoo=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.999999999999999e-01, 8.000000000000003e-01, 1e+00, 1e+00, 1e+00, 1.4e+00, 1.8e+00, 2e+00, 2e+00, 2e+00, 2.4e+00, 2.800000000000001e+00, 3e+00, 3e+00, 3e+00, 3.4e+00, 3.800000000000001e+00, 4e+00, 4e+00, 4e+00] +pulP.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.999999999999998e-01, 1.600000000000001e+00, 1.6e+00, 8.000000000000007e-01, 0e+00, 8.000000000000007e-01, 1.6e+00, 1.6e+00, 7.999999999999989e-01, 0e+00, 8.000000000000007e-01, 1.600000000000001e+00, 1.600000000000001e+00, 8.000000000000007e-01, 0e+00, 8.000000000000007e-01, 1.600000000000001e+00, 1.599999999999998e+00, 8.000000000000007e-01, 0e+00] +eleMtr.E=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.999999999999998e-01, 1.600000000000001e+00, 2e+00, 2e+00, 2e+00, 2.800000000000001e+00, 3.6e+00, 4e+00, 4e+00, 4e+00, 4.800000000000001e+00, 5.600000000000001e+00, 6e+00, 6e+00, 6e+00, 6.800000000000001e+00, 7.600000000000001e+00, 8e+00, 8e+00, 8e+00] +eleMtrTim.E=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.999999999999998e-01, 1.600000000000001e+00, 2e+00, 2e+00, 2e+00, 2.800000000000001e+00, 3.6e+00, 4e+00, 4e+00, 4e+00, 4.800000000000001e+00, 5.600000000000001e+00, 6e+00, 6e+00, 6e+00, 6.800000000000001e+00, 7.600000000000001e+00, 8e+00, 8e+00, 8e+00] +eleMtrTim.timeAct=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.999999999999999e-01, 8.000000000000003e-01, 1e+00, 1e+00, 1e+00, 1.4e+00, 1.8e+00, 2e+00, 2e+00, 2e+00, 2.4e+00, 2.800000000000001e+00, 3e+00, 3e+00, 3e+00, 3.4e+00, 3.800000000000001e+00, 4e+00, 4e+00, 4e+00] diff --git a/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_IntegralErrorDualReference.txt b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_IntegralErrorDualReference.txt new file mode 100644 index 0000000000..17e6d9de60 --- /dev/null +++ b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_IntegralErrorDualReference.txt @@ -0,0 +1,23 @@ +last-generated=2025-01-30 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "6", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +pul.y=[4e+00, 4e+00, 4e+00, 2.769230769230768e+00, -3.076923076923084e-01, -3.384615384615385e+00, -1.538461538461537e+00, 1.538461538461537e+00, 3.384615384615383e+00, 3.076923076923066e-01, -2.76923076923077e+00, -2.153846153846153e+00, 9.230769230769269e-01, 4e+00, 9.230769230769269e-01, -2.153846153846146e+00, -2.769230769230766e+00, 3.076923076923066e-01, 3.384615384615387e+00, 1.53846153846154e+00, -1.53846153846154e+00, -3.384615384615387e+00, -3.076923076923066e-01, 2.769230769230774e+00, 2.153846153846146e+00, -9.230769230769198e-01, -4e+00] +ramUppBou.y=[1e+00, 1e+00, 1e+00, 1.076923076923077e+00, 1.269230769230769e+00, 1.461538461538462e+00, 1.653846153846154e+00, 1.846153846153846e+00, 2.038461538461538e+00, 2.230769230769231e+00, 2.423076923076923e+00, 2.615384615384615e+00, 2.807692307692308e+00, 3e+00, 3.192307692307692e+00, 3.384615384615384e+00, 3.576923076923077e+00, 3.769230769230769e+00, 3.961538461538462e+00, 4.153846153846153e+00, 4.346153846153847e+00, 4.538461538461538e+00, 4.730769230769231e+00, 4.923076923076923e+00, 5e+00, 5e+00, 5e+00] +ramLowBou.y=[-1e+00, -1e+00, -1e+00, -1.038461538461539e+00, -1.134615384615385e+00, -1.230769230769231e+00, -1.326923076923077e+00, -1.423076923076923e+00, -1.519230769230769e+00, -1.615384615384615e+00, -1.711538461538462e+00, -1.807692307692308e+00, -1.903846153846154e+00, -2e+00, -2.096153846153846e+00, -2.192307692307692e+00, -2.288461538461538e+00, -2.384615384615385e+00, -2.480769230769231e+00, -2.576923076923077e+00, -2.673076923076923e+00, -2.769230769230769e+00, -2.865384615384615e+00, -2.961538461538462e+00, -3e+00, -3e+00, -3e+00] +booSteItgAct.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.307692307692308e-01, 6.153846153846159e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booSteItgRes.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.692307692307665e-02, 4.615384615384617e-01, 8.461538461538467e-01, 1e+00, 1e+00, 1e+00] +ied.y=[0e+00, 1.153846153846154e+00, 2.307692307692308e+00, 3.442307692307693e+00, 4.548076923076923e+00, 5.653846153846154e+00, 6.567307692307693e+00, 7.432692307692307e+00, 8.307692307692308e+00, 9.221153846153847e+00, 1.013461538461539e+01, 1.078846153846154e+01, 1.126923076923077e+01, 1.175e+01, 1.247115384615384e+01, 1.319230769230769e+01, 1.366346153846154e+01, 1.375961538461539e+01, 1.385576923076923e+01, 1.429807692307692e+01, 1.482692307692308e+01, 1.525e+01, 1.525e+01, 1.525e+01, 1.548076923076923e+01, 1.586538461538461e+01, 1.625e+01] +ied.yPos=[0e+00, 1.153846153846154e+00, 2.307692307692308e+00, 3e+00, 3e+00, 3e+00, 3.692307692307693e+00, 4.557692307692307e+00, 5.25e+00, 5.25e+00, 5.25e+00, 5.538461538461538e+00, 6.01923076923077e+00, 6.5e+00, 6.5e+00, 6.5e+00, 6.538461538461538e+00, 6.634615384615385e+00, 6.730769230769231e+00, 6.75e+00, 6.75e+00, 6.75e+00, 6.75e+00, 6.75e+00, 6.75e+00, 6.75e+00, 6.75e+00] +ied.yNeg=[0e+00, 0e+00, 0e+00, -4.423076923076926e-01, -1.548076923076923e+00, -2.653846153846154e+00, -2.875e+00, -2.875e+00, -3.057692307692308e+00, -3.971153846153847e+00, -4.884615384615385e+00, -5.25e+00, -5.25e+00, -5.25e+00, -5.971153846153845e+00, -6.692307692307691e+00, -7.125e+00, -7.125e+00, -7.125e+00, -7.548076923076922e+00, -8.076923076923077e+00, -8.5e+00, -8.5e+00, -8.5e+00, -8.730769230769232e+00, -9.115384615384615e+00, -9.5e+00] +iedAct.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.884615384615385e-01, 7.692307692307698e-01, 1.25e+00, 1.971153846153845e+00, 2.692307692307691e+00, 3.163461538461538e+00, 3.259615384615385e+00, 3.355769230769231e+00, 3.798076923076923e+00, 4.326923076923078e+00, 4.75e+00, 4.75e+00, 4.75e+00, 4.980769230769232e+00, 5.365384615384615e+00, 5.75e+00] +iedAct.yPos=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.884615384615385e-01, 7.692307692307698e-01, 1.25e+00, 1.25e+00, 1.25e+00, 1.288461538461539e+00, 1.384615384615385e+00, 1.480769230769231e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00] +iedAct.yNeg=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -7.211538461538453e-01, -1.442307692307691e+00, -1.875e+00, -1.875e+00, -1.875e+00, -2.298076923076923e+00, -2.826923076923077e+00, -3.25e+00, -3.25e+00, -3.25e+00, -3.480769230769232e+00, -3.865384615384615e+00, -4.25e+00] +iedActRes.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.884615384615385e-01, 7.692307692307698e-01, 1.25e+00, 1.971153846153845e+00, 2.692307692307691e+00, 3.163461538461538e+00, 3.259615384615385e+00, 3.355769230769231e+00, 3.798076923076923e+00, 4.326923076923078e+00, 4.384615384615386e+00, 2.557692307692307e+00, 7.307692307692282e-01, 2.307692307692317e-01, 6.15384615384615e-01, 1e+00] +iedActRes.yPos=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.884615384615385e-01, 7.692307692307698e-01, 1.25e+00, 1.25e+00, 1.25e+00, 1.288461538461539e+00, 1.384615384615385e+00, 1.480769230769231e+00, 1.5e+00, 1.5e+00, 1.384615384615385e+00, 8.076923076923075e-01, 2.307692307692299e-01, 0e+00, 0e+00, 0e+00] +iedActRes.yNeg=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -7.211538461538453e-01, -1.442307692307691e+00, -1.875e+00, -1.875e+00, -1.875e+00, -2.298076923076923e+00, -2.826923076923077e+00, -3.000000000000001e+00, -1.75e+00, -4.999999999999982e-01, -2.307692307692317e-01, -6.15384615384615e-01, -1e+00] diff --git a/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_IntegralErrorSingleReference.txt b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_IntegralErrorSingleReference.txt new file mode 100644 index 0000000000..d776a93622 --- /dev/null +++ b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_IntegralErrorSingleReference.txt @@ -0,0 +1,23 @@ +last-generated=2025-01-30 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "10", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +pul.y=[1e+00, 1e+00, 1e+00, 6.25e-01, 2.220446049250313e-16, -3.749999999999998e-01, 2.5e-01, 8.750000000000004e-01, 5.000000000000004e-01, -1.25e-01, -2.499999999999996e-01, 3.749999999999996e-01, 1e+00, 3.750000000000009e-01, -2.500000000000009e-01, -1.25e-01, 4.999999999999991e-01, 8.749999999999991e-01, 2.5e-01, -3.749999999999991e-01, 8.881784197001252e-16, 6.25e-01, 7.500000000000009e-01, 1.249999999999991e-01, -5e-01] +conZeroRef.y=[0e+00, 0e+00] +booSteItgAct.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.66666666666667e-01, 5.83333333333333e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booSteItgRes.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.333333333333339e-01, 7.5e-01, 1e+00, 1e+00, 1e+00] +iae.y=[0e+00, 4.166666666666666e-01, 8.333333333333333e-01, 1.125e+00, 1.333333333333333e+00, 1.583333333333333e+00, 2e+00, 2.416666666666667e+00, 2.666666666666667e+00, 2.875e+00, 3.166666666666667e+00, 3.583333333333333e+00, 4e+00, 4.208333333333333e+00, 4.416666666666667e+00, 4.75e+00, 5.166666666666666e+00, 5.541666666666667e+00, 5.75e+00, 5.958333333333333e+00, 6.333333333333334e+00, 6.75e+00, 7.083333333333333e+00, 7.291666666666667e+00, 7.5e+00] +iaeAct.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.66666666666667e-01, 5.83333333333333e-01, 1e+00, 1.208333333333333e+00, 1.416666666666667e+00, 1.75e+00, 2.166666666666666e+00, 2.541666666666667e+00, 2.75e+00, 2.958333333333333e+00, 3.333333333333334e+00, 3.75e+00, 4.083333333333333e+00, 4.291666666666667e+00, 4.5e+00] +iaeActRes.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.66666666666667e-01, 5.83333333333333e-01, 1e+00, 1.208333333333333e+00, 1.416666666666667e+00, 1.75e+00, 2.166666666666666e+00, 2.541666666666667e+00, 2.75e+00, 2.958333333333333e+00, 2.333333333333332e+00, 1.5e+00, 1.083333333333333e+00, 1.291666666666667e+00, 1.5e+00] +ise.y=[0e+00, 4.166666666666666e-01, 8.333333333333333e-01, 1.0625e+00, 1.166666666666667e+00, 1.333333333333333e+00, 1.75e+00, 2.166666666666667e+00, 2.333333333333333e+00, 2.4375e+00, 2.666666666666667e+00, 3.083333333333333e+00, 3.5e+00, 3.604166666666667e+00, 3.708333333333333e+00, 4e+00, 4.416666666666666e+00, 4.770833333333334e+00, 4.875e+00, 4.979166666666666e+00, 5.333333333333334e+00, 5.75e+00, 6.041666666666666e+00, 6.145833333333334e+00, 6.25e+00] +itgTim.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.66666666666667e-01, 5.83333333333333e-01, 1e+00, 1.416666666666666e+00, 1.833333333333334e+00, 2.25e+00, 2.666666666666666e+00, 3.083333333333334e+00, 3.5e+00, 3.916666666666666e+00, 4.333333333333334e+00, 4.75e+00, 5.166666666666666e+00, 5.583333333333334e+00, 6e+00] +itgTimRes.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.66666666666667e-01, 5.83333333333333e-01, 1e+00, 1.416666666666666e+00, 1.833333333333334e+00, 2.25e+00, 2.666666666666666e+00, 3.083333333333334e+00, 3.5e+00, 3.916666666666666e+00, 2.999999999999998e+00, 1.75e+00, 1.166666666666666e+00, 1.583333333333334e+00, 2e+00] +itgErrPos.y=[0e+00, 4.166666666666666e-01, 8.333333333333333e-01, 1e+00, 1e+00, 1.083333333333333e+00, 1.5e+00, 1.916666666666667e+00, 2e+00, 2e+00, 2.166666666666667e+00, 2.583333333333333e+00, 3e+00, 3e+00, 3e+00, 3.25e+00, 3.666666666666666e+00, 4e+00, 4e+00, 4e+00, 4.333333333333334e+00, 4.75e+00, 5e+00, 5e+00, 5e+00] +itgErrNeg.y=[0e+00, 0e+00, 0e+00, -1.25e-01, -3.333333333333333e-01, -5e-01, -5e-01, -5e-01, -6.666666666666665e-01, -8.75e-01, -1e+00, -1e+00, -1e+00, -1.208333333333333e+00, -1.416666666666667e+00, -1.5e+00, -1.5e+00, -1.541666666666667e+00, -1.75e+00, -1.958333333333333e+00, -2e+00, -2e+00, -2.083333333333333e+00, -2.291666666666667e+00, -2.5e+00] +itgErrPosAct.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.66666666666667e-01, 5.83333333333333e-01, 1e+00, 1e+00, 1e+00, 1.25e+00, 1.666666666666666e+00, 2e+00, 2e+00, 2e+00, 2.333333333333334e+00, 2.75e+00, 3e+00, 3e+00, 3e+00] +itgErrPosActRes.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.66666666666667e-01, 5.83333333333333e-01, 1e+00, 5.833333333333339e-01, 1.666666666666661e-01, 2.5e-01, 6.666666666666661e-01, 9.166666666666661e-01, 5e-01, 8.333333333333393e-02, 3.333333333333339e-01, 7.5e-01, 8.333333333333339e-01, 4.166666666666661e-01, 0e+00] diff --git a/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_TemperatureKpis.txt b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_TemperatureKpis.txt new file mode 100644 index 0000000000..d75e84bf3f --- /dev/null +++ b/AixLib/Resources/ReferenceResults/Dymola/AixLib_Utilities_KPIs_Examples_TemperatureKpis.txt @@ -0,0 +1,32 @@ +last-generated=2025-01-30 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "23", + "numerical Jacobians": "0" +} +time=[0e+00, 1.2e+02] +traT.y=[1.5e+01, 1.62e+01, 1.74e+01, 1.86e+01, 1.98e+01, 2.1e+01, 2.22e+01, 2.34e+01, 2.46e+01, 2.58e+01, 2.7e+01, 2.82e+01, 2.94e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 2.88e+01, 2.759999999999999e+01, 2.64e+01, 2.52e+01, 2.4e+01, 2.28e+01, 2.16e+01, 2.04e+01, 1.92e+01, 1.8e+01, 1.68e+01, 1.56e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.62e+01, 1.740000000000001e+01, 1.86e+01, 1.980000000000001e+01, 2.1e+01, 2.22e+01, 2.339999809265863e+01, 2.459999999999999e+01, 2.58e+01, 2.7e+01, 2.82e+01, 2.940000000000001e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 2.88e+01, 2.759999999999999e+01, 2.639999999999999e+01, 2.519999999999999e+01, 2.4e+01, 2.28e+01, 2.160000000000001e+01, 2.040000000000001e+01, 1.92e+01, 1.8e+01, 1.68e+01, 1.559999999999999e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01, 1.5e+01] +fixBou.TCom=[2.951499938964844e+02, 2.951499938964844e+02] +fixBou.conTUppBou.k=[2.971499938964844e+02, 2.971499938964844e+02] +fixBou.conTLowBou.k=[2.931499938964844e+02, 2.931499938964844e+02] +booPulAct.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +fixBou.totDegSecOutBou=[0e+00, 5.2e+00, 9e+00, 1.14e+01, 1.24e+01, 1.25e+01, 1.25e+01, 1.25e+01, 1.28e+01, 1.42e+01, 1.7e+01, 2.14e+01, 2.719999999999999e+01, 3.410000000000001e+01, 4.13e+01, 4.85e+01, 5.57e+01, 6.290000000000001e+01, 7.009999999999999e+01, 7.730000000000001e+01, 8.45e+01, 9.169999999999999e+01, 9.889999999999999e+01, 1.061e+02, 1.133e+02, 1.205e+02, 1.269e+02, 1.319e+02, 1.355e+02, 1.377e+02, 1.385e+02, 1.385e+02, 1.385e+02, 1.385e+02, 1.389e+02, 1.405e+02, 1.437e+02, 1.483e+02, 1.54e+02, 1.6e+02, 1.66e+02, 1.72e+02, 1.78e+02, 1.84e+02, 1.9e+02, 1.96e+02, 2.02e+02, 2.08e+02, 2.14e+02, 2.2e+02, 2.26e+02, 2.312e+02, 2.35e+02, 2.374e+02, 2.384e+02, 2.385e+02, 2.385e+02, 2.385e+02, 2.388e+02, 2.402e+02, 2.43e+02, 2.474e+02, 2.532e+02, 2.601e+02, 2.673e+02, 2.745e+02, 2.817e+02, 2.889e+02, 2.961e+02, 3.033e+02, 3.105e+02, 3.176999999999999e+02, 3.249e+02, 3.321e+02, 3.393e+02, 3.465e+02, 3.529e+02, 3.579e+02, 3.615e+02, 3.637e+02, 3.645e+02, 3.645e+02, 3.645e+02, 3.645e+02, 3.649e+02, 3.665e+02, 3.697e+02, 3.743e+02, 3.8e+02, 3.86e+02, 3.92e+02, 3.98e+02, 4.04e+02, 4.100000000000001e+02, 4.16e+02, 4.22e+02, 4.279999999999999e+02, 4.339999999999999e+02, 4.4e+02, 4.46e+02, 4.52e+02] +fixBouAct.totDegSecOutBou=[0e+00, 5.2e+00, 9e+00, 1.14e+01, 1.24e+01, 1.25e+01, 1.25e+01, 1.25e+01, 1.28e+01, 1.42e+01, 1.7e+01, 2.14e+01, 2.719999999999999e+01, 3.410000000000001e+01, 4.13e+01, 4.85e+01, 5.57e+01, 6.290000000000001e+01, 7.009999999999999e+01, 7.730000000000001e+01, 8.45e+01, 9.169999999999999e+01, 9.889999999999999e+01, 1.061e+02, 1.133e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.205e+02, 1.257e+02, 1.295e+02, 1.319e+02, 1.329e+02, 1.33e+02, 1.33e+02, 1.33e+02, 1.333e+02, 1.347e+02, 1.375e+02, 1.419e+02, 1.477e+02, 1.546e+02, 1.618e+02, 1.69e+02, 1.762e+02, 1.834e+02, 1.906000000000001e+02, 1.978e+02, 2.05e+02, 2.121999999999999e+02, 2.193999999999999e+02, 2.266e+02, 2.338e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02, 2.41e+02] +fixBouRes.totDegSecOutBou=[0e+00, 5.2e+00, 9e+00, 1.14e+01, 1.24e+01, 0e+00, 0e+00, 0e+00, 2.999999999999998e-01, 1.699999999999998e+00, 4.5e+00, 8.899999999999997e+00, 1.469999999999999e+01, 2.160000000000001e+01, 2.88e+01, 3.6e+01, 4.32e+01, 5.040000000000001e+01, 5.759999999999999e+01, 6.480000000000001e+01, 7.2e+01, 7.919999999999999e+01, 8.639999999999999e+01, 9.360000000000001e+01, 1.008e+02, 1.08e+02, 1.144e+02, 1.194e+02, 1.23e+02, 1.252e+02, 1.26e+02, 0e+00, 0e+00, 0e+00, 4.000000000000021e-01, 2e+00, 5.199999999999985e+00, 9.799999999999994e+00, 1.550000000000001e+01, 2.150000000000002e+01, 2.75e+01, 3.349999999999998e+01, 3.949999999999999e+01, 4.550000000000001e+01, 5.149999999999999e+01, 5.75e+01, 6.350000000000001e+01, 6.95e+01, 7.549999999999997e+01, 8.149999999999999e+01, 8.75e+01, 9.270000000000002e+01, 9.650000000000001e+01, 9.890000000000001e+01, 9.990000000000001e+01, 0e+00, 0e+00, 0e+00, 2.999999999999972e-01, 1.699999999999996e+00, 4.5e+00, 8.900000000000013e+00, 1.470000000000003e+01, 2.159999999999997e+01, 2.879999999999998e+01, 3.6e+01, 4.320000000000002e+01, 5.040000000000003e+01, 5.760000000000005e+01, 6.479999999999998e+01, 7.2e+01, 7.919999999999993e+01, 8.639999999999995e+01, 9.359999999999997e+01, 1.008e+02, 1.08e+02, 1.144e+02, 1.194e+02, 1.23e+02, 1.252e+02, 1.26e+02, 0e+00, 0e+00, 0e+00, 3.999999999999986e-01, 2e+00, 5.20000000000001e+00, 9.800000000000026e+00, 1.549999999999997e+01, 2.149999999999999e+01, 2.75e+01, 3.350000000000001e+01, 3.950000000000003e+01, 4.550000000000004e+01, 5.149999999999999e+01, 5.75e+01, 6.349999999999994e+01, 6.949999999999996e+01, 7.549999999999997e+01, 8.149999999999999e+01, 8.75e+01] +fixBouTim.totTimeOutBou=[0e+00, 1.2e+00, 2.4e+00, 3.6e+00, 4.8e+00, 5e+00, 5e+00, 5e+00, 5.6e+00, 6.799999999999999e+00, 8e+00, 9.199999999999999e+00, 1.04e+01, 1.16e+01, 1.28e+01, 1.4e+01, 1.52e+01, 1.64e+01, 1.76e+01, 1.88e+01, 2e+01, 2.12e+01, 2.24e+01, 2.36e+01, 2.48e+01, 2.6e+01, 2.72e+01, 2.840000000000001e+01, 2.96e+01, 3.08e+01, 3.2e+01, 3.2e+01, 3.2e+01, 3.2e+01, 3.28e+01, 3.4e+01, 3.52e+01, 3.64e+01, 3.76e+01, 3.88e+01, 4e+01, 4.12e+01, 4.24e+01, 4.36e+01, 4.48e+01, 4.6e+01, 4.72e+01, 4.84e+01, 4.959999999999999e+01, 5.08e+01, 5.2e+01, 5.32e+01, 5.440000000000001e+01, 5.56e+01, 5.680000000000001e+01, 5.7e+01, 5.7e+01, 5.7e+01, 5.759999999999999e+01, 5.88e+01, 6e+01, 6.12e+01, 6.240000000000001e+01, 6.359999999999999e+01, 6.48e+01, 6.6e+01, 6.72e+01, 6.840000000000001e+01, 6.960000000000001e+01, 7.08e+01, 7.2e+01, 7.319999999999999e+01, 7.439999999999999e+01, 7.559999999999999e+01, 7.68e+01, 7.8e+01, 7.92e+01, 8.040000000000001e+01, 8.160000000000001e+01, 8.280000000000001e+01, 8.4e+01, 8.4e+01, 8.4e+01, 8.4e+01, 8.48e+01, 8.6e+01, 8.72e+01, 8.840000000000001e+01, 8.959999999999999e+01, 9.08e+01, 9.2e+01, 9.32e+01, 9.440000000000001e+01, 9.560000000000001e+01, 9.68e+01, 9.8e+01, 9.919999999999999e+01, 1.004e+02, 1.016e+02, 1.028e+02, 1.04e+02] +fixBouTimRes.totTimeOutBou=[0e+00, 1.2e+00, 2.4e+00, 3.6e+00, 4.8e+00, 0e+00, 0e+00, 0e+00, 5.999999999999996e-01, 1.799999999999999e+00, 3e+00, 4.199999999999999e+00, 5.399999999999999e+00, 6.600000000000001e+00, 7.800000000000001e+00, 9e+00, 1.02e+01, 1.14e+01, 1.26e+01, 1.38e+01, 1.5e+01, 1.62e+01, 1.74e+01, 1.86e+01, 1.98e+01, 2.1e+01, 2.22e+01, 2.340000000000001e+01, 2.46e+01, 2.58e+01, 2.7e+01, 0e+00, 0e+00, 0e+00, 8.000000000000043e-01, 2e+00, 3.199999999999996e+00, 4.399999999999999e+00, 5.600000000000001e+00, 6.800000000000004e+00, 8e+00, 9.199999999999996e+00, 1.04e+01, 1.16e+01, 1.28e+01, 1.4e+01, 1.52e+01, 1.64e+01, 1.759999999999999e+01, 1.88e+01, 2e+01, 2.12e+01, 2.240000000000001e+01, 2.36e+01, 2.480000000000001e+01, 0e+00, 0e+00, 0e+00, 5.999999999999943e-01, 1.799999999999997e+00, 3e+00, 4.200000000000003e+00, 5.400000000000006e+00, 6.599999999999994e+00, 7.799999999999997e+00, 9e+00, 1.02e+01, 1.140000000000001e+01, 1.260000000000001e+01, 1.38e+01, 1.5e+01, 1.619999999999999e+01, 1.739999999999999e+01, 1.859999999999999e+01, 1.98e+01, 2.1e+01, 2.22e+01, 2.340000000000001e+01, 2.460000000000001e+01, 2.580000000000001e+01, 2.7e+01, 0e+00, 0e+00, 0e+00, 7.999999999999972e-01, 2e+00, 3.200000000000003e+00, 4.400000000000006e+00, 5.599999999999994e+00, 6.799999999999997e+00, 8e+00, 9.200000000000003e+00, 1.040000000000001e+01, 1.160000000000001e+01, 1.28e+01, 1.4e+01, 1.519999999999999e+01, 1.639999999999999e+01, 1.759999999999999e+01, 1.88e+01, 2e+01] +flxBou.T=[2.881499938964844e+02, 2.893499938964844e+02, 2.905499938964844e+02, 2.917499938964844e+02, 2.929499938964844e+02, 2.941499938964844e+02, 2.953499938964844e+02, 2.965499938964844e+02, 2.977499938964844e+02, 2.989499938964844e+02, 3.001499938964844e+02, 3.013499938964844e+02, 3.025499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.019499938964844e+02, 3.007499938964844e+02, 2.995499938964844e+02, 2.983499938964844e+02, 2.971499938964844e+02, 2.959499938964844e+02, 2.947499938964844e+02, 2.935500034332366e+02, 2.923499938964844e+02, 2.911499938964844e+02, 2.899499938964844e+02, 2.887499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.893499938964844e+02, 2.905499938964844e+02, 2.917499938964844e+02, 2.929499938964844e+02, 2.941499938964844e+02, 2.953499938964844e+02, 2.965500015258498e+02, 2.977499938964844e+02, 2.989499938964844e+02, 3.001499938964844e+02, 3.013499938964844e+02, 3.025499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.019499938964844e+02, 3.007499938964844e+02, 2.995499938964844e+02, 2.983499938964844e+02, 2.971499938964844e+02, 2.959499938964844e+02, 2.947499938964844e+02, 2.935499938964844e+02, 2.923499938964844e+02, 2.911499938964844e+02, 2.899499938964844e+02, 2.887499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02] +flxBou.uppBou=[2.971499938964844e+02, 2.971499938964844e+02] +flxBou.lowBou=[2.931499938964844e+02, 2.931499938964844e+02] +flxBou.degSecOutUppBou=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.999999999999998e-01, 1.699999999999998e+00, 4.5e+00, 8.899999999999997e+00, 1.469999999999999e+01, 2.160000000000001e+01, 2.88e+01, 3.6e+01, 4.32e+01, 5.040000000000001e+01, 5.759999999999999e+01, 6.480000000000001e+01, 7.2e+01, 7.919999999999999e+01, 8.639999999999999e+01, 9.360000000000001e+01, 1.008e+02, 1.08e+02, 1.144e+02, 1.194e+02, 1.23e+02, 1.252e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.26e+02, 1.263e+02, 1.277e+02, 1.305e+02, 1.349e+02, 1.407e+02, 1.476e+02, 1.548e+02, 1.62e+02, 1.692e+02, 1.764e+02, 1.836000000000001e+02, 1.908e+02, 1.98e+02, 2.051999999999999e+02, 2.123999999999999e+02, 2.196e+02, 2.268e+02, 2.34e+02, 2.404e+02, 2.454e+02, 2.49e+02, 2.512e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02, 2.52e+02] +flxBou.degSecOutLowBou=[0e+00, -5.2e+00, -9e+00, -1.14e+01, -1.24e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.29e+01, -1.45e+01, -1.769999999999999e+01, -2.229999999999999e+01, -2.800000000000001e+01, -3.400000000000002e+01, -4e+01, -4.599999999999998e+01, -5.199999999999999e+01, -5.800000000000001e+01, -6.399999999999999e+01, -7e+01, -7.600000000000001e+01, -8.2e+01, -8.799999999999997e+01, -9.399999999999999e+01, -1e+02, -1.052e+02, -1.09e+02, -1.114e+02, -1.124e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.125e+02, -1.129e+02, -1.145e+02, -1.177e+02, -1.223e+02, -1.28e+02, -1.34e+02, -1.4e+02, -1.46e+02, -1.52e+02, -1.580000000000001e+02, -1.64e+02, -1.7e+02, -1.759999999999999e+02, -1.819999999999999e+02, -1.88e+02, -1.94e+02, -2e+02] +flxBou.totDegSecOutBou=[0e+00, 5.2e+00, 9e+00, 1.14e+01, 1.24e+01, 1.25e+01, 1.25e+01, 1.25e+01, 1.28e+01, 1.42e+01, 1.7e+01, 2.14e+01, 2.719999999999999e+01, 3.410000000000001e+01, 4.13e+01, 4.85e+01, 5.57e+01, 6.290000000000001e+01, 7.009999999999999e+01, 7.730000000000001e+01, 8.45e+01, 9.169999999999999e+01, 9.889999999999999e+01, 1.061e+02, 1.133e+02, 1.205e+02, 1.269e+02, 1.319e+02, 1.355e+02, 1.377e+02, 1.385e+02, 1.385e+02, 1.385e+02, 1.385e+02, 1.389e+02, 1.405e+02, 1.437e+02, 1.483e+02, 1.54e+02, 1.6e+02, 1.66e+02, 1.72e+02, 1.78e+02, 1.84e+02, 1.9e+02, 1.96e+02, 2.02e+02, 2.08e+02, 2.14e+02, 2.2e+02, 2.26e+02, 2.312e+02, 2.35e+02, 2.374e+02, 2.384e+02, 2.385e+02, 2.385e+02, 2.385e+02, 2.388e+02, 2.402e+02, 2.43e+02, 2.474e+02, 2.532e+02, 2.601e+02, 2.673e+02, 2.745e+02, 2.817e+02, 2.889e+02, 2.961e+02, 3.033e+02, 3.105e+02, 3.176999999999999e+02, 3.249e+02, 3.321e+02, 3.393e+02, 3.465e+02, 3.529e+02, 3.579e+02, 3.615e+02, 3.637e+02, 3.645e+02, 3.645e+02, 3.645e+02, 3.645e+02, 3.649e+02, 3.665e+02, 3.697e+02, 3.743e+02, 3.8e+02, 3.86e+02, 3.92e+02, 3.98e+02, 4.04e+02, 4.100000000000001e+02, 4.16e+02, 4.22e+02, 4.279999999999999e+02, 4.339999999999999e+02, 4.4e+02, 4.46e+02, 4.52e+02] +din16798_1.T=[2.881499938964844e+02, 2.893499938964844e+02, 2.905499938964844e+02, 2.917499938964844e+02, 2.929499938964844e+02, 2.941499938964844e+02, 2.953499938964844e+02, 2.965499938964844e+02, 2.977499938964844e+02, 2.989499938964844e+02, 3.001499938964844e+02, 3.013499938964844e+02, 3.025499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.019499938964844e+02, 3.007499938964844e+02, 2.995499938964844e+02, 2.983499938964844e+02, 2.971499938964844e+02, 2.959499938964844e+02, 2.947499938964844e+02, 2.935500034332366e+02, 2.923499938964844e+02, 2.911499938964844e+02, 2.899499938964844e+02, 2.887499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.893499938964844e+02, 2.905499938964844e+02, 2.917499938964844e+02, 2.929499938964844e+02, 2.941499938964844e+02, 2.953499938964844e+02, 2.965500015258498e+02, 2.977499938964844e+02, 2.989499938964844e+02, 3.001499938964844e+02, 3.013499938964844e+02, 3.025499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.019499938964844e+02, 3.007499938964844e+02, 2.995499938964844e+02, 2.983499938964844e+02, 2.971499938964844e+02, 2.959499938964844e+02, 2.947499938964844e+02, 2.935499938964844e+02, 2.923499938964844e+02, 2.911499938964844e+02, 2.899499938964844e+02, 2.887499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02] +din16798_1.comT.TComUppBou=[2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.974499938964844e+02, 2.977499938964844e+02, 2.98050002956399e+02, 2.983499938964844e+02, 2.986499938964844e+02, 2.989499938964844e+02, 2.992499938964844e+02, 2.995499938964844e+02, 2.998499938964844e+02, 3.001499938964844e+02, 3.004499938964844e+02, 3.007499938964844e+02, 3.010499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.010500034331911e+02, 3.007499938964844e+02, 3.004499938964844e+02, 3.001499938964844e+02, 2.998499938964844e+02, 2.995499938964844e+02, 2.992499938964844e+02, 2.989499938964844e+02, 2.986499938964844e+02, 2.983499938964844e+02, 2.980499938964844e+02, 2.977499938964844e+02, 2.974499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02] +din16798_1.comT.TComLowBou=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.934499938964844e+02, 2.937499938964844e+02, 2.94050002956399e+02, 2.943499938964844e+02, 2.946499938964844e+02, 2.949499938964844e+02, 2.952499938964844e+02, 2.955499938964844e+02, 2.958499938964844e+02, 2.961499938964844e+02, 2.964499938964844e+02, 2.967499938964844e+02, 2.970499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.970500034331911e+02, 2.967499938964844e+02, 2.964499938964844e+02, 2.961499938964844e+02, 2.958499938964844e+02, 2.955499938964844e+02, 2.952499938964844e+02, 2.949499938964844e+02, 2.946499938964844e+02, 2.943499938964844e+02, 2.940499938964844e+02, 2.937499938964844e+02, 2.934499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +din16798_1.TAmb=[2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.639499938964844e+02, 2.651499938964844e+02, 2.663499938964844e+02, 2.675499938964844e+02, 2.687499938964844e+02, 2.699499938964844e+02, 2.711499938964844e+02, 2.723499938964844e+02, 2.735499938964844e+02, 2.747499938964844e+02, 2.759499938964844e+02, 2.771499938964844e+02, 2.783499938964844e+02, 2.795499938964844e+02, 2.807499938964844e+02, 2.819499938964844e+02, 2.831499938964844e+02, 2.843499938964844e+02, 2.855499938964844e+02, 2.867499938964844e+02, 2.879499938964844e+02, 2.891499938964844e+02, 2.903499938964844e+02, 2.915499938964844e+02, 2.927499996185358e+02, 2.939499938964844e+02, 2.951499938964844e+02, 2.963499938964844e+02, 2.975499938964844e+02, 2.987499938964844e+02, 2.999499938964844e+02, 3.011499938964844e+02, 3.023499938964844e+02, 3.035499938964844e+02, 3.047499938964844e+02, 3.059499938964844e+02, 3.071499938964844e+02, 3.083499938964844e+02, 3.095499938964844e+02, 3.107499938964844e+02, 3.119499938964844e+02, 3.131499938964844e+02, 3.119499938964844e+02, 3.107499938964844e+02, 3.095499938964844e+02, 3.083499938964844e+02, 3.071499938964844e+02, 3.059499938964844e+02, 3.047500015258498e+02, 3.035499938964844e+02, 3.023499938964844e+02, 3.011499938964844e+02, 2.999499938964844e+02, 2.987499938964844e+02, 2.975499938964844e+02, 2.963499938964844e+02, 2.951499938964844e+02, 2.939499938964844e+02, 2.927499938964844e+02, 2.915499938964844e+02, 2.903499938964844e+02, 2.891499938964844e+02, 2.879499938964844e+02, 2.867499938964844e+02, 2.855499938964844e+02, 2.843499938964844e+02, 2.831499938964844e+02, 2.819499938964844e+02, 2.807499938964844e+02, 2.795499938964844e+02, 2.783499938964844e+02, 2.771499938964844e+02, 2.759499938964844e+02, 2.747499938964844e+02, 2.735499938964844e+02, 2.723499938964844e+02, 2.711499938964844e+02, 2.699499938964844e+02, 2.687499938964844e+02, 2.675499938964844e+02, 2.663499938964844e+02, 2.651499938964844e+02, 2.639499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02, 2.631499938964844e+02] +din16798_1.degSecOutUppBou=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.999999999999998e-01, 1.699999999999998e+00, 4.5e+00, 8.899999999999997e+00, 1.469999999999999e+01, 2.160000000000001e+01, 2.88e+01, 3.6e+01, 4.32e+01, 5.040000000000001e+01, 5.759999999999999e+01, 6.480000000000001e+01, 7.2e+01, 7.919999999999999e+01, 8.639999999999999e+01, 9.360000000000001e+01, 1.008e+02, 1.08e+02, 1.144e+02, 1.194e+02, 1.23e+02, 1.252e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.259997024536133e+02, 1.269997009277344e+02, 1.297496948242188e+02, 1.339496948242187e+02, 1.387996948242187e+02, 1.439996948242188e+02, 1.495996948242188e+02, 1.555496948242188e+02, 1.618496948242188e+02, 1.684996948242187e+02, 1.755012969970703e+02, 1.827012969970702e+02, 1.899012969970703e+02, 1.971012969970703e+02, 2.043012969970703e+02, 2.115012969970703e+02, 2.179012969970703e+02, 2.229012969970703e+02, 2.265012969970703e+02, 2.287012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02, 2.295012969970703e+02] +din16798_1.degSecOutLowBou=[0e+00, -5.2e+00, -9e+00, -1.14e+01, -1.24e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.25e+01, -1.269999961853027e+01, -1.419999961853028e+01, -1.739999961853027e+01, -2.259999961853025e+01, -2.955000038146972e+01, -3.795000152587892e+01, -4.700000152587894e+01, -5.640000152587891e+01, -6.620000152587887e+01, -7.635000152587889e+01, -8.685077056884766e+01, -9.760128326416013e+01, -1.084012832641602e+02, -1.192012832641602e+02, -1.30001286315918e+02, -1.408012908935546e+02, -1.516012908935547e+02, -1.624012908935547e+02, -1.724012908935547e+02, -1.810012908935547e+02, -1.882012908935547e+02, -1.940012908935547e+02, -1.984012908935547e+02, -2.012012329101562e+02, -2.026006385817047e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.028002777099609e+02, -2.032002777099609e+02, -2.048002777099609e+02, -2.08000277709961e+02, -2.126002777099609e+02, -2.183002777099609e+02, -2.243002777099609e+02, -2.303002777099609e+02, -2.363002777099609e+02, -2.42300277709961e+02, -2.48300277709961e+02, -2.543002777099609e+02, -2.603002624511719e+02, -2.663002624511718e+02, -2.723002624511718e+02, -2.783002624511719e+02, -2.843002624511719e+02, -2.903002624511719e+02] +din16798_1.totDegSecOutBou=[0e+00, 5.2e+00, 9e+00, 1.14e+01, 1.24e+01, 1.25e+01, 1.25e+01, 1.25e+01, 1.28e+01, 1.42e+01, 1.7e+01, 2.14e+01, 2.719999999999999e+01, 3.410000000000001e+01, 4.13e+01, 4.85e+01, 5.57e+01, 6.290000000000001e+01, 7.009999999999999e+01, 7.730000000000001e+01, 8.45e+01, 9.169999999999999e+01, 9.889999999999999e+01, 1.061e+02, 1.133e+02, 1.205e+02, 1.269e+02, 1.319e+02, 1.355e+02, 1.377e+02, 1.384996948242188e+02, 1.384996948242188e+02, 1.384996948242188e+02, 1.386996992111161e+02, 1.401997039794922e+02, 1.433997039794922e+02, 1.485997039794922e+02, 1.555497039794922e+02, 1.639497039794922e+02, 1.729997039794922e+02, 1.823997039794922e+02, 1.921997039794921e+02, 2.023497039794922e+02, 2.12850473022461e+02, 2.236009857177734e+02, 2.344009857177734e+02, 2.452009857177734e+02, 2.560009918212891e+02, 2.668010009765625e+02, 2.776010009765625e+02, 2.884010009765625e+02, 2.984010009765625e+02, 3.070010009765625e+02, 3.142010009765625e+02, 3.200010009765625e+02, 3.244010009765625e+02, 3.272009399414063e+02, 3.286003410352889e+02, 3.287999877929688e+02, 3.287999877929688e+02, 3.287999877929688e+02, 3.297999877929688e+02, 3.325499877929688e+02, 3.367499877929687e+02, 3.415999877929688e+02, 3.467999877929688e+02, 3.523999877929688e+02, 3.583499877929688e+02, 3.646499877929688e+02, 3.712999877929688e+02, 3.783015747070312e+02, 3.855015747070312e+02, 3.927015747070312e+02, 3.999015747070312e+02, 4.071015747070312e+02, 4.143015747070312e+02, 4.207015747070313e+02, 4.257015747070313e+02, 4.293015747070312e+02, 4.315015747070313e+02, 4.323015747070312e+02, 4.323015747070312e+02, 4.323015747070312e+02, 4.323015747070312e+02, 4.327015747070312e+02, 4.343015747070312e+02, 4.375015747070312e+02, 4.421015747070313e+02, 4.478015747070312e+02, 4.538015747070312e+02, 4.598015747070312e+02, 4.658015747070312e+02, 4.718015747070312e+02, 4.778015747070313e+02, 4.838015747070312e+02, 4.898015747070312e+02, 4.958015747070312e+02, 5.018015747070312e+02, 5.078015747070312e+02, 5.138015747070312e+02, 5.198015747070312e+02] diff --git a/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/Co2Kpis.mos b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/Co2Kpis.mos new file mode 100644 index 0000000000..232c965080 --- /dev/null +++ b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/Co2Kpis.mos @@ -0,0 +1,9 @@ +simulateModel("AixLib.Utilities.KPIs.Examples.Co2Kpis", startTime=0, stopTime=120, outputInterval=1, method="dassl", tolerance=1e-6, resultFile="Co2Kpis"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"traCo2Con.y"}, heading="Fixed limit", range={0.0, 120.0, 0.0, 3000.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"booPulAct.y"}, range={0.0, 120.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"fixBou.ppmSecOutBou", "fixBouAct.ppmSecOutBou", "fixBouRes.ppmSecOutBou"}, range={0.0, 120.0, -20000.0, 60000.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"s", "s", "s"}); +createPlot(id=1, position={0, 0, 1653, 686}, y={"fixBouTim.totTimeOutBou", "fixBouTimRes.totTimeOutBou"}, range={0.0, 120.0, -50.0, 100.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"s", "s"}); +createPlot(id=2, position={50, 47, 1110, 580}, y={"traCo2Con.y"}, heading="DIN EN 16798-1", range={0.0, 120.0, 0.0, 3000.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={50, 47, 1110, 580}, y={"booPulAct.y"}, range={0.0, 120.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={50, 47, 1110, 580}, y={"din16798Tim.totTimeOutBouCat1", "din16798Tim.totTimeOutBouCat2", "din16798Tim.totTimeOutBouCat3", "din16798Tim.totTimeOutBouCat4"}, range={0.0, 120.0, -50.0, 100.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s", displayUnits={"s", "s", "s", "s"}); +createPlot(id=2, position={50, 47, 1110, 580}, y={"din16798ActTim.totTimeOutBouCat1", "din16798ActTim.totTimeOutBouCat2", "din16798ActTim.totTimeOutBouCat3", "din16798ActTim.totTimeOutBouCat4"}, range={0.0, 120.0, -20.0, 60.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s", displayUnits={"s", "s", "s", "s"}); diff --git a/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/EnergyKpis.mos b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/EnergyKpis.mos new file mode 100644 index 0000000000..32be48d960 --- /dev/null +++ b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/EnergyKpis.mos @@ -0,0 +1,7 @@ +simulateModel("AixLib.Utilities.KPIs.Examples.EnergyKpis", startTime=0, stopTime=10, outputInterval=1, method="dassl", tolerance=1e-6, resultFile="EnergyKpis"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"pulQ_flow.y"}, heading="Thermal meter", range={0.0, 10.0, -1.5, 1.5}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s", displayUnits={"W"}); +createPlot(id=1, position={0, 0, 1653, 686}, y={"thmMtr.QHea", "thmMtr.QCoo", "thmMtrTim.QHea", "thmMtrTim.QCoo"}, range={0.0, 10.0, -2.0000000000000003E-06, 2.0000000000000003E-06}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s", displayUnits={"kWh", "kWh", "kWh", "kWh"}); +createPlot(id=1, position={0, 0, 1653, 686}, y={"thmMtrTim.timeHea", "thmMtrTim.timeCoo"}, range={0.0, 10.0, -2.0, 8.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"s", "s"}); +createPlot(id=2, position={85, 67, 995, 603}, y={"pulP.y"}, heading="Electricity meter", range={0.0, 10.0, -1.0, 3.0}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s", displayUnits={"W"}); +createPlot(id=2, position={85, 67, 995, 603}, y={"eleMtr.E", "eleMtrTim.E"}, range={0.0, 10.0, -1.0000000000000002E-06, 3.0000000000000005E-06}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"kWh", "kWh"}); +createPlot(id=2, position={85, 67, 995, 603}, y={"eleMtrTim.timeAct"}, range={0.0, 10.0, -2.0, 6.0}, grid=true, subPlot=103, colors={{28,108,200}}, timeUnit="s", displayUnits={"s"}); diff --git a/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/IntegralErrorDualReference.mos b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/IntegralErrorDualReference.mos new file mode 100644 index 0000000000..51e3552f3a --- /dev/null +++ b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/IntegralErrorDualReference.mos @@ -0,0 +1,10 @@ +simulateModel("AixLib.Utilities.KPIs.Examples.IntegralErrorDualReference", startTime=0, stopTime=10, outputInterval=1, method="dassl", tolerance=1e-6, resultFile="IntegralErrorDualReference"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"pul.y", "ramUppBou.y", "ramLowBou.y"}, heading="Normal", range={0.0, 10.0, -6.0, 6.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"booSteItgAct.y", "booSteItgRes.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"ied.y", "ied.yPos", "ied.yNeg"}, range={0.0, 10.0, -20.0, 20.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s"); +createPlot(id=2, position={75, 75, 584, 361}, y={"pul.y", "ramUppBou.y", "ramLowBou.y"}, heading="With activation", range={0.0, 10.0, -6.0, 6.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s"); +createPlot(id=2, position={75, 75, 584, 361}, y={"booSteItgAct.y", "booSteItgRes.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={75, 75, 584, 361}, y={"iedAct.y", "iedAct.yPos", "iedAct.yNeg"}, range={0.0, 10.0, -6.0, 6.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s"); +createPlot(id=3, position={95, 95, 584, 361}, y={"pul.y", "ramUppBou.y", "ramLowBou.y"}, heading="With activation and reset", range={0.0, 10.0, -6.0, 6.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s"); +createPlot(id=3, position={95, 95, 584, 361}, y={"booSteItgAct.y", "booSteItgRes.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={95, 95, 584, 361}, y={"iedActRes.y", "iedActRes.yPos", "iedActRes.yNeg"}, range={0.0, 10.0, -4.0, 6.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s"); diff --git a/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/IntegralErrorSingleReference.mos b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/IntegralErrorSingleReference.mos new file mode 100644 index 0000000000..eae88705a0 --- /dev/null +++ b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/IntegralErrorSingleReference.mos @@ -0,0 +1,10 @@ +simulateModel("AixLib.Utilities.KPIs.Examples.IntegralErrorSingleReference", startTime=0, stopTime=10, outputInterval=1, method="dassl", tolerance=1e-6, resultFile="IntegralErrorSingleReference"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"pul.y", "conZeroRef.y"}, heading="IAE and ISE", range={0.0, 10.0, -1.0, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"booSteItgAct.y", "booSteItgRes.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"iae.y", "iaeAct.y", "iaeActRes.y", "ise.y"}, range={0.0, 10.0, -2.0, 8.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s"); +createPlot(id=2, position={75, 75, 584, 361}, y={"pul.y", "conZeroRef.y"}, heading="Integral timer", range={0.0, 10.0, -1.0, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); +createPlot(id=2, position={75, 75, 584, 361}, y={"booSteItgAct.y", "booSteItgRes.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={75, 75, 584, 361}, y={"itgTim.y", "itgTimRes.y"}, range={0.0, 10.0, -2.0, 8.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); +createPlot(id=3, position={95, 95, 584, 361}, y={"pul.y", "conZeroRef.y"}, heading="Integrator by sign", range={0.0, 10.0, -1.0, 1.5}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); +createPlot(id=3, position={95, 95, 584, 361}, y={"booSteItgAct.y", "booSteItgRes.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={95, 95, 584, 361}, y={"itgErrPos.y", "itgErrNeg.y", "itgErrPosAct.y", "itgErrPosActRes.y"}, range={0.0, 10.0, -4.0, 6.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s"); diff --git a/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/TemperatureKpis.mos b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/TemperatureKpis.mos new file mode 100644 index 0000000000..41518ed2a5 --- /dev/null +++ b/AixLib/Resources/Scripts/Dymola/Utilities/KPIs/Examples/TemperatureKpis.mos @@ -0,0 +1,10 @@ +simulateModel("AixLib.Utilities.KPIs.Examples.TemperatureKpis", startTime=0, stopTime=120, outputInterval=1, method="dassl", tolerance=1e-6, resultFile="TemperatureKpis"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"traT.y", "fixBou.TCom", "fixBou.conTUppBou.k", "fixBou.conTLowBou.k"}, heading="Fixed boundaries", range={0.0, 120.0, 10.0, 40.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s", displayUnits={"degC", "degC", "degC", "degC"}); +createPlot(id=1, position={0, 0, 1653, 686}, y={"booPulAct.y"}, range={0.0, 120.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={0, 0, 1653, 686}, y={"fixBou.totDegSecOutBou", "fixBouAct.totDegSecOutBou", "fixBouRes.totDegSecOutBou"}, range={0.0, 120.0, -200.0, 600.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"K.s", "K.s", "K.s"}); +createPlot(id=1, position={0, 0, 1653, 686}, y={"fixBouTim.totTimeOutBou", "fixBouTimRes.totTimeOutBou"}, range={0.0, 120.0, -50.0, 150.0}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"s", "s"}); +createPlot(id=2, position={15, 15, 584, 361}, y={"flxBou.T", "flxBou.uppBou", "flxBou.lowBou"}, heading="Flexible boundaries", range={0.0, 120.0, 14.0, 32.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC", "degC"}); +createPlot(id=2, position={15, 15, 584, 361}, y={"flxBou.degSecOutUppBou", "flxBou.degSecOutLowBou", "flxBou.totDegSecOutBou"}, range={0.0, 120.0, -300.0, 500.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"K.s", "K.s", "K.s"}); +createPlot(id=3, position={35, 35, 584, 361}, y={"din16798_1.T", "din16798_1.comT.TComUppBou", "din16798_1.comT.TComLowBou"}, heading="DIN EN 16798-1", range={0.0, 120.0, 10.0, 35.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"degC", "degC", "degC"}); +createPlot(id=3, position={35, 35, 584, 361}, y={"din16798_1.TAmb"}, range={0.0, 120.0, -20.0, 60.0}, grid=true, subPlot=102, colors={{28,108,200}}, timeUnit="s", displayUnits={"degC"}); +createPlot(id=3, position={35, 35, 584, 361}, y={"din16798_1.degSecOutUppBou", "din16798_1.degSecOutLowBou", "din16798_1.totDegSecOutBou"}, range={0.0, 120.0, -400.0, 600.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"K.s", "K.s", "K.s"}); diff --git a/AixLib/Utilities/KPIs/BaseClasses/ComfortTemperatureDIN16798.mo b/AixLib/Utilities/KPIs/BaseClasses/ComfortTemperatureDIN16798.mo new file mode 100644 index 0000000000..64c5da54a3 --- /dev/null +++ b/AixLib/Utilities/KPIs/BaseClasses/ComfortTemperatureDIN16798.mo @@ -0,0 +1,52 @@ +within AixLib.Utilities.KPIs.BaseClasses; +model ComfortTemperatureDIN16798 + "Comfort temperature based on DIN EN 16798-1" + extends Modelica.Blocks.Icons.Block; + Modelica.Blocks.Interfaces.RealInput TAmb( + final unit="K", + displayUnit="degC", + final min=0) "Ambient temperature (hourly averaged)" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Interfaces.RealOutput TCom(final unit="K", displayUnit="degC") + "Comfort room temperature" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Interfaces.RealOutput TComUppBou(final unit="K", displayUnit="degC") + "Upper bound of comfort room temperature" + annotation (Placement(transformation(extent={{100,60},{120,80}}))); + Modelica.Blocks.Interfaces.RealOutput TComLowBou(final unit="K", displayUnit="degC") + "Lower bound of comfort room temperature" + annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); +protected + Modelica.Units.NonSI.Temperature_degC TAmb_degC= + Modelica.Units.Conversions.to_degC(TAmb) + "Ambient temperature in degC"; + Modelica.Units.NonSI.Temperature_degC TCom_degC= + min(max(22, 18 + 0.25*TAmb_degC), 26) + "Comfort room temperature in degC"; + Modelica.Units.SI.TemperatureDifference dTTol=2 + "Tolerance of temperature difference"; +equation + TCom = Modelica.Units.Conversions.from_degC(TCom_degC); + TComLowBou = TCom - dTTol; + TComUppBou = TCom + dTTol; + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Line( + points={{-80,-40},{-62,-40},{-40,-40},{40,40},{80,40}}, + color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash), + Line(points={{-80,0},{-40,0},{40,80},{80,80}}, color={0,0,0}), + Line(points={{-80,-80},{-40,-80},{40,0},{80,0}}, color={0,0,0})}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

This model calculates the comfort temperature band based on ambiemt temperature according to DIN EN 16798-1.

+")); +end ComfortTemperatureDIN16798; diff --git a/AixLib/Utilities/KPIs/BaseClasses/PartialAssessmentBase.mo b/AixLib/Utilities/KPIs/BaseClasses/PartialAssessmentBase.mo new file mode 100644 index 0000000000..58d2ec8305 --- /dev/null +++ b/AixLib/Utilities/KPIs/BaseClasses/PartialAssessmentBase.mo @@ -0,0 +1,47 @@ +within AixLib.Utilities.KPIs.BaseClasses; +partial model PartialAssessmentBase + "Base model for value assessment with conditional inputs for activation, reset, and timer" + parameter Boolean use_itgAct_in=false + "= true, enable activation connector; = false, disable connector, integrator continuously activated" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + parameter Boolean resItgInBou=false + "= true, integrators will be reset if the input value within bounds" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + parameter Boolean use_itgTim=false + "= true, activate integral timers" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + parameter Boolean resItgTimInBou=false + "= true, integral timers will be reset if the input value within bounds" + annotation(Dialog(enable=use_itgTim), Evaluate=true, HideResult=true, + choices(checkBox=true)); + parameter Integer nItgTim = 1 "Number of integral timers"; + Modelica.Blocks.Interfaces.BooleanInput itgAct_in if use_itgAct_in + "Conditional connector to activate integrator" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={0,-120}))); + Modelica.Blocks.Logical.Not notRes if (resItgInBou or resItgTimInBou) + "Conditional not logic for reset" + annotation (Placement(transformation(extent={{40,-40},{20,-20}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralTimer itgTim[nItgTim]( + each final use_itgRes_in=resItgTimInBou) if use_itgTim + "Conditional integral timers" + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

This partial model is the base model for KPI assessments.

+

If the port itgAct_in is enabled, the input will be integrated only when this port's input is set to true.

+

If the parameter resItgInBou is true, integrators will be reset if the input value is within the boundaries or below the limit.

+

If the parameter use_itgTim is true, integral timers are activated and incorporated into the model with the number of nItgTim.

+

If the paramter resItgTimInBou is true, integral timers will be reset if the input value is within the boundaries or below the limit.

+", revisions=" + +")); +end PartialAssessmentBase; diff --git a/AixLib/Utilities/KPIs/BaseClasses/PartialCo2Assessment.mo b/AixLib/Utilities/KPIs/BaseClasses/PartialCo2Assessment.mo new file mode 100644 index 0000000000..705fe9b998 --- /dev/null +++ b/AixLib/Utilities/KPIs/BaseClasses/PartialCo2Assessment.mo @@ -0,0 +1,16 @@ +within AixLib.Utilities.KPIs.BaseClasses; +partial model PartialCo2Assessment "Partial model for CO2 assessment" + extends AixLib.Utilities.KPIs.BaseClasses.PartialAssessmentBase; + Modelica.Blocks.Interfaces.RealInput co2Con(final min=0) "CO2 concentration in ppm" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + annotation (Documentation(info=" +

This partial model is the base model of CO2 concentration assessments.

+", revisions=" + +")); +end PartialCo2Assessment; diff --git a/AixLib/Utilities/KPIs/BaseClasses/PartialIntegralErrorDualReference.mo b/AixLib/Utilities/KPIs/BaseClasses/PartialIntegralErrorDualReference.mo new file mode 100644 index 0000000000..de1da59b0c --- /dev/null +++ b/AixLib/Utilities/KPIs/BaseClasses/PartialIntegralErrorDualReference.mo @@ -0,0 +1,29 @@ +within AixLib.Utilities.KPIs.BaseClasses; +partial model PartialIntegralErrorDualReference + "Partial model for integral error with dual reference values" + extends AixLib.Utilities.KPIs.BaseClasses.PartialIntegratorBase; + Modelica.Blocks.Interfaces.RealInput u "Value input" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Interfaces.RealInput refUpp "Upper reference value input" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + Modelica.Blocks.Interfaces.RealInput refLow "Lower reference value input" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + Modelica.Blocks.Interfaces.RealOutput yPos + "Positive integral error greater than upper reference" + annotation (Placement(transformation(extent={{100,50},{120,70}}))); + Modelica.Blocks.Interfaces.RealOutput yNeg + "Negative integral error less than lower reference" + annotation (Placement(transformation(extent={{100,-70},{120,-50}}))); +equation + assert(refUpp > refLow, "Dual references wrong (refUpp<=refLow)"); + annotation (Documentation(revisions=" + +", info=" +

This partial model is the base model of error integrators related to dual references.

+")); +end PartialIntegralErrorDualReference; diff --git a/AixLib/Utilities/KPIs/BaseClasses/PartialIntegralErrorSingleReference.mo b/AixLib/Utilities/KPIs/BaseClasses/PartialIntegralErrorSingleReference.mo new file mode 100644 index 0000000000..f6b7e22482 --- /dev/null +++ b/AixLib/Utilities/KPIs/BaseClasses/PartialIntegralErrorSingleReference.mo @@ -0,0 +1,48 @@ +within AixLib.Utilities.KPIs.BaseClasses; +partial model PartialIntegralErrorSingleReference + "Partial model for integral error with single reference value" + extends AixLib.Utilities.KPIs.BaseClasses.PartialIntegratorBase; + Modelica.Blocks.Interfaces.RealInput u "Value input" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Interfaces.RealInput ref "Reference value input" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + Modelica.Blocks.Math.Feedback dif "Difference between u and ref" + annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); + Modelica.Blocks.Logical.Switch swiErr "Switch for error" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Modelica.Blocks.Sources.Constant conZero(final k=0) "Constant 0" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + Modelica.Blocks.Continuous.Integrator errItg(final use_reset=use_itgRes_in) + "Error integrator" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); +equation + connect(u, dif.u1) + annotation (Line(points={{-120,0},{-88,0}}, color={0,0,127})); + connect(ref, dif.u2) + annotation (Line(points={{-120,-60},{-80,-60},{-80,-8}}, color={0,0,127})); + connect(dif.y, swiErr.u1) annotation (Line(points={{-71,0},{-40,0},{-40,8},{-22, + 8}}, color={0,0,127})); + connect(conZero.y, swiErr.u3) annotation (Line(points={{-39,-30},{-30,-30},{-30, + -8},{-22,-8}}, color={0,0,127})); + connect(errItg.y, y) + annotation (Line(points={{81,0},{110,0}}, color={0,0,127})); + connect(itgRes_in, errItg.reset) annotation (Line( + points={{60,-120},{60,-100},{76,-100},{76,-12}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgRes_in then LinePattern.Solid else LinePattern.Dash))); + connect(booExpItgAct.y, swiErr.u2) annotation (Line(points={{-79,90},{-30,90}, + {-30,0},{-22,0}}, color={255,0,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

This partial model is the base model of error integrators related to single reference.

+")); +end PartialIntegralErrorSingleReference; diff --git a/AixLib/Utilities/KPIs/BaseClasses/PartialIntegratorBase.mo b/AixLib/Utilities/KPIs/BaseClasses/PartialIntegratorBase.mo new file mode 100644 index 0000000000..bbfa43a0e6 --- /dev/null +++ b/AixLib/Utilities/KPIs/BaseClasses/PartialIntegratorBase.mo @@ -0,0 +1,49 @@ +within AixLib.Utilities.KPIs.BaseClasses; +partial model PartialIntegratorBase + "Base model of integrator with conditional inputs for activation and reset" + parameter Boolean use_itgAct_in=false + "= true, enable activation connector; = false, disable connector, integrator continuously activated" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + parameter Boolean use_itgRes_in=false "= true, enable reset connector" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + Modelica.Blocks.Interfaces.RealOutput y "Integral error output" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Interfaces.BooleanInput itgAct_in if use_itgAct_in + "Conditional connector to activate integrator" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={0,-120}))); + Modelica.Blocks.Interfaces.BooleanInput itgRes_in if use_itgRes_in + "Conditional connector to reset integrator" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={60,-120}))); + Modelica.Blocks.Sources.BooleanExpression booExpItgAct( + final y=itgAct_internal) + "Output for itgAct_internal" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); +protected + Modelica.Blocks.Interfaces.BooleanInput itgAct_internal + "Internal connector of integrator activation"; +equation + connect(itgAct_in, itgAct_internal); + if not use_itgAct_in then + // Set true if conditional connector disabled + itgAct_internal = true; + end if; + annotation (Documentation(revisions=" + +", info=" +

This partial model is the base model of error integrators.

+

If the port itgAct_in is enabled, the input will be integrated only when this port's input is set to true.

+

If the port itgRes_in is enabled, the integrated value will be reset to 0 whenever this port experiences a rising edge (similar to Modelica.Blocks.Continuous.Integrator).

+")); +end PartialIntegratorBase; diff --git a/AixLib/Utilities/KPIs/BaseClasses/PartialTemperatureAssessment.mo b/AixLib/Utilities/KPIs/BaseClasses/PartialTemperatureAssessment.mo new file mode 100644 index 0000000000..41b95a1179 --- /dev/null +++ b/AixLib/Utilities/KPIs/BaseClasses/PartialTemperatureAssessment.mo @@ -0,0 +1,113 @@ +within AixLib.Utilities.KPIs.BaseClasses; +partial model PartialTemperatureAssessment + "Partial model for temperature assessment" + extends AixLib.Utilities.KPIs.BaseClasses.PartialAssessmentBase( + final nItgTim=3); + Modelica.Blocks.Interfaces.RealInput T( + final unit="K", displayUnit="degC", final min=0) "Temperature input" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Interfaces.RealOutput degSecOutUppBou(final unit="K.s") + "Degree-second out of upper bound" + annotation (Placement(transformation(extent={{100,80},{120,100}}))); + Modelica.Blocks.Interfaces.RealOutput degSecOutLowBou(final unit="K.s") + "Degree-second out of lower bound" + annotation (Placement(transformation(extent={{100,40},{120,60}}))); + Modelica.Blocks.Interfaces.RealOutput totDegSecOutBou(final unit="K.s") + "Total degree-second out of bound" + annotation (Placement(transformation(extent={{100,60},{120,80}}))); + AixLib.Utilities.KPIs.IntegralErrorDualReference.IntegralErrorDualBounds itgErrDuaBou( + final use_itgAct_in=use_itgAct_in, final use_itgRes_in=resItgInBou) + "Dual bounds integrator for temperature" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}))); + Modelica.Blocks.Interfaces.RealOutput timeOutUppBou(final unit="s") if use_itgTim + "Time out of upper bound" + annotation (Placement(transformation(extent={{100,-60},{120,-40}}))); + Modelica.Blocks.Interfaces.RealOutput totTimeOutBou(final unit="s") if use_itgTim + "Total time out of bound" + annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); + Modelica.Blocks.Interfaces.RealOutput timeOutLowBou(final unit="s") if use_itgTim + "Time out of lower bound" + annotation (Placement(transformation(extent={{100,-100},{120,-80}}))); +equation + connect(T, itgErrDuaBou.u) + annotation (Line(points={{-120,0},{-24,0}}, color={0,0,127})); + connect(itgAct_in, itgErrDuaBou.itgAct_in) annotation (Line( + points={{0,-120},{0,-24},{0,-24}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgAct_in then LinePattern.Solid else LinePattern.Dash))); + connect(itgErrDuaBou.isItgAct, notRes.u) annotation (Line( + points={{22,4},{48,4},{48,-30},{42,-30}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if (resItgInBou or resItgTimInBou) then LinePattern.Solid + else LinePattern.Dash))); + connect(notRes.y, itgErrDuaBou.itgRes_in) annotation (Line( + points={{19,-30},{12,-30},{12,-24}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if resItgInBou then LinePattern.Solid else LinePattern.Dash))); + connect(itgErrDuaBou.yPos, degSecOutUppBou) annotation (Line(points={{22,12},{ + 60,12},{60,90},{110,90}}, color={0,0,127})); + connect(itgErrDuaBou.y, totDegSecOutBou) annotation (Line(points={{22,0},{62,0}, + {62,70},{110,70}}, color={0,0,127})); + connect(itgErrDuaBou.yNeg, degSecOutLowBou) annotation (Line(points={{22,-12}, + {64,-12},{64,50},{110,50}}, color={0,0,127})); + connect(itgErrDuaBou.isItgActPos, itgTim[1].itgAct_in) annotation (Line( + points={{22,16},{54,16},{54,-90},{70,-90},{70,-82}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(itgErrDuaBou.isItgAct, itgTim[2].itgAct_in) annotation (Line( + points={{22,4},{54,4},{54,-90},{70,-90},{70,-82}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(itgErrDuaBou.isItgActNeg, itgTim[3].itgAct_in) annotation (Line( + points={{22,-8},{54,-8},{54,-90},{70,-90},{70,-82}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(itgTim[1].y, timeOutUppBou) annotation (Line( + points={{81,-70},{90,-70},{90,-50},{110,-50}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(itgTim[2].y, totTimeOutBou) annotation (Line( + points={{81,-70},{110,-70}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(itgTim[3].y, timeOutLowBou) annotation (Line( + points={{81,-70},{90,-70},{90,-90},{110,-90}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(notRes.y, itgTim[1].itgRes_in) annotation (Line( + points={{19,-30},{16,-30},{16,-92},{76,-92},{76,-82}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if resItgTimInBou then LinePattern.Solid else LinePattern.Dash))); + connect(notRes.y, itgTim[2].itgRes_in) annotation (Line( + points={{19,-30},{16,-30},{16,-92},{76,-92},{76,-82}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if resItgTimInBou then LinePattern.Solid else LinePattern.Dash))); + connect(notRes.y, itgTim[3].itgRes_in) annotation (Line( + points={{19,-30},{16,-30},{16,-92},{76,-92},{76,-82}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if resItgTimInBou then LinePattern.Solid else LinePattern.Dash))); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

This partial model is the base model of temperature assessments.

+")); +end PartialTemperatureAssessment; diff --git a/AixLib/Utilities/KPIs/BaseClasses/package.mo b/AixLib/Utilities/KPIs/BaseClasses/package.mo new file mode 100644 index 0000000000..d8ac6862f5 --- /dev/null +++ b/AixLib/Utilities/KPIs/BaseClasses/package.mo @@ -0,0 +1,4 @@ +within AixLib.Utilities.KPIs; +package BaseClasses "Base classes" +extends Modelica.Icons.BasesPackage; +end BaseClasses; diff --git a/AixLib/Utilities/KPIs/BaseClasses/package.order b/AixLib/Utilities/KPIs/BaseClasses/package.order new file mode 100644 index 0000000000..6497cc4b36 --- /dev/null +++ b/AixLib/Utilities/KPIs/BaseClasses/package.order @@ -0,0 +1,7 @@ +ComfortTemperatureDIN16798 +PartialAssessmentBase +PartialCo2Assessment +PartialIntegratorBase +PartialIntegralErrorDualReference +PartialIntegralErrorSingleReference +PartialTemperatureAssessment diff --git a/AixLib/Utilities/KPIs/Energy/ElectricityMeter.mo b/AixLib/Utilities/KPIs/Energy/ElectricityMeter.mo new file mode 100644 index 0000000000..69439ea643 --- /dev/null +++ b/AixLib/Utilities/KPIs/Energy/ElectricityMeter.mo @@ -0,0 +1,56 @@ +within AixLib.Utilities.KPIs.Energy; +model ElectricityMeter + "Electricity meter for electric energy consumption" + extends Modelica.Icons.RoundSensor; + parameter Boolean use_itgTim=false + "= true, activate integral timers" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + Modelica.Blocks.Interfaces.RealInput P(unit="W", final min=0) "Electric power" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Interfaces.RealOutput E(unit="J", displayUnit="kWh") + "Electric energy" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Interfaces.RealOutput timeAct(final unit="s") if use_itgTim + "Activation time of consumption" + annotation (Placement(transformation(extent={{100,-60},{120,-40}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itg( + final use_itgAct_in=false, + final use_itgRes_in=false, + final posItg=true) "Integration electric energy" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Modelica.Blocks.Sources.Constant conZero(final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralTimer itgTim( + final use_itgRes_in=false) if use_itgTim + "Integral timer for consumption" + annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); +equation + connect(conZero.y, itg.ref) annotation (Line(points={{-79,90},{-70,90},{-70,-6}, + {-62,-6}}, color={0,0,127})); + connect(P, itg.u) + annotation (Line(points={{-120,0},{-62,0}}, color={0,0,127})); + connect(itg.y, E) + annotation (Line(points={{-39,0},{110,0}}, color={0,0,127})); + connect(itg.isItgAct, itgTim.itgAct_in) annotation (Line( + points={{-39,6},{-28,6},{-28,-72},{-10,-72},{-10,-62}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, if use_itgTim then LinePattern.Solid + else LinePattern.Dash))); + connect(itgTim.y,timeAct) annotation (Line( + points={{1,-50},{110,-50}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, if use_itgTim then LinePattern.Solid + else LinePattern.Dash))); + annotation (Documentation(revisions=" + +", info=" +

This model is an electricity meter that integrates input eletric power into energy, with the option to output the activation time when the power is greater than 0.

+"), Icon(graphics={Line(points={{80,-40},{60,-80},{80,-60},{60,-100}}, + color={0,0,0}), Line(points={{60,-92},{60,-100},{66,-96}}, color={0, + 0,0})})); +end ElectricityMeter; diff --git a/AixLib/Utilities/KPIs/Energy/ThermalEnergyMeterDual.mo b/AixLib/Utilities/KPIs/Energy/ThermalEnergyMeterDual.mo new file mode 100644 index 0000000000..e43917b17a --- /dev/null +++ b/AixLib/Utilities/KPIs/Energy/ThermalEnergyMeterDual.mo @@ -0,0 +1,83 @@ +within AixLib.Utilities.KPIs.Energy; +model ThermalEnergyMeterDual + "Thermal energy meter for heating and cooling energy" + extends Modelica.Icons.RoundSensor; + parameter Boolean use_itgTim=false + "= true, activate integral timers" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + Modelica.Blocks.Interfaces.RealInput Q_flow(unit="W") "Heat flow rate" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Interfaces.RealOutput QHea(unit="J", displayUnit="kWh") + "Heating energy" + annotation (Placement(transformation(extent={{100,60},{120,80}}))); + Modelica.Blocks.Interfaces.RealOutput QCoo(unit="J", displayUnit="kWh") + "Cooling energy" + annotation (Placement(transformation(extent={{100,20},{120,40}}))); + Modelica.Blocks.Interfaces.RealOutput timeHea(final unit="s") if use_itgTim + "Time of heating" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}))); + Modelica.Blocks.Interfaces.RealOutput timeCoo(final unit="s") if use_itgTim + "Time of cooling" + annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itgHea( + final use_itgAct_in=false, + final use_itgRes_in=false, + final posItg=true) "Integration heating energy" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itgCoo( + final use_itgAct_in=false, + final use_itgRes_in=false, + final posItg=false) "Integration cooling energy" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + Modelica.Blocks.Sources.Constant conZero(final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralTimer itgTimHea( + final use_itgRes_in=false) if use_itgTim "Integral timer for heating" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralTimer itgTimCoo( + final use_itgRes_in=false) if use_itgTim "Integral timer for cooling" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); +equation + connect(conZero.y, itgHea.ref) annotation (Line(points={{-79,90},{-70,90},{-70, + 64},{-62,64}}, color={0,0,127})); + connect(conZero.y, itgCoo.ref) annotation (Line(points={{-79,90},{-70,90},{-70, + 24},{-62,24}}, color={0,0,127})); + connect(Q_flow, itgHea.u) annotation (Line(points={{-120,0},{-80,0},{-80,70},{ + -62,70}}, color={0,0,127})); + connect(Q_flow, itgCoo.u) annotation (Line(points={{-120,0},{-80,0},{-80,30},{ + -62,30}}, color={0,0,127})); + connect(itgHea.y, QHea) + annotation (Line(points={{-39,70},{110,70}}, color={0,0,127})); + connect(itgCoo.y, QCoo) + annotation (Line(points={{-39,30},{110,30}}, color={0,0,127})); + connect(itgHea.isItgAct, itgTimHea.itgAct_in) annotation (Line( + points={{-39,76},{-28,76},{-28,-50},{-10,-50},{-10,-42}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(itgCoo.isItgAct, itgTimCoo.itgAct_in) annotation (Line( + points={{-39,36},{-30,36},{-30,-92},{-10,-92},{-10,-82}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(itgTimHea.y, timeHea) annotation (Line( + points={{1,-30},{110,-30}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(itgTimCoo.y, timeCoo) annotation (Line( + points={{1,-70},{110,-70}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + annotation (Documentation(revisions=" + +", info=" +

This model is a thermal energy meter that measures heating and cooling energy, with the option to output the heating and cooling durations.

+")); +end ThermalEnergyMeterDual; diff --git a/AixLib/Utilities/KPIs/Energy/package.mo b/AixLib/Utilities/KPIs/Energy/package.mo new file mode 100644 index 0000000000..6697a51ddc --- /dev/null +++ b/AixLib/Utilities/KPIs/Energy/package.mo @@ -0,0 +1,8 @@ +within AixLib.Utilities.KPIs; +package Energy "KPIs for energy" +extends Modelica.Icons.Package; + +annotation (Documentation(info=" +

This package contains different energy meters for electrical and thermal energy metrics.

+")); +end Energy; diff --git a/AixLib/Utilities/KPIs/Energy/package.order b/AixLib/Utilities/KPIs/Energy/package.order new file mode 100644 index 0000000000..f98a0ec300 --- /dev/null +++ b/AixLib/Utilities/KPIs/Energy/package.order @@ -0,0 +1,2 @@ +ElectricityMeter +ThermalEnergyMeterDual diff --git a/AixLib/Utilities/KPIs/Examples/Co2Kpis.mo b/AixLib/Utilities/KPIs/Examples/Co2Kpis.mo new file mode 100644 index 0000000000..166f794490 --- /dev/null +++ b/AixLib/Utilities/KPIs/Examples/Co2Kpis.mo @@ -0,0 +1,86 @@ +within AixLib.Utilities.KPIs.Examples; +model Co2Kpis "Test of different CO2 concentration KPIs" + extends Modelica.Icons.Example; + Modelica.Blocks.Sources.Trapezoid traCo2Con( + amplitude=1600, + rising=15, + width=15, + falling=15, + period=60, + offset=400) "CO2 concentration to be assessed" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Sources.BooleanPulse booPulAct(period=60) + "Integrator activation set" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + IndoorAirQuality.Co2FixedLimit fixBou( + final use_itgAct_in=false, + final resItgInBou=false, + final use_itgTim=false) "Fixed bounds simple" + annotation (Placement(transformation(extent={{-20,80},{0,100}}))); + IndoorAirQuality.Co2FixedLimit fixBouAct( + final use_itgAct_in=true, + final resItgInBou=false, + final use_itgTim=false) "Fixed bounds with activation connector" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + IndoorAirQuality.Co2FixedLimit fixBouRes( + final use_itgAct_in=false, + final resItgInBou=true, + final use_itgTim=false) "Fixed bounds with reset" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + IndoorAirQuality.Co2FixedLimit fixBouTim( + final use_itgAct_in=false, + final resItgInBou=false, + final use_itgTim=true) "Fixed bounds with timer" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + IndoorAirQuality.Co2FixedLimit fixBouTimRes( + final use_itgAct_in=false, + final resItgInBou=true, + final use_itgTim=true, + resItgTimInBou=true) "Fixed bounds with timer, reset when within bounds" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + IndoorAirQuality.Co2DIN16798 din16798Tim(use_itgTim=true) + "DIN EN 16798-1 with timers" + annotation (Placement(transformation(extent={{40,60},{60,80}}))); + IndoorAirQuality.Co2DIN16798 din16798ActTim(use_itgAct_in=true, use_itgTim=true) + "DIN EN 16798-1 with activation connector and timers" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); +equation + connect(traCo2Con.y, fixBou.co2Con) + annotation (Line(points={{-79,90},{-22,90}}, color={0,0,127})); + connect(traCo2Con.y, fixBouAct.co2Con) annotation (Line(points={{-79,90},{-30, + 90},{-30,50},{-22,50}}, color={0,0,127})); + connect(booPulAct.y, fixBouAct.itgAct_in) annotation (Line(points={{-79,10},{-40, + 10},{-40,30},{-10,30},{-10,38}}, color={255,0,255})); + connect(traCo2Con.y, fixBouRes.co2Con) annotation (Line(points={{-79,90},{-30, + 90},{-30,10},{-22,10}}, color={0,0,127})); + connect(traCo2Con.y, fixBouTim.co2Con) annotation (Line(points={{-79,90},{-30, + 90},{-30,-30},{-22,-30}}, color={0,0,127})); + connect(traCo2Con.y, fixBouTimRes.co2Con) annotation (Line(points={{-79,90},{-30, + 90},{-30,-70},{-22,-70}}, color={0,0,127})); + connect(traCo2Con.y, din16798Tim.co2Con) annotation (Line(points={{-79,90},{-30, + 90},{-30,70},{38,70}}, color={0,0,127})); + connect(booPulAct.y, din16798ActTim.itgAct_in) annotation (Line(points={{-79,10}, + {-40,10},{-40,-10},{50,-10},{50,18}}, color={255,0,255})); + connect(traCo2Con.y, din16798ActTim.co2Con) annotation (Line(points={{-79,90}, + {-30,90},{-30,70},{30,70},{30,30},{38,30}}, color={0,0,127})); + annotation ( + experiment( + StartTime=0, + StopTime=120, + Interval=1, + Tolerance=1e-06, + __Dymola_Algorithm="Dassl"), + Documentation(revisions=" + +", info=" +

This example checks the models for CO2 KPIs.

+

The results represent the differences of fixed limit and multiple limits according to DIN EN 16798-1. The assessments are configured differntly in terms of their activation, reset, and timer functions.

+"), + __Dymola_Commands(file="Resources/Scripts/Dymola/Utilities/KPIs/Examples/Co2Kpis.mos" + "Simulate and plot")); +end Co2Kpis; diff --git a/AixLib/Utilities/KPIs/Examples/EnergyKpis.mo b/AixLib/Utilities/KPIs/Examples/EnergyKpis.mo new file mode 100644 index 0000000000..77059fda9e --- /dev/null +++ b/AixLib/Utilities/KPIs/Examples/EnergyKpis.mo @@ -0,0 +1,55 @@ +within AixLib.Utilities.KPIs.Examples; +model EnergyKpis "Test of different energy KPIs" + extends Modelica.Icons.Example; + Modelica.Blocks.Sources.Pulse pulQ_flow( + amplitude=-2, + period=2, + offset=1, + startTime=2) "Pulse value for heat flow" + annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); + AixLib.Utilities.KPIs.Energy.ThermalEnergyMeterDual thmMtr(final use_itgTim=false) + "Thermal energy meter normal" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + AixLib.Utilities.KPIs.Energy.ThermalEnergyMeterDual thmMtrTim(final + use_itgTim=true) "Thermal energy meter with timers" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + Modelica.Blocks.Sources.Pulse pulP( + amplitude=2, + period=2, + startTime=2) "Pulse value for electric power" + annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); + AixLib.Utilities.KPIs.Energy.ElectricityMeter eleMtr(final use_itgTim=false) + "Electricity meter normal" + annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); + AixLib.Utilities.KPIs.Energy.ElectricityMeter eleMtrTim(final use_itgTim=true) + "Electricity meter with timer" + annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); +equation + connect(pulQ_flow.y, thmMtr.Q_flow) annotation (Line(points={{-79,50},{-40,50}, + {-40,70},{-2,70}}, color={0,0,127})); + connect(pulQ_flow.y, thmMtrTim.Q_flow) annotation (Line(points={{-79,50},{-40, + 50},{-40,30},{-2,30}}, color={0,0,127})); + connect(pulP.y, eleMtr.P) annotation (Line(points={{-79,-50},{-40,-50},{-40,-30}, + {-2,-30}}, color={0,0,127})); + connect(pulP.y, eleMtrTim.P) annotation (Line(points={{-79,-50},{-40,-50},{-40, + -70},{-2,-70}}, color={0,0,127})); + annotation (experiment( + StartTime=0, + StopTime=10, + Interval=1, + Tolerance=1e-06, + __Dymola_Algorithm="Dassl"), + Documentation(revisions=" + +", info=" +

This example checks the models of energy KPIs.

+

The results represent the differences of thermal meters and electricity meters, with or without timer functions.

+"), + __Dymola_Commands(file="Resources/Scripts/Dymola/Utilities/KPIs/Examples/EnergyKpis.mos" + "Simulate and plot")); +end EnergyKpis; diff --git a/AixLib/Utilities/KPIs/Examples/IntegralErrorDualReference.mo b/AixLib/Utilities/KPIs/Examples/IntegralErrorDualReference.mo new file mode 100644 index 0000000000..55480c67d8 --- /dev/null +++ b/AixLib/Utilities/KPIs/Examples/IntegralErrorDualReference.mo @@ -0,0 +1,83 @@ +within AixLib.Utilities.KPIs.Examples; +model IntegralErrorDualReference "Test integral error with dual references" + extends Modelica.Icons.Example; + Modelica.Blocks.Sources.Ramp ramUppBou( + height=4, + duration=8, + offset=1, + startTime=1) "Ramp upper bound" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Sources.Ramp ramLowBou( + height=-2, + duration=8, + offset=-1, + startTime=1) "Ramp lower bound" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + Modelica.Blocks.Sources.Pulse pul( + amplitude=8, + period=2, + offset=-4) "Pulse as input value" + annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); + Modelica.Blocks.Sources.BooleanStep booSteItgAct(startTime=4) + "Boolean source to activate integrators" + annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); + Modelica.Blocks.Sources.BooleanStep booSteItgRes(startTime=8) + "Boolean source to reset integrators" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + AixLib.Utilities.KPIs.IntegralErrorDualReference.IntegralErrorDualBounds ied + "Integral error dual bounds normal" + annotation (Placement(transformation(extent={{-20,60},{20,100}}))); + AixLib.Utilities.KPIs.IntegralErrorDualReference.IntegralErrorDualBounds iedAct( + use_itgAct_in=true) + "Integral error dual bounds with activation connector" + annotation (Placement(transformation(extent={{-20,0},{20,40}}))); + AixLib.Utilities.KPIs.IntegralErrorDualReference.IntegralErrorDualBounds iedActRes( + use_itgAct_in=true, use_itgRes_in=true) + "Integral error dual bounds with activation and reset connectors" + annotation (Placement(transformation(extent={{-20,-60},{20,-20}}))); +equation + connect(ramUppBou.y, ied.refUpp) annotation (Line(points={{-79,90},{-60,90},{ + -60,92},{-24,92}}, color={0,0,127})); + connect(ramUppBou.y, iedAct.refUpp) annotation (Line(points={{-79,90},{-60,90}, + {-60,32},{-24,32}}, color={0,0,127})); + connect(ramUppBou.y, iedActRes.refUpp) annotation (Line(points={{-79,90},{-60, + 90},{-60,-28},{-24,-28}}, color={0,0,127})); + connect(pul.y, ied.u) annotation (Line(points={{-79,50},{-50,50},{-50,80},{-24, + 80}}, color={0,0,127})); + connect(pul.y, iedAct.u) annotation (Line(points={{-79,50},{-50,50},{-50,20},{ + -24,20}}, color={0,0,127})); + connect(pul.y, iedActRes.u) annotation (Line(points={{-79,50},{-50,50},{-50,-40}, + {-24,-40}}, color={0,0,127})); + connect(ramLowBou.y, ied.refLow) annotation (Line(points={{-79,10},{-40,10},{ + -40,68},{-24,68}}, color={0,0,127})); + connect(ramLowBou.y, iedAct.refLow) annotation (Line(points={{-79,10},{-40,10}, + {-40,8},{-24,8}}, color={0,0,127})); + connect(ramLowBou.y, iedActRes.refLow) annotation (Line(points={{-79,10},{-40, + 10},{-40,-52},{-24,-52}}, color={0,0,127})); + connect(booSteItgAct.y, iedAct.itgAct_in) annotation (Line(points={{-79,-50}, + {-68,-50},{-68,-10},{0,-10},{0,-4}}, color={255,0,255})); + connect(booSteItgAct.y, iedActRes.itgAct_in) annotation (Line(points={{-79, + -50},{-68,-50},{-68,-80},{0,-80},{0,-64}}, color={255,0,255})); + connect(booSteItgRes.y, iedActRes.itgRes_in) + annotation (Line(points={{-79,-90},{12,-90},{12,-64}}, color={255,0,255})); + annotation ( + Documentation(info=" +

This example checks the models of error integrators with dual references.

+

The results represent the differences in configurations regarding activation and reset functions.

+", revisions=" + +"), + __Dymola_Commands(file="Resources/Scripts/Dymola/Utilities/KPIs/Examples/IntegralErrorDualReference.mos" + "Simulate and plot"), + experiment( + StartTime=0, + StopTime=10, + Interval=1, + Tolerance=1e-06, + __Dymola_Algorithm="Dassl")); +end IntegralErrorDualReference; diff --git a/AixLib/Utilities/KPIs/Examples/IntegralErrorSingleReference.mo b/AixLib/Utilities/KPIs/Examples/IntegralErrorSingleReference.mo new file mode 100644 index 0000000000..c979d898e3 --- /dev/null +++ b/AixLib/Utilities/KPIs/Examples/IntegralErrorSingleReference.mo @@ -0,0 +1,128 @@ +within AixLib.Utilities.KPIs.Examples; +model IntegralErrorSingleReference + "Comparison of different models for integral errors with single reference" + extends Modelica.Icons.Example; + Modelica.Blocks.Sources.Pulse pul( + amplitude=1.5, + period=2, + offset=-0.5) + "Pulse as input value" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Sources.Constant conZeroRef(k=0) + "Constant zero as reference value" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + Modelica.Blocks.Sources.BooleanStep booSteItgAct(startTime=4) + "Boolean source to activate integrators" + annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); + Modelica.Blocks.Sources.BooleanStep booSteItgRes(startTime=8) + "Boolean source to reset integrators" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralAbsoluteError iae "IAE simple" + annotation (Placement(transformation(extent={{-20,80},{0,100}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralAbsoluteError iaeAct(use_itgAct_in=true) + "IAE with activation connector" + annotation (Placement(transformation(extent={{20,80},{40,100}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralAbsoluteError iaeActRes( + use_itgAct_in=true, use_itgRes_in=true) "IAE with activation and reset connectors" + annotation (Placement(transformation(extent={{60,80},{80,100}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralSquareError ise "ISE smiple" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralTimer itgTim( + use_itgRes_in=false) + "Integral timer simple" + annotation (Placement(transformation(extent={{20,40},{40,60}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralTimer itgTimRes( + use_itgRes_in=true) + "Integral timer with reset connector" + annotation (Placement(transformation(extent={{60,40},{80,60}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itgErrPos + "Integral positive errors simple" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itgErrNeg( + posItg=false) + "Integral negative errors simple" + annotation (Placement(transformation(extent={{20,0},{40,20}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itgErrPosAct( + use_itgAct_in=true) + "Integral positive errors with activation connector" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itgErrPosActRes( + use_itgAct_in=true, use_itgRes_in=true) + "Integral positive errors with activation and reset connectors" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + Modelica.Blocks.Logical.Not not1 "Not logic" + annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); +equation + connect(pul.y, iae.u) + annotation (Line(points={{-79,90},{-22,90}}, color={0,0,127})); + connect(conZeroRef.y, iae.ref) annotation (Line(points={{-79,0},{-60,0},{-60,84}, + {-22,84}}, color={0,0,127})); + connect(pul.y, iaeAct.u) annotation (Line(points={{-79,90},{-40,90},{-40,70},{ + 10,70},{10,90},{18,90}}, color={0,0,127})); + connect(conZeroRef.y, iaeAct.ref) annotation (Line(points={{-79,0},{-60,0},{-60, + 84},{-38,84},{-38,68},{12,68},{12,84},{18,84}}, color={0,0,127})); + connect(booSteItgAct.y, iaeAct.itgAct_in) annotation (Line(points={{-79,-50},{ + 10,-50},{10,66},{30,66},{30,78}}, color={255,0,255})); + connect(pul.y, iaeActRes.u) annotation (Line(points={{-79,90},{-40,90},{-40,70}, + {50,70},{50,90},{58,90}}, color={0,0,127})); + connect(conZeroRef.y, iaeActRes.ref) annotation (Line(points={{-79,0},{-60,0}, + {-60,84},{-38,84},{-38,68},{52,68},{52,84},{58,84}}, color={0,0,127})); + connect(booSteItgAct.y, iaeActRes.itgAct_in) annotation (Line(points={{-79,-50}, + {10,-50},{10,66},{70,66},{70,78}}, color={255,0,255})); + connect(booSteItgRes.y, iaeActRes.itgRes_in) annotation (Line(points={{-79,-90}, + {50,-90},{50,64},{76,64},{76,78}}, color={255,0,255})); + connect(pul.y, ise.u) annotation (Line(points={{-79,90},{-70,90},{-70,50},{-22, + 50}}, color={0,0,127})); + connect(conZeroRef.y, ise.ref) annotation (Line(points={{-79,0},{-60,0},{-60,44}, + {-22,44}}, color={0,0,127})); + connect(booSteItgAct.y, itgTim.itgAct_in) annotation (Line(points={{-79,-50},{ + 10,-50},{10,28},{30,28},{30,38}}, color={255,0,255})); + connect(booSteItgAct.y, itgTimRes.itgAct_in) annotation (Line(points={{-79,-50}, + {10,-50},{10,28},{70,28},{70,38}}, color={255,0,255})); + connect(booSteItgRes.y, itgTimRes.itgRes_in) annotation (Line(points={{-79,-90}, + {50,-90},{50,26},{76,26},{76,38}}, color={255,0,255})); + connect(pul.y, itgErrPos.u) annotation (Line(points={{-79,90},{-70,90},{-70,10}, + {-22,10}}, color={0,0,127})); + connect(conZeroRef.y, itgErrPos.ref) annotation (Line(points={{-79,0},{-60,0}, + {-60,4},{-22,4}}, color={0,0,127})); + connect(pul.y, itgErrNeg.u) annotation (Line(points={{-79,90},{-70,90},{-70,10}, + {-40,10},{-40,-10},{12,-10},{12,10},{18,10}}, color={0,0,127})); + connect(conZeroRef.y, itgErrNeg.ref) annotation (Line(points={{-79,0},{-60,0}, + {-60,4},{-38,4},{-38,-12},{14,-12},{14,4},{18,4}}, color={0,0,127})); + connect(pul.y, itgErrPosAct.u) annotation (Line(points={{-79,90},{-70,90},{-70, + -30},{-22,-30}}, color={0,0,127})); + connect(conZeroRef.y, itgErrPosAct.ref) annotation (Line(points={{-79,0},{-60, + 0},{-60,-36},{-22,-36}}, color={0,0,127})); + connect(booSteItgAct.y, itgErrPosAct.itgAct_in) annotation (Line(points={{-79, + -50},{-10,-50},{-10,-42}}, color={255,0,255})); + connect(pul.y, itgErrPosActRes.u) annotation (Line(points={{-79,90},{-70,90},{ + -70,-30},{-40,-30},{-40,-44},{12,-44},{12,-30},{18,-30}}, color={0,0,127})); + connect(conZeroRef.y, itgErrPosActRes.ref) annotation (Line(points={{-79,0},{-60, + 0},{-60,-36},{-38,-36},{-38,-46},{14,-46},{14,-36},{18,-36}}, color={0, + 0,127})); + connect(booSteItgAct.y, itgErrPosActRes.itgAct_in) + annotation (Line(points={{-79,-50},{30,-50},{30,-42}}, color={255,0,255})); + connect(itgErrPosActRes.isItgAct, not1.u) annotation (Line(points={{41,-24},{52, + -24},{52,-30},{58,-30}}, color={255,0,255})); + connect(not1.y, itgErrPosActRes.itgRes_in) annotation (Line(points={{81,-30},{ + 90,-30},{90,-50},{36,-50},{36,-42}}, color={255,0,255})); + annotation (experiment( + StartTime=0, + StopTime=10, + Interval=1, + Tolerance=1e-06, + __Dymola_Algorithm="Dassl"), + __Dymola_Commands(file="Resources/Scripts/Dymola/Utilities/KPIs/Examples/IntegralErrorSingleReference.mos" + "Simulate and plot"), + Documentation(info=" +

This example checks the models of error integrators with a single reference.

+

The results represent the differences of IAE, ISE, by sign, and timer. The integrators are configured differntly in terms of their activation and reset functions.

+", revisions=" + +")); +end IntegralErrorSingleReference; diff --git a/AixLib/Utilities/KPIs/Examples/TemperatureKpis.mo b/AixLib/Utilities/KPIs/Examples/TemperatureKpis.mo new file mode 100644 index 0000000000..16d4576277 --- /dev/null +++ b/AixLib/Utilities/KPIs/Examples/TemperatureKpis.mo @@ -0,0 +1,101 @@ +within AixLib.Utilities.KPIs.Examples; +model TemperatureKpis "Test of different temperature KPIs" + extends Modelica.Icons.Example; + Modelica.Blocks.Sources.Trapezoid traT( + amplitude=15, + rising=15, + width=15, + falling=15, + period=60, + offset=15) + "Temperature to be assessed" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Math.UnitConversions.From_degC from_degC "Convert degC to K" + annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); + Modelica.Blocks.Sources.BooleanPulse booPulAct(period=60) + "Integrator activation set" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + AixLib.Utilities.KPIs.Temperature.FixedBounds fixBou "Fixed bounds simple" + annotation (Placement(transformation(extent={{-20,80},{0,100}}))); + AixLib.Utilities.KPIs.Temperature.FixedBounds fixBouAct(use_itgAct_in=true) + "Fixed bounds with activation connector" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + AixLib.Utilities.KPIs.Temperature.FixedBounds fixBouRes(resItgInBou=true) + "Fixed bounds with reset" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + AixLib.Utilities.KPIs.Temperature.FixedBounds fixBouTim(use_itgTim=true) + "Fixed bounds with timers" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + AixLib.Utilities.KPIs.Temperature.FixedBounds fixBouTimRes( + resItgInBou=true, + use_itgTim=true, + resItgTimInBou=true) "Fixed bounds with timers, reset when within bounds" + annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); + AixLib.Utilities.KPIs.Temperature.FlexibleBounds flxBou "Flexible bounds simple" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + Modelica.Blocks.Sources.Constant conLowBou(k=293.15) "Constant lower bound" + annotation (Placement(transformation(extent={{20,40},{40,60}}))); + Modelica.Blocks.Sources.Constant conUppBou(k=297.15) "Constant upper bound" + annotation (Placement(transformation(extent={{20,80},{40,100}}))); + AixLib.Utilities.KPIs.Temperature.DIN16798 din16798_1(use_itgTim=true) + "DIN EN 16798-1" + annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); + Modelica.Blocks.Sources.Trapezoid traTAmb( + amplitude=50, + rising=50, + width=0, + falling=50, + period=110, + offset=-10, + startTime=10) "Ambient temperature" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + Modelica.Blocks.Math.UnitConversions.From_degC from_degC1 + "Convert degC to K" + annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); +equation + connect(traT.y, from_degC.u) + annotation (Line(points={{-79,90},{-62,90}}, color={0,0,127})); + connect(from_degC.y, fixBou.T) + annotation (Line(points={{-39,90},{-22,90}},color={0,0,127})); + connect(from_degC.y, fixBouAct.T) annotation (Line(points={{-39,90},{-30,90},{ + -30,50},{-22,50}}, color={0,0,127})); + connect(from_degC.y, fixBouRes.T) annotation (Line(points={{-39,90},{-30,90},{ + -30,10},{-22,10}}, color={0,0,127})); + connect(booPulAct.y, fixBouAct.itgAct_in) annotation (Line(points={{-79,10},{-40, + 10},{-40,30},{-10,30},{-10,38}}, color={255,0,255})); + connect(from_degC.y, fixBouTim.T) annotation (Line(points={{-39,90},{-30,90},{ + -30,-30},{-22,-30}}, color={0,0,127})); + connect(from_degC.y, fixBouTimRes.T) annotation (Line(points={{-39,90},{-30,90}, + {-30,-70},{-22,-70}}, color={0,0,127})); + connect(from_degC.y, flxBou.T) annotation (Line(points={{-39,90},{-30,90},{-30, + 70},{58,70}}, color={0,0,127})); + connect(conLowBou.y, flxBou.lowBou) annotation (Line(points={{41,50},{50,50},{ + 50,64},{58,64}}, color={0,0,127})); + connect(conUppBou.y, flxBou.uppBou) annotation (Line(points={{41,90},{50,90},{ + 50,76},{58,76}}, color={0,0,127})); + connect(from_degC1.y, din16798_1.TAmb) annotation (Line(points={{-39,-90},{40, + -90},{40,-24},{58,-24}}, color={0,0,127})); + connect(from_degC.y, din16798_1.T) annotation (Line(points={{-39,90},{-30,90}, + {-30,-50},{50,-50},{50,-30},{58,-30}}, color={0,0,127})); + connect(traTAmb.y, from_degC1.u) + annotation (Line(points={{-79,-90},{-62,-90}}, color={0,0,127})); + annotation (experiment( + StartTime=0, + StopTime=120, + Interval=1, + Tolerance=1e-06, + __Dymola_Algorithm="Dassl"), + Documentation(revisions=" + +", info=" +

This example checks the models for temperature KPIs.

+

The results represent the differences of fixed and flexible boundaries, as well as boundaries according to DIN EN 16798-1. The assessments are configured differntly in terms of their activation, reset, and timer functions.

+"), + __Dymola_Commands(file="Resources/Scripts/Dymola/Utilities/KPIs/Examples/TemperatureKpis.mos" + "Simulate and plot")); +end TemperatureKpis; diff --git a/AixLib/Utilities/KPIs/Examples/package.mo b/AixLib/Utilities/KPIs/Examples/package.mo new file mode 100644 index 0000000000..1c8de77f88 --- /dev/null +++ b/AixLib/Utilities/KPIs/Examples/package.mo @@ -0,0 +1,4 @@ +within AixLib.Utilities.KPIs; +package Examples "Examples" +extends Modelica.Icons.ExamplesPackage; +end Examples; diff --git a/AixLib/Utilities/KPIs/Examples/package.order b/AixLib/Utilities/KPIs/Examples/package.order new file mode 100644 index 0000000000..bfc1c059cf --- /dev/null +++ b/AixLib/Utilities/KPIs/Examples/package.order @@ -0,0 +1,5 @@ +Co2Kpis +EnergyKpis +IntegralErrorSingleReference +IntegralErrorDualReference +TemperatureKpis diff --git a/AixLib/Utilities/KPIs/IndoorAirQuality/Co2DIN16798.mo b/AixLib/Utilities/KPIs/IndoorAirQuality/Co2DIN16798.mo new file mode 100644 index 0000000000..490ef3f436 --- /dev/null +++ b/AixLib/Utilities/KPIs/IndoorAirQuality/Co2DIN16798.mo @@ -0,0 +1,139 @@ +within AixLib.Utilities.KPIs.IndoorAirQuality; +model Co2DIN16798 "CO2 concentration assessment based on DIN EN 16798-1" + parameter Boolean use_itgAct_in=false + "= true, enable activation connector; = false, disable connector, integrator continuously activated" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + parameter Boolean use_itgTim=false + "= true, activate integral timers" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + parameter Real co2ConAmb = 400 "Ambient CO2 concentration"; + Modelica.Blocks.Interfaces.BooleanInput itgAct_in if use_itgAct_in + "Conditional connector to activate integrator" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={0,-120}))); + Modelica.Blocks.Interfaces.RealInput co2Con(final min=0) "CO2 concentration in ppm" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + AixLib.Utilities.KPIs.IndoorAirQuality.Co2FixedLimit fixLimCat1( + final use_itgAct_in=use_itgAct_in, + final resItgInBou=false, + final use_itgTim=use_itgTim, + final resItgTimInBou=false, + final co2ConLim=co2ConAmb + 350) "Fixed limit for category I" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + AixLib.Utilities.KPIs.IndoorAirQuality.Co2FixedLimit fixLimCat2( + final use_itgAct_in=use_itgAct_in, + final resItgInBou=false, + final use_itgTim=use_itgTim, + final resItgTimInBou=false, + final co2ConLim=co2ConAmb + 550) "Fixed limit for category II" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + AixLib.Utilities.KPIs.IndoorAirQuality.Co2FixedLimit fixLimCat3( + final use_itgAct_in=use_itgAct_in, + final resItgInBou=false, + final use_itgTim=use_itgTim, + final resItgTimInBou=false, + final co2ConLim=co2ConAmb + 900) "Fixed limit for category III" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + AixLib.Utilities.KPIs.IndoorAirQuality.Co2FixedLimit fixLimCat4( + final use_itgAct_in=use_itgAct_in, + final resItgInBou=false, + final use_itgTim=use_itgTim, + final resItgTimInBou=false, + final co2ConLim=co2ConAmb + 1350) "Fixed limit for category IV" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); + Modelica.Blocks.Interfaces.RealOutput ppmSecOutBouCat1(final unit="s") + "Total ppm-second out of bound of category I" + annotation (Placement(transformation(extent={{100,80},{120,100}}))); + Modelica.Blocks.Interfaces.RealOutput ppmSecOutBouCat2(final unit="s") + "Total ppm-second out of bound of category II" + annotation (Placement(transformation(extent={{100,60},{120,80}}))); + Modelica.Blocks.Interfaces.RealOutput ppmSecOutBouCat3(final unit="s") + "Total ppm-second out of bound of category III" + annotation (Placement(transformation(extent={{100,40},{120,60}}))); + Modelica.Blocks.Interfaces.RealOutput ppmSecOutBouCat4(final unit="s") + "Total ppm-second out of bound of category IV" + annotation (Placement(transformation(extent={{100,20},{120,40}}))); + Modelica.Blocks.Interfaces.RealOutput totTimeOutBouCat1(final unit="s") + if use_itgTim "Total time out of bound of category I" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}))); + Modelica.Blocks.Interfaces.RealOutput totTimeOutBouCat2(final unit="s") + if use_itgTim "Total time out of bound of category II" + annotation (Placement(transformation(extent={{100,-60},{120,-40}}))); + Modelica.Blocks.Interfaces.RealOutput totTimeOutBouCat3(final unit="s") + if use_itgTim "Total time out of bound of category III" + annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); + Modelica.Blocks.Interfaces.RealOutput totTimeOutBouCat4(final unit="s") + if use_itgTim "Total time out of bound of category IV" + annotation (Placement(transformation(extent={{100,-100},{120,-80}}))); +equation + connect(co2Con, fixLimCat1.co2Con) annotation (Line(points={{-120,0},{-80,0},{ + -80,70},{-62,70}}, color={0,0,127})); + connect(co2Con, fixLimCat2.co2Con) annotation (Line(points={{-120,0},{-80,0},{ + -80,30},{-62,30}}, color={0,0,127})); + connect(co2Con, fixLimCat3.co2Con) annotation (Line(points={{-120,0},{-80,0},{ + -80,-10},{-62,-10}}, color={0,0,127})); + connect(co2Con, fixLimCat4.co2Con) annotation (Line(points={{-120,0},{-80,0},{ + -80,-50},{-62,-50}}, color={0,0,127})); + connect(fixLimCat1.ppmSecOutBou, ppmSecOutBouCat1) annotation (Line(points={{-39, + 70},{60,70},{60,90},{110,90}}, color={0,0,127})); + connect(fixLimCat2.ppmSecOutBou, ppmSecOutBouCat2) annotation (Line(points={{-39, + 30},{62,30},{62,70},{110,70}}, color={0,0,127})); + connect(fixLimCat3.ppmSecOutBou, ppmSecOutBouCat3) annotation (Line(points={{-39, + -10},{64,-10},{64,50},{110,50}}, color={0,0,127})); + connect(fixLimCat4.ppmSecOutBou, ppmSecOutBouCat4) annotation (Line(points={{-39, + -50},{66,-50},{66,30},{110,30}}, color={0,0,127})); + connect(itgAct_in, fixLimCat1.itgAct_in) annotation (Line( + points={{0,-120},{0,58},{-50,58}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgAct_in then LinePattern.Solid else LinePattern.Dash))); + connect(itgAct_in, fixLimCat2.itgAct_in) annotation (Line( + points={{0,-120},{0,18},{-50,18}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgAct_in then LinePattern.Solid else LinePattern.Dash))); + connect(itgAct_in, fixLimCat3.itgAct_in) annotation (Line( + points={{0,-120},{0,-22},{-50,-22}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgAct_in then LinePattern.Solid else LinePattern.Dash))); + connect(itgAct_in, fixLimCat4.itgAct_in) annotation (Line( + points={{0,-120},{0,-62},{-50,-62}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgAct_in then LinePattern.Solid else LinePattern.Dash))); + connect(fixLimCat1.totTimeOutBou, totTimeOutBouCat1) annotation (Line( + points={{-39,63},{80,63},{80,-30},{110,-30}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(fixLimCat2.totTimeOutBou, totTimeOutBouCat2) annotation (Line( + points={{-39,23},{82,23},{82,-50},{110,-50}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(fixLimCat3.totTimeOutBou, totTimeOutBouCat3) annotation (Line( + points={{-39,-17},{84,-17},{84,-70},{110,-70}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(fixLimCat4.totTimeOutBou, totTimeOutBouCat4) annotation (Line( + points={{-39,-57},{86,-57},{86,-90},{110,-90}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

This model assesses room CO2 concentration according to DIN EN 16798-1.

+", revisions=" + +")); +end Co2DIN16798; diff --git a/AixLib/Utilities/KPIs/IndoorAirQuality/Co2FixedLimit.mo b/AixLib/Utilities/KPIs/IndoorAirQuality/Co2FixedLimit.mo new file mode 100644 index 0000000000..84b8c61cd4 --- /dev/null +++ b/AixLib/Utilities/KPIs/IndoorAirQuality/Co2FixedLimit.mo @@ -0,0 +1,71 @@ +within AixLib.Utilities.KPIs.IndoorAirQuality; +model Co2FixedLimit "CO2 concentration assessment with fixed limit" + extends AixLib.Utilities.KPIs.BaseClasses.PartialCo2Assessment( + final nItgTim=1); + parameter Real co2ConLim = 1000 "CO2 concentration limit in ppm"; + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itgErrPos( + final use_itgAct_in=use_itgAct_in, + final use_itgRes_in=resItgInBou, + final posItg=true) + "Positive error integrator for CO2 concentration" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}))); + Modelica.Blocks.Sources.Constant conConLim(final k=co2ConLim) + "Concentration limit" + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + Modelica.Blocks.Interfaces.RealOutput ppmSecOutBou(final unit="s") + "Total ppm-second out of bound" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Interfaces.RealOutput totTimeOutBou(final unit="s") + if use_itgTim "Total time out of bound" + annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); +equation + connect(co2Con, itgErrPos.u) + annotation (Line(points={{-120,0},{-24,0}}, color={0,0,127})); + connect(conConLim.y, itgErrPos.ref) annotation (Line(points={{-59,-50},{-40,-50}, + {-40,-12},{-24,-12}}, color={0,0,127})); + connect(itgErrPos.y, ppmSecOutBou) + annotation (Line(points={{22,0},{110,0},{110,0}}, color={0,0,127})); + connect(itgAct_in, itgErrPos.itgAct_in) annotation (Line( + points={{0,-120},{0,-24},{0,-24}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgAct_in then LinePattern.Solid else LinePattern.Dash))); + connect(itgErrPos.isItgAct, notRes.u) annotation (Line( + points={{22,12},{48,12},{48,-30},{42,-30}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if (resItgInBou or resItgTimInBou) then LinePattern.Solid + else LinePattern.Dash))); + connect(notRes.y, itgErrPos.itgRes_in) annotation (Line( + points={{19,-30},{12,-30},{12,-24}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if resItgInBou then LinePattern.Solid else LinePattern.Dash))); + connect(itgErrPos.isItgAct, itgTim[1].itgAct_in) annotation (Line( + points={{22,12},{54,12},{54,-90},{70,-90},{70,-82}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(itgTim[1].y, totTimeOutBou) annotation (Line( + points={{81,-70},{110,-70}}, + color={0,0,127}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgTim then LinePattern.Solid else LinePattern.Dash))); + connect(notRes.y, itgTim[1].itgRes_in) annotation (Line( + points={{19,-30},{16,-30},{16,-92},{76,-92},{76,-82}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if resItgTimInBou then LinePattern.Solid else LinePattern.Dash))); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

This model assesses room CO2 concentration using a fixed limit.

+", revisions=" + +")); +end Co2FixedLimit; diff --git a/AixLib/Utilities/KPIs/IndoorAirQuality/package.mo b/AixLib/Utilities/KPIs/IndoorAirQuality/package.mo new file mode 100644 index 0000000000..af4c575398 --- /dev/null +++ b/AixLib/Utilities/KPIs/IndoorAirQuality/package.mo @@ -0,0 +1,7 @@ +within AixLib.Utilities.KPIs; +package IndoorAirQuality "KPIs for indoor air quality (IAQ)" + +annotation (Documentation(info=" +

This package contains different assessments of indoor air quality (IAQ), such as CO2 concentration.

+")); +end IndoorAirQuality; diff --git a/AixLib/Utilities/KPIs/IndoorAirQuality/package.order b/AixLib/Utilities/KPIs/IndoorAirQuality/package.order new file mode 100644 index 0000000000..174bbd268c --- /dev/null +++ b/AixLib/Utilities/KPIs/IndoorAirQuality/package.order @@ -0,0 +1,2 @@ +Co2DIN16798 +Co2FixedLimit diff --git a/AixLib/Utilities/KPIs/IntegralErrorDualReference/IntegralErrorDualBounds.mo b/AixLib/Utilities/KPIs/IntegralErrorDualReference/IntegralErrorDualBounds.mo new file mode 100644 index 0000000000..452aeedba8 --- /dev/null +++ b/AixLib/Utilities/KPIs/IntegralErrorDualReference/IntegralErrorDualBounds.mo @@ -0,0 +1,92 @@ +within AixLib.Utilities.KPIs.IntegralErrorDualReference; +model IntegralErrorDualBounds + "Integral error with dual bounds by sign for both positive and negative errors" + extends AixLib.Utilities.KPIs.BaseClasses.PartialIntegralErrorDualReference; + extends Modelica.Blocks.Icons.Block; + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itgPos( + final use_itgAct_in=true, + final use_itgRes_in=use_itgRes_in, + final posItg=true) "Integrator positive" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + AixLib.Utilities.KPIs.IntegralErrorSingleReference.IntegralErrorBySign itgNeg( + final use_itgAct_in=true, + final use_itgRes_in=use_itgRes_in, + final posItg=false) "Integrator negative" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + Modelica.Blocks.Math.Add addItgErr(final k1=+1, final k2=-1) + "Add integral errors" + annotation (Placement(transformation(extent={{70,-10},{90,10}}))); + Modelica.Blocks.Interfaces.BooleanOutput isItgActPos + "If the positie integrator is activated" + annotation (Placement(transformation(extent={{100,70},{120,90}}))); + Modelica.Blocks.Interfaces.BooleanOutput isItgActNeg + "If the negative integrator is activated" + annotation (Placement(transformation(extent={{100,-50},{120,-30}}))); + Modelica.Blocks.Logical.Or orItgAct "Or logic for integrator activations" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Modelica.Blocks.Interfaces.BooleanOutput isItgAct + "If one of both integrators is activated" + annotation (Placement(transformation(extent={{100,10},{120,30}}))); +equation + connect(u, itgPos.u) annotation (Line(points={{-120,0},{-90,0},{-90,60},{-82,60}}, + color={0,0,127})); + connect(u, itgNeg.u) annotation (Line(points={{-120,0},{-90,0},{-90,-60},{-82, + -60}}, color={0,0,127})); + connect(refUpp, itgPos.ref) annotation (Line(points={{-120,60},{-92,60},{-92,54}, + {-82,54}}, color={0,0,127})); + connect(refLow, itgNeg.ref) annotation (Line(points={{-120,-60},{-92,-60},{-92, + -66},{-82,-66}}, color={0,0,127})); + connect(itgPos.y,yPos) + annotation (Line(points={{-59,60},{110,60}}, color={0,0,127})); + connect(itgNeg.y,yNeg) + annotation (Line(points={{-59,-60},{110,-60},{110,-60}}, color={0,0,127})); + connect(booExpItgAct.y, itgPos.itgAct_in) annotation (Line(points={{-79,90},{-50, + 90},{-50,40},{-70,40},{-70,48}}, color={255,0,255})); + connect(booExpItgAct.y, itgNeg.itgAct_in) annotation (Line(points={{-79,90},{-50, + 90},{-50,-80},{-70,-80},{-70,-72}}, color={255,0,255})); + connect(itgRes_in, itgPos.itgRes_in) annotation (Line( + points={{60,-120},{60,-90},{-52,-90},{-52,42},{-64,42},{-64,48}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgRes_in then LinePattern.Solid else LinePattern.Dash))); + connect(itgRes_in, itgNeg.itgRes_in) annotation (Line( + points={{60,-120},{60,-90},{-52,-90},{-52,-78},{-64,-78},{-64,-72}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgRes_in then LinePattern.Solid else LinePattern.Dash))); + connect(itgPos.y, addItgErr.u1) annotation (Line(points={{-59,60},{60,60},{60, + 6},{68,6}}, color={0,0,127})); + connect(itgNeg.y, addItgErr.u2) annotation (Line(points={{-59,-60},{60,-60},{60, + -6},{68,-6}}, color={0,0,127})); + connect(addItgErr.y, y) + annotation (Line(points={{91,0},{110,0}}, color={0,0,127})); + connect(itgPos.isItgAct, isItgActPos) annotation (Line(points={{-59,66},{80,66}, + {80,80},{110,80}}, color={255,0,255})); + connect(itgNeg.isItgAct, isItgActNeg) annotation (Line(points={{-59,-54},{80,-54}, + {80,-40},{110,-40}}, color={255,0,255})); + connect(itgPos.isItgAct, orItgAct.u1) annotation (Line(points={{-59,66},{10,66}, + {10,0},{18,0}}, color={255,0,255})); + connect(itgNeg.isItgAct, orItgAct.u2) annotation (Line(points={{-59,-54},{10,-54}, + {10,-8},{18,-8}}, color={255,0,255})); + connect(orItgAct.y, isItgAct) annotation (Line(points={{41,0},{50,0},{50,20},{ + 110,20}}, color={255,0,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Text( + extent={{-80,80},{80,0}}, + textColor={28,108,200}, + textString="IE"), Text( + extent={{-80,0},{80,-80}}, + textColor={28,108,200}, + textString="+/-")}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

This model is an error integrator for dual boundaries, where errors exceeding the upper limit or falling below the lower limit are integrated seperately. The boolean outputs represent the state of whether the value is outside the boundaries.

+")); +end IntegralErrorDualBounds; diff --git a/AixLib/Utilities/KPIs/IntegralErrorDualReference/package.mo b/AixLib/Utilities/KPIs/IntegralErrorDualReference/package.mo new file mode 100644 index 0000000000..cb71bda2db --- /dev/null +++ b/AixLib/Utilities/KPIs/IntegralErrorDualReference/package.mo @@ -0,0 +1,8 @@ +within AixLib.Utilities.KPIs; +package IntegralErrorDualReference "Integral error with dual references" + extends Modelica.Icons.Package; + +annotation (Documentation(info=" +

This package contains different integrators that integrate errors related to dual references.

+")); +end IntegralErrorDualReference; diff --git a/AixLib/Utilities/KPIs/IntegralErrorDualReference/package.order b/AixLib/Utilities/KPIs/IntegralErrorDualReference/package.order new file mode 100644 index 0000000000..0b5dc037c7 --- /dev/null +++ b/AixLib/Utilities/KPIs/IntegralErrorDualReference/package.order @@ -0,0 +1 @@ +IntegralErrorDualBounds diff --git a/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralAbsoluteError.mo b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralAbsoluteError.mo new file mode 100644 index 0000000000..7d242882e1 --- /dev/null +++ b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralAbsoluteError.mo @@ -0,0 +1,25 @@ +within AixLib.Utilities.KPIs.IntegralErrorSingleReference; +model IntegralAbsoluteError "Integral absolute error (IAE)" + extends AixLib.Utilities.KPIs.BaseClasses.PartialIntegralErrorSingleReference; + extends Modelica.Blocks.Icons.Block; + Modelica.Blocks.Math.Abs abs "Abs value" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); +equation + connect(swiErr.y, abs.u) + annotation (Line(points={{1,0},{18,0}}, color={0,0,127})); + connect(abs.y, errItg.u) + annotation (Line(points={{41,0},{58,0}}, color={0,0,127})); + annotation (Icon(graphics={Text( + extent={{-80,80},{80,-80}}, + textColor={28,108,200}, + textString="IAE")}), Documentation(revisions=" + +", info=" +

This model is an integrator for absolute error (IAE).

+")); +end IntegralAbsoluteError; diff --git a/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralErrorBySign.mo b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralErrorBySign.mo new file mode 100644 index 0000000000..7656cad9ac --- /dev/null +++ b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralErrorBySign.mo @@ -0,0 +1,51 @@ +within AixLib.Utilities.KPIs.IntegralErrorSingleReference; +model IntegralErrorBySign + "Integral error by sign (either only positive or only negative errors)" + extends AixLib.Utilities.KPIs.BaseClasses.PartialIntegralErrorSingleReference; + extends Modelica.Blocks.Icons.Block; + parameter Boolean posItg=true + "= true, integrate positive errors, = false integrate negative errors" + annotation(choices(checkBox=true)); + Modelica.Blocks.Nonlinear.Limiter lim( + final uMax=if posItg then Modelica.Constants.inf else 0, + final uMin=if posItg then 0 else -Modelica.Constants.inf) + "Limiter for error" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Modelica.Blocks.Sources.BooleanExpression booExpIsAct( + final y=(posItg and dif.y > 0) or (not posItg and dif.y < 0)) + "Boolean expression if integrator is activated" + annotation (Placement(transformation(extent={{20,40},{40,60}}))); + Modelica.Blocks.Interfaces.BooleanOutput isItgAct + "If the integrator is activated" + annotation (Placement(transformation(extent={{100,50},{120,70}}))); + Modelica.Blocks.Logical.And and1 "And logic" + annotation (Placement(transformation(extent={{60,50},{80,70}}))); +equation + connect(swiErr.y, lim.u) + annotation (Line(points={{1,0},{18,0}}, color={0,0,127})); + connect(lim.y, errItg.u) + annotation (Line(points={{41,0},{58,0}}, color={0,0,127})); + connect(booExpItgAct.y, and1.u1) annotation (Line(points={{-79,90},{50,90},{50, + 60},{58,60}}, color={255,0,255})); + connect(booExpIsAct.y, and1.u2) annotation (Line(points={{41,50},{50,50},{50,52}, + {58,52}}, color={255,0,255})); + connect(and1.y, isItgAct) + annotation (Line(points={{81,60},{110,60}}, color={255,0,255})); + annotation (Icon(graphics={Text( + extent={{-80,80},{80,0}}, + textColor={28,108,200}, + textString="IE"), Text( + extent={{-80,0},{80,-80}}, + textColor={28,108,200}, + textString=DynamicSelect("+", if posItg then "+" else "-"))}), + Documentation(revisions=" + +", info=" +

This model is a sign-based integrator, which allows for the integration of errors only when they are greater than or less than zero.

+")); +end IntegralErrorBySign; diff --git a/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralSquareError.mo b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralSquareError.mo new file mode 100644 index 0000000000..2e8098c5cd --- /dev/null +++ b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralSquareError.mo @@ -0,0 +1,27 @@ +within AixLib.Utilities.KPIs.IntegralErrorSingleReference; +model IntegralSquareError "Integral square error (ISE)" + extends AixLib.Utilities.KPIs.BaseClasses.PartialIntegralErrorSingleReference; + extends Modelica.Blocks.Icons.Block; + Modelica.Blocks.Math.Product pro "Square of error" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); +equation + connect(swiErr.y, pro.u1) + annotation (Line(points={{1,0},{10,0},{10,6},{18,6}}, color={0,0,127})); + connect(swiErr.y, pro.u2) + annotation (Line(points={{1,0},{10,0},{10,-6},{18,-6}}, color={0,0,127})); + connect(pro.y, errItg.u) + annotation (Line(points={{41,0},{58,0}}, color={0,0,127})); + annotation (Icon(graphics={Text( + extent={{-80,80},{80,-80}}, + textColor={28,108,200}, + textString="ISE")}), Documentation(revisions=" + +", info=" +

This model is an integrator for squared error (ISE).

+")); +end IntegralSquareError; diff --git a/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralTimer.mo b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralTimer.mo new file mode 100644 index 0000000000..de804947ae --- /dev/null +++ b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/IntegralTimer.mo @@ -0,0 +1,64 @@ +within AixLib.Utilities.KPIs.IntegralErrorSingleReference; +model IntegralTimer "Integral timer" + extends AixLib.Utilities.KPIs.BaseClasses.PartialIntegratorBase( + final use_itgAct_in=true); + extends Modelica.Blocks.Icons.Block; + Modelica.Blocks.Interfaces.RealOutput y(unit="s") "Output signal" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Sources.Constant conZero(final k=0) "Constant zero" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); + Modelica.Blocks.Sources.Constant conOne(final k=1) "Constant one" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Modelica.Blocks.Logical.Switch swi "Switch for integration" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Modelica.Blocks.Continuous.Integrator timeItg(final use_reset=use_itgRes_in) + "Time integrator" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); +equation + connect(booExpItgAct.y, swi.u2) annotation (Line(points={{-79,90},{-70,90},{-70, + 0},{-22,0}}, color={255,0,255})); + connect(conOne.y, swi.u1) annotation (Line(points={{-39,50},{-30,50},{-30,8},{ + -22,8}}, color={0,0,127})); + connect(conZero.y, swi.u3) annotation (Line(points={{-39,-50},{-30,-50},{-30,-8}, + {-22,-8}}, color={0,0,127})); + connect(swi.y, timeItg.u) + annotation (Line(points={{1,0},{58,0}}, color={0,0,127})); + connect(timeItg.y, y) + annotation (Line(points={{81,0},{110,0}}, color={0,0,127})); + connect(itgRes_in, timeItg.reset) annotation (Line( + points={{60,-120},{60,-100},{76,-100},{76,-12}}, + color={255,0,255}, + pattern=DynamicSelect(LinePattern.Dash, + if use_itgRes_in then LinePattern.Solid else LinePattern.Dash))); + annotation (Icon(graphics={ + Ellipse(extent={{-80,80},{80,-80}}, lineColor={28,108,200}), + Line(points={{0,80},{0,60}}, color={28,108,200}), + Line(points={{80,0},{60,0}}, color={28,108,200}), + Line(points={{0,-80},{0,-60}}, color={28,108,200}), + Line(points={{-80,0},{-60,0}}, color={28,108,200}), + Line(points={{37,70},{26,50}}, color={28,108,200}), + Line(points={{70,38},{49,26}}, color={28,108,200}), + Line(points={{71,-37},{52,-27}}, color={28,108,200}), + Line(points={{39,-70},{29,-51}}, color={28,108,200}), + Line(points={{-39,-70},{-29,-52}}, color={28,108,200}), + Line(points={{-71,-37},{-50,-26}}, color={28,108,200}), + Line(points={{-71,37},{-54,28}}, color={28,108,200}), + Line(points={{-38,70},{-28,51}}, color={28,108,200}), + Line( + points={{0,0},{-50,50}}, + thickness=0.5, + color={28,108,200}), + Line( + points={{0,0},{40,0}}, + thickness=0.5, + color={28,108,200})}), Documentation(revisions=" + +", info=" +

This model is a timer that counts the duration while it is activated.

+")); +end IntegralTimer; diff --git a/AixLib/Utilities/KPIs/IntegralErrorSingleReference/package.mo b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/package.mo new file mode 100644 index 0000000000..02ea3c5008 --- /dev/null +++ b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/package.mo @@ -0,0 +1,8 @@ +within AixLib.Utilities.KPIs; +package IntegralErrorSingleReference "Integral error with single reference" +extends Modelica.Icons.Package; + +annotation (Documentation(info=" +

This package contains different integrators that integrate errors related to single reference.

+")); +end IntegralErrorSingleReference; diff --git a/AixLib/Utilities/KPIs/IntegralErrorSingleReference/package.order b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/package.order new file mode 100644 index 0000000000..b6782bacee --- /dev/null +++ b/AixLib/Utilities/KPIs/IntegralErrorSingleReference/package.order @@ -0,0 +1,4 @@ +IntegralAbsoluteError +IntegralErrorBySign +IntegralTimer +IntegralSquareError diff --git a/AixLib/Utilities/KPIs/Temperature/DIN16798.mo b/AixLib/Utilities/KPIs/Temperature/DIN16798.mo new file mode 100644 index 0000000000..e050f2706a --- /dev/null +++ b/AixLib/Utilities/KPIs/Temperature/DIN16798.mo @@ -0,0 +1,31 @@ +within AixLib.Utilities.KPIs.Temperature; +model DIN16798 "Comfort room temperature based on DIN EN 16798-1" + extends AixLib.Utilities.KPIs.BaseClasses.PartialTemperatureAssessment; + Modelica.Blocks.Interfaces.RealInput TAmb( + final unit="K", + displayUnit="degC", + final min=0) "Ambient temperature (hourly averaged)" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + AixLib.Utilities.KPIs.BaseClasses.ComfortTemperatureDIN16798 comT + "Comfort temperature" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); +equation + connect(TAmb, comT.TAmb) + annotation (Line(points={{-120,60},{-82,60}}, color={0,0,127})); + connect(comT.TComUppBou, itgErrDuaBou.refUpp) annotation (Line(points={{-59,67}, + {-40,67},{-40,12},{-24,12}}, color={0,0,127})); + connect(comT.TComLowBou, itgErrDuaBou.refLow) annotation (Line(points={{-59,53}, + {-50,53},{-50,-12},{-24,-12}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

This model assesses room temperature according to DIN EN 16798-1, where the comfort room temperature is based on the ambient temperature.

+")); +end DIN16798; diff --git a/AixLib/Utilities/KPIs/Temperature/FixedBounds.mo b/AixLib/Utilities/KPIs/Temperature/FixedBounds.mo new file mode 100644 index 0000000000..7492a40326 --- /dev/null +++ b/AixLib/Utilities/KPIs/Temperature/FixedBounds.mo @@ -0,0 +1,33 @@ +within AixLib.Utilities.KPIs.Temperature; +model FixedBounds "Temperature assessment with fixed bounds" + extends AixLib.Utilities.KPIs.BaseClasses.PartialTemperatureAssessment; + parameter Modelica.Units.SI.Temperature TCom(displayUnit="degC")=295.15 + "Comfort temperature"; + parameter Modelica.Units.SI.TemperatureDifference dTTol(final min=0)=2 + "Tolerance of temperature difference, tolerance band is (TCom - dTTol, TCom + dTTol)"; + Modelica.Blocks.Sources.Constant conTUppBou(k=TCom + dTTol) + "Upper bound of temperature" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + Modelica.Blocks.Sources.Constant conTLowBou(k=TCom - dTTol) + "Lower bound of temperature" + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); +initial equation + assert(dTTol > 0, "Tolerance should be greater than 0"); +equation + connect(conTUppBou.y, itgErrDuaBou.refUpp) annotation (Line(points={{-59,50}, + {-40,50},{-40,12},{-24,12}}, color={0,0,127})); + connect(conTLowBou.y, itgErrDuaBou.refLow) annotation (Line(points={{-59,-50}, + {-40,-50},{-40,-12},{-24,-12}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

This model assesses room temperature using a fixed value and defined boundaries.

+")); +end FixedBounds; diff --git a/AixLib/Utilities/KPIs/Temperature/FlexibleBounds.mo b/AixLib/Utilities/KPIs/Temperature/FlexibleBounds.mo new file mode 100644 index 0000000000..e99e095802 --- /dev/null +++ b/AixLib/Utilities/KPIs/Temperature/FlexibleBounds.mo @@ -0,0 +1,28 @@ +within AixLib.Utilities.KPIs.Temperature; +model FlexibleBounds "Temperature assessment with flexible bounds" + extends AixLib.Utilities.KPIs.BaseClasses.PartialTemperatureAssessment; + Modelica.Blocks.Interfaces.RealInput uppBou(unit="K", displayUnit="degC") + "Upper temperature bound" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + Modelica.Blocks.Interfaces.RealInput lowBou(unit="K", displayUnit="degC") + "Lower temperature bound" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); +equation + assert(uppBou > lowBou, "Upper bound should be greater than lower bound"); + connect(itgErrDuaBou.refUpp, uppBou) annotation (Line(points={{-24,12},{-40,12}, + {-40,60},{-120,60}}, color={0,0,127})); + connect(itgErrDuaBou.refLow, lowBou) annotation (Line(points={{-24,-12},{-40,-12}, + {-40,-60},{-120,-60}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

This model assesses room temperature based on input upper and lower boundaries.

+")); +end FlexibleBounds; diff --git a/AixLib/Utilities/KPIs/Temperature/package.mo b/AixLib/Utilities/KPIs/Temperature/package.mo new file mode 100644 index 0000000000..a0f0f7fef1 --- /dev/null +++ b/AixLib/Utilities/KPIs/Temperature/package.mo @@ -0,0 +1,8 @@ +within AixLib.Utilities.KPIs; +package Temperature "KPIs for temperature" +extends Modelica.Icons.Package; + +annotation (Documentation(info=" +

This package contains different assessments of indoor temperature to evaluate thermal comfort.

+")); +end Temperature; diff --git a/AixLib/Utilities/KPIs/Temperature/package.order b/AixLib/Utilities/KPIs/Temperature/package.order new file mode 100644 index 0000000000..4a970c1dc5 --- /dev/null +++ b/AixLib/Utilities/KPIs/Temperature/package.order @@ -0,0 +1,3 @@ +DIN16798 +FixedBounds +FlexibleBounds diff --git a/AixLib/Utilities/KPIs/package.mo b/AixLib/Utilities/KPIs/package.mo new file mode 100644 index 0000000000..ddf4ef519a --- /dev/null +++ b/AixLib/Utilities/KPIs/package.mo @@ -0,0 +1,19 @@ +within AixLib.Utilities; +package KPIs "Key Performance Indicators (KPIs) for control system" + extends Modelica.Icons.Package; + +annotation (Documentation(info=" +

This package contains models to calculate several fundamental KPIs (Key-Performance-Indicators) essential for assessing control performance in various systems. This evaluation typically involves comparing specific system values against single or dual reference boundaries.

+

Within this package, two primary sub-packages are included:

+ +

Building upon these primary sub-packages, additional specialized sub-packages have been developed to address specific aspects of control performance:

+ +")); +end KPIs; diff --git a/AixLib/Utilities/KPIs/package.order b/AixLib/Utilities/KPIs/package.order new file mode 100644 index 0000000000..a0d4f78863 --- /dev/null +++ b/AixLib/Utilities/KPIs/package.order @@ -0,0 +1,7 @@ +Energy +IndoorAirQuality +IntegralErrorDualReference +IntegralErrorSingleReference +Temperature +Examples +BaseClasses diff --git a/AixLib/Utilities/package.order b/AixLib/Utilities/package.order index 945df0d81f..a135114997 100644 --- a/AixLib/Utilities/package.order +++ b/AixLib/Utilities/package.order @@ -5,6 +5,7 @@ Cryptographics Diagnostics HeatTransfer IO +KPIs Logical MassTransfer Math