diff --git a/Declaration/MissionCycles/LOT2_rural Engine Only.vdri b/Declaration/MissionCycles/LOT2_rural Engine Only.vdri deleted file mode 100644 index a39159866257a9a11bd66de05214e0d68b4b5da0..0000000000000000000000000000000000000000 --- a/Declaration/MissionCycles/LOT2_rural Engine Only.vdri +++ /dev/null @@ -1,3953 +0,0 @@ -<n>,<Pe> -c [rpm],[kW] -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,2.38E-07 -600,0 -644.4445,2.329973 -644.4445,0.5693641 -644.4445,4.264177 -869.7512,7.98456 -644.4445,1.351656 -1015.31,-0.2716608 -948.6478,-0.4653716 -872.4501,-0.5719776 -644.4445,1.012361 -816.044,0.1606398 -644.4445,3.967641 -644.4445,4.3916 -645.3466,1.254886 -602.9238,0.36098 -644.4445,1.097353 -644.4445,1.476951 -645.6951,2.961375 -656.8193,3.33839 -688.8293,2.509675 -715.7259,3.104633 -743.2361,2.779576 -759.3434,2.025352 -763.0762,1.467997 -761.0308,1.383811 -757.7582,1.320618 -755.406,1.475238 -756.3265,1.681716 -753.872,1.098228 -749.1166,1.411724 -747.787,1.465289 -743.7986,1.110595 -691.6417,-3.012229 -627.2637,-0.1685431 -1049.495,-0.09707546 -644.4445,1.615664 -1026.825,0.4667768 -977.9754,-0.4151859 -906.5457,-0.4785028 -764.8557,-2.495939 -615.8789,-0.5095253 -600,-0.2679868 -644.4445,0.5701756 -644.4445,1.185031 -600,0.2967396 -646.6069,3.811063 -895.4804,7.923037 -653.8535,6.359474 -791.9158,11.55912 -900.8318,4.931076 -1007.856,14.46236 -1156.708,13.49057 -1345.086,27.20026 -1602.138,35.01208 -1888.49,46.58702 -2103.714,24.29906 -2146.359,-1.109985 -1286.033,8.800848 -1351.937,37.56419 -1494.108,56.84015 -1650.18,55.71647 -1797.949,62.99876 -1974.041,90.22348 -2191.804,115.1789 -2403.877,105.9852 -2503.301,18.33513 -1611.144,-1.709167 -1619.774,43.61679 -1655.685,42.16265 -1690.462,44.19933 -1723.907,42.2117 -1766.618,62.7349 -1823.327,70.33007 -1898.131,102.0343 -1980.033,91.64824 -2027.516,42.57878 -2040.799,27.31307 -1396.846,69.06043 -1435.803,91.8233 -1479.637,89.72998 -1511.026,58.87632 -1535.129,70.88527 -1563.544,76.08076 -1591.288,72.46291 -1615.981,69.52535 -1637.034,63.16708 -1654.957,61.31534 -1674.975,72.86595 -1695.262,64.75288 -1709.799,54.75394 -1712.769,24.54955 -1702.061,5.766651 -1685.925,4.414207 -1669.991,5.575367 -1656.502,12.07608 -1644.88,11.30247 -1634.482,15.56817 -1624.607,12.47053 -1610.151,-0.5362444 -1594.136,6.376687 -1580.163,5.485111 -1564.78,1.025784 -1550.539,8.4501 -1539.777,11.6633 -1532.066,17.71403 -1521.599,2.418658 -1504.309,-4.049212 -1481.361,-14.07779 -1453.792,-17.15281 -1423.724,-18.15207 -1385.246,-16.81612 -1337.242,-15.72801 -1293.188,-15.42869 -1281.755,38.3059 -1286.484,11.6914 -1283.596,17.9171 -1285.597,24.78118 -1291.778,29.405 -1303.359,40.06316 -1321.147,47.6144 -1343.046,53.40984 -1367.31,56.75732 -1398.372,76.35516 -1441.017,95.91759 -1491.115,106.3325 -1533.099,77.92695 -1561.824,69.6596 -1584.033,60.08042 -1597.119,41.62484 -1603.93,40.29163 -1607.558,31.45644 -1604.965,19.52167 -1600.142,23.70411 -1596.299,22.48869 -1589.192,12.48158 -1578.793,11.02395 -1566.889,6.910674 -1551.426,-1.123854 -1528.707,-15.20682 -1502.589,-11.37927 -1476.041,-16.47795 -1439.148,-17.79036 -1386.845,-16.22873 -1331.801,-15.54598 -1276.609,-14.19835 -1222.116,-13.53877 -1183.826,-13.63705 -1165.594,4.323093 -1154.524,-0.2198782 -1145.307,8.251244 -1136.212,-0.1459947 -1127.318,8.395197 -1127.425,20.90548 -1132.316,19.78157 -1134.976,15.85121 -1140.847,27.66578 -1153.503,32.64259 -1173.508,46.8272 -1195.77,39.98267 -1214.31,39.54551 -1235.31,48.15401 -1262.019,56.77373 -1290.77,56.59818 -1317.063,53.30949 -1343.879,61.21212 -1364.448,38.20493 -1372.416,26.90753 -1376.097,26.42333 -1374.269,11.18833 -1368.546,15.03598 -1362.863,11.02519 -1356.038,11.46854 -1346.136,1.988382 -1325.11,-16.2194 -1284.63,-14.65078 -1238.373,-14.2102 -1193.929,-12.98282 -1155.988,-13.10039 -1137.273,2.958799 -1132.786,15.8914 -1141.075,33.33242 -1156.7,34.19608 -1179.433,52.38899 -1213.827,66.11726 -1258.176,83.05579 -1305.898,81.63163 -1353.754,91.2124 -1396.935,75.19558 -1438.893,94.76639 -1487.004,100.8023 -1529.298,83.95088 -1563.974,82.77102 -1596.393,81.57443 -1624.446,72.54066 -1640.138,42.54347 -1643,29.84203 -1638.257,16.47232 -1629.605,16.00256 -1630.478,48.60144 -1642.785,55.60721 -1656.623,55.29026 -1669.48,53.73763 -1680.188,49.11893 -1689.163,48.75134 -1695.907,42.08216 -1700.851,42.99605 -1706.79,46.16529 -1713.763,47.34768 -1720.427,45.77478 -1727.319,48.89489 -1725.733,15.54477 -1714.932,15.2667 -1703.74,13.40421 -1690.842,8.433504 -1676.749,8.346373 -1663.421,10.28855 -1648.951,3.619027 -1633.192,5.002003 -1617.433,2.826547 -1602.775,7.905733 -1589.501,6.74611 -1576.428,7.864722 -1567.118,18.46364 -1564.686,30.00007 -1567.427,35.38074 -1572.196,36.95614 -1576.469,34.14531 -1576.307,22.5677 -1570.826,16.47429 -1563.423,15.84486 -1553.562,7.964062 -1536.916,-5.952643 -1517.233,-2.275624 -1497.389,-6.935693 -1471.863,-18.41763 -1442.372,-18.13165 -1414.871,-13.40553 -1387.812,-17.13374 -1362.057,-10.3961 -1346.257,8.515593 -1345.787,31.16553 -1358.712,46.74545 -1379.066,53.84549 -1401.382,54.66264 -1424.557,58.96523 -1447.437,56.39186 -1469.605,59.47992 -1493.117,63.22589 -1515.124,57.4621 -1535.841,61.76757 -1557.969,64.56117 -1578.323,58.54613 -1596.594,60.07353 -1611.991,50.88236 -1621.194,40.61778 -1619.421,14.21795 -1605.113,-1.868717 -1588.762,6.50421 -1576.67,11.31663 -1569.348,21.61535 -1567.91,30.3064 -1571.135,36.95245 -1576.267,36.91877 -1582.797,42.09142 -1590.294,40.76203 -1597.817,42.91198 -1605.462,41.89369 -1612.273,40.82465 -1619.582,44.26139 -1628.167,45.92483 -1637.464,47.59579 -1648.723,53.73099 -1661.419,53.84293 -1676.91,65.1045 -1695.235,65.79607 -1711.21,58.91008 -1724.968,59.73791 -1739.437,63.20061 -1753.772,61.00745 -1768,64.61153 -1781.368,59.52817 -1794.521,65.5128 -1809.072,66.50668 -1818.449,47.4547 -1817.24,26.92148 -1805.995,8.979017 -1786.662,-4.010155 -1765.233,-0.05493259 -1742.89,-7.886769 -1721.609,2.619378 -1703.539,1.704347 -1687.591,9.187813 -1675.688,15.12251 -1669.373,28.10153 -1666.148,25.54206 -1659.176,14.7161 -1647.474,8.565833 -1631.875,0.5784202 -1615.068,3.583271 -1599,2.292942 -1587.324,17.45128 -1584.315,30.57986 -1586.8,35.61685 -1593.088,43.5732 -1602.506,46.77898 -1611.978,44.69442 -1618.292,36.94254 -1621.436,34.45127 -1619.475,19.75505 -1612.367,16.75193 -1602.009,8.288825 -1592.927,20.35848 -1589.178,25.61557 -1589.299,33.05613 -1592.766,36.86369 -1600.84,48.93576 -1611.79,47.39437 -1614.947,23.44294 -1610.836,22.92943 -1603.433,12.01165 -1586.975,-7.003079 -1563.772,-9.861372 -1540.355,-8.272071 -1519.907,-2.04369 -1503.677,3.384114 -1487.904,-1.296515 -1471.513,0.8036427 -1454.625,-3.150111 -1435.789,-5.048037 -1415.583,-7.256803 -1396.787,-1.866434 -1379.012,-5.011639 -1361.345,-2.060575 -1341.192,-11.55893 -1317.613,-10.92163 -1291.294,-15.20063 -1254.361,-14.80647 -1210.226,-14.88861 -1174.65,-14.81055 -1147.215,-14.28176 -1119.552,-13.7853 -1087.993,-13.05181 -1052.511,-12.44097 -1031.579,5.715624 -1037.853,32.76339 -1064.428,51.27643 -1098.567,52.62703 -1138.801,70.14542 -1186.926,77.43063 -1233.348,72.79241 -1273.076,66.44997 -1304.85,56.3991 -1335.952,68.81242 -1369.93,68.46135 -1401.744,66.97513 -1432.914,70.78075 -1462.162,65.10287 -1490.927,73.24111 -1519.369,67.75407 -1544.292,65.61349 -1569.657,72.50694 -1591.342,56.41633 -1604.709,47.0724 -1608.203,24.27454 -1601.539,12.98722 -1592.376,15.38727 -1589.407,33.14979 -1593.76,39.76634 -1602.748,49.21623 -1614.531,50.16054 -1628.221,57.05817 -1646.023,65.98457 -1665.665,65.65594 -1683.789,63.0876 -1698.339,55.09802 -1707.865,46.70007 -1711.465,34.71091 -1712.298,37.05171 -1713.763,37.07273 -1717.041,43.76989 -1723.678,49.61529 -1733.472,56.02866 -1744.677,55.90408 -1750.736,38.25808 -1755.6,52.16808 -1767.544,65.1767 -1784.929,74.09778 -1810.361,98.34163 -1843.734,108.7761 -1876.234,100.4823 -1900.229,80.1554 -1920.624,89.84477 -1923.486,11.55359 -1384.726,-6.716908 -1365.214,-9.758064 -1335.167,-15.65223 -1305.561,-9.438278 -1293.54,25.59272 -1293.716,51.81037 -1298.87,51.8591 -1307.468,70.9785 -1321.719,83.69244 -1340.242,97.09694 -1361.364,102.0721 -1381.797,98.08289 -1396.943,76.64746 -1408.093,78.5398 -1421.649,92.87965 -1436.79,90.6324 -1452.067,97.12432 -1465.261,81.55907 -1474.817,78.22183 -1481.586,66.6988 -1486.936,71.00793 -1494.076,78.64029 -1504.805,94.48131 -1519.545,105.7961 -1533.59,93.55258 -1544.594,90.03146 -1553.279,81.37687 -1560.448,82.33672 -1566.855,78.04972 -1572.087,76.19854 -1574.895,63.56385 -1574.396,55.5367 -1573.515,61.01888 -1573.036,57.94503 -1570.845,49.96451 -1566.747,45.35576 -1559.803,31.16218 -1548.662,17.72969 -1536.094,20.5824 -1523.252,14.39674 -1509.539,13.54565 -1497.577,23.35009 -1487.474,23.31975 -1479.131,32.58831 -1472.793,34.21489 -1471.189,59.98996 -1474.25,61.94712 -1479.943,76.42569 -1487.386,73.62328 -1493.87,72.10479 -1498.252,62.06528 -1504.355,83.55563 -1514.009,85.13411 -1522.518,78.52847 -1528.054,68.42541 -1531.879,68.98322 -1535.693,69.12019 -1539.86,71.95422 -1543.156,64.46819 -1544.232,58.62698 -1542.999,50.14769 -1540.877,52.80785 -1538.393,47.5109 -1535.83,51.87814 -1534.607,55.44809 -1535.527,65.06208 -1540.046,78.20454 -1545.102,69.33004 -1542.54,31.26162 -1534.764,36.16859 -1527.125,30.95866 -1517.892,25.15287 -1508.043,25.83571 -1498.927,28.26935 -1490.525,28.91031 -1483.571,35.82453 -1480.344,50.35513 -1480.471,55.54207 -1481.576,56.2795 -1481.869,50.83329 -1480.745,47.77131 -1478.28,42.57355 -1476.333,50.48153 -1475.023,46.08316 -1474.094,52.55144 -1473.565,48.33829 -1472.754,50.75901 -1472.802,53.36675 -1472.646,49.53503 -1472.675,54.45502 -1472.744,49.77462 -1473.644,59.45992 -1476.216,59.98241 -1477.918,54.67937 -1478.984,56.45734 -1479.639,52.3883 -1481.234,62.24279 -1484.403,62.18639 -1488.227,66.80893 -1491.239,57.95909 -1493.107,60.41497 -1495.973,64.38061 -1498.477,58.73077 -1499.935,58.45076 -1498.233,39.69763 -1490.447,21.17598 -1479.659,20.41969 -1469.35,22.65018 -1458.865,18.07665 -1449.143,25.79696 -1440.174,21.3046 -1431.009,23.49089 -1422.334,22.9997 -1411.819,11.86371 -1402.048,25.93449 -1394.321,22.3779 -1386.849,26.39423 -1381.039,30.80274 -1374.056,19.11548 -1365.478,21.04128 -1357.8,23.10369 -1351.413,27.2389 -1348.342,40.50266 -1348.86,46.52771 -1354.67,69.74982 -1364.49,69.70929 -1375.415,77.81886 -1386.575,73.11307 -1395.456,67.07029 -1403.241,68.56764 -1410.313,64.41555 -1416.035,62.10302 -1420.035,55.49044 -1423.057,57.14668 -1424.515,46.92026 -1424.466,48.65111 -1424.349,46.51535 -1420.514,27.12698 -1412.171,19.98239 -1399.202,-0.2213111 -1381.088,-8.825974 -1360.959,-10.97501 -1339.52,-15.13851 -1315.038,-15.79168 -1271.67,-13.71585 -1205.943,-12.13631 -1122.19,-10.03683 -1048.169,-10.36391 -990.1788,-9.246284 -928.2859,-9.212884 -867.8992,-9.020022 -804.412,-8.525709 -729.0021,-8.260065 -887.2314,-7.793596 -782.4908,-7.821894 -665.2287,-6.784316 -772.3559,-4.63562 -600,-6.277975 -614.9388,-5.288214 -696.7551,-3.49948 -600,-1.283326 -664.3683,-1.597912 -600,-1.778763 -600,-0.7596555 -600,-0.1736608 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,-2.38E-07 -600,0 -644.4445,1.612164 -644.4445,6.538949 -785.0072,0.8882241 -841.1434,3.194654 -644.4445,4.281434 -1009.552,-0.1017489 -970.5985,0.5266633 -942.8003,0.3860083 -644.4445,2.60547 -644.4445,3.600683 -614.3267,0.6870103 -645.5776,1.867147 -654.6205,4.423994 -692.8177,1.993502 -708.7716,2.477404 -728.2538,2.476002 -755.4572,3.501919 -778.621,2.18979 -785.3195,1.743106 -784.5526,1.346341 -785.7797,1.974449 -787.5695,1.416916 -784.4503,1.4051 -782.5583,1.548533 -779.4391,1.255069 -775.604,1.452504 -776.0643,1.739155 -781.2288,2.003658 -791.558,2.376166 -794.8305,1.215703 -790.2285,1.457595 -788.5922,1.549223 -777.0869,0.305099 -717.4133,-3.12269 -620.5139,-2.686603 -644.4445,1.54447 -1016.479,0.8481472 -962.2321,-0.9291403 -847.3507,-1.475364 -747.673,-0.2668786 -676.963,-0.3898878 -602.3846,-0.3104959 -600,-0.1901872 -600,0.1421087 -644.4445,0.9691319 -658.5208,5.586625 -644.4445,10.10435 -770.7463,12.22105 -927.217,10.38821 -1058.376,12.88986 -1195.672,14.52883 -1370.653,24.36733 -1588.996,29.57337 -1850.804,44.95491 -2070.22,25.92677 -2149.734,8.226243 -1319.83,16.38028 -1416.364,49.23381 -1559.182,49.06653 -1710.518,65.96037 -1919.854,106.5468 -2084.814,43.9015 -2166.125,47.40614 -1477.623,84.04178 -1568.573,75.32056 -1632.52,51.08742 -1672.844,42.69801 -1694.081,22.06184 -1716.868,46.75986 -1754.409,48.50185 -1799.228,62.44069 -1858.482,78.40761 -1900.06,34.26859 -1927.36,55.25987 -1337.101,81.45631 -1385.247,97.38922 -1429.335,76.56412 -1463.264,73.28956 -1495.965,77.56803 -1528.196,76.33263 -1558.654,76.35077 -1587.647,75.73126 -1612.448,66.08598 -1634.75,70.53711 -1654.379,59.56525 -1669.87,58.48478 -1687.604,69.47137 -1707.072,66.88885 -1722.079,55.75189 -1724.041,21.08878 -1712.486,6.930377 -1696.472,4.276927 -1677.568,-3.706191 -1660.694,10.34586 -1651.074,20.23409 -1643.645,17.34347 -1632.816,8.011366 -1618.776,5.67132 -1603.688,3.707242 -1588.144,3.373533 -1571.404,-0.8783412 -1555.752,6.147068 -1543.593,9.695271 -1532.576,9.228716 -1522.379,11.73368 -1509.777,1.065055 -1489.946,-10.28071 -1465.427,-12.51891 -1440.021,-12.71381 -1402.846,-16.25399 -1355.514,-15.46913 -1313.435,-14.94506 -1291.697,11.92974 -1290.622,22.9257 -1291.334,16.68974 -1292.651,24.62087 -1298.683,29.66311 -1308.639,35.86757 -1329.033,59.74829 -1361.923,73.65525 -1400.414,80.50338 -1437.67,75.37047 -1474.187,83.83059 -1510.207,79.0104 -1541.698,74.4771 -1566.836,62.39557 -1586.464,59.38128 -1599.685,43.04843 -1606.496,39.10833 -1607.544,24.1147 -1602.614,18.94668 -1599.308,29.22934 -1598.395,26.77416 -1592.524,12.49185 -1582.703,13.13161 -1570.221,3.125345 -1548.953,-14.38402 -1520.766,-17.64579 -1492.177,-15.95768 -1453.188,-19.0262 -1405.211,-17.32 -1359.907,-15.5539 -1311.877,-14.40117 -1259.963,-13.38175 -1212.524,-12.87038 -1177.001,-12.74935 -1155.424,-1.723226 -1141.801,-0.260747 -1134.492,12.46988 -1133.995,15.73124 -1130.65,5.669389 -1126.767,14.28826 -1128.648,19.20252 -1133.216,20.79155 -1142.795,31.54515 -1160.919,42.30621 -1179.715,34.65625 -1197.906,42.59779 -1221.082,49.09034 -1245.937,49.3044 -1271.692,54.20898 -1300.591,60.77997 -1329.168,56.62835 -1354.789,55.80923 -1375.788,46.10873 -1385.73,25.64256 -1386.025,18.74092 -1383.688,17.9726 -1379.388,12.89893 -1372.698,10.80366 -1364.207,7.388607 -1349.334,-6.829912 -1327.031,-12.3538 -1289.95,-14.04064 -1243.626,-13.43234 -1200.889,-12.65873 -1162.021,-12.30316 -1138.523,0.8973355 -1130.394,9.3073 -1135.07,31.08614 -1156.795,50.95563 -1189.187,59.67162 -1226.563,67.66388 -1268.951,78.01559 -1312.414,76.58404 -1356.025,85.13309 -1401.126,87.58305 -1444.898,88.26737 -1487.286,90.28471 -1527.847,89.14961 -1565.344,86.64429 -1597.481,76.86526 -1626.864,82.09353 -1642.073,31.50566 -1639.99,23.92768 -1637.76,30.81757 -1638.123,32.71453 -1642.126,43.46971 -1650.376,47.85925 -1656.905,38.26996 -1663.717,49.5445 -1672.006,44.13668 -1679.073,46.09537 -1685.71,43.32407 -1691.084,42.26889 -1696.646,44.54321 -1703.364,46.98836 -1710.511,46.79175 -1716.906,45.01366 -1717.444,26.1797 -1711.129,20.26562 -1704.439,24.31491 -1696.458,15.16069 -1684.38,9.138308 -1669.212,3.496205 -1653.412,6.050759 -1636.148,-2.083723 -1620.402,10.29929 -1606.523,3.2822 -1590.468,2.226402 -1576.711,10.1251 -1568.824,20.93763 -1567.413,31.03271 -1569.711,33.10635 -1572.452,32.69432 -1574.655,31.5523 -1572.747,19.22354 -1565.035,12.21235 -1556.195,15.0088 -1543.351,-1.151437 -1523.306,-7.844097 -1498.451,-15.2105 -1471.473,-14.222 -1443.514,-17.75576 -1418.028,-8.075694 -1395.819,-9.842525 -1378.085,3.328753 -1367.149,8.02681 -1360.404,14.89146 -1361.842,31.14586 -1371.771,39.49014 -1387.436,48.75327 -1406.608,51.37 -1428.548,59.16101 -1453.08,61.76308 -1479.238,67.222 -1503.811,59.92773 -1525.214,60.14183 -1544.184,54.53143 -1562.268,59.49051 -1582.313,63.16959 -1599.873,53.45661 -1613.429,51.63828 -1621.181,35.03048 -1616.371,9.457516 -1600.061,-3.788047 -1581.856,2.248221 -1572.667,24.77247 -1572.022,30.03358 -1574.01,33.46582 -1578.242,37.671 -1584.06,39.13469 -1589.837,38.06779 -1595.385,38.90419 -1601.216,39.5349 -1606.859,38.81017 -1614.638,47.36164 -1624.701,47.38615 -1636,52.69853 -1647.057,47.73088 -1657.59,52.09483 -1669.158,52.50356 -1683.198,62.20206 -1702.491,73.03305 -1723.463,70.75262 -1743.683,73.13956 -1762.667,68.86513 -1777.58,60.39309 -1789.188,58.30213 -1797.921,50.87263 -1806.855,60.13579 -1817.388,58.0382 -1823.299,43.58347 -1816.582,10.14859 -1802.529,14.92394 -1786.299,1.025387 -1768.927,9.511108 -1751.623,0.3174438 -1732.894,3.221305 -1714.636,1.037209 -1696.606,3.044764 -1683.345,16.9832 -1676.05,23.35215 -1669.494,19.07921 -1660.667,14.90462 -1649.65,10.84701 -1637.733,11.08645 -1623.559,2.431441 -1610.325,13.43634 -1600.115,11.95773 -1593.007,23.21765 -1593.733,37.80044 -1600.921,45.08272 -1610.755,47.47602 -1621.087,47.78857 -1627.616,35.45415 -1628.436,28.78426 -1624.513,19.24914 -1617.298,17.2322 -1609.13,15.51832 -1601.445,18.32353 -1596.178,23.1551 -1595.479,33.32108 -1600.276,41.6428 -1609.909,50.18336 -1618.373,38.57851 -1622.498,36.17999 -1621.987,23.06949 -1614.45,12.16186 -1598.261,-5.880579 -1576.576,-6.21808 -1557.216,0.2066689 -1540.557,1.06763 -1523.776,-0.7704601 -1505.168,-4.783222 -1484.424,-7.280366 -1461.786,-10.48103 -1437.992,-10.87021 -1412.439,-15.4868 -1386.16,-13.11512 -1361.533,-11.51401 -1337.054,-12.97312 -1311.675,-13.94429 -1284.644,-14.70514 -1260.877,-6.438118 -1239.233,-12.14887 -1213.585,-13.36887 -1189.711,-8.318381 -1167.449,-12.13369 -1133.834,-11.54234 -1098.11,-11.47418 -1073.161,-9.736206 -1051.866,-8.969399 -1043.845,17.9187 -1059.793,42.8426 -1091.15,54.27356 -1132.423,69.97617 -1179.849,74.85709 -1224.723,70.31767 -1266.425,73.1416 -1304.474,66.09874 -1339.956,71.33346 -1376.07,72.68569 -1408.422,65.08088 -1436.595,64.42775 -1462.377,61.2652 -1487.568,65.8431 -1513.982,68.2971 -1540.825,70.66122 -1565.277,63.87906 -1586.142,61.8507 -1603.258,53.73509 -1610.003,28.49205 -1602.412,5.785827 -1591.718,17.46236 -1587.728,27.60659 -1590.347,39.33879 -1599.711,50.57925 -1614.356,58.24709 -1631.714,61.5585 -1649.959,63.41554 -1667.223,60.33664 -1682.902,59.92071 -1697.641,58.86283 -1708.402,47.30275 -1712.889,37.3675 -1714.622,37.78582 -1716.933,39.62757 -1720.386,42.15772 -1725.639,46.5316 -1733.472,52.14337 -1742.568,52.02161 -1752.026,54.51895 -1760.92,50.98923 -1773.2,68.27187 -1792.224,77.96797 -1821.486,110.3905 -1859.212,115.6734 -1886.512,75.2928 -1904.73,83.84886 -1920.543,68.10039 -1923.083,32.01192 -1906.866,-6.502386 -1369.067,-8.091158 -1347.198,-16.18642 -1322.599,-15.63903 -1300.348,-10.72464 -1291.3,42.13477 -1295.232,54.72806 -1305.844,78.21381 -1323.205,92.89117 -1342.943,94.77242 -1363.46,101.6814 -1385.072,105.6614 -1401.614,77.6887 -1414.802,90.22686 -1429.796,90.92907 -1445.416,97.26785 -1460.968,94.02265 -1474.025,85.8418 -1482.309,68.04903 -1486.554,63.08653 -1491.151,71.01434 -1497.039,71.83271 -1507.27,98.90955 -1520.142,90.28288 -1531.712,93.81809 -1542.735,89.45779 -1550.501,75.71756 -1555.763,75.2889 -1560.967,76.44486 -1565.573,72.56293 -1568.879,69.08176 -1571.598,69.47919 -1572.166,55.82536 -1571.677,62.81889 -1571.921,60.4342 -1570.689,53.40608 -1566.415,40.77371 -1555.499,10.54896 -1539.664,8.183149 -1524.034,9.895695 -1510.967,22.06216 -1500.463,23.95686 -1491.063,27.36668 -1482.349,26.82351 -1476.999,46.35995 -1477.996,64.20844 -1481.899,64.05076 -1485.909,65.5948 -1490.075,65.75693 -1495.259,72.5956 -1502.116,77.00091 -1508.6,71.68607 -1514.263,73.26437 -1521.178,80.59914 -1529.15,81.26859 -1536.368,77.57661 -1542.686,77.1497 -1547,66.23773 -1548.115,57.8325 -1546.481,49.11549 -1544.408,54.76034 -1543.166,53.98143 -1541.073,49.1928 -1539.361,55.99929 -1538.862,56.49809 -1538.393,56.0927 -1540.417,72.0712 -1545.18,73.70837 -1546.256,49.76416 -1542.735,44.97318 -1535.145,23.71458 -1523.252,17.02971 -1509.617,11.41548 -1496.003,15.4281 -1487.171,38.66481 -1482.3,38.17532 -1480.637,57.24352 -1481.762,54.72427 -1482.73,56.49815 -1483.307,52.52861 -1482.72,49.56577 -1481.508,48.64921 -1480.187,48.71376 -1478.955,48.95982 -1477.576,47.62597 -1477.849,58.67931 -1479.013,53.03189 -1479.307,53.63831 -1480.021,55.61882 -1480.793,54.11613 -1481.361,54.51465 -1483.004,60.71709 -1484.578,54.38765 -1485.42,56.56187 -1485.889,52.28399 -1486.613,58.18631 -1488.002,56.44076 -1489.87,61.34771 -1490.917,51.78019 -1491.102,56.30661 -1492.227,57.52043 -1493.675,58.47193 -1495.113,57.72102 -1495.445,51.99366 -1494.271,48.60529 -1489.625,30.71955 -1480.001,17.82528 -1467.472,12.0361 -1457.623,32.14432 -1450.424,26.50847 -1441.191,19.21676 -1431.459,22.39477 -1422.754,23.97624 -1414.069,21.42962 -1406.89,31.4945 -1401.579,31.19041 -1395.554,26.72908 -1387.563,19.29863 -1377.782,15.70328 -1368.803,22.63366 -1361.243,22.56006 -1353.398,20.18481 -1347.96,34.80918 -1349.799,59.43176 -1356.929,64.2579 -1365.889,70.86021 -1376.755,76.60091 -1387.504,72.27655 -1395.348,62.18171 -1402.557,70.15619 -1408.826,58.08114 -1414.47,67.74133 -1420.152,59.29419 -1424.652,61.93027 -1429.249,60.66118 -1431.322,48.02657 -1430.774,45.73412 -1426.217,24.6445 -1410.704,-15.22193 -1391.456,1.596369 -1375.386,-1.242421 -1360.089,4.432325 -1342.327,-12.48885 -1315.958,-15.63675 -1278.253,-14.49595 -1226.61,-12.92336 -1157.421,-11.01548 -1084.691,-10.37803 -1016.333,-9.222387 -953.2953,-8.877071 -891.1482,-8.744204 -1132.584,-10.29824 -1027.589,-7.797905 -906.3764,-7.333625 -778.9708,-6.812672 -640.4005,-6.574084 -725.2108,-4.330684 -600,-6.607558 -974.2606,0.2646341 -678.2445,-2.214189 -600,-2.06674 -600,-2.121689 -600,-1.457825 -600,-0.0909586 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,-2.38E-07 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,2.38E-07 -600,2.38E-07 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,-2.38E-07 -600,0 -600,2.38E-07 -600,2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,-2.38E-07 -600,2.38E-07 -600,-2.38E-07 -600,2.38E-07 -600,0 -600,-2.38E-07 -600,-2.38E-07 -600,-2.38E-07 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,-2.38E-07 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,2.38E-07 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,-2.38E-07 -600,2.38E-07 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,4.77E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,2.38E-07 -644.4445,0.07269168 -644.4445,0.5636628 -644.4445,6.32637 -909.8743,8.952326 -612.8438,0.4596145 -1049.945,0.5363288 -644.4445,1.307286 -644.4445,1.506667 -644.4445,1.191484 -644.4445,1.223324 -644.5549,1.372464 -645.5549,2.282104 -647.3238,2.434664 -660.2452,2.209997 -681.7216,2.61131 -706.7773,2.741129 -730.1458,2.619758 -748.145,2.314906 -760.0593,2.050172 -764.6102,1.540037 -765.2238,1.621832 -763.9455,1.326239 -764.4057,1.815315 -767.3715,1.615054 -764.6102,1.172328 -763.6898,1.813547 -765.7863,1.513745 -764.7125,1.459806 -763.4852,1.49177 -760.6218,1.268719 -717.6179,-2.408862 -665.5632,0.2176919 -624.9115,-1.213306 -1023.406,-0.02850914 -644.4445,2.188613 -998.4866,-0.7567296 -913.1129,-0.6905825 -792.6539,-1.726186 -682.2707,-0.2418582 -619.2075,-0.1684604 -644.4445,0.6611562 -646.427,1.844816 -674.444,1.06398 -698.6438,1.278553 -843.8422,6.181966 -645.6003,6.826957 -727.7936,6.854918 -867.4923,13.15338 -1035.213,14.05835 -1166.934,11.57775 -1302.747,18.54018 -1484.631,24.88181 -1734.831,42.28856 -2034.273,49.13046 -2212.783,14.95125 -1365.991,14.98481 -1435.985,36.59709 -1555.953,48.97858 -1705.628,64.5892 -1887.01,84.50237 -2010.176,29.41932 -1359.912,69.16082 -1460.599,91.42927 -1564.59,85.87419 -1639.38,57.33976 -1678.83,35.33801 -1693.723,19.23966 -1709.133,37.07459 -1753.812,70.30568 -1809.11,58.7817 -1828.497,10.1565 -1245.703,51.546 -1279.657,74.22597 -1325.282,88.26819 -1368.083,72.68974 -1405.977,80.60335 -1446.416,85.91576 -1481.576,70.02934 -1508.876,66.10561 -1538.958,82.82529 -1572.196,80.56322 -1601.915,75.8309 -1627.751,71.48734 -1648.79,62.65011 -1666.484,62.48646 -1683.574,62.6969 -1701.953,69.27721 -1717.592,55.01025 -1723.154,34.47604 -1716.396,10.84506 -1701.523,4.702551 -1681.102,-8.599273 -1661.836,7.633382 -1652.243,23.09983 -1646.547,20.57926 -1637.236,10.19999 -1622.242,0.4904656 -1602.922,-4.652774 -1584.731,3.380548 -1570.49,7.09161 -1557.458,6.66973 -1543.848,4.555008 -1531.689,10.66433 -1519.437,3.691454 -1503.61,-1.150481 -1485.728,-3.026744 -1464.379,-11.14701 -1436.985,-17.6633 -1401.435,-16.52778 -1357.637,-15.3913 -1312.307,-14.65012 -1287.908,11.86469 -1286,20.54327 -1286.619,18.54342 -1288.244,23.31835 -1295.069,32.82963 -1308.289,41.42417 -1326.36,47.51019 -1350.341,60.05747 -1386.146,84.80302 -1424.275,71.51812 -1459.61,82.11712 -1496.731,82.10949 -1531.165,78.98655 -1560.709,71.02921 -1584.879,65.1485 -1601.875,49.84313 -1609.842,36.42356 -1612.555,32.75125 -1610.258,19.61487 -1605.542,24.35468 -1602.197,23.91504 -1596.433,15.96346 -1585.846,7.36155 -1572.707,6.84079 -1554.569,-8.548178 -1529.58,-14.25133 -1502.374,-15.33138 -1473.287,-18.2294 -1433.115,-16.61605 -1379.361,-15.28753 -1322.517,-14.32261 -1269.65,-13.59477 -1223.823,-13.03917 -1191.054,-10.34762 -1167.623,-10.96569 -1146.087,-7.865382 -1138.617,20.75992 -1139.92,11.95193 -1135.07,6.090739 -1128.836,8.454925 -1127.815,18.23122 -1133.229,23.74462 -1145.025,33.94183 -1162.007,37.24741 -1180.266,38.54793 -1199.371,41.02165 -1220.437,45.36328 -1244.338,50.5095 -1270.631,54.25564 -1298.159,56.81184 -1326.924,60.92234 -1355.084,58.48366 -1378.461,50.37475 -1393.267,35.86261 -1398.198,22.63688 -1395.484,13.71113 -1386.67,4.619095 -1373.732,1.322395 -1360.028,1.926163 -1347.05,2.909883 -1327.864,-13.99705 -1303.439,-10.30259 -1270.98,-13.94411 -1227.45,-13.10693 -1189.361,-12.86395 -1163.257,-9.064267 -1149.096,6.519079 -1145.415,14.67137 -1153.382,34.60891 -1178.546,57.754 -1216.998,71.03598 -1263.134,83.27469 -1314.765,93.22186 -1365.711,89.68562 -1406.138,70.3726 -1441.432,80.56233 -1480.152,86.0248 -1517.623,82.35265 -1553.777,87.54527 -1590.871,91.02081 -1619.381,63.71481 -1634.092,47.46525 -1638.526,29.794 -1635.489,22.06191 -1635.758,40.95305 -1643.712,48.7066 -1653.788,49.15121 -1663.139,47.23022 -1672.597,50.53967 -1682.109,48.42113 -1690.426,47.30361 -1696.001,39.47346 -1699.468,40.3076 -1704.479,45.37587 -1710.861,45.75566 -1718.881,52.00259 -1722.791,31.61168 -1716.893,16.77742 -1706.844,16.1372 -1696.579,15.30738 -1686.61,16.48245 -1676.655,14.68511 -1666.323,14.48469 -1653.439,5.125021 -1638.015,4.899573 -1622.054,2.485665 -1605.65,2.586072 -1589.635,3.008597 -1576.482,11.31122 -1568.972,20.98672 -1568.045,32.59629 -1571.82,36.49885 -1575.689,33.22871 -1577.006,28.33649 -1576.509,27.30095 -1573.043,18.44022 -1566.083,15.48969 -1553.253,-1.0913 -1533.543,-6.647263 -1512.571,-5.314623 -1489.597,-12.72277 -1465.037,-10.23271 -1440.626,-12.70623 -1416.577,-9.706091 -1395.107,-6.353202 -1377.024,-1.41299 -1362.729,3.233414 -1354.829,16.14577 -1363.078,49.1428 -1386.616,61.25877 -1414.32,64.14809 -1440.303,59.41497 -1460.953,50.86452 -1479.574,55.51258 -1498.37,53.43364 -1516.938,56.92963 -1538.501,65.29128 -1562.402,67.20255 -1585.376,65.22421 -1607.168,66.15616 -1622.363,45.26455 -1626.448,29.70588 -1619.663,8.417274 -1605.892,5.471342 -1590.294,1.554001 -1574.104,2.731438 -1564.27,21.70022 -1562.819,29.79327 -1568.34,44.64818 -1577.866,43.57754 -1587.66,46.50829 -1597.844,45.86784 -1605.354,38.47025 -1610.205,37.56776 -1614.96,38.60074 -1622.027,45.92914 -1631.029,45.93453 -1640.622,48.91043 -1652.001,53.17495 -1664.657,54.63203 -1677.662,55.84564 -1692.656,63.26057 -1711.21,70.51211 -1732.478,75.57997 -1753.544,72.63683 -1769.828,60.5629 -1783.451,64.80178 -1796.429,59.79764 -1807.943,60.86138 -1820.33,64.59172 -1828.176,44.81462 -1821.163,8.214087 -1804.249,6.292377 -1787.871,9.134424 -1770.714,2.376011 -1754.109,10.06567 -1738.806,6.212786 -1721.286,1.067402 -1704.721,8.612881 -1690.95,10.14219 -1679.624,16.43083 -1669.144,12.42631 -1658.987,16.84797 -1647.85,8.391995 -1632.507,1.645216 -1616.008,3.606684 -1600.128,2.947272 -1589.487,20.32802 -1587.647,31.78459 -1590.159,34.78584 -1594.271,37.37839 -1600.692,42.96344 -1610.513,49.539 -1619.219,40.11499 -1623.559,35.45469 -1622.551,22.18125 -1616.573,18.38556 -1609.412,17.73681 -1601.727,16.13419 -1594.458,18.62502 -1590.616,27.14091 -1592.551,37.74634 -1599.214,43.24936 -1607.383,43.47301 -1616.519,47.3689 -1620.966,28.29967 -1614.678,11.12828 -1600.491,1.117563 -1577.759,-15.98362 -1550.498,-12.94688 -1526.638,-6.817096 -1505.168,-6.72456 -1484.263,-5.809709 -1462.727,-8.948511 -1443.058,-1.342418 -1426.667,-0.6651244 -1410.316,-1.713572 -1393.038,-3.54139 -1376.876,0.7599344 -1361.493,-1.957383 -1339.513,-15.69704 -1313.126,-13.22394 -1287.062,-14.71945 -1250.061,-13.29444 -1211.717,-13.18758 -1184.632,-12.68648 -1156.754,-13.87198 -1125.974,-13.35509 -1094.321,-12.72246 -1054.539,-11.65611 -1026.366,1.78571 -1031.707,34.37691 -1059.625,52.05185 -1095.194,54.60882 -1132.853,61.3746 -1177.447,76.69508 -1222.979,69.77629 -1261.898,65.92332 -1296.198,62.50776 -1331.935,74.62606 -1370.172,74.38905 -1403.021,64.03122 -1430.133,61.57874 -1454.451,58.83109 -1481.079,71.86363 -1508.285,63.87067 -1533.275,68.35617 -1556.074,59.77805 -1575.649,60.55231 -1590.562,46.38965 -1598.476,38.60023 -1600.316,26.62489 -1595.412,16.02007 -1589.635,23.31708 -1594.485,51.32585 -1609.062,56.67459 -1626.676,63.39441 -1644.746,60.32769 -1660.559,57.70242 -1675.096,57.71563 -1688.518,55.43426 -1701.389,57.32327 -1710.565,43.53574 -1713.427,35.47276 -1715.402,40.61037 -1719.432,43.12147 -1724.444,44.58424 -1731.376,50.66751 -1740.593,53.71496 -1749.258,49.65441 -1754.552,42.17929 -1757.723,42.34054 -1768.121,69.52338 -1794.468,103.9193 -1825.61,91.68179 -1855.813,105.6374 -1881.836,79.81264 -1897.179,67.01525 -1905.496,53.63717 -1906.692,39.33886 -1889.011,-19.16266 -1849.122,-24.79765 -1807.889,-24.43617 -1779.689,-0.7561536 -1284.092,17.17696 -1284.102,58.07148 -1292.093,58.99236 -1304.082,80.69597 -1321.862,92.27543 -1340.809,90.74892 -1359.844,96.99959 -1378.966,95.45564 -1393.216,73.59466 -1402.928,72.61659 -1413.785,82.11748 -1426.51,85.63467 -1440.927,94.76996 -1455.95,92.36811 -1470.416,94.86768 -1480.725,70.45586 -1486.985,72.58999 -1494.017,76.40392 -1505.187,99.43295 -1520.278,103.0791 -1537.327,115.3624 -1552.584,95.87924 -1562.453,84.82603 -1568.948,76.54655 -1573.946,76.64169 -1578.063,71.93213 -1579.726,61.67735 -1579.57,60.54532 -1578.23,54.0312 -1574.601,45.59658 -1570.894,52.8693 -1567.725,48.39549 -1563.177,43.51645 -1555.069,25.0616 -1541.767,9.581061 -1527.692,18.39748 -1515.007,16.44184 -1501.92,14.32027 -1490.76,26.46716 -1483.728,37.81801 -1478.436,35.96482 -1475.345,50.22443 -1478.28,71.72651 -1485.41,76.1095 -1492.481,72.78746 -1498.937,73.78825 -1505.128,72.46352 -1511.525,76.31317 -1517.471,70.96622 -1522.88,74.19914 -1528.641,74.2482 -1535.39,81.57578 -1541.278,70.22089 -1544.848,68.2123 -1547.264,63.6499 -1547.371,54.11656 -1545.171,49.12331 -1542.52,50.89368 -1539.84,48.48135 -1537.816,54.52997 -1536.886,54.98994 -1537.346,63.06376 -1541.503,78.29755 -1548.662,82.82697 -1550.482,45.99143 -1544.809,35.92283 -1533.756,11.44688 -1518.009,5.243145 -1503.915,19.64205 -1492.609,20.55502 -1483.464,31.21258 -1479.277,49.16108 -1478.886,53.42761 -1479.62,55.8742 -1479.786,50.1337 -1479.678,54.25177 -1479.933,52.29718 -1480.578,56.65665 -1480.842,50.10637 -1480.598,53.63382 -1479.004,41.93355 -1476.324,46.8269 -1474.172,44.68207 -1472.274,48.00023 -1472.079,54.57672 -1472.597,52.24992 -1474.455,62.71901 -1477.018,56.80586 -1479.698,63.90294 -1482.955,60.77087 -1485.019,57.28467 -1487.298,62.45473 -1490.075,60.72274 -1492.403,60.23314 -1493.763,55.25238 -1493.205,48.80926 -1492.892,56.64178 -1493.557,54.70619 -1494.144,56.28391 -1494.682,54.51154 -1494.007,48.99399 -1492.853,51.47742 -1488.951,32.13356 -1476.187,-2.118674 -1457.887,-2.126604 -1443.636,19.47982 -1434.912,28.30535 -1428.173,29.93163 -1421.649,28.65341 -1414.167,23.54668 -1406.841,28.56202 -1399.642,23.36224 -1392.786,29.56185 -1386.477,25.6082 -1378.163,17.51092 -1369.077,20.2835 -1360.695,20.3895 -1353.369,25.12762 -1349.398,37.92805 -1351.149,56.04457 -1358.328,68.17207 -1369.312,78.50098 -1382.037,80.05802 -1392.443,67.88512 -1400.953,71.3244 -1408.376,63.24284 -1413.912,61.8568 -1417.932,55.47812 -1421.189,58.15731 -1423.85,52.57276 -1425.894,55.04035 -1428.72,57.47088 -1430.657,50.33347 -1427.302,27.01298 -1417.443,12.22586 -1403.036,-0.1684303 -1384.237,-11.87013 -1363.287,-11.63743 -1342.004,-13.53146 -1318.618,-16.01462 -1282.605,-14.39375 -1220.908,-12.12208 -1141.722,-10.68284 -1074.528,-10.48296 -1022.054,-9.141874 -960.7875,-8.731186 -1216.514,-10.74907 -1109.274,-9.523954 -1005.743,-8.101731 -906.0809,-7.618393 -784.7748,-6.123598 -636.8536,-6.884468 -741.9532,-5.764419 -836.1458,-0.8582449 -600,-4.675195 -952.2463,0.009875298 -664.0984,-1.178708 -600,-1.123972 -600,-0.2031865 -600,-0.6548967 -600,-0.000296116 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,2.38E-07 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,2.38E-07 -644.4445,0.2542183 -644.4445,3.043099 -644.4944,3.76886 -862.1945,7.244804 -644.4445,2.008217 -644.4445,1.282092 -644.4445,1.102336 -644.4445,1.300048 -644.4445,1.259131 -644.4445,1.073095 -645.6724,3.006216 -618.264,-0.3244839 -647.7556,5.489882 -701.8685,2.742796 -722.4244,2.271123 -743.2361,2.935951 -762.5648,2.234797 -772.9451,2.039693 -780.2573,1.936579 -786.3934,1.940598 -781.9448,0.7246585 -771.7178,1.247691 -769.2634,1.590314 -768.7009,1.456245 -766.1954,1.364901 -764.2012,1.504721 -766.3488,1.831629 -768.0362,1.460694 -768.0362,1.645372 -773.3542,2.075679 -774.5814,1.194392 -764.559,0.7873244 -745.3326,0.1385179 -715.4191,-0.332602 -677.2729,-0.594053 -635.803,-0.5641029 -981.9337,-3.01793 -839.9738,-0.6091862 -727.9713,-1.361682 -620.287,-0.3443129 -600,-0.198132 -600,-0.2130547 -644.4445,1.156704 -644.4445,2.928335 -840.5137,7.855536 -645.6799,4.915875 -718.7428,7.940886 -919.598,20.71529 -1104.653,9.702165 -1177.315,7.127035 -1343.756,30.38393 -1513.062,9.906143 -1007.81,36.38819 -1161.267,39.11203 -1278.037,27.3871 -1383.305,40.41537 -1511.207,46.64371 -1596.608,19.454 -1075.369,38.91386 -1144.645,51.12838 -1236.03,71.91323 -1345.194,84.24624 -1462.489,97.86935 -1569.923,84.68086 -1640.951,52.99866 -1686.982,50.89439 -1708.258,14.60182 -1146.06,-3.260405 -1143.091,26.43259 -1164.452,55.55766 -1202.272,69.78938 -1248.732,83.18002 -1301.019,92.7276 -1354.342,94.76001 -1401.919,84.77892 -1438.704,69.75992 -1467.953,66.90834 -1497.591,74.95674 -1527.323,71.09368 -1554.516,70.7477 -1580.204,69.72466 -1607.732,80.51578 -1633.071,65.80466 -1652.807,64.51868 -1671.334,64.05013 -1689.244,64.65747 -1706.105,62.52456 -1720.534,57.92768 -1723.772,23.39667 -1706.911,-12.77224 -1685.898,7.341925 -1671.979,9.75246 -1662.279,21.29147 -1658.504,29.84188 -1653.587,17.03524 -1638.794,-4.186825 -1617.648,-4.962307 -1597.884,-0.8135309 -1580.257,0.750226 -1562.563,-1.659951 -1548.537,11.91162 -1540.033,15.42424 -1535.115,23.01572 -1531.448,19.15309 -1516.118,-12.86069 -1492.284,-7.591835 -1467.55,-15.70515 -1435.373,-17.46522 -1392.904,-16.13951 -1347.977,-15.4994 -1312.535,-15.2666 -1292.543,4.540256 -1286.511,16.9544 -1287.236,22.45613 -1293.9,33.18174 -1303.345,30.53206 -1313.502,35.92642 -1331.949,54.6626 -1359.692,64.28005 -1396.867,85.87479 -1437.925,80.98814 -1474.281,77.60077 -1509.642,83.28379 -1543.23,76.9175 -1570.127,65.98427 -1588.654,52.43436 -1600.84,46.78295 -1606.805,32.59529 -1605.65,23.18912 -1600.504,19.00929 -1594.781,20.86993 -1590.656,23.9784 -1587.486,23.77216 -1582.017,16.08064 -1572.358,9.474892 -1555.805,-6.293793 -1535.33,-3.614192 -1510.986,-17.70457 -1482.517,-15.38637 -1448.754,-17.3886 -1398.587,-15.64723 -1329.799,-13.74466 -1273.492,-14.25001 -1241.248,-13.40315 -1205.269,-12.6376 -1165.85,-12.21276 -1135.151,-12.03583 -1120.372,9.679996 -1120.828,20.11432 -1124.12,16.3987 -1126.471,18.06844 -1130.287,20.00859 -1140.336,33.27053 -1156.029,34.36275 -1172.272,35.92491 -1186.231,29.97521 -1199.088,34.3232 -1218.381,47.54738 -1244.808,54.75484 -1274.137,58.20295 -1304.004,59.67457 -1330.377,51.92756 -1355.218,58.4916 -1371.65,30.14645 -1375.962,24.95364 -1378.676,25.82015 -1379.214,18.80646 -1374.31,10.07271 -1365.201,6.415627 -1355.783,8.765409 -1346.029,5.078839 -1331.237,-5.104489 -1306.892,-15.03027 -1262.704,-13.15916 -1218.341,-13.36216 -1187.789,-12.82549 -1158.756,-12.40262 -1140.404,3.783212 -1146.194,39.93061 -1168.859,45.34202 -1196.469,54.62985 -1230.943,66.16975 -1267.379,64.01351 -1307.698,81.99072 -1350.247,75.75098 -1391.923,86.11143 -1438.113,95.74863 -1481.187,83.65627 -1522.688,98.04447 -1564.162,89.97185 -1600.074,86.14787 -1628.449,69.52667 -1645.015,49.09846 -1644.383,11.60987 -1636.161,22.72835 -1636.631,41.04108 -1644.504,48.4262 -1655.387,52.34411 -1667.573,54.19073 -1678.724,50.02793 -1685.71,40.58485 -1688.384,35.37016 -1693.812,50.70958 -1703.243,50.27459 -1708.913,38.13729 -1712.647,43.88169 -1719.594,50.16351 -1728.071,50.19448 -1728.891,23.06607 -1720.413,16.42023 -1711.479,20.75814 -1701.872,13.39018 -1689.687,10.86072 -1670.811,-9.679937 -1650.241,3.8373 -1635.127,7.068507 -1619.717,2.065735 -1602.99,1.803795 -1589.608,12.44946 -1580.634,15.81511 -1574.991,22.96172 -1575.542,36.00331 -1579.236,33.46876 -1581.762,32.42493 -1582.434,27.48787 -1578.618,17.52039 -1570.772,13.83211 -1562.375,15.1992 -1551.869,6.441697 -1534.793,-5.906759 -1512.289,-10.30744 -1486.695,-15.03363 -1458.857,-16.87653 -1432.135,-12.41042 -1407.629,-11.31777 -1384.171,-10.03571 -1369.003,10.59928 -1365.08,20.52546 -1370.091,36.15165 -1380.638,36.95204 -1393.63,44.27267 -1412.734,56.37016 -1440.572,72.8304 -1467.684,57.35134 -1491.37,65.70872 -1518.066,69.83893 -1541.604,58.79247 -1561.153,59.73059 -1579.048,55.58046 -1595.762,57.87779 -1611.924,55.62059 -1625.601,51.2132 -1629.645,23.90257 -1619.246,2.099785 -1602.936,3.149794 -1587.781,5.188667 -1575.542,12.07873 -1570.329,27.7652 -1573.903,40.86924 -1581.722,42.21673 -1589.689,42.11393 -1595.95,37.23134 -1600.491,36.9001 -1604.898,37.1901 -1610.715,42.10384 -1618.87,45.72244 -1628.409,47.67087 -1640.151,54.35364 -1653.022,52.86154 -1665.678,55.06348 -1679.879,59.78596 -1695.907,63.27319 -1713.198,66.3249 -1731.269,68.31712 -1748.775,66.57999 -1763.997,62.08349 -1779.34,69.02579 -1793.984,61.35672 -1805.202,57.85924 -1812.82,48.92445 -1819.578,55.46923 -1825.906,48.01827 -1821.056,13.10841 -1805.565,6.840103 -1788.691,6.806072 -1772.488,8.286536 -1756.487,6.550629 -1737.798,-2.249373 -1717.807,0.735312 -1700.731,6.919925 -1685.226,5.433849 -1672.436,15.57636 -1664.362,21.22834 -1658.961,24.37656 -1650.268,9.386177 -1634.71,0.04979086 -1614.544,-6.336586 -1598.381,12.57801 -1590.025,18.29753 -1584.288,20.81376 -1584.234,36.87918 -1596.608,62.62403 -1613.859,54.64594 -1622.457,34.95087 -1624.271,32.25559 -1624.661,30.22398 -1624.849,31.59747 -1621.624,18.55824 -1611.064,6.372733 -1598.986,12.73059 -1591.785,22.058 -1592.013,37.18653 -1598.704,43.85127 -1607.947,46.47419 -1618.319,48.64143 -1621.906,24.24795 -1615.068,13.35699 -1603.111,6.432739 -1588.722,4.500189 -1572.573,-0.115675 -1553.629,-4.783992 -1532.751,-6.315992 -1514.761,3.077488 -1500.399,3.732917 -1482.651,-7.154562 -1463.519,-1.135713 -1440.935,-16.81416 -1414.158,-12.81345 -1390.943,-7.845296 -1368.922,-10.04424 -1346.889,-8.254794 -1323.471,-13.71456 -1296.762,-14.93286 -1265.673,-14.07961 -1236.546,-11.97013 -1207.23,-12.98112 -1174.139,-12.54039 -1146.973,-10.93499 -1124.362,-10.41155 -1093.918,-11.0197 -1057.509,-10.56761 -1037.759,6.854196 -1046.344,37.0987 -1073.335,48.63685 -1107.407,56.2469 -1148.129,68.77713 -1192.304,70.15498 -1231.884,63.05749 -1264.786,57.78709 -1296.44,63.90317 -1332.419,73.914 -1371.166,76.68737 -1406.42,69.01247 -1434.862,60.98241 -1458.468,57.80101 -1482.987,66.75755 -1509.669,67.63638 -1535.465,67.33713 -1560.091,67.14167 -1583.253,65.62291 -1599.443,46.44219 -1606.684,37.13651 -1604.884,16.46138 -1593.343,4.168659 -1584.033,23.15694 -1588.211,48.71681 -1600.585,51.11957 -1617.836,66.74638 -1638.794,65.8931 -1658.92,66.52989 -1676.91,60.87619 -1691.756,57.56428 -1704.331,54.48838 -1710.861,37.12782 -1711.546,34.04327 -1710.229,29.95877 -1712.661,47.48108 -1721.461,53.3045 -1730.906,50.78699 -1740.176,53.73991 -1751.045,57.7492 -1757.951,40.23434 -1759.778,39.63506 -1772.192,80.07209 -1797.208,88.74728 -1826.631,100.872 -1858.271,102.1546 -1885.397,88.15533 -1904.448,74.06339 -1916.432,62.34672 -1919.401,39.03856 -1902.46,-15.46535 -1863.511,-25.07789 -1823.273,-21.13098 -1791.996,-14.05958 -1770.969,13.06777 -1286.498,48.0114 -1294.058,67.24074 -1306.597,75.67068 -1322.628,88.41093 -1342.258,98.59779 -1363.062,99.24053 -1378.535,73.31172 -1388.825,73.33134 -1401.598,89.55661 -1416.387,87.50754 -1432.163,98.61768 -1449.387,99.54861 -1465.027,93.16014 -1475.385,71.32512 -1479.141,55.54146 -1483.825,77.69683 -1492.922,83.2123 -1504.218,93.1139 -1517.188,96.03044 -1530.509,98.30925 -1543.136,94.77704 -1552.281,79.19598 -1557.964,74.84485 -1563.461,79.22526 -1569.339,78.43729 -1574.591,76.46247 -1577.222,62.67551 -1577.242,60.19896 -1575.687,52.56088 -1572.498,49.43146 -1569.329,52.1115 -1564.947,41.14471 -1554.462,12.68271 -1539.967,14.31148 -1525.981,14.02893 -1511.818,11.48827 -1497.929,13.95845 -1487.532,30.92048 -1481.38,38.22163 -1478.329,48.67535 -1478.162,55.10718 -1479.678,58.7858 -1483.914,71.81812 -1490.819,75.78394 -1498.35,77.02534 -1505.099,72.51969 -1511.202,74.43957 -1517.911,77.50984 -1525.814,83.25037 -1532.593,72.12448 -1537.16,70.83592 -1542.236,76.25439 -1544.985,57.17952 -1544.32,55.29839 -1544.476,62.22943 -1544.496,54.4649 -1542.745,51.09521 -1539.38,44.02723 -1535.742,48.7935 -1534.999,61.51359 -1537.258,67.46387 -1540.965,71.03705 -1547.939,88.8294 -1549.738,39.71848 -1538.647,8.12237 -1524.67,20.05622 -1512.2,15.72904 -1500.873,25.39976 -1490.78,21.78333 -1482.358,34.10342 -1478.485,47.99138 -1477.977,53.7555 -1477.801,49.90863 -1479.15,62.92201 -1481.243,54.62078 -1481.116,49.8967 -1480.324,50.58609 -1479.63,50.35303 -1477.321,40.75677 -1473.565,41.27589 -1470.426,43.86224 -1468.401,47.451 -1466.954,46.9868 -1467.658,60.07456 -1470.602,60.51458 -1475.668,73.382 -1481.801,67.88359 -1484.911,56.28338 -1485.674,54.24988 -1486.251,55.29283 -1486.691,53.52103 -1486.77,53.17738 -1486.721,52.76431 -1487.024,55.30242 -1487.669,54.89172 -1489.019,59.68992 -1490.731,57.32771 -1492.951,63.0985 -1495.279,58.38214 -1494.584,45.10869 -1487.405,18.9328 -1470.866,-10.28922 -1452.928,8.639071 -1440.017,15.75091 -1429.552,21.4329 -1422.607,34.86482 -1417.512,31.21866 -1412.484,34.53926 -1407.31,29.69863 -1401.344,29.30284 -1395.877,31.73983 -1390.937,31.57141 -1385.724,29.53498 -1378.741,20.95574 -1371.111,25.03376 -1363.707,21.31329 -1355.785,21.27985 -1349.271,28.11312 -1347.491,46.42329 -1354.044,73.73386 -1364.627,69.82935 -1374.183,70.02986 -1382.281,63.41209 -1390.106,70.01546 -1398.41,67.56463 -1404.523,59.0325 -1409.433,61.78816 -1413.688,56.11639 -1417.443,59.66835 -1421.248,57.04577 -1423.116,49.10121 -1423.185,46.9263 -1420.573,33.6044 -1411.956,11.98207 -1397.891,1.452831 -1383.142,6.65378 -1367.718,-3.068421 -1348.968,-9.861969 -1325.562,-16.11518 -1284.092,-14.13637 -1214.697,-11.85796 -1141.781,-11.37294 -1079.028,-10.51758 -1008.215,-8.903414 -930.7995,-8.72839 -857.0523,-8.130159 -789.291,-8.076338 -726.7427,-8.857965 -898.0064,-7.569747 -769.9961,-6.515765 -649.1603,-7.147186 -784.9226,-4.621058 -892.3317,-0.6631382 -608.6652,-4.717086 -600,-6.420379 -606.6129,-1.587289 -600,-0.7637906 -600,-0.8728795 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,-2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,-2.38E-07 -600,0 -600,-2.38E-07 -600,-2.38E-07 -600,0 -600,-2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -644.4445,0.1401868 -644.4445,4.115141 -723.5632,6.148651 -878.7474,0.996314 -644.4445,5.992946 -614.2244,0.8715067 -1054.623,0.2505918 -1032.132,1.002764 -644.4445,1.849404 -644.4445,1.160477 -644.4445,1.181648 -646.017,3.313942 -655.8477,2.47095 -673.5912,1.926634 -697.6755,3.281785 -729.89,2.964346 -753.4118,2.586441 -769.7236,2.314295 -781.3311,2.144838 -788.3876,1.845007 -788.5922,1.371453 -785.2173,1.424252 -785.7797,1.820931 -787.4161,1.552712 -785.6775,1.431036 -786.0355,1.792017 -787.007,1.504555 -785.3195,1.483458 -784.6548,1.617746 -783.939,1.474823 -778.5699,1.072223 -772.178,1.335513 -761.5421,0.5722067 -687.8577,-4.410039 -1043.288,-1.19836 -644.4445,2.357286 -1002.265,-0.5849216 -866.3327,-2.573789 -732.1096,-0.3810852 -661.4896,-0.2707293 -600,-0.2227266 -644.5211,1.784207 -615.0692,-0.02452826 -600,-0.1297612 -644.4445,0.6420181 -666.7973,4.922177 -644.4445,8.587686 -693.5847,6.82707 -836.9651,12.78135 -995.8392,12.11045 -1190.252,24.46093 -1341.456,7.883049 -1453.439,21.57428 -1009.962,38.10797 -1173.415,42.39235 -1323.306,42.99743 -1399.727,9.089857 -937.9701,32.31821 -1005.795,44.4572 -1088.015,53.16226 -1172.164,54.589 -1265.583,73.96272 -1376.655,88.71164 -1496.45,101.4458 -1616.172,105.6161 -1668.748,5.478724 -1119.606,4.928539 -1124.671,35.79109 -1140.175,30.06963 -1160.328,48.58438 -1189.106,53.33678 -1224.844,69.88008 -1267.755,76.89536 -1310.533,75.63843 -1352.249,80.32765 -1392.649,77.89688 -1429.045,74.28435 -1463.412,76.94868 -1497.873,79.46665 -1531.421,78.96201 -1561.273,72.11664 -1587.056,69.5541 -1609.479,64.13884 -1630.585,67.9769 -1650.429,62.38124 -1668.137,63.00897 -1684.42,59.49305 -1702.746,72.43027 -1718.317,51.68219 -1722.2,31.7786 -1710.807,-2.869109 -1690.453,-1.062667 -1673.296,7.073107 -1662.924,21.68794 -1658.853,28.46225 -1655.051,22.32484 -1643,-0.4019394 -1623.586,-3.330098 -1604.414,-0.449111 -1587.123,1.748246 -1569.496,-2.081304 -1552.944,4.46729 -1542.894,18.06239 -1538.031,20.74931 -1530.547,9.303829 -1514.237,-7.018807 -1492.526,-7.514885 -1469.149,-12.08818 -1442.722,-15.80163 -1404.525,-18.5696 -1361.667,-17.84917 -1327.529,-17.22158 -1306.449,4.262201 -1300.712,18.62459 -1305.858,33.81105 -1310.184,16.66183 -1310.09,21.90794 -1317.331,37.01147 -1331.747,42.52515 -1353.015,57.90654 -1383.016,70.18417 -1420.392,83.79029 -1463.21,92.30715 -1502.401,78.82739 -1533.557,72.45618 -1561.099,71.36134 -1584.785,63.23337 -1600.343,46.89187 -1607.934,37.95928 -1609.116,25.84165 -1606.496,25.15568 -1602.882,22.27899 -1597.401,18.59029 -1590.777,18.05532 -1581.158,8.168066 -1565.438,-2.385445 -1544.224,-9.294456 -1521.841,-6.390518 -1499.485,-9.735824 -1475.06,-12.31793 -1438.369,-16.93306 -1388.027,-15.79407 -1334.837,-14.71431 -1282.574,-13.81453 -1232.73,-12.99281 -1186.607,-12.35547 -1153.933,-9.757157 -1138.281,3.688477 -1130.166,6.484842 -1124.469,9.161757 -1119.579,8.190273 -1116.717,13.7386 -1121.178,25.33872 -1131.012,26.74716 -1139.974,23.89797 -1153.758,39.14996 -1173.145,38.69012 -1197.14,52.6565 -1222.573,44.61408 -1247.831,55.10344 -1274.231,50.24755 -1302.956,64.64877 -1334.958,62.68685 -1361.681,53.49527 -1382.828,49.63818 -1393.616,25.17934 -1392.595,15.85793 -1388.47,16.01408 -1382.331,9.760792 -1375.264,12.98514 -1368.573,10.51227 -1357.852,1.127345 -1330.887,-15.09141 -1287.693,-14.09798 -1235.995,-12.79959 -1189.24,-12.6493 -1159.75,-9.993802 -1143.158,2.208033 -1140.753,21.87768 -1152.361,35.92246 -1169.356,35.89918 -1193.446,55.35715 -1227.665,64.36838 -1263.591,64.05273 -1304.172,82.13965 -1350.765,86.74195 -1399.89,97.1329 -1448.015,91.67886 -1490.363,87.14861 -1527.78,82.59544 -1565.411,93.79819 -1601.888,84.35611 -1629.712,69.70103 -1643.765,40.32787 -1644.598,25.34709 -1642.677,30.8411 -1647.957,50.22522 -1657.926,47.7007 -1664.052,37.76743 -1668.701,43.12788 -1677.555,53.11346 -1688.478,51.41099 -1698.5,51.11005 -1706.414,44.9026 -1708.993,32.6828 -1711.102,43.46721 -1718.371,51.58891 -1728.098,53.19771 -1735.42,43.84155 -1735.339,26.82102 -1726.916,13.36045 -1716.691,19.60794 -1707.085,14.90211 -1695.128,10.50889 -1682.271,10.91309 -1663.878,-8.54956 -1641.629,-3.117419 -1624.07,5.537962 -1609.197,4.835527 -1592.752,-0.4371243 -1577.893,9.274105 -1570.101,22.16969 -1571.847,40.37538 -1576.751,32.78808 -1579.035,32.08871 -1581.749,34.41856 -1583.133,27.87005 -1576.012,6.219936 -1561.421,2.702191 -1547.059,6.234878 -1534.363,7.427535 -1520.672,2.441157 -1500.385,-12.44278 -1474.039,-15.19112 -1448.391,-10.99723 -1411.539,-16.18276 -1375.237,-10.13539 -1357.798,3.94146 -1352.424,22.40654 -1358.053,35.1076 -1371.085,44.18404 -1390.486,54.94989 -1412.506,53.94309 -1436.112,62.30517 -1459.811,56.89755 -1483.336,64.70206 -1510.018,69.77424 -1535.801,65.16431 -1559.043,64.80313 -1580.728,62.89471 -1598.556,54.45824 -1613.254,54.38581 -1626.582,51.40335 -1634.75,38.01902 -1625.87,-5.708029 -1605.435,-1.783062 -1588.211,3.508634 -1575.972,13.76913 -1574.601,38.87314 -1576.764,25.41134 -1576.509,31.0111 -1580.378,39.14088 -1587.109,40.92192 -1594.552,42.17134 -1602.21,42.3647 -1609.64,42.14173 -1617.876,45.85305 -1627.146,46.51075 -1637.773,51.51218 -1651.907,59.8804 -1668.016,60.05737 -1682.956,57.66072 -1698.594,64.39252 -1714.26,59.62116 -1729.025,63.08392 -1743.723,61.17331 -1759.321,68.29936 -1774.275,60.68742 -1787.293,62.94482 -1799.157,57.8984 -1810.375,61.97612 -1821.647,59.47066 -1829.144,48.76117 -1827.075,23.35892 -1814.029,6.402053 -1794.32,-2.592016 -1771.735,-4.909734 -1752.711,9.03825 -1737.462,7.341007 -1721.273,4.683862 -1704.694,4.982325 -1688.128,3.812349 -1674.545,14.56831 -1666.793,23.51281 -1662.064,24.63626 -1654.984,14.94999 -1635.731,-15.84564 -1610.997,-4.315684 -1594.74,9.832749 -1588.036,26.32848 -1590.885,41.41418 -1599,44.31393 -1604.347,32.80503 -1609.748,45.03335 -1620.321,50.97161 -1629.86,42.54122 -1630.612,21.65488 -1626.286,25.14294 -1622.995,24.88023 -1619.287,23.46855 -1613.268,16.73643 -1607.706,24.57117 -1610.003,43.01642 -1616.519,39.12624 -1621.208,37.39355 -1624.634,35.22969 -1627.952,37.3392 -1624.594,12.60667 -1610.554,0.67381 -1592.725,-0.8326931 -1573.647,-3.764307 -1556.383,4.200647 -1540.61,-0.05308342 -1524.676,2.95549 -1506.149,-7.869933 -1484.451,-6.838203 -1463.063,-7.529763 -1441.418,-8.017014 -1419.842,-7.811407 -1398.13,-8.783758 -1377.628,-5.129324 -1358.174,-6.480177 -1330.162,-16.99247 -1294.518,-16.31282 -1264.088,-13.97139 -1238.279,-14.27002 -1205.672,-13.58043 -1175.577,-8.778869 -1153.073,-12.24656 -1128.594,-11.99461 -1095.57,-10.9451 -1059.322,-10.66192 -1040.862,6.466439 -1046.922,32.05039 -1070.836,46.81862 -1105.593,59.44982 -1144.421,60.56117 -1185.277,69.68872 -1225.22,63.52172 -1258.217,56.72657 -1292.812,72.29202 -1331.452,72.35333 -1366.88,68.45086 -1393.737,51.85317 -1417.343,62.23331 -1449.023,79.29785 -1486.588,84.81449 -1520.337,72.50204 -1545.353,61.22117 -1565.129,58.47639 -1583.576,59.16581 -1597.441,45.13127 -1602.506,30.88554 -1600.343,21.15592 -1593.612,15.33718 -1586.666,19.96346 -1587.996,42.56586 -1600.719,58.4817 -1618.574,61.39739 -1637.37,63.87596 -1655.736,62.19775 -1672.167,59.32374 -1687.886,61.68731 -1702.047,55.59766 -1710.914,44.22459 -1715.953,42.70472 -1719.231,38.34271 -1721.891,40.7861 -1725.048,40.4108 -1728.743,43.06327 -1735.541,52.16247 -1744.341,51.14399 -1753.557,54.70576 -1763.137,53.5337 -1773.912,60.3172 -1790.531,76.9442 -1814.647,91.22339 -1844.93,104.5918 -1876.086,99.57632 -1900.511,82.78519 -1919.052,79.66685 -1921.161,18.51604 -1896.575,-24.33028 -1849.753,-24.22952 -1809.65,-2.914296 -1783.061,-16.90625 -1283.055,17.62789 -1281.148,47.45848 -1288.122,63.8209 -1299.731,73.06547 -1314.197,81.21303 -1332.148,94.84081 -1352.77,99.70914 -1374.041,103.1989 -1391.799,84.65783 -1404.758,79.80271 -1417.834,88.10941 -1433.956,100.3611 -1452.571,106.4864 -1469.02,91.7476 -1477.869,64.48682 -1482.045,65.40362 -1486.32,65.86734 -1494.467,89.83578 -1506.898,93.77473 -1519.525,93.85491 -1531.702,93.87712 -1542.725,89.39608 -1552.242,86.8752 -1559.959,80.07738 -1564.449,67.961 -1567.041,68.89693 -1570.2,72.11388 -1572.977,67.08501 -1574.21,62.75511 -1574.21,59.41563 -1573.936,60.99732 -1572.4,51.27596 -1568.263,44.06831 -1559.519,21.27699 -1545.63,10.24199 -1530.617,12.39669 -1515.183,5.857883 -1498.36,2.09445 -1486.505,33.94199 -1482.349,47.08876 -1480.05,44.51606 -1479.463,57.02282 -1482.084,63.77707 -1487.796,76.23621 -1495.289,75.71186 -1501.538,70.15787 -1507.818,77.17599 -1514.703,75.15352 -1520.865,74.11327 -1527.096,76.84986 -1532.231,68.53654 -1536.417,71.96849 -1540.564,69.12055 -1543.713,66.52328 -1546.735,68.94624 -1547.489,52.78967 -1545.386,51.08469 -1542.256,45.96298 -1539.361,52.00807 -1537.405,51.35246 -1535.859,54.2338 -1536.554,65.10095 -1540.671,75.84949 -1547.195,81.08743 -1550.257,55.29021 -1545.806,34.30048 -1535.243,16.24277 -1523.33,24.33566 -1512.464,21.15258 -1502.918,30.91319 -1494.076,24.17211 -1485.987,34.19572 -1480.725,40.09128 -1478.27,50.29652 -1478.016,52.946 -1478.182,52.7861 -1478.378,53.15138 -1480.079,61.90357 -1482.192,55.92644 -1482.075,48.81292 -1479.982,43.98728 -1478.104,49.7599 -1476.93,47.92091 -1476.646,54.91663 -1477.908,57.17506 -1478.681,52.18999 -1479.786,59.31868 -1481.165,54.03209 -1482.339,58.32693 -1484.236,58.61423 -1487.024,64.06499 -1489.743,58.70241 -1491.484,58.62561 -1492.824,56.57703 -1493.381,54.10405 -1492.256,46.44337 -1490.926,52.65959 -1491.445,57.45026 -1492.804,57.86545 -1494.702,60.97232 -1495.856,53.67446 -1488.354,8.644087 -1473.771,9.854107 -1459.911,11.31598 -1449.71,29.82105 -1444.35,38.53183 -1441.259,42.37823 -1436.486,28.24177 -1429.513,28.8433 -1421.864,23.41715 -1414.392,28.83934 -1409.071,34.798 -1403.584,27.19031 -1396.982,27.69853 -1388.531,15.91847 -1377.224,10.64097 -1366.25,16.52416 -1358.612,27.90209 -1355.629,41.29479 -1355.726,44.49744 -1358.876,58.18682 -1366.27,68.5884 -1376.618,76.04653 -1388.952,81.80117 -1400.522,74.14407 -1408.504,63.53102 -1415.252,68.5932 -1420.651,56.93834 -1423.263,53.41837 -1425.219,53.58304 -1426.207,48.11959 -1426.852,51.75898 -1427.38,47.54124 -1423.742,27.67442 -1415.125,18.26986 -1402.381,3.03742 -1388.482,10.29751 -1373.977,-1.384802 -1355.462,-10.03899 -1330.062,-15.91993 -1282.331,-13.68837 -1209.601,-11.78776 -1130.279,-10.6761 -1056.59,-9.85384 -995.0887,-9.493731 -932.1101,-8.854118 -860.5636,-8.522646 -799.4923,-8.632871 -742.3431,-8.777902 -916.95,-7.472395 -784.6405,-6.526037 -659.1023,-7.239723 -802.2018,-4.796231 -600,-4.862612 -980.1921,3.036931 -655.1318,-1.243356 -600,-3.643281 -600,-2.117112 -600,-0.4603643 -600,-2.24E-05 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,-2.38E-07 -600,0 -600,0 -600,0 -600,0 -600,0 -600,2.38E-07 -600,0 -600,2.38E-07 -600,0 -600,0 -600,-2.38E-07 -600,-2.38E-07 -644.4445,1.714838 -644.4445,1.621784 -644.4445,3.298661 -755.8596,3.870013 -644.4445,3.134853 -644.4445,1.420932 -644.4445,1.825752 -644.4445,1.360866 -991.1098,0.8516321 -644.4445,2.159252 -644.4445,1.824742 -644.4445,1.209069 -645.8011,2.986922 -651.5524,2.650311 -659.7339,0.760689 -685.8124,4.595871 -737.2534,3.604281 -762.7693,2.212489 -770.3373,1.737349 -772.536,1.632224 -772.3826,1.47518 -768.9055,1.248654 -770.1327,2.003068 -775.6552,1.749856 -776.7802,1.519026 -774.1212,1.315794 -769.7236,1.307899 -770.2861,1.870355 -770.2861,1.245239 -768.343,1.646059 -768.3942,1.467183 -762.5137,0.9683771 -717.0042,-2.388535 -628.3375,-2.716046 -644.4445,1.232642 -1006.313,0.3278913 -950.627,-0.5628872 -846.9909,-1.407126 -722.4837,-1.039502 -621.8163,-0.4376612 -600,0.0385704 -644.4445,1.879608 -602.8344,0.04388237 -600,-0.00674057 -644.4445,1.93153 -794.813,7.284958 -644.8845,6.377717 -738.2761,9.556376 -924.2001,17.0417 -1082.921,9.743132 -1157.014,6.99104 -775.9276,22.85481 -919.729,33.17456 -1086.138,42.19983 -1261.492,50.43425 -1375.494,19.51903 -1401.449,6.091826 -926.2782,23.43933 -980.7605,39.51251 -1054.848,47.15857 -1133.927,51.68547 -1226.62,71.72372 -1337.942,86.13082 -1457.344,97.89137 -1580.828,109.5713 -1657.092,36.67658 -1123.368,1.461304 -1122.441,25.1924 -1136.454,37.02988 -1161.309,52.76898 -1193.459,57.73195 -1230.285,68.77976 -1273.533,79.75322 -1318.352,79.31004 -1356.562,67.54053 -1392.273,77.71348 -1426.908,69.05838 -1460.725,80.27706 -1498.424,86.01363 -1534.793,81.56979 -1565.21,71.81206 -1590.119,67.43898 -1612.582,66.8174 -1634.24,67.57295 -1656.032,70.10327 -1677.488,69.22984 -1696.042,62.52128 -1711.774,61.43768 -1725.102,55.68619 -1731.578,37.91976 -1722.254,-1.090255 -1702.517,-0.3800182 -1681.747,-5.168064 -1664.59,11.20999 -1654.514,18.04026 -1645.996,15.99401 -1635.436,10.42183 -1621.665,4.338938 -1605.22,0.5969486 -1587.795,0.2512197 -1570.517,0.3162355 -1554.072,2.230137 -1541.806,13.14601 -1533.597,14.75539 -1525.832,14.09572 -1514.506,2.944591 -1496.1,-7.84253 -1471.352,-15.42717 -1440.169,-20.01007 -1400.468,-18.50732 -1353.19,-17.0692 -1315.531,-12.80798 -1294.491,-3.285613 -1284.173,13.58008 -1289.225,37.47305 -1302.015,35.04106 -1311.339,28.96468 -1316.942,25.44615 -1328.926,47.30635 -1352.921,60.59223 -1385.233,74.25334 -1422.945,80.9559 -1461.329,81.75445 -1495.643,73.77378 -1525.133,71.24657 -1553.333,73.6284 -1578.726,65.64669 -1596.568,51.4837 -1607.732,45.11185 -1612.851,32.04094 -1610.876,21.44158 -1605.126,19.07754 -1598.368,17.63783 -1591.677,18.84343 -1582.676,9.494823 -1569.455,4.294639 -1552.541,-2.913902 -1532.455,-5.940009 -1507.855,-16.18926 -1475.826,-18.23104 -1433.29,-16.7917 -1382.384,-15.64154 -1326.494,-14.32655 -1274.366,-13.89831 -1227.275,-12.87859 -1182.348,-12.34522 -1151.286,-9.173134 -1131.402,-6.310503 -1119.781,8.727276 -1118.289,16.43811 -1118.921,13.66425 -1120.828,19.48628 -1124.819,18.68554 -1130.757,24.36229 -1141.048,29.49514 -1158.46,42.48001 -1180.763,43.03611 -1203.146,44.87235 -1225.918,46.25666 -1248.597,46.92699 -1272.592,52.15644 -1299.516,57.51007 -1329.074,62.6179 -1359.343,63.1154 -1380.947,40.95043 -1388.403,23.98634 -1388.417,19.74684 -1385.165,14.44612 -1379.603,12.82719 -1372.187,8.792199 -1363.065,7.554926 -1349.723,-3.177336 -1329.396,-11.0907 -1300.833,-14.74182 -1261.575,-13.61232 -1217.468,-12.85518 -1175.268,-12.22688 -1141.546,-12.1833 -1126.955,11.26167 -1134.532,35.89684 -1157.695,49.54621 -1189.052,58.5972 -1222.466,58.37698 -1257.343,66.71474 -1300.538,85.77503 -1352.393,97.63816 -1402.304,88.47597 -1444.938,84.01994 -1484.008,84.11902 -1521.116,83.72038 -1557.216,86.50259 -1591.624,83.49979 -1623.855,84.3294 -1647.595,58.56056 -1655.346,31.51854 -1647.595,5.291959 -1637.236,21.8509 -1638.069,43.26761 -1647.353,51.25405 -1657.993,48.95843 -1668.862,53.2352 -1680.014,51.13348 -1689.217,47.52374 -1696.109,43.85042 -1700.18,38.1036 -1701.886,35.75303 -1704.895,42.96144 -1713.521,56.36014 -1723.759,49.71629 -1725.169,25.28842 -1717.766,17.81898 -1708.886,19.36817 -1699.602,15.74377 -1685.428,1.331335 -1668.258,4.265698 -1651.088,0.4824829 -1632.682,-0.7735591 -1616.546,7.333869 -1601.297,1.405253 -1587.109,10.06296 -1578.108,17.9458 -1571.148,16.3085 -1567.669,28.97894 -1571.471,40.18153 -1577.49,36.66446 -1581.507,34.05357 -1584.664,34.14597 -1581.897,14.52561 -1573.567,15.4157 -1560.951,-0.06234074 -1539.428,-12.5987 -1514.842,-9.453217 -1487.81,-18.44072 -1460.886,-9.728415 -1437.804,-9.730576 -1416.16,-6.372715 -1395.067,-8.671995 -1373.544,-7.898953 -1360.901,15.09554 -1358.859,20.97911 -1363.857,35.19839 -1379.617,52.60059 -1405.99,68.11739 -1434.069,60.73365 -1456.748,55.0891 -1477.304,56.83291 -1499.552,62.82561 -1522.835,62.77331 -1543.606,57.48309 -1563.611,62.81192 -1585.403,65.84775 -1604.911,57.73931 -1619.407,51.10355 -1625.279,29.70323 -1619.824,12.86922 -1606.134,1.337738 -1587.701,-3.369208 -1572.465,11.06384 -1564.538,19.60567 -1563.638,33.72519 -1569.052,40.41961 -1578.041,46.10619 -1586.653,40.0111 -1594.445,44.22099 -1602.896,42.9819 -1610.231,41.26826 -1616.559,40.2604 -1624.123,46.1275 -1634.065,49.20351 -1644.907,50.29093 -1656.059,51.45343 -1668.943,57.63499 -1688.625,77.20282 -1711.116,70.17025 -1728.34,61.05583 -1744.61,68.95058 -1762.868,70.50829 -1779.366,64.74032 -1794.387,67.11285 -1807.486,59.31385 -1818.275,59.92589 -1828.835,59.76006 -1834.155,40.87052 -1824.254,1.570856 -1803.939,0.1671991 -1785.896,8.91948 -1769.089,3.76696 -1750.548,1.465682 -1734.198,10.69146 -1720.507,10.2054 -1707.327,11.65767 -1695.45,14.03399 -1684.931,15.71651 -1675.325,16.56543 -1665.933,15.82545 -1654.339,8.25458 -1639.587,4.160066 -1622.202,-1.38369 -1608.431,15.49589 -1602.748,25.05814 -1601.189,29.03644 -1603.151,36.84112 -1608.673,41.2834 -1614.087,36.97735 -1619.031,40.19678 -1622.941,33.88109 -1623.505,29.08438 -1621.114,23.80924 -1615.149,16.70804 -1607.464,17.53648 -1602.546,25.54437 -1600.706,27.58181 -1600.195,29.89292 -1602.318,36.44426 -1608.995,45.53632 -1616.116,38.564 -1619.327,32.86123 -1617.164,20.48985 -1607.571,7.451408 -1591.973,-0.2941513 -1573.177,-3.498985 -1552.541,-6.302647 -1531.81,-4.429373 -1511.698,-5.13943 -1493.265,-0.3575616 -1477.143,0.7890692 -1461.141,-0.5568328 -1445.449,1.121991 -1430.375,0.6806421 -1410.706,-11.54041 -1385.824,-13.42626 -1360.619,-12.66673 -1335.24,-14.07331 -1309.62,-13.46232 -1274.366,-13.88826 -1237.862,-13.81937 -1212.241,-11.44095 -1184.081,-12.65552 -1148.102,-11.87495 -1115.508,-11.77358 -1087.442,-11.19799 -1054.593,-10.48865 -1033.607,5.6588 -1040.043,33.29015 -1064.535,46.21249 -1097.908,56.06443 -1138.16,66.53667 -1181.515,68.95843 -1223.258,68.46669 -1261.723,66.08852 -1300.779,75.51466 -1341.756,76.87059 -1377.36,65.75189 -1406.339,62.23019 -1433.908,65.22336 -1459.475,59.45428 -1483.82,64.64926 -1510.354,69.41556 -1536.862,67.94376 -1560.467,63.31855 -1581.225,61.46338 -1596.42,47.04777 -1600.343,25.01183 -1593.115,9.831497 -1584.181,18.76838 -1581.493,30.10958 -1586.962,45.85008 -1600.37,57.38508 -1617.769,60.89524 -1636.443,63.86408 -1655.078,63.03837 -1671.496,58.34701 -1686.221,59.03419 -1700.287,57.73484 -1710.955,48.39701 -1717.229,43.00974 -1721.3,41.04623 -1725.115,42.49238 -1729.374,43.04696 -1732.33,38.14999 -1734.453,40.29311 -1737.193,40.62325 -1742.259,49.12432 -1749.527,49.27705 -1758.905,57.77568 -1780.186,95.1664 -1817.066,120.4318 -1863.283,138.34 -1894.667,69.34295 -1907.269,68.27747 -1919.079,67.84028 -1917.762,16.49406 -1889.951,-25.8662 -1839.596,-23.89131 -1797.746,-6.402427 -1288.914,-15.27851 -1277.128,32.77653 -1281.275,63.12198 -1290.283,58.78977 -1302.49,81.71949 -1320.926,94.45592 -1342.199,101.122 -1364.574,105.4511 -1384.497,92.51437 -1399.036,79.38459 -1412.044,86.92896 -1425.375,83.94568 -1438.726,89.94231 -1452.996,92.26556 -1465.477,82.38766 -1473.311,67.06986 -1478.475,67.91246 -1485.547,79.625 -1497.763,100.7359 -1512.278,96.41169 -1525.707,97.44376 -1538.334,94.52263 -1549.249,89.58551 -1557.71,81.4274 -1564.057,77.99872 -1569.036,74.02861 -1572.312,68.13066 -1575.041,71.18874 -1576.86,62.82628 -1576.352,56.58434 -1574.357,53.18288 -1571.52,50.82687 -1567.755,46.73517 -1562.385,39.9514 -1553.406,22.98973 -1541.513,20.22375 -1527.653,9.152882 -1512.63,11.24 -1497.871,9.012047 -1484.578,18.34523 -1477.82,46.65918 -1476.558,50.44249 -1476.832,55.68708 -1479.131,62.68777 -1483.698,69.81506 -1490.535,77.33602 -1498.018,75.10793 -1505.011,75.88093 -1512.151,77.44696 -1520.327,83.79372 -1527.986,75.92196 -1532.671,66.83388 -1536.348,70.5734 -1539.762,65.89542 -1543.273,71.87601 -1547.303,69.85374 -1549.034,58.16096 -1547.87,51.91158 -1546.364,55.78762 -1544.672,50.47578 -1541.356,45.2815 -1538.324,51.6749 -1537.356,57.68959 -1538.872,67.07841 -1544.251,82.28827 -1545.288,40.75605 -1538.011,30.25864 -1530.314,36.96606 -1522.196,26.52944 -1511.906,22.36277 -1500.12,15.97792 -1489.616,28.55366 -1482.329,34.04303 -1478.945,50.99249 -1479.502,57.25879 -1480.607,54.3908 -1481.048,53.44007 -1481.713,55.82595 -1482.329,53.25982 -1482.818,55.16615 -1481.811,44.30854 -1479.307,45.96726 -1476.646,42.96669 -1473.575,43.07121 -1471.717,49.74657 -1470.788,48.34003 -1472.177,63.49163 -1475.942,62.85665 -1479.972,65.78904 -1484.334,65.62042 -1488.217,63.7094 -1490.124,54.34649 -1490.183,52.82955 -1489.342,48.89529 -1488.755,54.22676 -1487.777,46.42638 -1486.192,50.38337 -1485.576,52.02367 -1487.601,66.28146 -1491.67,64.79538 -1494.985,62.46672 -1496.091,51.93176 -1492.462,33.85468 -1486.104,34.78819 -1476.089,10.9714 -1464.117,21.67854 -1454.757,25.02648 -1445.866,23.2522 -1436.829,23.01534 -1428.603,26.81799 -1421.473,28.30663 -1413.345,20.16391 -1404.963,25.78935 -1396.278,17.4505 -1387.201,22.49283 -1379.914,26.44587 -1372.432,20.53219 -1364.392,22.42527 -1357.027,23.32439 -1350.679,27.14028 -1350.269,55.12245 -1357.262,67.91344 -1367.101,72.15673 -1377.987,75.64056 -1389.636,78.59641 -1399.104,65.48586 -1405.217,61.24613 -1409.795,57.77759 -1413.922,59.46923 -1417.404,54.76487 -1420.857,59.91445 -1423.595,51.20931 -1424.886,51.9877 -1425.776,49.09315 -1423.556,34.09339 -1418.059,29.80763 -1405.119,-7.826694 -1385.391,-8.599997 -1365.175,-11.35708 -1344.4,-11.20156 -1318.843,-15.60458 -1278.125,-14.10385 -1212.223,-11.80592 -1143.825,-11.62002 -1080.622,-10.19347 -1005.036,-8.704713 -942.2039,-9.229837 -877.6898,-7.629379 -796.7341,-8.281475 -1005.85,-9.090136 -922.6464,-8.02299 -814.1037,-6.777267 -680.4239,-6.171268 -600,-6.54746 -881.2298,-1.826855 -625.3334,-5.014571 -600,-5.152775 -600,-4.932726 -600,-1.280655 -600,-0.4310925 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 -600,0 diff --git a/Declaration/SegmentTable.csv b/Declaration/SegmentTable.csv index 14f6a58f61c9dccf5736da38fc29eed49e41e503..b7cdfef9777066c13528aeec4b0ea51147716a1a 100644 --- a/Declaration/SegmentTable.csv +++ b/Declaration/SegmentTable.csv @@ -1,26 +1,26 @@ -Valid,tVehCat,tAxleConf,GVW_Min,GVW_Max,HDV_Class,VACC,VCDV - Long Haul,VCDV - Other,Rigid/Truck Axles - Long haul,Rigid/Truck Axles - Other,Trailer Axles - Long haul,Trailer Axles - Other,LongHaul,RegionalDelivery,UrbanDelivery,MunicipalUtility,Construction,HeavyUrban,Urban,Suburban,Interurban,Coach,MassExtra - LongHaul,MassExtra - RegionalDelivery,MassExtra - UrbanDelivery,MassExtra - MunicipalUtility,MassExtra - Construction,MassExtra - HeavyUrban,MassExtra - Urban,MassExtra - Suburban,MassExtra - Interurban,MassExtra - Coach,RefLoad - LongHaul,RefLoad - RegionalDelivery,RefLoad - UrbanDelivery,RefLoad - MunicipalUtility,RefLoad - Construction,RefLoad - HeavyUrban,RefLoad - Urban,RefLoad - Suburban,RefLoad - Interurban,RefLoad - Coach,WHTCWF - LongHaul,WHTCWF - RegionalDelivery,WHTCWF - UrbanDelivery,WHTCWF - MunicipalUtility,WHTCWF - Construction,WHTCWF - HeavyUrban,WHTCWF - Urban,WHTCWF - Suburban,WHTCWF - Interurban,WHTCWF - Coach -0,RigidTruck,4x2,0,7.5,0,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,1,1,0,0,0,0,0,0,0,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,4x2,7.5,10,1,Truck.vacc,-,RigidSolo.vcdv,-,45/55,0/0,0/0,0,1,1,0,0,0,0,0,0,0,-,1600,1600,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,4x2,10,12,2,Truck.vacc,RigidSolo.vcdv,RigidSolo.vcdv,40/60,45/55,0/0,0/0,1,1,1,0,0,0,0,0,0,0,1900,1900,1900,-,-,-,-,-,-,-,f,f,f,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,4x2,12,16,3,Truck.vacc,-,RigidSolo.vcdv,-,40/60,0/0,0/0,0,1,1,0,0,0,0,0,0,0,-,2000,2000,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,4x2,16,99,4,Truck.vacc,RigidTrailer.vcdv,RigidSolo.vcdv,20/30,45/55,50/2,0/0,1,1,0,1,0,0,0,0,0,0,7500,2100,-,2100,-,-,-,-,-,-,14000,4400,-,4400,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,Tractor,4x2,16,99,5,Truck.vacc,TractorSemitrailer.vcdv,TractorSemitrailer.vcdv,20/25,25/25,55/3,50/3,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19300,12900,-,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,4x4,7.5,16,6,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,1,1,0,0,0,0,0,-,-,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,4x4,16,99,7,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,B5,-,-,-,-,-,-,-,-,-,4300,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Tractor,4x4,16,99,8,Truck.vacc,-,TractorSemitrailer.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,6x2,0,99,9,Truck.vacc,RigidTrailer.vcdv,RigidSolo.vcdv,20/30/15,35/40/25,35/2,0/0,1,1,0,1,0,0,0,0,0,0,7600,2200,-,2200,-,-,-,-,-,-,17900,7100,-,7100,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,Tractor,6x2,0,99,10,Truck.vacc,TractorSemitrailer.vcdv,TractorSemitrailer.vcdv,15/10/20,20/10/20,55/2,50/2,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19000,12700,-,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,6x4,0,99,11,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,B7,-,-,-,-,-,-,-,-,-,7600,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Tractor,6x4,0,99,12,Truck.vacc,-,TractorSemitrailer.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,ST2,-,-,-,-,-,-,-,-,-,12100,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,6x6,0,99,13,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,0,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Tractor,6x6,0,99,14,Truck.vacc,-,TractorSemitrailer.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,0,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,8x2,0,99,15,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,1,0,0,0,0,0,0,0,0,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,8x4,0,99,16,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,B9,-,-,-,-,-,-,-,-,-,11600,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,8x6,0,99,17,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,8x8,0,99,17,Truck.vacc,-,-,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,CityBus,4x2,0,18,B1,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,InterurbanBus,4x2,0,18,B2,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Coach,4x2,0,18,B3,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,CityBus,6x2,18,99,B4,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,InterurbanBus,6x2,18,99,B5,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Coach,6x2,18,99,B6,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +Valid,Vehicle Category ,Axle Conf.,GVW_Min,GVW_Max,HDV class,.vacc file ,Cross Wind Correction - Long haul,Cross Wind Correction - Other,Truck Axles - Long haul,Truck Axles - Other,Trailer Axles - Long haul,Trailer Axles - Other,Long haul,Regional delivery,Urban delivery,Municipal utility,Construction,Heavy Urban,Urban,Suburban,Interurban,Coach,Mass Extra - Long haul,Mass Extra - Regional delivery,Mass Extra - Urban delivery,Mass Extra - Municipal utility,Mass Extra - Construction,Mass Extra - Heavy Urban,Mass Extra - Urban,Mass Extra - Suburban,Mass Extra - Interurban,Mass Extra - Coach,Payload - Long haul,Payload - Regional delivery,Payload - Urban delivery,Payload - Municipal utility,Payload - Construction,Payload - Heavy Urban,Payload - Urban,Payload - Suburban,Payload - Interurban,Payload - Coach +0,RigidTruck,4x2,0,7.5,0,Truck.vacc,-,RigidSolo,-,-,-,-,0,1,1,0,0,0,0,0,0,0,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,-,-,- +1,RigidTruck,4x2,7.5,10,1,Truck.vacc,-,RigidSolo,-,45/55,-,-,0,1,1,0,0,0,0,0,0,0,-,1600,1600,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,- +1,RigidTruck,4x2,10,12,2,Truck.vacc,RigidSolo,RigidSolo,40/60,45/55,-,-,1,1,1,0,0,0,0,0,0,0,1900,1900,1900,-,-,-,-,-,-,-,f,f,f,-,-,-,-,-,-,- +1,RigidTruck,4x2,12,16,3,Truck.vacc,-,RigidSolo,-,40/60,-,-,0,1,1,0,0,0,0,0,0,0,-,2000,2000,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,- +1,RigidTruck,4x2,16,99,4,Truck.vacc,RigidTrailer,RigidSolo,20/30,45/55,50/2,-,1,1,0,1,0,0,0,0,0,0,7500,2100,-,2100,-,-,-,-,-,-,14000,4400,-,4400,-,-,-,-,-,- +1,Tractor,4x2,16,99,5,Truck.vacc,TractorSemitrailer,TractorSemitrailer,20/25,25/25,55/3,50/3,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19300,12900,-,-,-,-,-,-,-,- +0,RigidTruck,4x4,7.5,16,6,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,1,1,0,0,0,0,0,-,-,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,- +0,RigidTruck,4x4,16,99,7,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,Tractor,4x4,16,99,8,Truck.vacc,-,TractorSemitrailer,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +1,RigidTruck,6x2,0,99,9,Truck.vacc,RigidTrailer,RigidSolo,20/30/15,35/40/25,35/2,-,1,1,0,1,0,0,0,0,0,0,7600,2200,-,2200,-,-,-,-,-,-,19300,7100,-,7100,-,-,-,-,-,- +1,Tractor,6x2,0,99,10,Truck.vacc,TractorSemitrailer,TractorSemitrailer,15/10/20,20/10/20,55/2,50/2,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19300,12900,-,-,-,-,-,-,-,- +0,RigidTruck,6x4,0,99,11,Truck.vacc,-,RigidSolo,-,35/35/30,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,7100,-,-,-,-,- +0,Tractor,6x4,0,99,12,Truck.vacc,-,TractorSemitrailer,-,20/15/15,-,50/2,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,12900,-,-,-,-,- +0,RigidTruck,6x6,0,99,13,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,Tractor,6x6,0,99,14,Truck.vacc,-,TractorSemitrailer,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,RigidTruck,8x2,0,99,15,Truck.vacc,-,RigidSolo,-,-,-,-,0,1,0,0,0,0,0,0,0,0,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,- +0,RigidTruck,8x4,0,99,16,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,12900,-,-,-,-,- +0,RigidTruck,8x6,0,99,17,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,RigidTruck,8x8,0,99,17,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,CityBus,4x2,0,18,B1,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,- +0,InterurbanBus,4x2,0,18,B2,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,- +0,Coach,4x2,0,18,B3,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,??? +0,CityBus,6x2,18,99,B4,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,- +0,InterurbanBus,6x2,18,99,B5,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,- +0,Coach,6x2,18,99,B6,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,??? diff --git a/Declaration/VCDV/CoachBus.vcdv b/Declaration/VCDV/CoachBus.vcdv deleted file mode 100644 index 39a23feda955735a6a80ec920e23e4a083236708..0000000000000000000000000000000000000000 --- a/Declaration/VCDV/CoachBus.vcdv +++ /dev/null @@ -1,27 +0,0 @@ -# Crosswind influence on CdxA as a function of vehicle speed -# Vehicle category: coach bus -# Absolute yaw angle influence from ACEA Whitebook April 2014 -# Average crosswind: 3 m/s -# Baseline CdxA assumed with: 4.68 [m�] -v_veh [km/h],cdx_rel [-] -0,1.16368917057624 -5,1.16368917057624 -10,1.16368917057624 -15,1.16368917057624 -20,1.16368917057624 -25,1.16368917057624 -30,1.16368917057624 -35,1.16368917057624 -40,1.16368917057624 -45,1.16368917057624 -50,1.16368917057624 -55,1.16368917057624 -60,1.16368917057624 -65,1.14636945173252 -70,1.13130108969249 -75,1.11820564231065 -80,1.10682947645795 -85,1.09694460329622 -90,1.08828107916225 -95,1.08068278133074 -100,1.07400028829548 diff --git a/Declaration/VCDV/RigidSolo.vcdv b/Declaration/VCDV/RigidSolo.vcdv deleted file mode 100644 index 934c3e582527884496e7e091a521ab55ba2e10bf..0000000000000000000000000000000000000000 --- a/Declaration/VCDV/RigidSolo.vcdv +++ /dev/null @@ -1,27 +0,0 @@ -# Crosswind influence on CdxA as a function of vehicle speed -# Vehicle category: rigid solo -# Absolute yaw angle influence from ACEA Whitebook April 2014 -# Average crosswind: 3 m/s -# Baseline CdxA assumed with: 5.3 [m�] -v_veh [km/h],cdx_rel (v_veh) [-] -0,1.16995889058525 -5,1.16995889058525 -10,1.16995889058525 -15,1.16995889058525 -20,1.16995889058525 -25,1.16995889058525 -30,1.16995889058525 -35,1.16995889058525 -40,1.16995889058525 -45,1.16995889058525 -50,1.16995889058525 -55,1.16995889058525 -60,1.16995889058525 -65,1.14969968431834 -70,1.13284015316129 -75,1.11867388752005 -80,1.10667545890928 -85,1.09644348982345 -90,1.08762853580613 -95,1.07999428002092 -100,1.07334468074717 diff --git a/Declaration/VCDV/RigidTrailer.vcdv b/Declaration/VCDV/RigidTrailer.vcdv deleted file mode 100644 index 205473b64f696c4117669451ea1cbd9321a4a0c2..0000000000000000000000000000000000000000 --- a/Declaration/VCDV/RigidTrailer.vcdv +++ /dev/null @@ -1,27 +0,0 @@ -# Crosswind influence on CdxA as a function of vehicle speed -# Vehicle category: rigid trailer -# Absolute yaw angle influence from ACEA Whitebook April 2014 -# Average crosswind: 3 m/s -# Baseline CdxA assumed with: 6.33 [m�] -v_veh [km/h],cdx_rel (v_veh) [-] -0,1.35547110023335 -5,1.35547110023335 -10,1.35547110023335 -15,1.35547110023335 -20,1.35547110023335 -25,1.35547110023335 -30,1.35547110023335 -35,1.35547110023335 -40,1.35547110023335 -45,1.35547110023335 -50,1.35547110023335 -55,1.35547110023335 -60,1.35547110023335 -65,1.32382413546552 -70,1.29486615012693 -75,1.26877023747113 -80,1.24548620694966 -85,1.22484426801493 -90,1.20642747216762 -95,1.19005025706557 -100,1.17548319913321 diff --git a/Declaration/VCDV/TractorSemitrailer.vcdv b/Declaration/VCDV/TractorSemitrailer.vcdv deleted file mode 100644 index 50cfff436b7dfae4677e65b86ed30f12e59f9136..0000000000000000000000000000000000000000 --- a/Declaration/VCDV/TractorSemitrailer.vcdv +++ /dev/null @@ -1,27 +0,0 @@ -# Crosswind influence on CdxA as a function of vehicle speed -# Vehicle category: tractor semitrailer -# Absolute yaw angle influence from ACEA Whitebook April 2014 -# Average crosswind: 3 m/s -# Baseline CdxA assumed with: 5.7 [m�] -v_veh [km/h],cdx_rel [-] -0,1.27614894491372 -5,1.27614894491372 -10,1.27614894491372 -15,1.27614894491372 -20,1.27614894491372 -25,1.27614894491372 -30,1.27614894491372 -35,1.27614894491372 -40,1.27614894491372 -45,1.27614894491372 -50,1.27614894491372 -55,1.27614894491372 -60,1.27614894491372 -65,1.24890735180796 -70,1.22499288657568 -75,1.20405384590645 -80,1.18574578066132 -85,1.1697448123524 -90,1.15564641074318 -95,1.14321982822533 -100,1.13223910374519 diff --git a/Declaration/VCDV/paramerters.csv b/Declaration/VCDV/paramerters.csv new file mode 100644 index 0000000000000000000000000000000000000000..7a6e9b270ebc04b4494ded8c808d2c6369cb4fca --- /dev/null +++ b/Declaration/VCDV/paramerters.csv @@ -0,0 +1,6 @@ +Parameters,a1,a2,a3 +RigidSolo,0.013526,0.017746,-0.000666 +RigidTrailer,0.017125,0.072275,-0.004148 +TractorSemitrailer,0.034767,0.039367,-0.001897 +CoachBus,-0.000794,0.02109,-0.00109 + diff --git a/Declaration/WHTC-Weighting-Factors.csv b/Declaration/WHTC-Weighting-Factors.csv new file mode 100644 index 0000000000000000000000000000000000000000..4d00f736a8fa3eae465182a1618051e782bc0ab9 --- /dev/null +++ b/Declaration/WHTC-Weighting-Factors.csv @@ -0,0 +1,4 @@ +Part,Long haul,Regional delivery,Urban delivery,Municipal utility,Construction,Heavy Urban,Urban,Suburban,Interurban,Coach +Urban,11,17,69,98,62,100,100,100,45,0 +Rural,0,30,27,0,32,0,0,0,36,22 +Motorway,89,53,4,2,6,0,0,0,19,78 diff --git a/Declaration/Wheels.csv b/Declaration/Wheels.csv index 3c01c43e64217d44b4aac1c60bed2d1e8be03cb6..f49a335209e44ff9951ed5e98a2785bd226be895 100644 --- a/Declaration/Wheels.csv +++ b/Declaration/Wheels.csv @@ -1,41 +1,41 @@ -Wheel,Inertia,d,Size-Class(0/1) -9 R 22.5,8.9,970,0 -9.00 R 20,10.5,1018,0 -9.5 R 17.5,4.9,842,0 -10 R 17.5,5,858,0 -10 R 22.5,11,1020,0 -10.00 R 20,13.1,1025,0 -11 R 22.5,14.4,1050,0 -11.00 R 20,14.6,1082,0 -12 R 22.5,16.8,1084,0 -12.00 R 20,19.5,1122,0 -12.00 R 24,27.7,1226,0 -12.5 R 20,12.7,1120,0 -13 R 22.5,20,1124,0 -14.00 R 20,30.8,1238,0 -14.5 R 20,14.8,1092,0 -16.00 R 20,47.5,1343,0 -215/75 R 17.5,3.9,767,0 -225/70 R 17.5,4,759.5,0 -225/75 R 17.5,4,782,0 -235/75 R 17.5,4.5,797,0 -245/70 R 17.5,5.2,787.5,0 -245/70 R 19.5,6,838.3,0 -255/70 R 22.5,9.5,928.5,0 -265/70 R 19.5,6.5,866.3,0 -275/70 R 22.5,11.9,956.5,0 -275/80 R 22.5,12.8,1011.5,0 -285/70 R 19.5,7.9,894.3,0 -295/55 R 22.5,10.2,896,1 -295/60 R 22.5,10.8,925.5,1 -295/80 R 22.5,15.5,1043.5,0 -305/70 R 19.5,9.2,922.3,0 -305/70 R 22.5,13.9,998.5,0 -315/45 R22.5,9.9,347,1 -315/60 R 22.5,12.8,949.5,1 -315/70 R 22.5,14.9,1012.5,0 -315/80 R 22.5,17.6,1075.5,0 -365/80 R 20,17.2,1092,0 -365/85 R 20,22.5,1128.5,0 -385/55 R 22.5,15.9,995,1 -385/65 R 22.5,19.2,1072,1 +Wheel,Inertia,d,Size-Class (0/1) +9 R22.5,8.9,970,b +9.00 R20,10.5,1018,b +9.5 R17.5,4.9,842,b +10 R17.5,5,858,b +10 R22.5,11,1020,b +10.00 R20,13.1,1025,b +11 R22.5,14.4,1050,b +11.00 R20,14.6,1082,b +12 R22.5,16.8,1084,b +12.00 R20,19.5,1122,b +12.00 R24,27.7,1226,b +12.5 R20,12.7,1120,b +13 R22.5,20,1124,b +14.00 R20,30.8,1238,b +14.5 R20,14.8,1092,b +16.00 R20,47.5,1343,b +215/75 R17.5,3.9,767,b +225/70 R17.5,4,759.5,b +225/75 R17.5,4,782,b +235/75 R17.5,4.5,797,b +245/70 R17.5,5.2,787.5,b +245/70 R19.5,6,838.3,b +255/70 R22.5,9.5,928.5,b +265/70 R19.5,6.5,866.3,b +275/70 R22.5,11.9,956.5,b +275/80 R22.5,12.8,1011.5,b +285/70 R19.5,7.9,894.3,b +295/55 R22.5,10.2,896,a +295/60 R22.5,10.8,925.5,a +295/80 R22.5,15.5,1043.5,b +305/70 R19.5,9.2,922.3,b +305/70 R22.5,13.9,998.5,b +315/45 R22.5,9.9,855,a +315/60 R22.5,12.8,949.5,a +315/70 R22.5,14.9,1012.5,b +315/80 R22.5,17.6,1075.5,b +365/80 R20,17.2,1092,b +365/85 R20,22.5,1128.5,b +385/55 R22.5,15.9,995,a +385/65 R22.5,19.2,1072,a diff --git a/VECTO.sln b/VECTO.sln index 1ba7acc4363b63000361fd823168694232b079e2..3e14e7442e5fe31d35c8ba39ff7f1a0a0c546423 100644 --- a/VECTO.sln +++ b/VECTO.sln @@ -59,7 +59,4 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(Performance) = preSolution - HasPerformanceSessions = true - EndGlobalSection EndGlobal diff --git a/VECTO.sln.DotSettings b/VECTO.sln.DotSettings index 20c32e9f89eb92546fd549e46252160406dfe6ea..519ebe2c3f9db225ac68a45e912e6e7854fe41ad 100644 --- a/VECTO.sln.DotSettings +++ b/VECTO.sln.DotSettings @@ -1,4 +1,6 @@ <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> + <s:String x:Key="/Default/CodeStyle/CodeCleanup/SilentCleanupProfile/@EntryValue">Default: Reformat Code</s:String> + <s:String x:Key="/Default/CodeStyle/CodeFormatting/CommonFormatter/ALIGNMENT_TAB_FILL_STYLE/@EntryValue">USE_TABS_ONLY</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue">END_OF_LINE</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/CASE_BLOCK_BRACES/@EntryValue">END_OF_LINE</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/EMPTY_BLOCK_STYLE/@EntryValue">TOGETHER_SAME_LINE</s:String> @@ -14,15 +16,65 @@ <s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ELSE_ON_NEW_LINE/@EntryValue">False</s:Boolean> <s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FINALLY_ON_NEW_LINE/@EntryValue">False</s:Boolean> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SIMPLE_EMBEDDED_STATEMENT_STYLE/@EntryValue">LINE_BREAK</s:String> + <s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AFTER_TYPECAST_PARENTHESES/@EntryValue">False</s:Boolean> <s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AROUND_MULTIPLICATIVE_OP/@EntryValue">True</s:Boolean> + <s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_TYPEOF_PARENTHESES/@EntryValue">False</s:Boolean> <s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_WITHIN_SINGLE_LINE_ARRAY_INITIALIZER_BRACES/@EntryValue">True</s:Boolean> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CSV/@EntryIndexedValue">CSV</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PT/@EntryIndexedValue">PT</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RP/@EntryIndexedValue">RP</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SI/@EntryIndexedValue">SI</s:String> - <s:Boolean x:Key="/Default/Environment/InjectedLayers/FileInjectedLayer/=2BF7A1E51991F2458D2D1F0B29CF888B/@KeyIndexDefined">True</s:Boolean> - <s:String x:Key="/Default/Environment/InjectedLayers/FileInjectedLayer/=2BF7A1E51991F2458D2D1F0B29CF888B/AbsolutePath/@EntryValue">C:\Workspaces\VisualStudio\VECTO_quam\VECTO.sln.DotSettings</s:String> - <s:Boolean x:Key="/Default/Environment/InjectedLayers/InjectedLayerCustomization/=File2BF7A1E51991F2458D2D1F0B29CF888B/@KeyIndexDefined">True</s:Boolean> - <s:Double x:Key="/Default/Environment/InjectedLayers/InjectedLayerCustomization/=File2BF7A1E51991F2458D2D1F0B29CF888B/RelativePriority/@EntryValue">1</s:Double> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FBLOCK_005FSCOPE_005FCONSTANT/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FBLOCK_005FSCOPE_005FVARIABLE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FCONSTRUCTOR/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FFUNCTION/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FGLOBAL_005FVARIABLE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FLABEL/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FLOCAL_005FVARIABLE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FOBJECT_005FPROPERTY_005FOF_005FFUNCTION/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FPARAMETER/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FCLASS/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FENUM/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FENUM_005FMEMBER/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FINTERFACE/@EntryIndexedValue"><Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FINTERFACE_005FFOR_005FJS_005FGLOBAL_005FVARIABLE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FMODULE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FMODULE_005FEXPORTED/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FMODULE_005FLOCAL/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPRIVATE_005FMEMBER_005FACCESSOR/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPRIVATE_005FSTATIC_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPRIVATE_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPRIVATE_005FTYPE_005FMETHOD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPROTECTED_005FMEMBER_005FACCESSOR/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPROTECTED_005FSTATIC_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPROTECTED_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPROTECTED_005FTYPE_005FMETHOD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPUBLIC_005FMEMBER_005FACCESSOR/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPUBLIC_005FSTATIC_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPUBLIC_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPUBLIC_005FTYPE_005FMETHOD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FTYPE_005FPARAMETER/@EntryIndexedValue"><Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/WebNaming/UserRules/=ASP_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/WebNaming/UserRules/=ASP_005FHTML_005FCONTROL/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/WebNaming/UserRules/=ASP_005FTAG_005FNAME/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/WebNaming/UserRules/=ASP_005FTAG_005FPREFIX/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=NAMESPACE_005FALIAS/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=XAML_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + <s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=XAML_005FRESOURCE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String> + + + + <s:Boolean x:Key="/Default/Environment/InjectedLayers/FileInjectedLayer/=9B8C70A674F95241B1558475C07A6344/@KeyIndexDefined">True</s:Boolean> + <s:String x:Key="/Default/Environment/InjectedLayers/FileInjectedLayer/=9B8C70A674F95241B1558475C07A6344/AbsolutePath/@EntryValue">E:\vecto-sim\VECTO.sln.DotSettings</s:String> + <s:String x:Key="/Default/Environment/InjectedLayers/FileInjectedLayer/=9B8C70A674F95241B1558475C07A6344/RelativePath/@EntryValue"></s:String> + + + <s:Boolean x:Key="/Default/Environment/InjectedLayers/InjectedLayerCustomization/=File9B8C70A674F95241B1558475C07A6344/@KeyIndexDefined">True</s:Boolean> + <s:Double x:Key="/Default/Environment/InjectedLayers/InjectedLayerCustomization/=File9B8C70A674F95241B1558475C07A6344/RelativePriority/@EntryValue">2</s:Double> + + + + + <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> diff --git a/VectoCore/Models/Connector/Ports/IFvPort.cs b/VectoCore/Models/Connector/Ports/IFvPort.cs index 1155a32776c60af99d2f9fa88aadf004dd71e425..ac85d7d342244d4323b53d534f88cede4c20acf3 100644 --- a/VectoCore/Models/Connector/Ports/IFvPort.cs +++ b/VectoCore/Models/Connector/Ports/IFvPort.cs @@ -3,29 +3,29 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Connector.Ports { - /// <summary> - /// Defines a connect method to connect the inport to an outport. - /// </summary> - public interface IFvInPort - { - /// <summary> - /// Connects the inport to another outport. - /// </summary> - void Connect(IFvOutPort other); - } + /// <summary> + /// Defines a connect method to connect the inport to an outport. + /// </summary> + public interface IFvInPort + { + /// <summary> + /// Connects the inport to another outport. + /// </summary> + void Connect(IFvOutPort other); + } - /// <summary> - /// Defines a request method for a Fv-Out-Port. - /// </summary> - public interface IFvOutPort - { - /// <summary> - /// Requests the Outport with the given force [N] and vehicle velocity [m/s]. - /// </summary> - /// <param name="absTime">[s]</param> - /// <param name="dt">[s]</param> - /// <param name="force">[N]</param> - /// <param name="velocity">[m/s]</param> - IResponse Request(TimeSpan absTime, TimeSpan dt, Newton force, MeterPerSecond velocity); - } + /// <summary> + /// Defines a request method for a Fv-Out-Port. + /// </summary> + public interface IFvOutPort + { + /// <summary> + /// Requests the Outport with the given force [N] and vehicle velocity [m/s]. + /// </summary> + /// <param name="absTime">[s]</param> + /// <param name="dt">[s]</param> + /// <param name="force">[N]</param> + /// <param name="velocity">[m/s]</param> + IResponse Request(TimeSpan absTime, TimeSpan dt, Newton force, MeterPerSecond velocity); + } } \ No newline at end of file diff --git a/VectoCore/Models/Connector/Ports/ITnPort.cs b/VectoCore/Models/Connector/Ports/ITnPort.cs index 0d6ddba5b82b143d8d717d83c0dac6d754e51f96..9c8d4d8e1a5ff1f8ede02549ba285b0c440ad328 100644 --- a/VectoCore/Models/Connector/Ports/ITnPort.cs +++ b/VectoCore/Models/Connector/Ports/ITnPort.cs @@ -3,29 +3,29 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Connector.Ports { - /// <summary> - /// Defines a connect method to connect the inport to an outport. - /// </summary> - public interface ITnInPort - { - /// <summary> - /// Connects the inport to another outport. - /// </summary> - void Connect(ITnOutPort other); - } + /// <summary> + /// Defines a connect method to connect the inport to an outport. + /// </summary> + public interface ITnInPort + { + /// <summary> + /// Connects the inport to another outport. + /// </summary> + void Connect(ITnOutPort other); + } - /// <summary> - /// Defines a request method for a Tn-Out-Port. - /// </summary> - public interface ITnOutPort - { - /// <summary> - /// Requests the Outport with the given torque [Nm] and angularVelocity [rad/s]. - /// </summary> - /// <param name="absTime">[s]</param> - /// <param name="dt">[s]</param> - /// <param name="torque">[Nm]</param> - /// <param name="angularVelocity">[rad/s]</param> - IResponse Request(TimeSpan absTime, TimeSpan dt, NewtonMeter torque, PerSecond angularVelocity); - } + /// <summary> + /// Defines a request method for a Tn-Out-Port. + /// </summary> + public interface ITnOutPort + { + /// <summary> + /// Requests the Outport with the given torque [Nm] and angularVelocity [rad/s]. + /// </summary> + /// <param name="absTime">[s]</param> + /// <param name="dt">[s]</param> + /// <param name="torque">[Nm]</param> + /// <param name="angularVelocity">[rad/s]</param> + IResponse Request(TimeSpan absTime, TimeSpan dt, NewtonMeter torque, PerSecond angularVelocity); + } } \ No newline at end of file diff --git a/VectoCore/Models/Connector/Ports/Impl/Response.cs b/VectoCore/Models/Connector/Ports/Impl/Response.cs index 1e6c0cc929c34ca3ae6c675ca932d997b11c5ecb..4931c543c7bb2ddd2235b29988e8729092ed082e 100644 --- a/VectoCore/Models/Connector/Ports/Impl/Response.cs +++ b/VectoCore/Models/Connector/Ports/Impl/Response.cs @@ -2,30 +2,30 @@ using System; namespace TUGraz.VectoCore.Models.Connector.Ports.Impl { - /// <summary> - /// Response when the Cycle is finished. - /// </summary> - public class ResponseCycleFinished : IResponse {} + /// <summary> + /// Response when the Cycle is finished. + /// </summary> + public class ResponseCycleFinished : IResponse {} - /// <summary> - /// Response when a request was successful. - /// </summary> - public class ResponseSuccess : IResponse {} + /// <summary> + /// Response when a request was successful. + /// </summary> + public class ResponseSuccess : IResponse {} - /// <summary> - /// Response when the request resulted in an engine overload. - /// </summary> - public class ResponseFailOverload : IResponse - { - public double Delta { get; set; } - public double Gradient { get; set; } - } + /// <summary> + /// Response when the request resulted in an engine overload. + /// </summary> + public class ResponseFailOverload : IResponse + { + public double Delta { get; set; } + public double Gradient { get; set; } + } - /// <summary> - /// Response when the request should have another time interval. - /// </summary> - public class ResponseFailTimeInterval : IResponse - { - public TimeSpan DeltaT { get; set; } - } + /// <summary> + /// Response when the request should have another time interval. + /// </summary> + public class ResponseFailTimeInterval : IResponse + { + public TimeSpan DeltaT { get; set; } + } } \ No newline at end of file diff --git a/VectoCore/Models/Declaration/Axle.cs b/VectoCore/Models/Declaration/Axle.cs index 2a9706ade6e91b6d8ad82559ca97b7ec0e1e60c7..6e06fdb374367a12aa4d47a9baf3a0933f5fca8f 100644 --- a/VectoCore/Models/Declaration/Axle.cs +++ b/VectoCore/Models/Declaration/Axle.cs @@ -1,6 +1,6 @@ using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.Models.SimulationComponent.Data +namespace TUGraz.VectoCore.Models.Declaration { public class Axle { diff --git a/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/Models/Declaration/DeclarationData.cs index ece0c51df39d816ae226573f8f0f35a4d54728d5..0b35894963d588cd0e3cac781aa91e756abd5379 100644 --- a/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/Models/Declaration/DeclarationData.cs @@ -1,47 +1,51 @@ using System; using System.Collections.Generic; -using System.Linq; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Utils; - namespace TUGraz.VectoCore.Models.Declaration { public class DeclarationData { private static DeclarationData _instance; - private readonly DeclarationSegments _segments; - private readonly DeclarationRims _rims; - private readonly DeclarationWheels _wheels; - private readonly DeclarationPT1 _pt1; - private readonly ElectricSystem _electricSystem; - - public static DeclarationWheels Wheels + private Segments _segments; + private Rims _rims; + private Wheels _wheels; + private PT1 _pt1; + private ElectricSystem _electricSystem; + private Fan _fan; + private HeatingVentilationAirConditioning _heatingVentilationAirConditioning; + private PneumaticSystem _pneumaticSystem; + private SteeringPump _steeringPump; + private WHTCCorrection _whtcCorrection; + + public static Wheels Wheels { - get { return Instance()._wheels; } + get { return Instance()._wheels ?? (Instance()._wheels = new Wheels()); } } - public static DeclarationRims Rims + public static Rims Rims { - get { return Instance()._rims; } + get { return Instance()._rims ?? (Instance()._rims = new Rims()); } } - public static DeclarationSegments Segments + public static Segments Segments { - get { return Instance()._segments; } + get { return Instance()._segments ?? (Instance()._segments = new Segments()); } } - public static DeclarationPT1 PT1 + public static PT1 PT1 { - get { return Instance()._pt1; } + get { return Instance()._pt1 ?? (Instance()._pt1 = new PT1()); } } public static ElectricSystem ElectricSystem { - get { return Instance()._electricSystem; } + get { return Instance()._electricSystem ?? (Instance()._electricSystem = new ElectricSystem()); } } public static Meter DynamicTyreRadius(string wheels, string rims) + public static Fan Fan { var wheelsEntry = Wheels.Lookup(wheels); var rimsEntry = Rims.Lookup(rims); @@ -51,13 +55,32 @@ namespace TUGraz.VectoCore.Models.Declaration return wheelsEntry.TyreRadius * correction / (2 * Math.PI); } - private DeclarationData() { - _wheels = new DeclarationWheels(); - _rims = new DeclarationRims(); - _segments = new DeclarationSegments(); - _pt1 = new DeclarationPT1(); - _electricSystem = new ElectricSystem(); + get { return Instance()._fan ?? (Instance()._fan = new Fan()); } + } + + public static HeatingVentilationAirConditioning HeatingVentilationAirConditioning + { + get + { + return Instance()._heatingVentilationAirConditioning ?? + (Instance()._heatingVentilationAirConditioning = new HeatingVentilationAirConditioning()); + } + } + + public static PneumaticSystem PneumaticSystem + { + get { return Instance()._pneumaticSystem ?? (Instance()._pneumaticSystem = new PneumaticSystem()); } + } + + public static SteeringPump SteeringPump + { + get { return Instance()._steeringPump ?? (Instance()._steeringPump = new SteeringPump()); } + } + + public static WHTCCorrection WHTCCorrection + { + get { return Instance()._whtcCorrection ?? (Instance()._whtcCorrection = new WHTCCorrection()); } } public static int PoweredAxle() diff --git a/VectoCore/Models/Declaration/ElectricSystem.cs b/VectoCore/Models/Declaration/ElectricSystem.cs index d52b5512c417d550fef2dba45b2b74319ade9193..2f25bf0eb09b281fb7c8e26fd6ba583883b683de 100644 --- a/VectoCore/Models/Declaration/ElectricSystem.cs +++ b/VectoCore/Models/Declaration/ElectricSystem.cs @@ -22,9 +22,7 @@ namespace TUGraz.VectoCore.Models.Declaration protected override void ParseData(DataTable table) { - foreach (DataColumn col in table.Columns) { - table.Columns[col.ColumnName].ColumnName = col.ColumnName.ToLower().Replace(" ", ""); - } + NormalizeTable(table); foreach (DataRow row in table.Rows) { var name = row.Field<string>("Technology"); @@ -39,11 +37,11 @@ namespace TUGraz.VectoCore.Models.Declaration var sum = _data[Tuple.Create(missionType, BaseLine)]; foreach (var s in technologies) { - if (_data.ContainsKey(Tuple.Create(missionType, s))) { - // todo: ask raphael why these technologies have to be subtracted? - sum -= _data[Tuple.Create(missionType, s)]; + Watt w; + if (_data.TryGetValue(Tuple.Create(missionType, s), out w)) { + sum += w; } else { - Log.Warn("electric system technology not found."); + Log.Error(string.Format("electric system technology not found: {0}", s)); } } return sum; diff --git a/VectoCore/Models/Declaration/Fan.cs b/VectoCore/Models/Declaration/Fan.cs new file mode 100644 index 0000000000000000000000000000000000000000..9bc356c81f12a676040c9f574c46c94e07472930 --- /dev/null +++ b/VectoCore/Models/Declaration/Fan.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Data; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.Declaration +{ + public class Fan : LookupData<MissionType, string, Watt> + { + private readonly Dictionary<Tuple<MissionType, string>, Watt> _data = + new Dictionary<Tuple<MissionType, string>, Watt>(); + + private const string DefaultTechnology = "Crankshaft mounted - Electronically controlled visco clutch (Default)"; + + protected override string ResourceId + { + get { return "TUGraz.VectoCore.Resources.Declaration.VAUX.Fan-Tech.csv"; } + } + + protected override void ParseData(DataTable table) + { + NormalizeTable(table); + + _data.Clear(); + foreach (DataRow row in table.Rows) { + foreach (MissionType mission in Enum.GetValues(typeof(MissionType))) { + _data[Tuple.Create(mission, row.Field<string>("Technology"))] = + row.ParseDouble(mission.ToString().ToLower()).SI<Watt>(); + } + } + } + + public override Watt Lookup(MissionType mission, string technology) + { + if (string.IsNullOrWhiteSpace(technology.Trim())) { + technology = DefaultTechnology; + } + return _data[Tuple.Create(mission, technology)]; + } + } +} \ No newline at end of file diff --git a/VectoCore/Models/Declaration/HVAC.cs b/VectoCore/Models/Declaration/HVAC.cs new file mode 100644 index 0000000000000000000000000000000000000000..16859b6635ddeef130e9637e6f26ba59c0d74271 --- /dev/null +++ b/VectoCore/Models/Declaration/HVAC.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Data; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.Declaration +{ + public class HeatingVentilationAirConditioning : LookupData<MissionType, string, Watt> + { + private readonly Dictionary<Tuple<MissionType, string>, Watt> _data = + new Dictionary<Tuple<MissionType, string>, Watt>(); + + public override Watt Lookup(MissionType mission, string hdvClass) + { + return _data[Tuple.Create(mission, hdvClass)]; + } + + protected override string ResourceId + { + get { return "TUGraz.VectoCore.Resources.Declaration.VAUX.HVAC-Table.csv"; } + } + + protected override void ParseData(DataTable table) + { + _data.Clear(); + NormalizeTable(table); + + foreach (DataRow row in table.Rows) { + var hdvClass = row.Field<string>("hdvclass/power"); + foreach (MissionType mission in Enum.GetValues(typeof(MissionType))) { + _data[Tuple.Create(mission, hdvClass)] = row.ParseDouble(mission.ToString().ToLower()).SI<Watt>(); + } + } + } + } +} \ No newline at end of file diff --git a/VectoCore/Models/Declaration/Mission.cs b/VectoCore/Models/Declaration/Mission.cs index 148934e551710211cce6d6e044957bb7706ac700..a335fb0c57dedda5077b5c911efa6718ea412783 100644 --- a/VectoCore/Models/Declaration/Mission.cs +++ b/VectoCore/Models/Declaration/Mission.cs @@ -7,7 +7,7 @@ namespace TUGraz.VectoCore.Models.Declaration public class Mission { public MissionType MissionType { get; set; } - public Stream CrossWindCorrectionFile { get; set; } + public string CrossWindCorrection { get; set; } public double[] AxleWeightDistribution { get; set; } public double[] TrailerAxleWeightDistribution { get; set; } diff --git a/VectoCore/Models/Declaration/MissionType.cs b/VectoCore/Models/Declaration/MissionType.cs index 3c53bfa23ded85720db1cccdf81de6f46b71e087..eb1604b9ca26411adde7609f01890e1383c2e91d 100644 --- a/VectoCore/Models/Declaration/MissionType.cs +++ b/VectoCore/Models/Declaration/MissionType.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace TUGraz.VectoCore.Models +namespace TUGraz.VectoCore.Models.Declaration { public enum MissionType { diff --git a/VectoCore/Models/Declaration/DeclarationPT1.cs b/VectoCore/Models/Declaration/PT1.cs similarity index 95% rename from VectoCore/Models/Declaration/DeclarationPT1.cs rename to VectoCore/Models/Declaration/PT1.cs index e3f78c50ad8f25e5817ff9c0de19ea41b683ce10..a90f9e5781241c2f26f4e81730c9a8da84fdbeef 100644 --- a/VectoCore/Models/Declaration/DeclarationPT1.cs +++ b/VectoCore/Models/Declaration/PT1.cs @@ -6,7 +6,7 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Declaration { - public class DeclarationPT1 : LookupData<PerSecond, Second> + public class PT1 : LookupData<PerSecond, Second> { private List<KeyValuePair<PerSecond, Second>> _entries; diff --git a/VectoCore/Models/Declaration/PneumaticSystem.cs b/VectoCore/Models/Declaration/PneumaticSystem.cs new file mode 100644 index 0000000000000000000000000000000000000000..0743f18ef12f6b041a39dc6eb9c6b4024802a141 --- /dev/null +++ b/VectoCore/Models/Declaration/PneumaticSystem.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Data; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.Declaration +{ + public class PneumaticSystem : LookupData<MissionType, string, Watt> + { + private readonly Dictionary<Tuple<MissionType, string>, Watt> _data = + new Dictionary<Tuple<MissionType, string>, Watt>(); + + public override Watt Lookup(MissionType mission, string hdvClass) + { + return _data[Tuple.Create(mission, hdvClass)]; + } + + protected override string ResourceId + { + get { return "TUGraz.VectoCore.Resources.Declaration.VAUX.PS-Table.csv"; } + } + + protected override void ParseData(DataTable table) + { + _data.Clear(); + NormalizeTable(table); + + foreach (DataRow row in table.Rows) { + var hdvClass = row.Field<string>("hdvclass/power"); + foreach (MissionType mission in Enum.GetValues(typeof(MissionType))) { + _data[Tuple.Create(mission, hdvClass)] = row.ParseDouble(mission.ToString().ToLower()).SI<Watt>(); + } + } + } + } +} \ No newline at end of file diff --git a/VectoCore/Models/Declaration/Rims.cs b/VectoCore/Models/Declaration/Rims.cs new file mode 100644 index 0000000000000000000000000000000000000000..c544d5366b23dd6921f7eb51cf413f4ed471924d --- /dev/null +++ b/VectoCore/Models/Declaration/Rims.cs @@ -0,0 +1,37 @@ +using System.Data; +using System.Linq; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.Declaration +{ + public class Rims : LookupData<string, Rims.RimsEntry> + { + internal Rims() + { + var csvFile = ReadCsvFile(ResourceId); + ParseData(csvFile); + } + + protected override string ResourceId + { + get { return "TUGraz.VectoCore.Resources.Declaration.Rims.csv"; } + } + + protected override sealed void ParseData(DataTable table) + { + Data = (from DataRow row in table.Rows + select new RimsEntry { + RimsType = row[0].ToString(), + F_a = row.ParseDouble(1), + F_b = row.ParseDouble(2) + }).ToDictionary(e => e.RimsType); + } + + public class RimsEntry + { + public string RimsType; + public double F_a; + public double F_b; + } + } +} \ No newline at end of file diff --git a/VectoCore/Models/Declaration/Segment.cs b/VectoCore/Models/Declaration/Segment.cs index 036fea5b200106862e2e0bee2fdccfb1998c82b4..2eddaaab6618fb7fa057b6fe3eb54ef600c5d77e 100644 --- a/VectoCore/Models/Declaration/Segment.cs +++ b/VectoCore/Models/Declaration/Segment.cs @@ -1,5 +1,4 @@ using System.IO; -using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Declaration @@ -15,7 +14,7 @@ namespace TUGraz.VectoCore.Models.Declaration public Kilogram GrossVehicleWeightMax { get; set; } - public string HDVClass { get; internal set; } + public string VehicleClass { get; internal set; } public Stream AccelerationFile { get; internal set; } diff --git a/VectoCore/Models/Declaration/DeclarationSegments.cs b/VectoCore/Models/Declaration/Segments.cs similarity index 85% rename from VectoCore/Models/Declaration/DeclarationSegments.cs rename to VectoCore/Models/Declaration/Segments.cs index 9defe2489f77f205712d2175e8a6efe2e34e9524..5ff41c30bedcbee21fe9e32d28a1e923c1c8b523 100644 --- a/VectoCore/Models/Declaration/DeclarationSegments.cs +++ b/VectoCore/Models/Declaration/Segments.cs @@ -6,7 +6,7 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Declaration { - public class DeclarationSegments : LookupData<VehicleCategory, AxleConfiguration, Kilogram, Kilogram, Segment> + public class Segments : LookupData<VehicleCategory, AxleConfiguration, Kilogram, Kilogram, Segment> { private const string ResourceNamespace = "TUGraz.VectoCore.Resources.Declaration."; @@ -42,8 +42,8 @@ namespace TUGraz.VectoCore.Models.Declaration GrossVehicleWeightMax = row.ParseDouble("gvw_max").SI().Ton.Cast<Kilogram>(), VehicleCategory = vehicleCategory, AxleConfiguration = axleConfiguration, - HDVClass = row.Field<string>("hdv_class"), - AccelerationFile = RessourceHelper.ReadStream(ResourceNamespace + "VACC." + row.Field<string>("vacc")), + VehicleClass = row.Field<string>("hdvclass"), + AccelerationFile = RessourceHelper.ReadStream(ResourceNamespace + "VACC." + row.Field<string>(".vaccfile")), Missions = CreateMissions(grossVehicleMassRating, curbWeight, row).ToArray() }; return segment; @@ -58,32 +58,37 @@ namespace TUGraz.VectoCore.Models.Declaration string trailerField; if (missionType == MissionType.LongHaul) { - vcdvField = "vcdv-longhaul"; - axleField = "rigid/truckaxles-longhaul"; + vcdvField = "crosswindcorrection-longhaul"; + axleField = "truckaxles-longhaul"; trailerField = "traileraxles-longhaul"; } else { - vcdvField = "vcdv-other"; - axleField = "rigid/truckaxles-other"; + vcdvField = "crosswindcorrection-other"; + axleField = "truckaxles-other"; trailerField = "traileraxles-other"; } var mission = new Mission { MissionType = missionType, - CrossWindCorrectionFile = RessourceHelper.ReadStream(ResourceNamespace + "VCDV." + row.Field<string>(vcdvField)), + CrossWindCorrection = row.Field<string>(vcdvField), MassExtra = row.ParseDouble("massextra-" + missionType.ToString().ToLower()).SI<Kilogram>(), CycleFile = RessourceHelper.ReadStream(ResourceNamespace + "MissionCycles." + missionType + ".vdri"), AxleWeightDistribution = row.Field<string>(axleField).Split('/').ToDouble().Select(x => x / 100.0).ToArray() }; var trailerAxles = row.Field<string>(trailerField).Split('/'); - var count = int.Parse(trailerAxles[1]); - var weightPercent = trailerAxles[0].ToDouble(); + var count = 0; + var weightPercent = 0.0; + + if (trailerAxles[0] != "-") { + count = int.Parse(trailerAxles[1]); + weightPercent = trailerAxles[0].ToDouble(); + } mission.TrailerAxleWeightDistribution = Enumerable.Repeat(weightPercent / count / 100.0, count).ToArray(); mission.MinLoad = 0.SI<Kilogram>(); mission.MaxLoad = grossVehicleMassRating - mission.MassExtra - curbWeight; - var refLoadField = row.Field<string>("refload-" + missionType.ToString().ToLower()); + var refLoadField = row.Field<string>("payload-" + missionType.ToString().ToLower()); mission.RefLoad = CalculateRefLoad(grossVehicleMassRating, refLoadField, missionType); yield return mission; diff --git a/VectoCore/Models/Declaration/SteeringPump.cs b/VectoCore/Models/Declaration/SteeringPump.cs new file mode 100644 index 0000000000000000000000000000000000000000..50be63f3c8d59364c4f1a835b99549c91cb75028 --- /dev/null +++ b/VectoCore/Models/Declaration/SteeringPump.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.Declaration +{ + public class SteeringPump : LookupData<MissionType, string, string, Watt> + { + private readonly SteeringPumpTechnologies _technologies = new SteeringPumpTechnologies(); + + private readonly Dictionary<Tuple<MissionType, string>, Watt[]> _data = + new Dictionary<Tuple<MissionType, string>, Watt[]>(); + + public override Watt Lookup(MissionType mission, string hdvClass, string technology) + { + var shares = _data[Tuple.Create(mission, hdvClass)]; + var sum = 0.SI<Watt>(); + var factors = _technologies.Lookup(technology); + for (var i = 0; i < 4; i++) { + sum += shares[i] * factors[i]; + } + return sum; + } + + + protected override string ResourceId + { + get { return "TUGraz.VectoCore.Resources.Declaration.VAUX.SP-Table.csv"; } + } + + protected override void ParseData(DataTable table) + { + _data.Clear(); + NormalizeTable(table); + + foreach (DataRow row in table.Rows) { + var hdvClass = row.Field<string>("hdvclass/powerdemandpershare"); + foreach (MissionType mission in Enum.GetValues(typeof(MissionType))) { + var values = row.Field<string>(mission.ToString().ToLower()).Split('/').ToDouble(); + values = values.Concat(Enumerable.Repeat(0.0, 3)); + + _data[Tuple.Create(mission, hdvClass)] = values.Take(4).SI<Watt>().ToArray(); + } + } + } + + public class SteeringPumpTechnologies : LookupData<string, double[]> + { + protected override string ResourceId + { + get { return "TUGraz.VectoCore.Resources.Declaration.VAUX.SP-Tech.csv"; } + } + + protected override void ParseData(DataTable table) + { + Data.Clear(); + foreach (DataRow row in table.Rows) { + var tech = row.Field<string>("Scaling Factors"); + var factors = new[] { row.ParseDouble("U"), row.ParseDouble("F"), row.ParseDouble("B"), row.ParseDouble("S") }; + Data[tech] = factors; + } + } + + public override double[] Lookup(string tech) + { + return Data[tech]; + } + } + } +} \ No newline at end of file diff --git a/VectoCore/Models/Declaration/WHTCCorrection.cs b/VectoCore/Models/Declaration/WHTCCorrection.cs new file mode 100644 index 0000000000000000000000000000000000000000..ec7a5e991087425f6d31bb4728e77c57c4094023 --- /dev/null +++ b/VectoCore/Models/Declaration/WHTCCorrection.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.Declaration +{ + public class WHTCCorrection : LookupData<MissionType, double, double, double, double> + { + private Dictionary<MissionType, WHTCCorrectionEntry> _data = new Dictionary<MissionType, WHTCCorrectionEntry>(); + + public override double Lookup(MissionType mission, double rural, double urban, double motorway) + { + var entry = _data[mission]; + return rural * entry.Rural + urban * entry.Urban + motorway * entry.Motorway; + } + + protected override string ResourceId + { + get { return "TUGraz.VectoCore.Resources.Declaration.WHTC-Weighting-Factors.csv"; } + } + + protected override void ParseData(DataTable table) + { + _data.Clear(); + NormalizeTable(table); + foreach (MissionType mission in Enum.GetValues(typeof(MissionType))) { + var values = table.Columns[mission.ToString().ToLower()].Values<string>().ToDouble().ToArray(); + _data[mission] = new WHTCCorrectionEntry { Rural = values[0], Urban = values[1], Motorway = values[2] }; + } + } + + private class WHTCCorrectionEntry + { + public double Rural { get; set; } + public double Urban { get; set; } + public double Motorway { get; set; } + } + } +} \ No newline at end of file diff --git a/VectoCore/Models/Declaration/DeclarationWheels.cs b/VectoCore/Models/Declaration/Wheels.cs similarity index 75% rename from VectoCore/Models/Declaration/DeclarationWheels.cs rename to VectoCore/Models/Declaration/Wheels.cs index 220fc1223432e975d86775fc23a93952996f0631..f3673fda344002303fb661e7f680a662912ef50a 100644 --- a/VectoCore/Models/Declaration/DeclarationWheels.cs +++ b/VectoCore/Models/Declaration/Wheels.cs @@ -1,11 +1,10 @@ -using System; -using System.Data; +using System.Data; using System.Linq; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Declaration { - public class DeclarationWheels : LookupData<string, DeclarationWheels.WheelsEntry> + public class Wheels : LookupData<string, Wheels.WheelsEntry> { protected const string ResourceId = "TUGraz.VectoCore.Resources.Declaration.Wheels.csv"; @@ -18,10 +17,10 @@ namespace TUGraz.VectoCore.Models.Declaration { Data = (from DataRow row in table.Rows select new WheelsEntry { - WheelType = row[0].ToString(), + WheelType = row.Field<string>(0), Inertia = row.ParseDouble(1).SI<KilogramSquareMeter>(), TyreRadius = row.ParseDouble(2).SI().Milli.Meter.Cast<Meter>(), - SizeClass = Int32.Parse(row[3].ToString()) + SizeClass = row.Field<string>(3) }).ToDictionary(e => e.WheelType); } @@ -30,7 +29,7 @@ namespace TUGraz.VectoCore.Models.Declaration public string WheelType; public KilogramSquareMeter Inertia; public Meter TyreRadius; - public int SizeClass; + public string SizeClass; } } } \ No newline at end of file diff --git a/VectoCore/Models/Simulation/Cockpit/IEngineCockpit.cs b/VectoCore/Models/Simulation/Cockpit/IEngineCockpit.cs index 27c6a586729a40915fcb13822fe9adbe4bf3d477..cbe86bb42600302f1f645fc448914dc1998443a2 100644 --- a/VectoCore/Models/Simulation/Cockpit/IEngineCockpit.cs +++ b/VectoCore/Models/Simulation/Cockpit/IEngineCockpit.cs @@ -10,6 +10,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Cockpit /// <summary> /// [rad/s] The current engine speed. /// </summary> - PerSecond EngineSpeed(); + PerSecond EngineSpeed(); } } \ No newline at end of file diff --git a/VectoCore/Models/Simulation/Data/IModalDataWriter.cs b/VectoCore/Models/Simulation/Data/IModalDataWriter.cs index fa3c9c3a9d945c27cb7dd97f8d36dcf050b72cff..de07839879157cc97db67818e1a1efe638322d3a 100644 --- a/VectoCore/Models/Simulation/Data/IModalDataWriter.cs +++ b/VectoCore/Models/Simulation/Data/IModalDataWriter.cs @@ -1,6 +1,4 @@ -using System; using System.Collections.Generic; -using System.Data; namespace TUGraz.VectoCore.Models.Simulation.Data { @@ -22,7 +20,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data void Finish(); - Object Compute(string expression, string filter); + object Compute(string expression, string filter); IEnumerable<T> GetValues<T>(ModalResultField key); } diff --git a/VectoCore/Models/Simulation/Data/ModalDataWriter.cs b/VectoCore/Models/Simulation/Data/ModalDataWriter.cs index 4e947fed36e13510b4a5bebd3784ccf1c6dff8ae..7bffe3fe1f9fca8364678b2b45f145b5d4430773 100644 --- a/VectoCore/Models/Simulation/Data/ModalDataWriter.cs +++ b/VectoCore/Models/Simulation/Data/ModalDataWriter.cs @@ -1,6 +1,6 @@ -using System.Data; +using System.Collections.Generic; +using System.Data; using System.Linq; -using System.Collections.Generic; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Simulation.Data diff --git a/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs b/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs index 39099877add4cd85ba23ba3c08daf0141d740fef..1824f2f81075ace3353d60a0bda6fe912a5cc7d2 100644 --- a/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs +++ b/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; -using TUGraz.VectoCore.Utils; -using System.Linq; using System.Data; +using System.Linq; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Simulation.Data { diff --git a/VectoCore/Models/Simulation/Data/VectoJobData.cs b/VectoCore/Models/Simulation/Data/VectoJobData.cs new file mode 100644 index 0000000000000000000000000000000000000000..d36e84b740da2f83a371a61807ca8c8f2513b33c --- /dev/null +++ b/VectoCore/Models/Simulation/Data/VectoJobData.cs @@ -0,0 +1,230 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using TUGraz.VectoCore.Exceptions; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.Models.Simulation.Data +{ + /// <summary> + /// Represents the Vecto Job File. Fileformat: .vecto + /// </summary> + /// <code> + ///{ + /// "Header": { + /// "CreatedBy": " ()", + /// "Date": "3/4/2015 2:09:13 PM", + /// "AppVersion": "2.0.4-beta3", + /// "FileVersion": 2 + /// }, + /// "Body": { + /// "SavedInDeclMode": false, + /// "VehicleFile": "24t Coach.vveh", + /// "EngineFile": "24t Coach.veng", + /// "GearboxFile": "24t Coach.vgbx", + /// "Cycles": [ + /// "W:\\VECTO\\CITnet\\VECTO\\bin\\Debug\\Declaration\\MissionCycles\\LOT2_rural Engine Only.vdri" + /// ], + /// "Aux": [ + /// { + /// "ID": "ALT1", + /// "Type": "Alternator", + /// "Path": "24t_Coach_ALT.vaux", + /// "Technology": "" + /// }, + /// { + /// "ID": "ALT2", + /// "Type": "Alternator", + /// "Path": "24t_Coach_ALT.vaux", + /// "Technology": "" + /// }, + /// { + /// "ID": "ALT3", + /// "Type": "Alternator", + /// "Path": "24t_Coach_ALT.vaux", + /// "Technology": "" + /// } + /// ], + /// "AccelerationLimitingFile": "Coach.vacc", + /// "IsEngineOnly": true, + /// "StartStop": { + /// "Enabled": false, + /// "MaxSpeed": 5.0, + /// "MinTime": 0.0, + /// "Delay": 0 + /// }, + /// "LookAheadCoasting": { + /// "Enabled": true, + /// "Dec": -0.5, + /// "MinSpeed": 50.0 + /// }, + /// "OverSpeedEcoRoll": { + /// "Mode": "OverSpeed", + /// "MinSpeed": 70.0, + /// "OverSpeed": 5.0, + /// "UnderSpeed": 5.0 + /// } + /// } + ///} + /// </code> + [DataContract] + public class VectoJobData : SimulationComponentData + { + /// <summary> + /// A class which represents the json data format for serializing and deserializing the Job Data files. + /// </summary> + public class Data + { + [JsonProperty(Required = Required.Always)] public DataHeader Header; + [JsonProperty(Required = Required.Always)] public DataBody Body; + + public class DataHeader + { + [JsonProperty(Required = Required.Always)] public string CreatedBy; + [JsonProperty(Required = Required.Always)] public DateTime Date; + [JsonProperty(Required = Required.Always)] public string AppVersion; + [JsonProperty(Required = Required.Always)] public double FileVersion; + } + + public class DataBody + { + [JsonProperty("SavedInDeclMode")] public bool SavedInDeclarationMode; + + [JsonProperty(Required = Required.Always)] public string VehicleFile; + [JsonProperty(Required = Required.Always)] public string EngineFile; + [JsonProperty(Required = Required.Always)] public string GearboxFile; + [JsonProperty(Required = Required.Always)] public IList<string> Cycles; + [JsonProperty] public IList<AuxData> Aux = new List<AuxData>(); + [JsonProperty(Required = Required.Always)] public string VACC; + [JsonProperty(Required = Required.Always)] public bool EngineOnlyMode; + [JsonProperty(Required = Required.Always)] public StartStopData StartStop; + [JsonProperty(Required = Required.Always)] public LACData LAC; + [JsonProperty(Required = Required.Always)] public OverSpeedEcoRollData OverSpeedEcoRoll; + + public class AuxData + { + [JsonProperty(Required = Required.Always)] public string ID; + [JsonProperty(Required = Required.Always)] public string Type; + [JsonProperty(Required = Required.Always)] public string Path; + [JsonProperty(Required = Required.Always)] public string Technology; + } + + public class StartStopData + { + [JsonProperty(Required = Required.Always)] public bool Enabled; + [JsonProperty(Required = Required.Always)] public double MaxSpeed; + [JsonProperty(Required = Required.Always)] public double MinTime; + [JsonProperty(Required = Required.Always)] public double Delay; + } + + public class LACData + { + [JsonProperty(Required = Required.Always)] public bool Enabled; + [JsonProperty(Required = Required.Always)] public double Dec; + [JsonProperty(Required = Required.Always)] public double MinSpeed; + } + + public class OverSpeedEcoRollData + { + [JsonProperty(Required = Required.Always)] public string Mode; + [JsonProperty(Required = Required.Always)] public double MinSpeed; + [JsonProperty(Required = Required.Always)] public double OverSpeed; + [JsonProperty(Required = Required.Always)] public double UnderSpeed; + } + } + } + + [DataMember] private Data _data; + + + public string VehicleFile + { + get { return _data.Body.VehicleFile; } + } + + public string EngineFile + { + get { return _data.Body.EngineFile; } + } + + public string GearboxFile + { + get { return _data.Body.GearboxFile; } + } + + public IList<string> Cycles + { + get { return _data.Body.Cycles; } + } + + public IList<Data.DataBody.AuxData> Aux + { + get { return _data.Body.Aux; } + } + + public string AccelerationLimitingFile + { + get { return _data.Body.VACC; } + } + + public bool IsEngineOnly + { + get { return _data.Body.EngineOnlyMode; } + } + + public Data.DataBody.StartStopData StartStop + { + get { return _data.Body.StartStop; } + } + + public Data.DataBody.LACData LookAheadCoasting + { + get { return _data.Body.LAC; } + } + + public Data.DataBody.OverSpeedEcoRollData OverSpeedEcoRoll + { + get { return _data.Body.OverSpeedEcoRoll; } + } + + public string JobFileName { get; set; } + + public static VectoJobData ReadFromFile(string fileName) + { + return ReadFromJson(File.ReadAllText(fileName), Path.GetDirectoryName(fileName), fileName); + } + + public static VectoJobData ReadFromJson(string json, string basePath = "", string fileName = "") + { + var data = new VectoJobData(); + data.JobFileName = fileName; + //todo handle conversion errors + var d = JsonConvert.DeserializeObject<Data>(json); + + data._data = d; + + if (d.Header.FileVersion > 2) { + throw new UnsupportedFileVersionException("Unsupported Version of .vecto file. Got Version: " + d.Header.FileVersion); + } + return data; + } + + public void WriteToFile(string fileName) + { + //todo handle file exceptions + File.WriteAllText(fileName, ToJson()); + } + + public string ToJson() + { + _data.Header.Date = DateTime.Now; + _data.Header.FileVersion = 2; + _data.Header.AppVersion = "3.0.0"; // todo: get current app version! + _data.Header.CreatedBy = ""; // todo: get current user + _data.Body.SavedInDeclarationMode = false; //todo: get declaration mode setting + return JsonConvert.SerializeObject(_data, Formatting.Indented); + } + } +} \ No newline at end of file diff --git a/VectoCore/Models/Simulation/Impl/VectoRun.cs b/VectoCore/Models/Simulation/Impl/VectoRun.cs index daa21970df6c8d88a1acac80894816adf1cacdad..7f9f75c3aec5e2b8c9042f636d4a5bf810590589 100644 --- a/VectoCore/Models/Simulation/Impl/VectoRun.cs +++ b/VectoCore/Models/Simulation/Impl/VectoRun.cs @@ -1,6 +1,4 @@ using System; -using System.Data; -using System.IO; using Common.Logging; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Connector.Ports.Impl; diff --git a/VectoCore/Models/SimulationComponent/Data/AuxiliaryCycleDataAdapter.cs b/VectoCore/Models/SimulationComponent/Data/AuxiliaryCycleDataAdapter.cs index e7d6d2be3dc5db857b0f8faf552f7d9eb6350747..3bcf89c03e8286439eabb474a390ff9d3cbabf9b 100644 --- a/VectoCore/Models/SimulationComponent/Data/AuxiliaryCycleDataAdapter.cs +++ b/VectoCore/Models/SimulationComponent/Data/AuxiliaryCycleDataAdapter.cs @@ -25,7 +25,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data _auxiliaryId = column; if (_auxiliaryId != null && !_drivingCycle.Entries.First().AuxiliarySupplyPower.ContainsKey(_auxiliaryId)) { Log.ErrorFormat("driving cycle data does not contain column {0}", column); - throw new VectoException(String.Format("driving cycle does not contain column {0}", column)); + throw new VectoException(string.Format("driving cycle does not contain column {0}", column)); } } @@ -37,7 +37,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data CurrentCycleEntry = _nextCycleEntry.Current; _nextCycleEntry.MoveNext(); } - return String.IsNullOrEmpty(_auxiliaryId) + return string.IsNullOrEmpty(_auxiliaryId) ? CurrentCycleEntry.AdditionalAuxPowerDemand : CurrentCycleEntry.AuxiliarySupplyPower[_auxiliaryId]; } diff --git a/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMap.cs b/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMap.cs index 2923e1e1a10a7fe17470ba1de7dff8673166562b..1bc5286a2f6cfdcfeb89aca843b10c61e28c1bf3 100644 --- a/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMap.cs +++ b/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMap.cs @@ -9,165 +9,165 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine { - [JsonObject(MemberSerialization.Fields)] - public class FuelConsumptionMap : SimulationComponentData - { - private readonly IList<FuelConsumptionEntry> _entries = new List<FuelConsumptionEntry>(); - private readonly DelauneyMap _fuelMap = new DelauneyMap(); - private FuelConsumptionMap() {} - - public static FuelConsumptionMap ReadFromFile(string fileName) - { - var fuelConsumptionMap = new FuelConsumptionMap(); - var data = VectoCSVFile.Read(fileName); - - try { - foreach (DataRow row in data.Rows) { - try { - var entry = new FuelConsumptionEntry { - EngineSpeed = - row.ParseDouble(Fields.EngineSpeed).SI().Rounds.Per.Minute.Cast<PerSecond>(), - Torque = row.ParseDouble(Fields.Torque).SI<NewtonMeter>(), - FuelConsumption = - row.ParseDouble(Fields.FuelConsumption).SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second - }; - - // todo Contract.Assert - if (entry.FuelConsumption < 0) { - throw new ArgumentOutOfRangeException("FuelConsumption", "FuelConsumption < 0 not allowed."); - } - - fuelConsumptionMap._entries.Add(entry); - - // Delauney map works only as expected, when the engineSpeed is in rpm. - fuelConsumptionMap._fuelMap.AddPoint((double) entry.Torque, row.ParseDouble(Fields.EngineSpeed), - (double) entry.FuelConsumption); - } catch (Exception e) { - throw new VectoException(string.Format("Line {0}: {1}", data.Rows.IndexOf(row), e.Message), e); - } - } - } catch (Exception e) { - throw new VectoException(string.Format("File {0}: {1}", fileName, e.Message), e); - } - - fuelConsumptionMap._fuelMap.Triangulate(); - return fuelConsumptionMap; - } - - /// <summary> - /// [kg/s] Calculates the fuel consumption based on the given fuel map, - /// the engineSpeed [rad/s] and the torque [Nm]. - /// </summary> - /// <param name="engineSpeed">[rad/sec]</param> - /// <param name="torque">[Nm]</param> - /// <returns>[kg/s]</returns> - public SI GetFuelConsumption(NewtonMeter torque, PerSecond engineSpeed) - { - // delauney map needs is initialised with rpm, therefore the engineSpeed has to be converted. - return - _fuelMap.Interpolate(torque.Double(), engineSpeed.ConvertTo().Rounds.Per.Minute.Double()).SI().Kilo.Gramm.Per.Second; - } - - private static class Fields - { - /// <summary> - /// [rpm] - /// </summary> - public const string EngineSpeed = "engine speed"; - - /// <summary> - /// [Nm] - /// </summary> - public const string Torque = "torque"; - - /// <summary> - /// [g/h] - /// </summary> - public const string FuelConsumption = "fuel consumption"; - }; - - private class FuelConsumptionEntry - { - /// <summary> - /// engine speed [rad/s] - /// </summary> - public PerSecond EngineSpeed { get; set; } - - /// <summary> - /// Torque [Nm] - /// </summary> - public NewtonMeter Torque { get; set; } - - /// <summary> - /// Fuel consumption [kg/s] - /// </summary> - public SI FuelConsumption { get; set; } - - #region Equality members - - private bool Equals(FuelConsumptionEntry other) - { - Contract.Requires(other != null); - return EngineSpeed.Equals(other.EngineSpeed) && Torque.Equals(other.Torque) && - FuelConsumption.Equals(other.FuelConsumption); - } - - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) { - return false; - } - if (ReferenceEquals(this, obj)) { - return true; - } - if (obj.GetType() != GetType()) { - return false; - } - return Equals((FuelConsumptionEntry) obj); - } - - public override int GetHashCode() - { - unchecked { - var hashCode = EngineSpeed.GetHashCode(); - hashCode = (hashCode * 397) ^ Torque.GetHashCode(); - hashCode = (hashCode * 397) ^ FuelConsumption.GetHashCode(); - return hashCode; - } - } - - #endregion - } - - #region Equality members - - protected bool Equals(FuelConsumptionMap other) - { - return _entries.SequenceEqual(other._entries) && Equals(_fuelMap, other._fuelMap); - } - - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) { - return false; - } - if (ReferenceEquals(this, obj)) { - return true; - } - if (obj.GetType() != GetType()) { - return false; - } - return Equals((FuelConsumptionMap) obj); - } - - public override int GetHashCode() - { - unchecked { - return ((_entries != null ? _entries.GetHashCode() : 0) * 397) ^ - (_fuelMap != null ? _fuelMap.GetHashCode() : 0); - } - } - - #endregion - } + [JsonObject(MemberSerialization.Fields)] + public class FuelConsumptionMap : SimulationComponentData + { + private readonly IList<FuelConsumptionEntry> _entries = new List<FuelConsumptionEntry>(); + private readonly DelauneyMap _fuelMap = new DelauneyMap(); + private FuelConsumptionMap() {} + + public static FuelConsumptionMap ReadFromFile(string fileName) + { + var fuelConsumptionMap = new FuelConsumptionMap(); + var data = VectoCSVFile.Read(fileName); + + try { + foreach (DataRow row in data.Rows) { + try { + var entry = new FuelConsumptionEntry { + EngineSpeed = + row.ParseDouble(Fields.EngineSpeed).SI().Rounds.Per.Minute.Cast<PerSecond>(), + Torque = row.ParseDouble(Fields.Torque).SI<NewtonMeter>(), + FuelConsumption = + row.ParseDouble(Fields.FuelConsumption).SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second + }; + + // todo Contract.Assert + if (entry.FuelConsumption < 0) { + throw new ArgumentOutOfRangeException("FuelConsumption", "FuelConsumption < 0 not allowed."); + } + + fuelConsumptionMap._entries.Add(entry); + + // Delauney map works only as expected, when the engineSpeed is in rpm. + fuelConsumptionMap._fuelMap.AddPoint((double)entry.Torque, row.ParseDouble(Fields.EngineSpeed), + (double)entry.FuelConsumption); + } catch (Exception e) { + throw new VectoException(string.Format("Line {0}: {1}", data.Rows.IndexOf(row), e.Message), e); + } + } + } catch (Exception e) { + throw new VectoException(string.Format("File {0}: {1}", fileName, e.Message), e); + } + + fuelConsumptionMap._fuelMap.Triangulate(); + return fuelConsumptionMap; + } + + /// <summary> + /// [kg/s] Calculates the fuel consumption based on the given fuel map, + /// the engineSpeed [rad/s] and the torque [Nm]. + /// </summary> + /// <param name="engineSpeed">[rad/sec]</param> + /// <param name="torque">[Nm]</param> + /// <returns>[kg/s]</returns> + public SI GetFuelConsumption(NewtonMeter torque, PerSecond engineSpeed) + { + // delauney map needs is initialised with rpm, therefore the engineSpeed has to be converted. + return + _fuelMap.Interpolate(torque.Double(), engineSpeed.ConvertTo().Rounds.Per.Minute.Double()).SI().Kilo.Gramm.Per.Second; + } + + private static class Fields + { + /// <summary> + /// [rpm] + /// </summary> + public const string EngineSpeed = "engine speed"; + + /// <summary> + /// [Nm] + /// </summary> + public const string Torque = "torque"; + + /// <summary> + /// [g/h] + /// </summary> + public const string FuelConsumption = "fuel consumption"; + }; + + private class FuelConsumptionEntry + { + /// <summary> + /// engine speed [rad/s] + /// </summary> + public PerSecond EngineSpeed { get; set; } + + /// <summary> + /// Torque [Nm] + /// </summary> + public NewtonMeter Torque { get; set; } + + /// <summary> + /// Fuel consumption [kg/s] + /// </summary> + public SI FuelConsumption { get; set; } + + #region Equality members + + private bool Equals(FuelConsumptionEntry other) + { + Contract.Requires(other != null); + return EngineSpeed.Equals(other.EngineSpeed) && Torque.Equals(other.Torque) && + FuelConsumption.Equals(other.FuelConsumption); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) { + return false; + } + if (ReferenceEquals(this, obj)) { + return true; + } + if (obj.GetType() != GetType()) { + return false; + } + return Equals((FuelConsumptionEntry)obj); + } + + public override int GetHashCode() + { + unchecked { + var hashCode = EngineSpeed.GetHashCode(); + hashCode = (hashCode * 397) ^ Torque.GetHashCode(); + hashCode = (hashCode * 397) ^ FuelConsumption.GetHashCode(); + return hashCode; + } + } + + #endregion + } + + #region Equality members + + protected bool Equals(FuelConsumptionMap other) + { + return _entries.SequenceEqual(other._entries) && Equals(_fuelMap, other._fuelMap); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) { + return false; + } + if (ReferenceEquals(this, obj)) { + return true; + } + if (obj.GetType() != GetType()) { + return false; + } + return Equals((FuelConsumptionMap)obj); + } + + public override int GetHashCode() + { + unchecked { + return ((_entries != null ? _entries.GetHashCode() : 0) * 397) ^ + (_fuelMap != null ? _fuelMap.GetHashCode() : 0); + } + } + + #endregion + } } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs b/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs index 87ef6a9b307b60ee0774e1408d28f8318269ef11..8ed6c349220f54ddf980fb8a8fe61fff87d060b6 100644 --- a/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs +++ b/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs @@ -12,7 +12,7 @@ public double AverageEfficiency { get; set; } - public GearData(TransmissionLossMap lossMap, Gearbox.ShiftPolygon shiftPolygon, double ratio, + public GearData(TransmissionLossMap lossMap, ShiftPolygon shiftPolygon, double ratio, bool torqueconverterActive) { LossMap = lossMap; diff --git a/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs b/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs index 8a5b759a3d0f1bbe43684d81873cfcf3f1bcd7ad..a3665d84445df8ff0c0b22c3d2f4e6a06328c82d 100644 --- a/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs +++ b/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs @@ -2,8 +2,6 @@ using System.Collections.Generic; using System.Data; using System.Linq; -using System.Runtime.InteropServices; -using System.Runtime.Remoting.Messaging; using Common.Logging; using Newtonsoft.Json; using TUGraz.VectoCore.Exceptions; @@ -63,7 +61,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox TorqueLoss = row.ParseDouble(Fields.TorqeLoss).SI<NewtonMeter>(), Efficiency = (!hasEfficiency || row[Fields.Efficiency] == DBNull.Value || row[Fields.Efficiency] != null) - ? Double.NaN + ? double.NaN : row.ParseDouble(Fields.Efficiency) }).ToList(); } @@ -109,7 +107,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox 0.SI<NewtonMeter>()); } catch (Exception e) { throw new VectoSimulationException( - String.Format("Failed to interpolate in TransmissionLossMap. angularVelocity: {0}, torque: {1}", angularVelocity, + string.Format("Failed to interpolate in TransmissionLossMap. angularVelocity: {0}, torque: {1}", angularVelocity, gbxOutTorque), e); } } @@ -117,8 +115,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox /// <summary> /// Compute the available torque at the output of the gear(box) (towards wheels) /// </summary> - /// <param name="angularVelocity">[1/s] angular speed of the shaft</param> - /// <param name="gbxInTorque">[Nm] torque provided by the engine at the gearbox' input shaft</param> /// <returns>[Nm] torque provided to the next component (towards the wheels)</returns> //public NewtonMeter GearboxOutTorque(PerSecond angularVelocity, NewtonMeter gbxInTorque) //{ diff --git a/VectoCore/Models/SimulationComponent/Data/RetarderData.cs b/VectoCore/Models/SimulationComponent/Data/RetarderData.cs index 12c2b413ebfef9c83125294b12215c805520ae5d..7c85f3fd8d46ea45f95184b3ed5942504e2be0f2 100644 --- a/VectoCore/Models/SimulationComponent/Data/RetarderData.cs +++ b/VectoCore/Models/SimulationComponent/Data/RetarderData.cs @@ -1,5 +1,4 @@ using System.IO; -using System.Runtime.InteropServices; using Newtonsoft.Json; namespace TUGraz.VectoCore.Models.SimulationComponent.Data diff --git a/VectoCore/Models/SimulationComponent/Data/RetarderLossMap.cs b/VectoCore/Models/SimulationComponent/Data/RetarderLossMap.cs index d3feadd3cd6b399cdcafac5015aaa4b185dd38d1..e610c1ca8a98c3120e01b8457bb401a63aed77a6 100644 --- a/VectoCore/Models/SimulationComponent/Data/RetarderLossMap.cs +++ b/VectoCore/Models/SimulationComponent/Data/RetarderLossMap.cs @@ -3,7 +3,6 @@ using System.Data; using System.Linq; using Common.Logging; using TUGraz.VectoCore.Exceptions; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.SimulationComponent.Data diff --git a/VectoCore/Models/SimulationComponent/Factories/EngineeringModeFactory.cs b/VectoCore/Models/SimulationComponent/Factories/EngineeringModeFactory.cs new file mode 100644 index 0000000000000000000000000000000000000000..af2c8e0e53b49c08a6d18eb29feea0e39f708a31 --- /dev/null +++ b/VectoCore/Models/SimulationComponent/Factories/EngineeringModeFactory.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Newtonsoft.Json; +using TUGraz.VectoCore.Exceptions; +using TUGraz.VectoCore.FileIO; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.SimulationComponent.Factories +{ + public class EngineeringModeFactory : InputFileReader + { + protected static EngineeringModeFactory _instance; + + public static EngineeringModeFactory Instance() + { + return _instance ?? (_instance = new EngineeringModeFactory()); + } + + private void CheckEngineeringMode(string fileName, VersionInfo fileInfo) + { + if (fileInfo.SavedInDeclarationMode) { + Log.WarnFormat("File {0} was saved in Declaration Mode but is used for Engineering Mode!", fileName); + } + } + + public VehicleData CreateVehicleData(string fileName) + { + var json = File.ReadAllText(fileName); + var fileInfo = GetFileVersion(json); + CheckEngineeringMode(fileName, fileInfo); + + switch (fileInfo.Version) { + case 5: + var data = JsonConvert.DeserializeObject<VehicleFileV5Engineering>(json); + return CreateVehicleData(Path.GetDirectoryName(fileName), data.Body); + default: + throw new UnsupportedFileVersionException(fileName, fileInfo.Version); + } + } + + + protected VehicleData CreateVehicleData(string basePath, VehicleFileV5Engineering.DataBodyEng data) + { + return new VehicleData { + BasePath = basePath, + SavedInDeclarationMode = data.SavedInDeclarationMode, + VehicleCategory = data.VehicleCategory(), + CurbWeight = data.CurbWeight.SI<Kilogram>(), + CurbWeigthExtra = data.CurbWeightExtra.SI<Kilogram>(), + Loading = data.Loading.SI<Kilogram>(), + GrossVehicleMassRating = data.GrossVehicleMassRating.SI().Kilo.Kilo.Gramm.Cast<Kilogram>(), + DragCoefficient = data.DragCoefficient, + CrossSectionArea = data.CrossSectionArea.SI<SquareMeter>(), + DragCoefficientRigidTruck = data.DragCoefficientRigidTruck, + CrossSectionAreaRigidTruck = data.CrossSectionAreaRigidTruck.SI<SquareMeter>(), + DynamicTyreRadius = data.DynamicTyreRadius.SI().Milli.Meter.Cast<Meter>(), + // .SI<Meter>(), + Rim = data.RimStr, + Retarder = new RetarderData(data.Retarder, basePath), + AxleData = data.AxleConfig.Axles.Select(axle => new Axle { + Inertia = axle.Inertia.SI<KilogramSquareMeter>(), + TwinTyres = axle.TwinTyres, + RollResistanceCoefficient = axle.RollResistanceCoefficient, + AxleWeightShare = axle.AxleWeightShare, + TyreTestLoad = axle.TyreTestLoad.SI<Newton>() + }).ToList() + }; + } + } +} \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/IClutch.cs b/VectoCore/Models/SimulationComponent/IClutch.cs index 953f3f613f46ff46fb5384e0b5d09f1a97c6ee18..1ffff0489c72f4e203a1275faf39de6c61b33a67 100644 --- a/VectoCore/Models/SimulationComponent/IClutch.cs +++ b/VectoCore/Models/SimulationComponent/IClutch.cs @@ -1,6 +1,4 @@ -using TUGraz.VectoCore.Models.Connector.Ports; - -namespace TUGraz.VectoCore.Models.SimulationComponent +namespace TUGraz.VectoCore.Models.SimulationComponent { public interface IClutch : IPowerTrainComponent {} } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/ICombustionEngine.cs b/VectoCore/Models/SimulationComponent/ICombustionEngine.cs index 92b3a6fdff71f4ef399137a88e96588f00de57c1..afb7be9d04565c5011e0449135484c32649f7e32 100644 --- a/VectoCore/Models/SimulationComponent/ICombustionEngine.cs +++ b/VectoCore/Models/SimulationComponent/ICombustionEngine.cs @@ -3,8 +3,8 @@ using TUGraz.VectoCore.Models.Simulation.Cockpit; namespace TUGraz.VectoCore.Models.SimulationComponent { - /// <summary> - /// Defines Interfaces for a combustion engine. - /// </summary> - public interface ICombustionEngine : IOutShaft, IEngineCockpit {} + /// <summary> + /// Defines Interfaces for a combustion engine. + /// </summary> + public interface ICombustionEngine : IOutShaft, IEngineCockpit {} } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/IDriverDemandDrivingCycle.cs b/VectoCore/Models/SimulationComponent/IDriverDemandDrivingCycle.cs index adc97eabc495dfd4909db89ad7b6926fbb4d9de8..6d8656334e67b7e0d3e7d33c36eb9f784748c6f2 100644 --- a/VectoCore/Models/SimulationComponent/IDriverDemandDrivingCycle.cs +++ b/VectoCore/Models/SimulationComponent/IDriverDemandDrivingCycle.cs @@ -2,8 +2,8 @@ using TUGraz.VectoCore.Models.Connector.Ports; namespace TUGraz.VectoCore.Models.SimulationComponent { - /// <summary> - /// Defines interfaces for a driver demand driving cycle. - /// </summary> - public interface IDrivingCycleDemandDrivingCycle : IDrivingCycleOutProvider, IDrivingCycleDemandInProvider {} + /// <summary> + /// Defines interfaces for a driver demand driving cycle. + /// </summary> + public interface IDrivingCycleDemandDrivingCycle : IDrivingCycleOutProvider, IDrivingCycleDemandInProvider {} } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/IEngineOnlyDrivingCycle.cs b/VectoCore/Models/SimulationComponent/IEngineOnlyDrivingCycle.cs index 9d496e763db9758e023b6e38f5b1e231f6d774ff..ac196bd5fa3a0284589b41eefaf74ab871876f22 100644 --- a/VectoCore/Models/SimulationComponent/IEngineOnlyDrivingCycle.cs +++ b/VectoCore/Models/SimulationComponent/IEngineOnlyDrivingCycle.cs @@ -2,8 +2,8 @@ using TUGraz.VectoCore.Models.Connector.Ports; namespace TUGraz.VectoCore.Models.SimulationComponent { - /// <summary> - /// Defines interfaces for a engine only driving cycle. - /// </summary> - public interface IEngineOnlyDrivingCycle : IDrivingCycleOutProvider, IInShaft {} + /// <summary> + /// Defines interfaces for a engine only driving cycle. + /// </summary> + public interface IEngineOnlyDrivingCycle : IDrivingCycleOutProvider, IInShaft {} } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/IWheels.cs b/VectoCore/Models/SimulationComponent/IWheels.cs index d5727dd0f14da26a98ffa8b73ca9af944dd60457..354f551e2e3c6b595fb9d487c6ad53b791778a10 100644 --- a/VectoCore/Models/SimulationComponent/IWheels.cs +++ b/VectoCore/Models/SimulationComponent/IWheels.cs @@ -2,8 +2,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent { - /// <summary> - /// Defines interfaces for a wheels component. - /// </summary> - public interface IWheels : IRoadPortOutProvider, IInShaft {} + /// <summary> + /// Defines interfaces for a wheels component. + /// </summary> + public interface IWheels : IRoadPortOutProvider, IInShaft {} } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs index 50fb3cd68129d91a66f7c423dcd43dff27a6f864..566c50af58e714ea125f1330f68309c684e865fd 100644 --- a/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs +++ b/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Diagnostics.Contracts; -using NLog.LayoutRenderers; using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Connector.Ports.Impl; @@ -84,7 +83,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl _currentState.EnginePowerLoss = InertiaPowerLoss(torque, engineSpeed); var requestedEnginePower = requestedPower + _currentState.EnginePowerLoss; - if (engineSpeed < (double) _data.IdleSpeed - EngineIdleSpeedStopThreshold) { + if (engineSpeed < (double)_data.IdleSpeed - EngineIdleSpeedStopThreshold) { _currentState.OperationMode = EngineOperationMode.Stopped; //todo: _currentState.EnginePowerLoss = enginePowerLoss; } @@ -116,15 +115,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public override void CommitSimulationStep(IModalDataWriter writer) { - writer[ModalResultField.PaEng] = (double) _currentState.EnginePowerLoss; - writer[ModalResultField.Pe_drag] = (double) _currentState.FullDragPower; - writer[ModalResultField.Pe_full] = (double) _currentState.DynamicFullLoadPower; - writer[ModalResultField.Pe_eng] = (double) _currentState.EnginePower; + writer[ModalResultField.PaEng] = (double)_currentState.EnginePowerLoss; + writer[ModalResultField.Pe_drag] = (double)_currentState.FullDragPower; + writer[ModalResultField.Pe_full] = (double)_currentState.DynamicFullLoadPower; + writer[ModalResultField.Pe_eng] = (double)_currentState.EnginePower; - writer[ModalResultField.Tq_drag] = (double) _currentState.FullDragTorque; - writer[ModalResultField.Tq_full] = (double) _currentState.DynamicFullLoadTorque; - writer[ModalResultField.Tq_eng] = (double) _currentState.EngineTorque; - writer[ModalResultField.n] = (double) _currentState.EngineSpeed.ConvertTo().Rounds.Per.Minute; + writer[ModalResultField.Tq_drag] = (double)_currentState.FullDragTorque; + writer[ModalResultField.Tq_full] = (double)_currentState.DynamicFullLoadTorque; + writer[ModalResultField.Tq_eng] = (double)_currentState.EngineTorque; + writer[ModalResultField.n] = (double)_currentState.EngineSpeed.ConvertTo().Rounds.Per.Minute; try { writer[ModalResultField.FC] = @@ -135,7 +134,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } catch (VectoException ex) { Log.WarnFormat("t: {0} - {1} n: {2} Tq: {3}", _currentState.AbsTime.TotalSeconds, ex.Message, _currentState.EngineSpeed, _currentState.EngineTorque); - writer[ModalResultField.FC] = Double.NaN; + writer[ModalResultField.FC] = double.NaN; } _previousState = _currentState; @@ -153,11 +152,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl Contract.Requires(requestedEnginePower.HasEqualUnit(new SI().Watt)); if (_currentState.FullDragPower >= 0 && requestedEnginePower < 0) { - throw new VectoSimulationException(String.Format("t: {0} P_engine_drag > 0! n: {1} [1/min] ", + throw new VectoSimulationException(string.Format("t: {0} P_engine_drag > 0! n: {1} [1/min] ", _currentState.AbsTime, _currentState.EngineSpeed.ConvertTo().Rounds.Per.Minute)); } if (_currentState.DynamicFullLoadPower <= 0 && requestedEnginePower > 0) { - throw new VectoSimulationException(String.Format("t: {0} P_engine_full < 0! n: {1} [1/min] ", + throw new VectoSimulationException(string.Format("t: {0} P_engine_full < 0! n: {1} [1/min] ", _currentState.AbsTime, _currentState.EngineSpeed.ConvertTo().Rounds.Per.Minute)); } } @@ -360,7 +359,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public override int GetHashCode() { unchecked { - var hashCode = (int) OperationMode; + var hashCode = (int)OperationMode; hashCode = (hashCode * 397) ^ (EnginePower != null ? EnginePower.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (EngineSpeed != null ? EngineSpeed.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (EnginePowerLoss != null ? EnginePowerLoss.GetHashCode() : 0); @@ -382,7 +381,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (ReferenceEquals(this, obj)) { return true; } - return obj.GetType() == GetType() && Equals((CombustionEngine) obj); + return obj.GetType() == GetType() && Equals((CombustionEngine)obj); } protected bool Equals(CombustionEngine other) diff --git a/VectoCore/Models/SimulationComponent/Impl/DirectAuxiliary.cs b/VectoCore/Models/SimulationComponent/Impl/DirectAuxiliary.cs index 368ecfb6173dd82975299c998bf9fd1d47195832..eb7a7deddf795453ff94770361ac41ed49177a14 100644 --- a/VectoCore/Models/SimulationComponent/Impl/DirectAuxiliary.cs +++ b/VectoCore/Models/SimulationComponent/Impl/DirectAuxiliary.cs @@ -1,11 +1,10 @@ using System; -using TUGraz.VectoCore.Utils; using TUGraz.VectoCore.Exceptions; -using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Connector.Ports; +using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data; - +using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { @@ -55,7 +54,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (_outPort == null) { Log.ErrorFormat("{0} cannot handle incoming request - no outport available", absTime); throw new VectoSimulationException( - String.Format("{0} cannot handle incoming request - no outport available", + string.Format("{0} cannot handle incoming request - no outport available", absTime.TotalSeconds)); } diff --git a/VectoCore/Models/SimulationComponent/Impl/EngineOnlyGearbox.cs b/VectoCore/Models/SimulationComponent/Impl/EngineOnlyGearbox.cs index 50b9421f52c7595b79f39f4cf072af8a843999bd..d6b997ae048d5c2a834fb8f7080cb4cddbf59274 100644 --- a/VectoCore/Models/SimulationComponent/Impl/EngineOnlyGearbox.cs +++ b/VectoCore/Models/SimulationComponent/Impl/EngineOnlyGearbox.cs @@ -8,67 +8,66 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { - public class EngineOnlyGearbox : VectoSimulationComponent, IGearbox, ITnInPort, ITnOutPort - { - private ITnOutPort _outPort; - public EngineOnlyGearbox(IVehicleContainer cockpit) : base(cockpit) {} + public class EngineOnlyGearbox : VectoSimulationComponent, IGearbox, ITnInPort, ITnOutPort + { + private ITnOutPort _outPort; + public EngineOnlyGearbox(IVehicleContainer cockpit) : base(cockpit) {} - #region IInShaft + #region IInShaft - public ITnInPort InShaft() - { - return this; - } + public ITnInPort InShaft() + { + return this; + } - #endregion IOutShaft + #endregion IOutShaft - #region IOutShaft + #region IOutShaft - public ITnOutPort OutShaft() - { - return this; - } + public ITnOutPort OutShaft() + { + return this; + } - #endregion + #endregion - #region IGearboxCockpit + #region IGearboxCockpit - uint IGearboxCockpit.Gear() - { - return 0; - } + uint IGearboxCockpit.Gear() + { + return 0; + } - #endregion + #endregion - #region ITnInPort + #region ITnInPort - void ITnInPort.Connect(ITnOutPort other) - { - _outPort = other; - } + void ITnInPort.Connect(ITnOutPort other) + { + _outPort = other; + } - #endregion + #endregion + #region ITnOutPort - #region ITnOutPort + IResponse ITnOutPort.Request(TimeSpan absTime, TimeSpan dt, NewtonMeter torque, PerSecond engineSpeed) + { + if (_outPort == null) { + Log.ErrorFormat("{0} cannot handle incoming request - no outport available", absTime); + throw new VectoSimulationException( + string.Format("{0} cannot handle incoming request - no outport available", + absTime.TotalSeconds)); + } + return _outPort.Request(absTime, dt, torque, engineSpeed); + } - IResponse ITnOutPort.Request(TimeSpan absTime, TimeSpan dt, NewtonMeter torque, PerSecond engineSpeed) - { - if (_outPort == null) { - Log.ErrorFormat("{0} cannot handle incoming request - no outport available", absTime); - throw new VectoSimulationException( - String.Format("{0} cannot handle incoming request - no outport available", - absTime.TotalSeconds)); - } - return _outPort.Request(absTime, dt, torque, engineSpeed); - } + #endregion - #endregion + #region VectoSimulationComponent - #region VectoSimulationComponent + public override void CommitSimulationStep(IModalDataWriter writer) {} - public override void CommitSimulationStep(IModalDataWriter writer) {} - - #endregion - } + #endregion + } } \ No newline at end of file diff --git a/VectoCore/Models/SimulationComponent/Impl/MappingAuxiliary.cs b/VectoCore/Models/SimulationComponent/Impl/MappingAuxiliary.cs index 1182205cb286d676e8ae3e713a308cac467468ac..36425689203ff93362ad92ab08cd44948a414281 100644 --- a/VectoCore/Models/SimulationComponent/Impl/MappingAuxiliary.cs +++ b/VectoCore/Models/SimulationComponent/Impl/MappingAuxiliary.cs @@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (_outPort == null) { Log.ErrorFormat("{0} cannot handle incoming request - no outport available", absTime); throw new VectoSimulationException( - String.Format("{0} cannot handle incoming request - no outport available", + string.Format("{0} cannot handle incoming request - no outport available", absTime.TotalSeconds)); } diff --git a/VectoCore/Models/SimulationComponent/Impl/TimeBasedDrivingCycle.cs b/VectoCore/Models/SimulationComponent/Impl/TimeBasedDrivingCycle.cs index 4237148953016f6c3af6a4d66bbcb8d1f60737a3..52838a1cf5f56b4a9eb34086d7da83abd04efa4e 100644 --- a/VectoCore/Models/SimulationComponent/Impl/TimeBasedDrivingCycle.cs +++ b/VectoCore/Models/SimulationComponent/Impl/TimeBasedDrivingCycle.cs @@ -46,7 +46,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl IResponse IDrivingCycleOutPort.Request(TimeSpan absTime, TimeSpan dt) { //todo: change to variable time steps - var index = (int) Math.Floor(absTime.TotalSeconds); + var index = (int)Math.Floor(absTime.TotalSeconds); if (index >= Data.Entries.Count) { return new ResponseCycleFinished(); } diff --git a/VectoCore/Models/SimulationComponent/VectoSimulationComponent.cs b/VectoCore/Models/SimulationComponent/VectoSimulationComponent.cs index 65acf8428deac58410ac21887d05d09475c0e3da..85ae6769dd5bdf764ed13b236619d741a343fcb0 100644 --- a/VectoCore/Models/SimulationComponent/VectoSimulationComponent.cs +++ b/VectoCore/Models/SimulationComponent/VectoSimulationComponent.cs @@ -6,32 +6,32 @@ using TUGraz.VectoCore.Models.Simulation.Data; namespace TUGraz.VectoCore.Models.SimulationComponent { - /// <summary> - /// Base class for all vecto simulation components. - /// </summary> - public abstract class VectoSimulationComponent - { - [NonSerialized] protected ICockpit Cockpit; - [NonSerialized] protected ILog Log; + /// <summary> + /// Base class for all vecto simulation components. + /// </summary> + public abstract class VectoSimulationComponent + { + [NonSerialized] protected ICockpit Cockpit; + [NonSerialized] protected ILog Log; - /// <summary> - /// Constructor. Registers the component in the cockpit. - /// </summary> - /// <param name="cockpit">The vehicle container</param> - protected VectoSimulationComponent(IVehicleContainer cockpit) - { - Cockpit = cockpit; - Log = LogManager.GetLogger(GetType()); + /// <summary> + /// Constructor. Registers the component in the cockpit. + /// </summary> + /// <param name="cockpit">The vehicle container</param> + protected VectoSimulationComponent(IVehicleContainer cockpit) + { + Cockpit = cockpit; + Log = LogManager.GetLogger(GetType()); - cockpit.AddComponent(this); - } + cockpit.AddComponent(this); + } - /// <summary> - /// Commits the simulation step. - /// Writes the moddata into the data writer. - /// Commits the internal state of the object if needed. - /// </summary> - /// <param name="writer">a data writer to write the data into.</param> - public abstract void CommitSimulationStep(IModalDataWriter writer); - } + /// <summary> + /// Commits the simulation step. + /// Writes the moddata into the data writer. + /// Commits the internal state of the object if needed. + /// </summary> + /// <param name="writer">a data writer to write the data into.</param> + public abstract void CommitSimulationStep(IModalDataWriter writer); + } } \ No newline at end of file diff --git a/VectoCore/Resources/Declaration/DefaultTC.vtcc b/VectoCore/Resources/Declaration/DefaultTC.vtcc new file mode 100644 index 0000000000000000000000000000000000000000..3676a37ec28628517e45e6567f4d9bc516766ca2 --- /dev/null +++ b/VectoCore/Resources/Declaration/DefaultTC.vtcc @@ -0,0 +1,12 @@ +nue,mue,MP1000 (1000/rpm)^2*Nm +1.000,1.000,0.00 +1.005,1.000,0.00 +1.100,1.000,-40.34 +1.222,1.000,-80.34 +1.375,1.000,-136.11 +1.571,1.000,-216.52 +1.833,1.000,-335.19 +2.200,1.000,-528.77 +2.750,1.000,-883.40 +4.400,1.000,-2462.17 +11.000,1.000,-16540.98 diff --git a/VectoCore/Resources/Declaration/Rims.csv b/VectoCore/Resources/Declaration/Rims.csv index 5e73ce61cd575c9145f6db93ebeb93a8d6ec9418..520fecd325ec63331e4146481fde7255162b995e 100644 --- a/VectoCore/Resources/Declaration/Rims.csv +++ b/VectoCore/Resources/Declaration/Rims.csv @@ -1,4 +1,4 @@ -rims,F_a,F_b +rims,F(a),F(b) 5° DC Rims,3.03,3.03 15° DC Rims,3.03,3.05 Multipurpose – Radial,3,3 diff --git a/VectoCore/Resources/Declaration/SegmentTable.csv b/VectoCore/Resources/Declaration/SegmentTable.csv index ed3ff4b8c2e8b72a1d0cbb58da7af290114ba932..4321d9be28f0555ce7ea8074d8cb40feb628b9c1 100644 --- a/VectoCore/Resources/Declaration/SegmentTable.csv +++ b/VectoCore/Resources/Declaration/SegmentTable.csv @@ -1,26 +1,26 @@ -Valid,tVehCat,tAxleConf,GVW_Min,GVW_Max,HDV_Class,VACC,VCDV - Long Haul,VCDV - Other,Rigid/Truck Axles - Long haul,Rigid/Truck Axles - Other,Trailer Axles - Long haul,Trailer Axles - Other,LongHaul,RegionalDelivery,UrbanDelivery,MunicipalUtility,Construction,HeavyUrban,Urban,Suburban,Interurban,Coach,MassExtra - LongHaul,MassExtra - RegionalDelivery,MassExtra - UrbanDelivery,MassExtra - MunicipalUtility,MassExtra - Construction,MassExtra - HeavyUrban,MassExtra - Urban,MassExtra - Suburban,MassExtra - Interurban,MassExtra - Coach,RefLoad - LongHaul,RefLoad - RegionalDelivery,RefLoad - UrbanDelivery,RefLoad - MunicipalUtility,RefLoad - Construction,RefLoad - HeavyUrban,RefLoad - Urban,RefLoad - Suburban,RefLoad - Interurban,RefLoad - Coach,WHTCWF - LongHaul,WHTCWF - RegionalDelivery,WHTCWF - UrbanDelivery,WHTCWF - MunicipalUtility,WHTCWF - Construction,WHTCWF - HeavyUrban,WHTCWF - Urban,WHTCWF - Suburban,WHTCWF - Interurban,WHTCWF - Coach -0,RigidTruck,4x2,0,7.5,0,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,1,1,0,0,0,0,0,0,0,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,4x2,7.5,10,1,Truck.vacc,-,RigidSolo.vcdv,-,45/55,0/0,0/0,0,1,1,0,0,0,0,0,0,0,-,1600,1600,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,4x2,10,12,2,Truck.vacc,RigidSolo.vcdv,RigidSolo.vcdv,40/60,45/55,0/0,0/0,1,1,1,0,0,0,0,0,0,0,1900,1900,1900,-,-,-,-,-,-,-,f,f,f,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,4x2,12,16,3,Truck.vacc,-,RigidSolo.vcdv,-,40/60,0/0,0/0,0,1,1,0,0,0,0,0,0,0,-,2000,2000,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,4x2,16,99,4,Truck.vacc,RigidTrailer.vcdv,RigidSolo.vcdv,20/30,45/55,50/2,0/0,1,1,0,1,0,0,0,0,0,0,7500,2100,-,2100,-,-,-,-,-,-,14000,4400,-,4400,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,Tractor,4x2,16,99,5,Truck.vacc,TractorSemitrailer.vcdv,TractorSemitrailer.vcdv,20/25,25/25,55/3,50/3,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19300,12900,-,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,4x4,7.5,16,6,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,1,1,0,0,0,0,0,-,-,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,4x4,16,99,7,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,B5,-,-,-,-,-,-,-,-,-,4300,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Tractor,4x4,16,99,8,Truck.vacc,-,TractorSemitrailer.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,RigidTruck,6x2,0,99,9,Truck.vacc,RigidTrailer.vcdv,RigidSolo.vcdv,20/30/15,35/40/25,35/2,0/0,1,1,0,1,0,0,0,0,0,0,7600,2200,-,2200,-,-,-,-,-,-,17900,7100,-,7100,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -1,Tractor,6x2,0,99,10,Truck.vacc,TractorSemitrailer.vcdv,TractorSemitrailer.vcdv,15/10/20,20/10/20,55/2,50/2,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19000,12700,-,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,6x4,0,99,11,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,B7,-,-,-,-,-,-,-,-,-,7600,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Tractor,6x4,0,99,12,Truck.vacc,-,TractorSemitrailer.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,ST2,-,-,-,-,-,-,-,-,-,12100,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,6x6,0,99,13,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,0,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Tractor,6x6,0,99,14,Truck.vacc,-,TractorSemitrailer.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,0,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,8x2,0,99,15,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,1,0,0,0,0,0,0,0,0,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,8x4,0,99,16,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,B9,-,-,-,-,-,-,-,-,-,11600,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,8x6,0,99,17,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,RigidTruck,8x8,0,99,17,Truck.vacc,-,-,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,CityBus,4x2,0,18,B1,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,InterurbanBus,4x2,0,18,B2,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Coach,4x2,0,18,B3,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,CityBus,6x2,18,99,B4,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,InterurbanBus,6x2,18,99,B5,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 -0,Coach,6x2,18,99,B6,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +Valid,Vehicle Category ,Axle Conf.,GVW_Min,GVW_Max,HDV class,.vacc file ,Cross Wind Correction - Long haul,Cross Wind Correction - Other,Truck Axles - Long haul,Truck Axles - Other,Trailer Axles - Long haul,Trailer Axles - Other,Long haul,Regional delivery,Urban delivery,Municipal utility,Construction,Heavy Urban,Urban,Suburban,Interurban,Coach,Mass Extra - Long haul,Mass Extra - Regional delivery,Mass Extra - Urban delivery,Mass Extra - Municipal utility,Mass Extra - Construction,Mass Extra - Heavy Urban,Mass Extra - Urban,Mass Extra - Suburban,Mass Extra - Interurban,Mass Extra - Coach,Payload - Long haul,Payload - Regional delivery,Payload - Urban delivery,Payload - Municipal utility,Payload - Construction,Payload - Heavy Urban,Payload - Urban,Payload - Suburban,Payload - Interurban,Payload - Coach +0,RigidTruck,4x2,0,7.5,0,Truck.vacc,-,RigidSolo,-,-,-,-,0,1,1,0,0,0,0,0,0,0,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,-,-,- +1,RigidTruck,4x2,7.5,10,1,Truck.vacc,-,RigidSolo,-,45/55,-,-,0,1,1,0,0,0,0,0,0,0,-,1600,1600,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,- +1,RigidTruck,4x2,10,12,2,Truck.vacc,RigidSolo,RigidSolo,40/60,45/55,-,-,1,1,1,0,0,0,0,0,0,0,1900,1900,1900,-,-,-,-,-,-,-,f,f,f,-,-,-,-,-,-,- +1,RigidTruck,4x2,12,16,3,Truck.vacc,-,RigidSolo,-,40/60,-,-,0,1,1,0,0,0,0,0,0,0,-,2000,2000,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,- +1,RigidTruck,4x2,16,99,4,Truck.vacc,RigidTrailer,RigidSolo,20/30,45/55,50/2,-,1,1,0,1,0,0,0,0,0,0,7500,2100,-,2100,-,-,-,-,-,-,14000,4400,-,4400,-,-,-,-,-,- +1,Tractor,4x2,16,99,5,Truck.vacc,TractorSemitrailer,TractorSemitrailer,20/25,25/25,55/3,50/3,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19300,12900,-,-,-,-,-,-,-,- +0,RigidTruck,4x4,7.5,16,6,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,1,1,0,0,0,0,0,-,-,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,- +0,RigidTruck,4x4,16,99,7,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,Tractor,4x4,16,99,8,Truck.vacc,-,TractorSemitrailer,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +1,RigidTruck,6x2,0,99,9,Truck.vacc,RigidTrailer,RigidSolo,20/30/15,35/40/25,35/2,-,1,1,0,1,0,0,0,0,0,0,7600,2200,-,2200,-,-,-,-,-,-,19300,7100,-,7100,-,-,-,-,-,- +1,Tractor,6x2,0,99,10,Truck.vacc,TractorSemitrailer,TractorSemitrailer,15/10/20,20/10/20,55/2,50/2,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19300,12900,-,-,-,-,-,-,-,- +0,RigidTruck,6x4,0,99,11,Truck.vacc,-,RigidSolo,-,35/35/30,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,7100,-,-,-,-,- +0,Tractor,6x4,0,99,12,Truck.vacc,-,TractorSemitrailer,-,20/15/15,-,50/2,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,12900,-,-,-,-,- +0,RigidTruck,6x6,0,99,13,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,Tractor,6x6,0,99,14,Truck.vacc,-,TractorSemitrailer,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,RigidTruck,8x2,0,99,15,Truck.vacc,-,RigidSolo,-,-,-,-,0,1,0,0,0,0,0,0,0,0,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,- +0,RigidTruck,8x4,0,99,16,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,12900,-,-,-,-,- +0,RigidTruck,8x6,0,99,17,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,RigidTruck,8x8,0,99,17,Truck.vacc,-,RigidSolo,-,-,-,-,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,- +0,CityBus,4x2,0,18,B1,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,- +0,InterurbanBus,4x2,0,18,B2,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,- +0,Coach,4x2,0,18,B3,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,??? +0,CityBus,6x2,18,99,B4,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,- +0,InterurbanBus,6x2,18,99,B5,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,- +0,Coach,6x2,18,99,B6,N/A,-,CoachBus,-,-,-,-,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,??? diff --git a/VectoCore/Resources/Declaration/VAUX/PS-Table.csv b/VectoCore/Resources/Declaration/VAUX/PS-Table.csv index 312d745fc19dabebae8bb2e04521b6cd78a8d336..cfbb35d7d3419cd95deb26a7da171ac279823eb3 100644 --- a/VectoCore/Resources/Declaration/VAUX/PS-Table.csv +++ b/VectoCore/Resources/Declaration/VAUX/PS-Table.csv @@ -1,13 +1,13 @@ HDV Class / Power,Long haul,Regional delivery,Urban delivery,Municipal utility,Construction,Heavy Urban,Urban,Suburban,Interurban,Coach -1,0,1.3,1.24,0,0,0,0,0,0,0 -2,1.18,1.28,1.32,0,0,0,0,0,0,0 -3,0,1.36,1.38,0,0,0,0,0,0,0 -4,1.3,1.34,0,0,0,0,0,0,0,0 -5,1.34,1.82,0,0,0,0,0,0,0,0 -6,0,0,0,0,0,0,0,0,0,0 -7,0,0,0,0,0,0,0,0,0,0 -8,0,0,0,0,0,0,0,0,0,0 -9,1.34,1.54,0,0,0,0,0,0,0,0 -10,1.34,1.82,0,0,0,0,0,0,0,0 -11,0,0,0,0,0,0,0,0,0,0 -12,0,0,0,0,0,0,0,0,0,0 +1,0.0,1300.0,1240.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +2,1180.0,1280.0,1320.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +3,0.0,1360.0,1380.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +4,1300.0,1340.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +5,1340.0,1820.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +6,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +7,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +9,1340.0,1540.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +10,1340.0,1820.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +11,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +12,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 diff --git a/VectoCore/Resources/Declaration/VCDV/CoachBus.vcdv b/VectoCore/Resources/Declaration/VCDV/CoachBus.vcdv deleted file mode 100644 index 39a23feda955735a6a80ec920e23e4a083236708..0000000000000000000000000000000000000000 --- a/VectoCore/Resources/Declaration/VCDV/CoachBus.vcdv +++ /dev/null @@ -1,27 +0,0 @@ -# Crosswind influence on CdxA as a function of vehicle speed -# Vehicle category: coach bus -# Absolute yaw angle influence from ACEA Whitebook April 2014 -# Average crosswind: 3 m/s -# Baseline CdxA assumed with: 4.68 [m�] -v_veh [km/h],cdx_rel [-] -0,1.16368917057624 -5,1.16368917057624 -10,1.16368917057624 -15,1.16368917057624 -20,1.16368917057624 -25,1.16368917057624 -30,1.16368917057624 -35,1.16368917057624 -40,1.16368917057624 -45,1.16368917057624 -50,1.16368917057624 -55,1.16368917057624 -60,1.16368917057624 -65,1.14636945173252 -70,1.13130108969249 -75,1.11820564231065 -80,1.10682947645795 -85,1.09694460329622 -90,1.08828107916225 -95,1.08068278133074 -100,1.07400028829548 diff --git a/VectoCore/Resources/Declaration/VCDV/RigidSolo.vcdv b/VectoCore/Resources/Declaration/VCDV/RigidSolo.vcdv deleted file mode 100644 index 934c3e582527884496e7e091a521ab55ba2e10bf..0000000000000000000000000000000000000000 --- a/VectoCore/Resources/Declaration/VCDV/RigidSolo.vcdv +++ /dev/null @@ -1,27 +0,0 @@ -# Crosswind influence on CdxA as a function of vehicle speed -# Vehicle category: rigid solo -# Absolute yaw angle influence from ACEA Whitebook April 2014 -# Average crosswind: 3 m/s -# Baseline CdxA assumed with: 5.3 [m�] -v_veh [km/h],cdx_rel (v_veh) [-] -0,1.16995889058525 -5,1.16995889058525 -10,1.16995889058525 -15,1.16995889058525 -20,1.16995889058525 -25,1.16995889058525 -30,1.16995889058525 -35,1.16995889058525 -40,1.16995889058525 -45,1.16995889058525 -50,1.16995889058525 -55,1.16995889058525 -60,1.16995889058525 -65,1.14969968431834 -70,1.13284015316129 -75,1.11867388752005 -80,1.10667545890928 -85,1.09644348982345 -90,1.08762853580613 -95,1.07999428002092 -100,1.07334468074717 diff --git a/VectoCore/Resources/Declaration/VCDV/RigidTrailer.vcdv b/VectoCore/Resources/Declaration/VCDV/RigidTrailer.vcdv deleted file mode 100644 index 205473b64f696c4117669451ea1cbd9321a4a0c2..0000000000000000000000000000000000000000 --- a/VectoCore/Resources/Declaration/VCDV/RigidTrailer.vcdv +++ /dev/null @@ -1,27 +0,0 @@ -# Crosswind influence on CdxA as a function of vehicle speed -# Vehicle category: rigid trailer -# Absolute yaw angle influence from ACEA Whitebook April 2014 -# Average crosswind: 3 m/s -# Baseline CdxA assumed with: 6.33 [m�] -v_veh [km/h],cdx_rel (v_veh) [-] -0,1.35547110023335 -5,1.35547110023335 -10,1.35547110023335 -15,1.35547110023335 -20,1.35547110023335 -25,1.35547110023335 -30,1.35547110023335 -35,1.35547110023335 -40,1.35547110023335 -45,1.35547110023335 -50,1.35547110023335 -55,1.35547110023335 -60,1.35547110023335 -65,1.32382413546552 -70,1.29486615012693 -75,1.26877023747113 -80,1.24548620694966 -85,1.22484426801493 -90,1.20642747216762 -95,1.19005025706557 -100,1.17548319913321 diff --git a/VectoCore/Resources/Declaration/VCDV/TractorSemitrailer.vcdv b/VectoCore/Resources/Declaration/VCDV/TractorSemitrailer.vcdv deleted file mode 100644 index 50cfff436b7dfae4677e65b86ed30f12e59f9136..0000000000000000000000000000000000000000 --- a/VectoCore/Resources/Declaration/VCDV/TractorSemitrailer.vcdv +++ /dev/null @@ -1,27 +0,0 @@ -# Crosswind influence on CdxA as a function of vehicle speed -# Vehicle category: tractor semitrailer -# Absolute yaw angle influence from ACEA Whitebook April 2014 -# Average crosswind: 3 m/s -# Baseline CdxA assumed with: 5.7 [m�] -v_veh [km/h],cdx_rel [-] -0,1.27614894491372 -5,1.27614894491372 -10,1.27614894491372 -15,1.27614894491372 -20,1.27614894491372 -25,1.27614894491372 -30,1.27614894491372 -35,1.27614894491372 -40,1.27614894491372 -45,1.27614894491372 -50,1.27614894491372 -55,1.27614894491372 -60,1.27614894491372 -65,1.24890735180796 -70,1.22499288657568 -75,1.20405384590645 -80,1.18574578066132 -85,1.1697448123524 -90,1.15564641074318 -95,1.14321982822533 -100,1.13223910374519 diff --git a/VectoCore/Resources/Declaration/VCDV/parameters.csv b/VectoCore/Resources/Declaration/VCDV/parameters.csv new file mode 100644 index 0000000000000000000000000000000000000000..7a6e9b270ebc04b4494ded8c808d2c6369cb4fca --- /dev/null +++ b/VectoCore/Resources/Declaration/VCDV/parameters.csv @@ -0,0 +1,6 @@ +Parameters,a1,a2,a3 +RigidSolo,0.013526,0.017746,-0.000666 +RigidTrailer,0.017125,0.072275,-0.004148 +TractorSemitrailer,0.034767,0.039367,-0.001897 +CoachBus,-0.000794,0.02109,-0.00109 + diff --git a/VectoCore/Resources/Declaration/WHTC-Weighting-Factors.csv b/VectoCore/Resources/Declaration/WHTC-Weighting-Factors.csv new file mode 100644 index 0000000000000000000000000000000000000000..81c75304eeeb49814de180818545548f043882c4 --- /dev/null +++ b/VectoCore/Resources/Declaration/WHTC-Weighting-Factors.csv @@ -0,0 +1,4 @@ +Part,Long haul,Regional delivery,Urban delivery,Municipal utility,Construction,Heavy Urban,Urban,Suburban,Interurban,Coach +Urban,0.11,0.17,0.69,0.98,0.62,1.0,1.0,1.0,0.45,0.0 +Rural,0.0,0.3,0.27,0.0,0.32,0.0,0.0,0.0,0.36,0.22 +Motorway,0.89,0.53,0.04,0.02,0.06,0.0,0.0,0.0,0.19,0.78 diff --git a/VectoCore/Resources/Declaration/WHTC.csv b/VectoCore/Resources/Declaration/WHTC.csv new file mode 100644 index 0000000000000000000000000000000000000000..127fab777ee44c985d3ab5ce9078bbe8d0c8d336 --- /dev/null +++ b/VectoCore/Resources/Declaration/WHTC.csv @@ -0,0 +1,1802 @@ +# Normalized WHTC +time [s],n_norm,T_norm +1,0,0 +2,0,0 +3,0,0 +4,0,0 +5,0,0 +6,0,0 +7,1.5,8.9 +8,15.8,30.9 +9,27.4,1.3 +10,32.6,0.7 +11,34.8,1.2 +12,36.2,7.4 +13,37.1,6.2 +14,37.9,10.2 +15,39.6,12.3 +16,42.3,12.5 +17,45.3,12.6 +18,48.6,6 +19,40.8,0 +20,33,16.3 +21,42.5,27.4 +22,49.3,26.7 +23,54,18 +24,57.1,12.9 +25,58.9,8.6 +26,59.3,6 +27,59,4.9 +28,57.9,-1 +29,55.7,-1 +30,52.1,-1 +31,46.4,-1 +32,38.6,-1 +33,29,-1 +34,20.8,-1 +35,16.9,-1 +36,16.9,42.5 +37,18.8,38.4 +38,20.7,32.9 +39,21,0 +40,19.1,0 +41,13.7,0 +42,2.2,0 +43,0,0 +44,0,0 +45,0,0 +46,0,0 +47,0,0 +48,0,0 +49,0,0 +50,0,13.1 +51,13.1,30.1 +52,26.3,25.5 +53,35,32.2 +54,41.7,14.3 +55,42.2,0 +56,42.8,11.6 +57,51,20.9 +58,60,9.6 +59,49.4,0 +60,38.9,16.6 +61,43.4,30.8 +62,49.4,14.2 +63,40.5,0 +64,31.5,43.5 +65,36.6,78.2 +66,40.8,67.6 +67,44.7,59.1 +68,48.3,52 +69,51.9,63.8 +70,54.7,27.9 +71,55.3,18.3 +72,55.1,16.3 +73,54.8,11.1 +74,54.7,11.5 +75,54.8,17.5 +76,55.6,18 +77,57,14.1 +78,58.1,7 +79,43.3,0 +80,28.5,25 +81,30.4,47.8 +82,32.1,39.2 +83,32.7,39.3 +84,32.4,17.3 +85,31.6,11.4 +86,31.1,10.2 +87,31.1,19.5 +88,31.4,22.5 +89,31.6,22.9 +90,31.6,24.3 +91,31.9,26.9 +92,32.4,30.6 +93,32.8,32.7 +94,33.7,32.5 +95,34.4,29.5 +96,34.3,26.5 +97,34.4,24.7 +98,35,24.9 +99,35.6,25.2 +100,36.1,24.8 +101,36.3,24 +102,36.2,23.6 +103,36.2,23.5 +104,36.8,22.7 +105,37.2,20.9 +106,37,19.2 +107,36.3,18.4 +108,35.4,17.6 +109,35.2,14.9 +110,35.4,9.9 +111,35.5,4.3 +112,35.2,6.6 +113,34.9,10 +114,34.7,25.1 +115,34.4,29.3 +116,34.5,20.7 +117,35.2,16.6 +118,35.8,16.2 +119,35.6,20.3 +120,35.3,22.5 +121,35.3,23.4 +122,34.7,11.9 +123,45.5,0 +124,56.3,-1 +125,46.2,-1 +126,50.1,0 +127,54,-1 +128,40.5,-1 +129,27,-1 +130,13.5,-1 +131,0,0 +132,0,0 +133,0,0 +134,0,0 +135,0,0 +136,0,0 +137,0,0 +138,0,0 +139,0,0 +140,0,0 +141,0,0 +142,0,4.9 +143,0,7.3 +144,4.4,28.7 +145,11.1,26.4 +146,15,9.4 +147,15.9,0 +148,15.3,0 +149,14.2,0 +150,13.2,0 +151,11.6,0 +152,8.4,0 +153,5.4,0 +154,4.3,5.6 +155,5.8,24.4 +156,9.7,20.7 +157,13.6,21.1 +158,15.6,21.5 +159,16.5,21.9 +160,18,22.3 +161,21.1,46.9 +162,25.2,33.6 +163,28.1,16.6 +164,28.8,7 +165,27.5,5 +166,23.1,3 +167,16.9,1.9 +168,12.2,2.6 +169,9.9,3.2 +170,9.1,4 +171,8.8,3.8 +172,8.5,12.2 +173,8.2,29.4 +174,9.6,20.1 +175,14.7,16.3 +176,24.5,8.7 +177,39.4,3.3 +178,39,2.9 +179,38.5,5.9 +180,42.4,8 +181,38.2,6 +182,41.4,3.8 +183,44.6,5.4 +184,38.8,8.2 +185,37.5,8.9 +186,35.4,7.3 +187,28.4,7 +188,14.8,7 +189,0,5.9 +190,0,0 +191,0,0 +192,0,0 +193,0,0 +194,0,0 +195,0,0 +196,0,0 +197,0,0 +198,0,0 +199,0,0 +200,0,0 +201,0,0 +202,0,0 +203,0,0 +204,0,0 +205,0,0 +206,0,0 +207,0,0 +208,0,0 +209,0,0 +210,0,0 +211,0,0 +212,0,0 +213,0,0 +214,0,0 +215,0,0 +216,0,0 +217,0,0 +218,0,0 +219,0,0 +220,0,0 +221,0,0 +222,0,0 +223,0,0 +224,0,0 +225,0,0 +226,0,0 +227,0,0 +228,0,0 +229,0,0 +230,0,0 +231,0,0 +232,0,0 +233,0,0 +234,0,0 +235,0,0 +236,0,0 +237,0,0 +238,0,0 +239,0,0 +240,0,0 +241,0,0 +242,0,0 +243,0,0 +244,0,0 +245,0,0 +246,0,0 +247,0,0 +248,0,0 +249,0,0 +250,0,0 +251,0,0 +252,0,0 +253,0,31.6 +254,9.4,13.6 +255,22.2,16.9 +256,33,53.5 +257,43.7,22.1 +258,39.8,0 +259,36,45.7 +260,47.6,75.9 +261,61.2,70.4 +262,72.3,70.4 +263,76,-1 +264,74.3,-1 +265,68.5,-1 +266,61,-1 +267,56,-1 +268,54,-1 +269,53,-1 +270,50.8,-1 +271,46.8,-1 +272,41.7,-1 +273,35.9,-1 +274,29.2,-1 +275,20.7,-1 +276,10.1,-1 +277,0,-1 +278,0,0 +279,0,0 +280,0,0 +281,0,0 +282,0,0 +283,0,0 +284,0,0 +285,0,0 +286,0,0 +287,0,0 +288,0,0 +289,0,0 +290,0,0 +291,0,0 +292,0,0 +293,0,0 +294,0,0 +295,0,0 +296,0,0 +297,0,0 +298,0,0 +299,0,0 +300,0,0 +301,0,0 +302,0,0 +303,0,0 +304,0,0 +305,0,0 +306,0,0 +307,0,0 +308,0,0 +309,0,0 +310,0,0 +311,0,0 +312,0,0 +313,0,0 +314,0,0 +315,0,0 +316,0,0 +317,0,0 +318,0,0 +319,0,0 +320,0,0 +321,0,0 +322,0,0 +323,0,0 +324,4.5,41 +325,17.2,38.9 +326,30.1,36.8 +327,41,34.7 +328,50,32.6 +329,51.4,0.1 +330,47.8,-1 +331,40.2,-1 +332,32,-1 +333,24.4,-1 +334,16.8,-1 +335,8.1,-1 +336,0,-1 +337,0,0 +338,0,0 +339,0,0 +340,0,0 +341,0,0 +342,0,0 +343,0,0 +344,0,0 +345,0,0 +346,0,0 +347,0,0 +348,0,0 +349,0,0 +350,0,0 +351,0,0 +352,0,0 +353,0,0 +354,0,0.5 +355,0,4.9 +356,9.2,61.3 +357,22.4,40.4 +358,36.5,50.1 +359,47.7,21 +360,38.8,0 +361,30,37 +362,37,63.6 +363,45.5,90.8 +364,54.5,40.9 +365,45.9,0 +366,37.2,47.5 +367,44.5,84.4 +368,51.7,32.4 +369,58.1,15.2 +370,45.9,0 +371,33.6,35.8 +372,36.9,67 +373,40.2,84.7 +374,43.4,84.3 +375,45.7,84.3 +376,46.5,-1 +377,46.1,-1 +378,43.9,-1 +379,39.3,-1 +380,47,-1 +381,54.6,-1 +382,62,-1 +383,52,-1 +384,43,-1 +385,33.9,-1 +386,28.4,-1 +387,25.5,-1 +388,24.6,11 +389,25.2,14.7 +390,28.6,28.4 +391,35.5,65 +392,43.8,75.3 +393,51.2,34.2 +394,40.7,0 +395,30.3,45.4 +396,34.2,83.1 +397,37.6,85.3 +398,40.8,87.5 +399,44.8,89.7 +400,50.6,91.9 +401,57.6,94.1 +402,64.6,44.6 +403,51.6,0 +404,38.7,37.4 +405,42.4,70.3 +406,46.5,89.1 +407,50.6,93.9 +408,53.8,33 +409,55.5,20.3 +410,55.8,5.2 +411,55.4,-1 +412,54.4,-1 +413,53.1,-1 +414,51.8,-1 +415,50.3,-1 +416,48.4,-1 +417,45.9,-1 +418,43.1,-1 +419,40.1,-1 +420,37.4,-1 +421,35.1,-1 +422,32.8,-1 +423,45.3,0 +424,57.8,-1 +425,50.6,-1 +426,41.6,-1 +427,47.9,0 +428,54.2,-1 +429,48.1,-1 +430,47,31.3 +431,49,38.3 +432,52,40.1 +433,53.3,14.5 +434,52.6,0.8 +435,49.8,-1 +436,51,18.6 +437,56.9,38.9 +438,67.2,45 +439,78.6,21.5 +440,65.5,0 +441,52.4,31.3 +442,56.4,60.1 +443,59.7,29.2 +444,45.1,0 +445,30.6,4.2 +446,30.9,8.4 +447,30.5,4.3 +448,44.6,0 +449,58.8,-1 +450,55.1,-1 +451,50.6,-1 +452,45.3,-1 +453,39.3,-1 +454,49.1,0 +455,58.8,-1 +456,50.7,-1 +457,42.4,-1 +458,44.1,0 +459,45.7,-1 +460,32.5,-1 +461,20.7,-1 +462,10,-1 +463,0,0 +464,0,1.5 +465,0.9,41.1 +466,7,46.3 +467,12.8,48.5 +468,17,50.7 +469,20.9,52.9 +470,26.7,55 +471,35.5,57.2 +472,46.9,23.8 +473,44.5,0 +474,42.1,45.7 +475,55.6,77.4 +476,68.8,100 +477,81.7,47.9 +478,71.2,0 +479,60.7,38.3 +480,68.8,72.7 +481,75,-1 +482,61.3,-1 +483,53.5,-1 +484,45.9,58 +485,48.1,80 +486,49.4,97.9 +487,49.7,-1 +488,48.7,-1 +489,45.5,-1 +490,40.4,-1 +491,49.7,0 +492,59,-1 +493,48.9,-1 +494,40,-1 +495,33.5,-1 +496,30,-1 +497,29.1,12 +498,29.3,40.4 +499,30.4,29.3 +500,32.2,15.4 +501,33.9,15.8 +502,35.3,14.9 +503,36.4,15.1 +504,38,15.3 +505,40.3,50.9 +506,43,39.7 +507,45.5,20.6 +508,47.3,20.6 +509,48.8,22.1 +510,50.1,22.1 +511,51.4,42.4 +512,52.5,31.9 +513,53.7,21.6 +514,55.1,11.6 +515,56.8,5.7 +516,42.4,0 +517,27.9,8.2 +518,29,15.9 +519,30.4,25.1 +520,32.6,60.5 +521,35.4,72.7 +522,38.4,88.2 +523,41,65.1 +524,42.9,25.6 +525,44.2,15.8 +526,44.9,2.9 +527,45.1,-1 +528,44.8,-1 +529,43.9,-1 +530,42.4,-1 +531,40.2,-1 +532,37.1,-1 +533,47,0 +534,57,-1 +535,45.1,-1 +536,32.6,-1 +537,46.8,0 +538,61.5,-1 +539,56.7,-1 +540,46.9,-1 +541,37.5,-1 +542,30.3,-1 +543,27.3,32.3 +544,30.8,60.3 +545,41.2,62.3 +546,36,0 +547,30.8,32.3 +548,33.9,60.3 +549,34.6,38.4 +550,37,16.6 +551,42.7,62.3 +552,50.4,28.1 +553,40.1,0 +554,29.9,8 +555,32.5,15 +556,34.6,63.1 +557,36.7,58 +558,39.4,52.9 +559,42.8,47.8 +560,46.8,42.7 +561,50.7,27.5 +562,53.4,20.7 +563,54.2,13.1 +564,54.2,0.4 +565,53.4,0 +566,51.4,-1 +567,48.7,-1 +568,45.6,-1 +569,42.4,-1 +570,40.4,-1 +571,39.8,5.8 +572,40.7,39.7 +573,43.8,37.1 +574,48.1,39.1 +575,52,22 +576,54.7,13.2 +577,56.4,13.2 +578,57.5,6.6 +579,42.6,0 +580,27.7,10.9 +581,28.5,21.3 +582,29.2,23.9 +583,29.5,15.2 +584,29.7,8.8 +585,30.4,20.8 +586,31.9,22.9 +587,34.3,61.4 +588,37.2,76.6 +589,40.1,27.5 +590,42.3,25.4 +591,43.5,32 +592,43.8,6 +593,43.5,-1 +594,42.8,-1 +595,41.7,-1 +596,40.4,-1 +597,39.3,-1 +598,38.9,12.9 +599,39,18.4 +600,39.7,39.2 +601,41.4,60 +602,43.7,54.5 +603,46.2,64.2 +604,48.8,73.3 +605,51,82.3 +606,52.1,0 +607,52,-1 +608,50.9,-1 +609,49.4,-1 +610,47.8,-1 +611,46.6,-1 +612,47.3,35.3 +613,49.2,74.1 +614,51.1,95.2 +615,51.7,-1 +616,50.8,-1 +617,47.3,-1 +618,41.8,-1 +619,36.4,-1 +620,30.9,-1 +621,25.5,37.1 +622,33.8,38.4 +623,42.1,-1 +624,34.1,-1 +625,33,37.1 +626,36.4,38.4 +627,43.3,17.1 +628,35.7,0 +629,28.1,11.6 +630,36.5,19.2 +631,45.2,8.3 +632,36.5,0 +633,27.9,32.6 +634,31.5,59.6 +635,34.4,65.2 +636,37,59.6 +637,39,49 +638,40.2,-1 +639,39.8,-1 +640,36,-1 +641,29.7,-1 +642,21.5,-1 +643,14.1,-1 +644,0,0 +645,0,0 +646,0,0 +647,0,0 +648,0,0 +649,0,0 +650,0,0 +651,0,0 +652,0,0 +653,0,0 +654,0,0 +655,0,0 +656,0,3.4 +657,1.4,22 +658,10.1,45.3 +659,21.5,10 +660,32.2,0 +661,42.3,46 +662,57.1,74.1 +663,72.1,34.2 +664,66.9,0 +665,60.4,41.8 +666,69.1,79 +667,77.1,38.3 +668,63.1,0 +669,49.1,47.9 +670,53.4,91.3 +671,57.5,85.7 +672,61.5,89.2 +673,65.5,85.9 +674,69.5,89.5 +675,73.1,75.5 +676,76.2,73.6 +677,79.1,75.6 +678,81.8,78.2 +679,84.1,39 +680,69.6,0 +681,55,25.2 +682,55.8,49.9 +683,56.7,46.4 +684,57.6,76.3 +685,58.4,92.7 +686,59.3,99.9 +687,60.1,95 +688,61,46.7 +689,46.6,0 +690,32.3,34.6 +691,32.7,68.6 +692,32.6,67 +693,31.3,-1 +694,28.1,-1 +695,43,0 +696,58,-1 +697,58.9,-1 +698,49.4,-1 +699,41.5,-1 +700,48.4,0 +701,55.3,-1 +702,41.8,-1 +703,31.6,-1 +704,24.6,-1 +705,15.2,-1 +706,7,-1 +707,0,0 +708,0,0 +709,0,0 +710,0,0 +711,0,0 +712,0,0 +713,0,0 +714,0,0 +715,0,0 +716,0,0 +717,0,0 +718,0,0 +719,0,0 +720,0,0 +721,0,0 +722,0,0 +723,0,0 +724,0,0 +725,0,0 +726,0,0 +727,0,0 +728,0,0 +729,0,0 +730,0,0 +731,0,0 +732,0,0 +733,0,0 +734,0,0 +735,0,0 +736,0,0 +737,0,0 +738,0,0 +739,0,0 +740,0,0 +741,0,0 +742,0,0 +743,0,0 +744,0,0 +745,0,0 +746,0,0 +747,0,0 +748,0,0 +749,0,0 +750,0,0 +751,0,0 +752,0,0 +753,0,0 +754,0,0 +755,0,0 +756,0,0 +757,0,0 +758,0,0 +759,0,0 +760,0,0 +761,0,0 +762,0,0 +763,0,0 +764,0,0 +765,0,0 +766,0,0 +767,0,0 +768,0,0 +769,0,0 +770,0,0 +771,0,22 +772,4.5,25.8 +773,15.5,42.8 +774,30.5,46.8 +775,45.5,29.3 +776,49.2,13.6 +777,39.5,0 +778,29.7,15.1 +779,34.8,26.9 +780,40,13.6 +781,42.2,-1 +782,42.1,-1 +783,40.8,-1 +784,37.7,37.6 +785,47,35 +786,48.8,33.4 +787,41.7,-1 +788,27.7,-1 +789,17.2,-1 +790,14,37.6 +791,18.4,25 +792,27.6,17.7 +793,39.8,6.8 +794,34.3,0 +795,28.7,26.5 +796,41.5,40.9 +797,53.7,17.5 +798,42.4,0 +799,31.2,27.3 +800,32.3,53.2 +801,34.5,60.6 +802,37.6,68 +803,41.2,75.4 +804,45.8,82.8 +805,52.3,38.2 +806,42.5,0 +807,32.6,30.5 +808,35,57.9 +809,36,77.3 +810,37.1,96.8 +811,39.6,80.8 +812,43.4,78.3 +813,47.2,73.4 +814,49.6,66.9 +815,50.2,62 +816,50.2,57.7 +817,50.6,62.1 +818,52.3,62.9 +819,54.8,37.5 +820,57,18.3 +821,42.3,0 +822,27.6,29.1 +823,28.4,57 +824,29.1,51.8 +825,29.6,35.3 +826,29.7,33.3 +827,29.8,17.7 +828,29.5,-1 +829,28.9,-1 +830,43,0 +831,57.1,-1 +832,57.7,-1 +833,56,-1 +834,53.8,-1 +835,51.2,-1 +836,48.1,-1 +837,44.5,-1 +838,40.9,-1 +839,38.1,-1 +840,37.2,42.7 +841,37.5,70.8 +842,39.1,48.6 +843,41.3,0.1 +844,42.3,-1 +845,42,-1 +846,40.8,-1 +847,38.6,-1 +848,35.5,-1 +849,32.1,-1 +850,29.6,-1 +851,28.8,39.9 +852,29.2,52.9 +853,30.9,76.1 +854,34.3,76.5 +855,38.3,75.5 +856,42.5,74.8 +857,46.6,74.2 +858,50.7,76.2 +859,54.8,75.1 +860,58.7,36.3 +861,45.2,0 +862,31.8,37.2 +863,33.8,71.2 +864,35.5,46.4 +865,36.6,33.6 +866,37.2,20 +867,37.2,-1 +868,37,-1 +869,36.6,-1 +870,36,-1 +871,35.4,-1 +872,34.7,-1 +873,34.1,-1 +874,33.6,-1 +875,33.3,-1 +876,33.1,-1 +877,32.7,-1 +878,31.4,-1 +879,45,0 +880,58.5,-1 +881,53.7,-1 +882,47.5,-1 +883,40.6,-1 +884,34.1,-1 +885,45.3,0 +886,56.4,-1 +887,51,-1 +888,44.5,-1 +889,36.4,-1 +890,26.6,-1 +891,20,-1 +892,13.3,-1 +893,6.7,-1 +894,0,0 +895,0,0 +896,0,0 +897,0,0 +898,0,0 +899,0,0 +900,0,0 +901,0,5.8 +902,2.5,27.9 +903,12.4,29 +904,19.4,30.1 +905,29.3,31.2 +906,37.1,10.4 +907,40.6,4.9 +908,35.8,0 +909,30.9,7.6 +910,35.4,13.8 +911,36.5,11.1 +912,40.8,48.5 +913,49.8,3.7 +914,41.2,0 +915,32.7,29.7 +916,39.4,52.1 +917,48.8,22.7 +918,41.6,0 +919,34.5,46.6 +920,39.7,84.4 +921,44.7,83.2 +922,49.5,78.9 +923,52.3,83.8 +924,53.4,77.7 +925,52.1,69.6 +926,47.9,63.6 +927,46.4,55.2 +928,46.5,53.6 +929,46.4,62.3 +930,46.1,58.2 +931,46.2,61.8 +932,47.3,62.3 +933,49.3,57.1 +934,52.6,58.1 +935,56.3,56 +936,59.9,27.2 +937,45.8,0 +938,31.8,28.8 +939,32.7,56.5 +940,33.4,62.8 +941,34.6,68.2 +942,35.8,68.6 +943,38.6,65 +944,42.3,61.9 +945,44.1,65.3 +946,45.3,63.2 +947,46.5,30.6 +948,46.7,11.1 +949,45.9,16.1 +950,45.6,21.8 +951,45.9,24.2 +952,46.5,24.7 +953,46.7,24.7 +954,46.8,28.2 +955,47.2,31.2 +956,47.6,29.6 +957,48.2,31.2 +958,48.6,33.5 +959,48.8,-1 +960,47.6,-1 +961,46.3,-1 +962,45.2,-1 +963,43.5,-1 +964,41.4,-1 +965,40.3,-1 +966,39.4,-1 +967,38,-1 +968,36.3,-1 +969,35.3,5.8 +970,35.4,30.2 +971,36.6,55.6 +972,38.6,48.5 +973,39.9,41.8 +974,40.3,38.2 +975,40.8,35 +976,41.9,32.4 +977,43.2,26.4 +978,43.5,-1 +979,42.9,-1 +980,41.5,-1 +981,40.9,-1 +982,40.5,-1 +983,39.5,-1 +984,38.3,-1 +985,36.9,-1 +986,35.4,-1 +987,34.5,-1 +988,33.9,-1 +989,32.6,-1 +990,30.9,-1 +991,29.9,-1 +992,29.2,-1 +993,44.1,0 +994,59.1,-1 +995,56.8,-1 +996,53.5,-1 +997,47.8,-1 +998,41.9,-1 +999,35.9,-1 +1000,44.3,0 +1001,52.6,-1 +1002,43.4,-1 +1003,50.6,0 +1004,57.8,-1 +1005,51.6,-1 +1006,44.8,-1 +1007,48.6,0 +1008,52.4,-1 +1009,45.4,-1 +1010,37.2,-1 +1011,26.3,-1 +1012,17.9,-1 +1013,16.2,1.9 +1014,17.8,7.5 +1015,25.2,18 +1016,39.7,6.5 +1017,38.6,0 +1018,37.4,5.4 +1019,43.4,9.7 +1020,46.9,15.7 +1021,52.5,13.1 +1022,56.2,6.3 +1023,44,0 +1024,31.8,20.9 +1025,38.7,36.3 +1026,47.7,47.5 +1027,54.5,22 +1028,41.3,0 +1029,28.1,26.8 +1030,31.6,49.2 +1031,34.5,39.5 +1032,36.4,24 +1033,36.7,-1 +1034,35.5,-1 +1035,33.8,-1 +1036,33.7,19.8 +1037,35.3,35.1 +1038,38,33.9 +1039,40.1,34.5 +1040,42.2,40.4 +1041,45.2,44 +1042,48.3,35.9 +1043,50.1,29.6 +1044,52.3,38.5 +1045,55.3,57.7 +1046,57,50.7 +1047,57.7,25.2 +1048,42.9,0 +1049,28.2,15.7 +1050,29.2,30.5 +1051,31.1,52.6 +1052,33.4,60.7 +1053,35,61.4 +1054,35.3,18.2 +1055,35.2,14.9 +1056,34.9,11.7 +1057,34.5,12.9 +1058,34.1,15.5 +1059,33.5,-1 +1060,31.8,-1 +1061,30.1,-1 +1062,29.6,10.3 +1063,30,26.5 +1064,31,18.8 +1065,31.5,26.5 +1066,31.7,-1 +1067,31.5,-1 +1068,30.6,-1 +1069,30,-1 +1070,30,-1 +1071,29.4,-1 +1072,44.3,0 +1073,59.2,-1 +1074,58.3,-1 +1075,57.1,-1 +1076,55.4,-1 +1077,53.5,-1 +1078,51.5,-1 +1079,49.7,-1 +1080,47.9,-1 +1081,46.4,-1 +1082,45.5,-1 +1083,45.2,-1 +1084,44.3,-1 +1085,43.6,-1 +1086,43.1,-1 +1087,42.5,25.6 +1088,43.3,25.7 +1089,46.3,24 +1090,47.8,20.6 +1091,47.2,3.8 +1092,45.6,4.4 +1093,44.6,4.1 +1094,44.1,-1 +1095,42.9,-1 +1096,40.9,-1 +1097,39.2,-1 +1098,37,-1 +1099,35.1,2 +1100,35.6,43.3 +1101,38.7,47.6 +1102,41.3,40.4 +1103,42.6,45.7 +1104,43.9,43.3 +1105,46.9,41.2 +1106,52.4,40.1 +1107,56.3,39.3 +1108,57.4,25.5 +1109,57.2,25.4 +1110,57,25.4 +1111,56.8,25.3 +1112,56.3,25.3 +1113,55.6,25.2 +1114,56.2,25.2 +1115,58,12.4 +1116,43.4,0 +1117,28.8,26.2 +1118,30.9,49.9 +1119,32.3,40.5 +1120,32.5,12.4 +1121,32.4,12.2 +1122,32.1,6.4 +1123,31,12.4 +1124,30.1,18.5 +1125,30.4,35.6 +1126,31.2,30.1 +1127,31.5,30.8 +1128,31.5,26.9 +1129,31.7,33.9 +1130,32,29.9 +1131,32.1,-1 +1132,31.4,-1 +1133,30.3,-1 +1134,29.8,-1 +1135,44.3,0 +1136,58.9,-1 +1137,52.1,-1 +1138,44.1,-1 +1139,51.7,0 +1140,59.2,-1 +1141,47.2,-1 +1142,35.1,0 +1143,23.1,-1 +1144,13.1,-1 +1145,5,-1 +1146,0,0 +1147,0,0 +1148,0,0 +1149,0,0 +1150,0,0 +1151,0,0 +1152,0,0 +1153,0,0 +1154,0,0 +1155,0,0 +1156,0,0 +1157,0,0 +1158,0,0 +1159,0,0 +1160,0,0 +1161,0,0 +1162,0,0 +1163,0,0 +1164,0,0 +1165,0,0 +1166,0,0 +1167,0,0 +1168,0,0 +1169,0,0 +1170,0,0 +1171,0,0 +1172,0,0 +1173,0,0 +1174,0,0 +1175,0,0 +1176,0,0 +1177,0,0 +1178,0,0 +1179,0,0 +1180,0,0 +1181,0,0 +1182,0,0 +1183,0,0 +1184,0,0 +1185,0,0 +1186,0,0 +1187,0,0 +1188,0,0 +1189,0,0 +1190,0,0 +1191,0,0 +1192,0,0 +1193,0,0 +1194,0,0 +1195,0,0 +1196,0,20.4 +1197,12.6,41.2 +1198,27.3,20.4 +1199,40.4,7.6 +1200,46.1,-1 +1201,44.6,-1 +1202,42.7,14.7 +1203,42.9,7.3 +1204,36.1,0 +1205,29.3,15 +1206,43.8,22.6 +1207,54.9,9.9 +1208,44.9,0 +1209,34.9,47.4 +1210,42.7,82.7 +1211,52,81.2 +1212,61.8,82.7 +1213,71.3,39.1 +1214,58.1,0 +1215,44.9,42.5 +1216,46.3,83.3 +1217,46.8,74.1 +1218,48.1,75.7 +1219,50.5,75.8 +1220,53.6,76.7 +1221,56.9,77.1 +1222,60.2,78.7 +1223,63.7,78 +1224,67.2,79.6 +1225,70.7,80.9 +1226,74.1,81.1 +1227,77.5,83.6 +1228,80.8,85.6 +1229,84.1,81.6 +1230,87.4,88.3 +1231,90.5,91.9 +1232,93.5,94.1 +1233,96.8,96.6 +1234,100,-1 +1235,96,-1 +1236,81.9,-1 +1237,68.1,-1 +1238,58.1,84.7 +1239,58.5,85.4 +1240,59.5,85.6 +1241,61,86.6 +1242,62.6,86.8 +1243,64.1,87.6 +1244,65.4,87.5 +1245,66.7,87.8 +1246,68.1,43.5 +1247,55.2,0 +1248,42.3,37.2 +1249,43,73.6 +1250,43.5,65.1 +1251,43.8,53.1 +1252,43.9,54.6 +1253,43.9,41.2 +1254,43.8,34.8 +1255,43.6,30.3 +1256,43.3,21.9 +1257,42.8,19.9 +1258,42.3,-1 +1259,41.4,-1 +1260,40.2,-1 +1261,38.7,-1 +1262,37.1,-1 +1263,35.6,-1 +1264,34.2,-1 +1265,32.9,-1 +1266,31.8,-1 +1267,30.7,-1 +1268,29.6,-1 +1269,40.4,0 +1270,51.2,-1 +1271,49.6,-1 +1272,48,-1 +1273,46.4,-1 +1274,45,-1 +1275,43.6,-1 +1276,42.3,-1 +1277,41,-1 +1278,39.6,-1 +1279,38.3,-1 +1280,37.1,-1 +1281,35.9,-1 +1282,34.6,-1 +1283,33,-1 +1284,31.1,-1 +1285,29.2,-1 +1286,43.3,0 +1287,57.4,32.8 +1288,59.9,65.4 +1289,61.9,76.1 +1290,65.6,73.7 +1291,69.9,79.3 +1292,74.1,81.3 +1293,78.3,83.2 +1294,82.6,86 +1295,87,89.5 +1296,91.2,90.8 +1297,95.3,45.9 +1298,81,0 +1299,66.6,38.2 +1300,67.9,75.5 +1301,68.4,80.5 +1302,69,85.5 +1303,70,85.2 +1304,71.6,85.9 +1305,73.3,86.2 +1306,74.8,86.5 +1307,76.3,42.9 +1308,63.3,0 +1309,50.4,21.2 +1310,50.6,42.3 +1311,50.6,53.7 +1312,50.4,90.1 +1313,50.5,97.1 +1314,51,100 +1315,51.9,100 +1316,52.6,100 +1317,52.8,32.4 +1318,47.7,0 +1319,42.6,27.4 +1320,42.1,53.5 +1321,41.8,44.5 +1322,41.4,41.1 +1323,41,21 +1324,40.3,0 +1325,39.3,1 +1326,38.3,15.2 +1327,37.6,57.8 +1328,37.3,73.2 +1329,37.3,59.8 +1330,37.4,52.2 +1331,37.4,16.9 +1332,37.1,34.3 +1333,36.7,51.9 +1334,36.2,25.3 +1335,35.6,-1 +1336,34.6,-1 +1337,33.2,-1 +1338,31.6,-1 +1339,30.1,-1 +1340,28.8,-1 +1341,28,29.5 +1342,28.6,100 +1343,28.8,97.3 +1344,28.8,73.4 +1345,29.6,56.9 +1346,30.3,91.7 +1347,31,90.5 +1348,31.8,81.7 +1349,32.6,79.5 +1350,33.5,86.9 +1351,34.6,100 +1352,35.6,78.7 +1353,36.4,50.5 +1354,37,57 +1355,37.3,69.1 +1356,37.6,49.5 +1357,37.8,44.4 +1358,37.8,43.4 +1359,37.8,34.8 +1360,37.6,24 +1361,37.2,-1 +1362,36.3,-1 +1363,35.1,-1 +1364,33.7,-1 +1365,32.4,-1 +1366,31.1,-1 +1367,29.9,-1 +1368,28.7,-1 +1369,29,58.6 +1370,29.7,88.5 +1371,31,86.3 +1372,31.8,43.4 +1373,31.7,-1 +1374,29.9,-1 +1375,40.2,0 +1376,50.4,-1 +1377,47.9,-1 +1378,45,-1 +1379,43,-1 +1380,40.6,-1 +1381,55.5,0 +1382,70.4,41.7 +1383,73.4,83.2 +1384,74,83.7 +1385,74.9,41.7 +1386,60,0 +1387,45.1,41.6 +1388,47.7,84.2 +1389,50.4,50.2 +1390,53,26.1 +1391,59.5,0 +1392,66.2,38.4 +1393,66.4,76.7 +1394,67.6,100 +1395,68.4,76.6 +1396,68.2,47.2 +1397,69,81.4 +1398,69.7,40.6 +1399,54.7,0 +1400,39.8,19.9 +1401,36.3,40 +1402,36.7,59.4 +1403,36.6,77.5 +1404,36.8,94.3 +1405,36.8,100 +1406,36.4,100 +1407,36.3,79.7 +1408,36.7,49.5 +1409,36.6,39.3 +1410,37.3,62.8 +1411,38.1,73.4 +1412,39,72.9 +1413,40.2,72 +1414,41.5,71.2 +1415,42.9,77.3 +1416,44.4,76.6 +1417,45.4,43.1 +1418,45.3,53.9 +1419,45.1,64.8 +1420,46.5,74.2 +1421,47.7,75.2 +1422,48.1,75.5 +1423,48.6,75.8 +1424,48.9,76.3 +1425,49.9,75.5 +1426,50.4,75.2 +1427,51.1,74.6 +1428,51.9,75 +1429,52.7,37.2 +1430,41.6,0 +1431,30.4,36.6 +1432,30.5,73.2 +1433,30.3,81.6 +1434,30.4,89.3 +1435,31.5,90.4 +1436,32.7,88.5 +1437,33.7,97.2 +1438,35.2,99.7 +1439,36.3,98.8 +1440,37.7,100 +1441,39.2,100 +1442,40.9,100 +1443,42.4,99.5 +1444,43.8,98.7 +1445,45.4,97.3 +1446,47,96.6 +1447,47.8,96.2 +1448,48.8,96.3 +1449,50.5,95.1 +1450,51,95.9 +1451,52,94.3 +1452,52.6,94.6 +1453,53,65.5 +1454,53.2,0 +1455,53.2,-1 +1456,52.6,-1 +1457,52.1,-1 +1458,51.8,-1 +1459,51.3,-1 +1460,50.7,-1 +1461,50.7,-1 +1462,49.8,-1 +1463,49.4,-1 +1464,49.3,-1 +1465,49.1,-1 +1466,49.1,-1 +1467,49.1,8.3 +1468,48.9,16.8 +1469,48.8,21.3 +1470,49.1,22.1 +1471,49.4,26.3 +1472,49.8,39.2 +1473,50.4,83.4 +1474,51.4,90.6 +1475,52.3,93.8 +1476,53.3,94 +1477,54.2,94.1 +1478,54.9,94.3 +1479,55.7,94.6 +1480,56.1,94.9 +1481,56.3,86.2 +1482,56.2,64.1 +1483,56,46.1 +1484,56.2,33.4 +1485,56.5,23.6 +1486,56.3,18.6 +1487,55.7,16.2 +1488,56,15.9 +1489,55.9,21.8 +1490,55.8,20.9 +1491,55.4,18.4 +1492,55.7,25.1 +1493,56,27.7 +1494,55.8,22.4 +1495,56.1,20 +1496,55.7,17.4 +1497,55.9,20.9 +1498,56,22.9 +1499,56,21.1 +1500,55.1,19.2 +1501,55.6,24.2 +1502,55.4,25.6 +1503,55.7,24.7 +1504,55.9,24 +1505,55.4,23.5 +1506,55.7,30.9 +1507,55.4,42.5 +1508,55.3,25.8 +1509,55.4,1.3 +1510,55,-1 +1511,54.4,-1 +1512,54.2,-1 +1513,53.5,-1 +1514,52.4,-1 +1515,51.8,-1 +1516,50.7,-1 +1517,49.9,-1 +1518,49.1,-1 +1519,47.7,-1 +1520,47.3,-1 +1521,46.9,-1 +1522,46.9,-1 +1523,47.2,-1 +1524,47.8,-1 +1525,48.2,0 +1526,48.8,23 +1527,49.1,67.9 +1528,49.4,73.7 +1529,49.8,75 +1530,50.4,75.8 +1531,51.4,73.9 +1532,52.3,72.2 +1533,53.3,71.2 +1534,54.6,71.2 +1535,55.4,68.7 +1536,56.7,67 +1537,57.2,64.6 +1538,57.3,61.9 +1539,57,59.5 +1540,56.7,57 +1541,56.7,69.8 +1542,56.8,58.5 +1543,56.8,47.2 +1544,57,38.5 +1545,57,32.8 +1546,56.8,30.2 +1547,57,27 +1548,56.9,26.2 +1549,56.7,26.2 +1550,57,26.6 +1551,56.7,27.8 +1552,56.7,29.7 +1553,56.8,32.1 +1554,56.5,34.9 +1555,56.6,34.9 +1556,56.3,35.8 +1557,56.6,36.6 +1558,56.2,37.6 +1559,56.6,38.2 +1560,56.2,37.9 +1561,56.6,37.5 +1562,56.4,36.7 +1563,56.5,34.8 +1564,56.5,35.8 +1565,56.5,36.2 +1566,56.5,36.7 +1567,56.7,37.8 +1568,56.7,37.8 +1569,56.6,36.6 +1570,56.8,36.1 +1571,56.5,36.8 +1572,56.9,35.9 +1573,56.7,35 +1574,56.5,36 +1575,56.4,36.5 +1576,56.5,38 +1577,56.5,39.9 +1578,56.4,42.1 +1579,56.5,47 +1580,56.4,48 +1581,56.1,49.1 +1582,56.4,48.9 +1583,56.4,48.2 +1584,56.5,48.3 +1585,56.5,47.9 +1586,56.6,46.8 +1587,56.6,46.2 +1588,56.5,44.4 +1589,56.8,42.9 +1590,56.5,42.8 +1591,56.7,43.2 +1592,56.5,42.8 +1593,56.9,42.2 +1594,56.5,43.1 +1595,56.5,42.9 +1596,56.7,42.7 +1597,56.6,41.5 +1598,56.9,41.8 +1599,56.6,41.9 +1600,56.7,42.6 +1601,56.7,42.6 +1602,56.7,41.5 +1603,56.7,42.2 +1604,56.5,42.2 +1605,56.8,41.9 +1606,56.5,42 +1607,56.7,42.1 +1608,56.4,41.9 +1609,56.7,42.9 +1610,56.7,41.8 +1611,56.7,41.9 +1612,56.8,42 +1613,56.7,41.5 +1614,56.6,41.9 +1615,56.8,41.6 +1616,56.6,41.6 +1617,56.9,42 +1618,56.7,40.7 +1619,56.7,39.3 +1620,56.5,41.4 +1621,56.4,44.9 +1622,56.8,45.2 +1623,56.6,43.6 +1624,56.8,42.2 +1625,56.5,42.3 +1626,56.5,44.4 +1627,56.9,45.1 +1628,56.4,45 +1629,56.7,46.3 +1630,56.7,45.5 +1631,56.8,45 +1632,56.7,44.9 +1633,56.6,45.2 +1634,56.8,46 +1635,56.5,46.6 +1636,56.6,48.3 +1637,56.4,48.6 +1638,56.6,50.3 +1639,56.3,51.9 +1640,56.5,54.1 +1641,56.3,54.9 +1642,56.4,55 +1643,56.4,56.2 +1644,56.2,58.6 +1645,56.2,59.1 +1646,56.2,62.5 +1647,56.4,62.8 +1648,56,64.7 +1649,56.4,65.6 +1650,56.2,67.7 +1651,55.9,68.9 +1652,56.1,68.9 +1653,55.8,69.5 +1654,56,69.8 +1655,56.2,69.3 +1656,56.2,69.8 +1657,56.4,69.2 +1658,56.3,68.7 +1659,56.2,69.4 +1660,56.2,69.5 +1661,56.2,70 +1662,56.4,69.7 +1663,56.2,70.2 +1664,56.4,70.5 +1665,56.1,70.5 +1666,56.5,69.7 +1667,56.2,69.3 +1668,56.5,70.9 +1669,56.4,70.8 +1670,56.3,71.1 +1671,56.4,71 +1672,56.7,68.6 +1673,56.8,68.6 +1674,56.6,68 +1675,56.8,65.1 +1676,56.9,60.9 +1677,57.1,57.4 +1678,57.1,54.3 +1679,57,48.6 +1680,57.4,44.1 +1681,57.4,40.2 +1682,57.6,36.9 +1683,57.5,34.2 +1684,57.4,31.1 +1685,57.5,25.9 +1686,57.5,20.7 +1687,57.6,16.4 +1688,57.6,12.4 +1689,57.6,8.9 +1690,57.5,8 +1691,57.5,5.8 +1692,57.3,5.8 +1693,57.6,5.5 +1694,57.3,4.5 +1695,57.2,3.2 +1696,57.2,3.1 +1697,57.3,4.9 +1698,57.3,4.2 +1699,56.9,5.5 +1700,57.1,5.1 +1701,57,5.2 +1702,56.9,5.5 +1703,56.6,5.4 +1704,57.1,6.1 +1705,56.7,5.7 +1706,56.8,5.8 +1707,57,6.1 +1708,56.7,5.9 +1709,57,6.6 +1710,56.9,6.4 +1711,56.7,6.7 +1712,56.9,6.9 +1713,56.8,5.6 +1714,56.6,5.1 +1715,56.6,6.5 +1716,56.5,10 +1717,56.6,12.4 +1718,56.5,14.5 +1719,56.6,16.3 +1720,56.3,18.1 +1721,56.6,20.7 +1722,56.1,22.6 +1723,56.3,25.8 +1724,56.4,27.7 +1725,56,29.7 +1726,56.1,32.6 +1727,55.9,34.9 +1728,55.9,36.4 +1729,56,39.2 +1730,55.9,41.4 +1731,55.5,44.2 +1732,55.9,46.4 +1733,55.8,48.3 +1734,55.6,49.1 +1735,55.8,49.3 +1736,55.9,47.7 +1737,55.9,47.4 +1738,55.8,46.9 +1739,56.1,46.8 +1740,56.1,45.8 +1741,56.2,46 +1742,56.3,45.9 +1743,56.3,45.9 +1744,56.2,44.6 +1745,56.2,46 +1746,56.4,46.2 +1747,55.8,-1 +1748,55.5,-1 +1749,55,-1 +1750,54.1,-1 +1751,54,-1 +1752,53.3,-1 +1753,52.6,-1 +1754,51.8,-1 +1755,50.7,-1 +1756,49.9,-1 +1757,49.1,-1 +1758,47.7,-1 +1759,46.8,-1 +1760,45.7,-1 +1761,44.8,-1 +1762,43.9,-1 +1763,42.9,-1 +1764,41.5,-1 +1765,39.5,-1 +1766,36.7,-1 +1767,33.8,-1 +1768,31,-1 +1769,40,0 +1770,49.1,-1 +1771,46.2,-1 +1772,43.1,-1 +1773,39.9,-1 +1774,36.6,-1 +1775,33.6,-1 +1776,30.5,-1 +1777,42.8,0 +1778,55.2,-1 +1779,49.9,-1 +1780,44,-1 +1781,37.6,-1 +1782,47.2,0 +1783,56.8,-1 +1784,47.5,-1 +1785,42.9,-1 +1786,31.6,-1 +1787,25.8,-1 +1788,19.9,-1 +1789,14,-1 +1790,8.1,-1 +1791,2.2,-1 +1792,0,0 +1793,0,0 +1794,0,0 +1795,0,0 +1796,0,0 +1797,0,0 +1798,0,0 +1799,0,0 +1800,0,0 diff --git a/VectoCore/Resources/Declaration/Wheels.csv b/VectoCore/Resources/Declaration/Wheels.csv index bf914bd990051ea4fb2d7ed82937cbff8b9652fd..782e9ba6938fbc3f94f01f1b48bdd568536ed417 100644 --- a/VectoCore/Resources/Declaration/Wheels.csv +++ b/VectoCore/Resources/Declaration/Wheels.csv @@ -1,41 +1,41 @@ -Wheel,Inertia,d,Size-Class(0/1) -9 R 22.5,8.9,970,0 -9.00 R 20,10.5,1018,0 -9.5 R 17.5,4.9,842,0 -10 R 17.5,5,858,0 -10 R 22.5,11,1020,0 -10.00 R 20,13.1,1025,0 -11 R 22.5,14.4,1050,0 -11.00 R 20,14.6,1082,0 -12 R 22.5,16.8,1084,0 -12.00 R 20,19.5,1122,0 -12.00 R 24,27.7,1226,0 -12.5 R 20,12.7,1120,0 -13 R 22.5,20,1124,0 -14.00 R 20,30.8,1238,0 -14.5 R 20,14.8,1092,0 -16.00 R 20,47.5,1343,0 -215/75 R 17.5,3.9,767,0 -225/70 R 17.5,4,759.5,0 -225/75 R 17.5,4,782,0 -235/75 R 17.5,4.5,797,0 -245/70 R 17.5,5.2,787.5,0 -245/70 R 19.5,6,838.3,0 -255/70 R 22.5,9.5,928.5,0 -265/70 R 19.5,6.5,866.3,0 -275/70 R 22.5,11.9,956.5,0 -275/80 R 22.5,12.8,1011.5,0 -285/70 R 19.5,7.9,894.3,0 -295/55 R 22.5,10.2,896,1 -295/60 R 22.5,10.8,925.5,1 -295/80 R 22.5,15.5,1043.5,0 -305/70 R 19.5,9.2,922.3,0 -305/70 R 22.5,13.9,998.5,0 -315/45 R22.5,9.9,347,1 -315/60 R 22.5,12.8,949.5,1 -315/70 R 22.5,14.9,1012.5,0 -315/80 R 22.5,17.6,1075.5,0 -365/80 R 20,17.2,1092,0 -365/85 R 20,22.5,1128.5,0 -385/55 R 22.5,15.9,995,1 -385/65 R 22.5,19.2,1072,1 +Wheel,Inertia,d,Size-Class (0/1) +9 R22.5,8.9,970,b +9.00 R20,10.5,1018,b +9.5 R17.5,4.9,842,b +10 R17.5,5,858,b +10 R22.5,11,1020,b +10.00 R20,13.1,1025,b +11 R22.5,14.4,1050,b +11.00 R20,14.6,1082,b +12 R22.5,16.8,1084,b +12.00 R20,19.5,1122,b +12.00 R24,27.7,1226,b +12.5 R20,12.7,1120,b +13 R22.5,20,1124,b +14.00 R20,30.8,1238,b +14.5 R20,14.8,1092,b +16.00 R20,47.5,1343,b +215/75 R17.5,3.9,767,b +225/70 R17.5,4,759.5,b +225/75 R17.5,4,782,b +235/75 R17.5,4.5,797,b +245/70 R17.5,5.2,787.5,b +245/70 R19.5,6,838.3,b +255/70 R22.5,9.5,928.5,b +265/70 R19.5,6.5,866.3,b +275/70 R22.5,11.9,956.5,b +275/80 R22.5,12.8,1011.5,b +285/70 R19.5,7.9,894.3,b +295/55 R22.5,10.2,896,a +295/60 R22.5,10.8,925.5,a +295/80 R22.5,15.5,1043.5,b +305/70 R19.5,9.2,922.3,b +305/70 R22.5,13.9,998.5,b +315/45 R22.5,9.9,855,a +315/60 R22.5,12.8,949.5,a +315/70 R22.5,14.9,1012.5,b +315/80 R22.5,17.6,1075.5,b +365/80 R20,17.2,1092,b +365/85 R20,22.5,1128.5,b +385/55 R22.5,15.9,995,a +385/65 R22.5,19.2,1072,a diff --git a/VectoCore/Utils/DataRowExtensionMethods.cs b/VectoCore/Utils/DataTableExtensionMethods.cs similarity index 91% rename from VectoCore/Utils/DataRowExtensionMethods.cs rename to VectoCore/Utils/DataTableExtensionMethods.cs index 5b91b0f7a8e9d52704cf8635aca874d58fdfebcb..e08d00b1329fe9a2e4156371e6d062358298722d 100644 --- a/VectoCore/Utils/DataRowExtensionMethods.cs +++ b/VectoCore/Utils/DataTableExtensionMethods.cs @@ -6,7 +6,7 @@ using TUGraz.VectoCore.Exceptions; namespace TUGraz.VectoCore.Utils { - public static class DataRowExtensionMethods + public static class DataTableExtensionMethods { public static double ParseDoubleOrGetDefault(this DataRow row, string columnName, double defaultValue = default(double)) @@ -53,5 +53,10 @@ namespace TUGraz.VectoCore.Utils throw new VectoException(string.Format("Field {0}: {1}", column, e.Message), e); } } + + public static IEnumerable<T> Values<T>(this DataColumn column) + { + return column.Table.AsEnumerable().Select(r => r.Field<T>(column)); + } } } \ No newline at end of file diff --git a/VectoCore/Utils/DoubleExtensionMethods.cs b/VectoCore/Utils/DoubleExtensionMethods.cs index c616f65a303c1542e5b112226bd499d52b59bde3..813c467d955da1a563f6c49f501a2c6d97f62b80 100644 --- a/VectoCore/Utils/DoubleExtensionMethods.cs +++ b/VectoCore/Utils/DoubleExtensionMethods.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; namespace TUGraz.VectoCore.Utils { @@ -100,7 +102,7 @@ namespace TUGraz.VectoCore.Utils /// <returns></returns> public static SI SI(this double self) { - return (SI)self; + return (SI) self; } /// <summary> @@ -113,5 +115,10 @@ namespace TUGraz.VectoCore.Utils { return SIBase<T>.Create(self); } + + public static IEnumerable<T> SI<T>(this IEnumerable<double> self) where T : SIBase<T> + { + return self.Select(x => x.SI<T>()); + } } } \ No newline at end of file diff --git a/VectoCore/Utils/IntExtensionMethods.cs b/VectoCore/Utils/IntExtensionMethods.cs index 2381c3bdd317947adfe8422aa8ad22974398eeef..265ed5e69eecbca12827e41652640f781eb57e84 100644 --- a/VectoCore/Utils/IntExtensionMethods.cs +++ b/VectoCore/Utils/IntExtensionMethods.cs @@ -1,6 +1,3 @@ -using System; -using System.Diagnostics.Contracts; - namespace TUGraz.VectoCore.Utils { public static class IntExtensionMethods @@ -34,5 +31,16 @@ namespace TUGraz.VectoCore.Utils { return SIBase<T>.Create(d); } + + /// <summary> + /// Modulo functions which also works on negative Numbers (not like the built-in %-operator which just returns the remainder). + /// </summary> + /// <param name="a"></param> + /// <param name="b"></param> + /// <returns></returns> + public static int Mod(this int a, int b) + { + return (a %= b) < 0 ? a + b : a; + } } } \ No newline at end of file diff --git a/VectoCore/Utils/RessourceHelper.cs b/VectoCore/Utils/RessourceHelper.cs index 5aa9a5e8bc8400355da839e2c8c26d1b304919c6..29ca9f6339d524b2636a3ae19b6fc4ddfbc44184 100644 --- a/VectoCore/Utils/RessourceHelper.cs +++ b/VectoCore/Utils/RessourceHelper.cs @@ -1,14 +1,19 @@ using System.IO; using System.Reflection; +using TUGraz.VectoCore.Exceptions; -namespace TUGraz.VectoCore.Models +namespace TUGraz.VectoCore.Utils { public static class RessourceHelper { public static Stream ReadStream(string resourceName) { var assembly = Assembly.GetExecutingAssembly(); - return assembly.GetManifestResourceStream(resourceName); + var resource = assembly.GetManifestResourceStream(resourceName); + if (resource == null) { + throw new VectoException("Resource file not found: " + resourceName); + } + return resource; } } } \ No newline at end of file diff --git a/VectoCore/Utils/StringExtensionMethods.cs b/VectoCore/Utils/StringExtensionMethods.cs index c72e97e05a7d5b3525d3e11e34f5af2addcc549e..f120770506f54fc6e4c54b166bc85a4f35e9aa5c 100644 --- a/VectoCore/Utils/StringExtensionMethods.cs +++ b/VectoCore/Utils/StringExtensionMethods.cs @@ -1,3 +1,4 @@ +using System; using System.Globalization; namespace TUGraz.VectoCore.Utils @@ -8,5 +9,14 @@ namespace TUGraz.VectoCore.Utils { return double.Parse(self, CultureInfo.InvariantCulture); } + + public static string Slice(this string s, int from = 0, int to = int.MaxValue) + { + from = Math.Min(Math.Max(from, -s.Length), s.Length); + from = from < 0 ? from + s.Length : from; + to = Math.Min(Math.Max(to, -s.Length), s.Length); + to = to < 0 ? to + s.Length : to; + return s.Substring(from, Math.Max(to - from, 0)); + } } } \ No newline at end of file diff --git a/VectoCore/Utils/VectoCSVFile.cs b/VectoCore/Utils/VectoCSVFile.cs index 25de5f745341f4de6eef6ad4cc74ab71df893b91..412a00fd8b4f8fb448ded692bbfaa060d0c9dcdd 100644 --- a/VectoCore/Utils/VectoCSVFile.cs +++ b/VectoCore/Utils/VectoCSVFile.cs @@ -78,7 +78,7 @@ namespace TUGraz.VectoCore.Utils // Valid Columns found => header was valid => skip header line lines = lines.Skip(1).ToArray(); } else { - var log = LogManager.GetLogger(typeof (VectoCSVFile)); + var log = LogManager.GetLogger(typeof(VectoCSVFile)); log.Warn("No valid Data Header found. Interpreting the first line as data line."); // set the validColumns to: {"0", "1", "2", "3", ...} for all columns in first line. validColumns = GetColumns(lines.First()).Select((_, index) => index.ToString()).ToArray(); @@ -92,13 +92,13 @@ namespace TUGraz.VectoCore.Utils for (var i = 0; i < lines.Length; i++) { var line = lines[i]; - var cells = line.Split(Delimiter); + var cells = line.Split(Delimiter); if (!ignoreEmptyColumns && cells.Length != table.Columns.Count) { throw new CSVReadException(string.Format("Line {0}: The number of values is not correct.", i)); } try { - table.Rows.Add(line.Split(Delimiter)); + table.Rows.Add(line.Split(Delimiter)); } catch (InvalidCastException e) { throw new CSVReadException( string.Format("Line {0}: The data format of a value is not correct. {1}", i, e.Message), e); @@ -122,7 +122,6 @@ namespace TUGraz.VectoCore.Utils Contract.Requires(line != null); line = Regex.Replace(line, @"\[.*?\]", ""); - line = Regex.Replace(line, @"\(.*?\)", ""); line = line.Replace("<", ""); line = line.Replace(">", ""); return line.Split(Delimiter).Select(col => col.Trim()); diff --git a/VectoCore/VectoCore.csproj b/VectoCore/VectoCore.csproj index 6cbcb6f861a1396056567c8a88c64439f361afef..ac6c8e306efd92d607e6fec1f0a70aca615b7501 100644 --- a/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore.csproj @@ -139,20 +139,25 @@ <Compile Include="Models\Connector\Ports\Impl\Response.cs" /> <Compile Include="Models\Connector\Ports\IFvPort.cs" /> <Compile Include="Models\Connector\Ports\ITnPort.cs" /> + <Compile Include="Models\Declaration\Fan.cs" /> + <Compile Include="Models\Declaration\HVAC.cs" /> + <Compile Include="Models\Declaration\PneumaticSystem.cs" /> + <Compile Include="Models\Declaration\SteeringPump.cs" /> + <Compile Include="Models\Declaration\WHTCCorrection.cs" /> <Compile Include="Models\SimulationComponent\Data\AccelerationCurve.cs" /> <Compile Include="Models\Declaration\DeclarationData.cs" /> - <Compile Include="Models\Declaration\DeclarationPT1.cs" /> + <Compile Include="Models\Declaration\PT1.cs" /> <Compile Include="Models\Declaration\ElectricSystem.cs" /> <Compile Include="Models\Declaration\LookupData.cs" /> <Compile Include="Models\Declaration\DeclarationRims.cs" /> - <Compile Include="Models\Declaration\DeclarationWheels.cs" /> + <Compile Include="Models\Declaration\Wheels.cs" /> <Compile Include="Models\Declaration\Mission.cs" /> <Compile Include="Models\Declaration\MissionType.cs" /> <Compile Include="Models\SimulationComponent\Data\Engine\PT1Curve.cs" /> <Compile Include="Models\Simulation\Impl\PowertrainBuilder.cs" /> <Compile Include="Utils\RessourceHelper.cs" /> <Compile Include="Models\Declaration\Segment.cs" /> - <Compile Include="Models\Declaration\DeclarationSegments.cs" /> + <Compile Include="Models\Declaration\Segments.cs" /> <Compile Include="Models\SimulationComponent\Data\AuxiliaryCycleDataAdapter.cs" /> <Compile Include="Models\Declaration\Axle.cs" /> <Compile Include="Models\Declaration\AxleConfiguration.cs" /> @@ -223,7 +228,7 @@ <Compile Include="Models\Simulation\Cockpit\IVehicleCockpit.cs" /> <Compile Include="Models\Simulation\IVehicleContainer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Utils\DataRowExtensionMethods.cs" /> + <Compile Include="Utils\DataTableExtensionMethods.cs" /> <Compile Include="Utils\StringExtensionMethods.cs" /> <Compile Include="Utils\VectoCSVFile.cs" /> <Compile Include="Utils\VectoMath.cs" /> @@ -236,28 +241,27 @@ <EmbeddedResource Include="Resources\Declaration\Rims.csv" /> <EmbeddedResource Include="Resources\Declaration\Wheels.csv" /> <EmbeddedResource Include="Resources\Declaration\SegmentTable.csv" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\HeavyUrban.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\Suburban.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\Urban.vdri" /> <EmbeddedResource Include="Resources\Declaration\MissionCycles\Coach.vdri" /> <EmbeddedResource Include="Resources\Declaration\MissionCycles\Construction.vdri" /> <EmbeddedResource Include="Resources\Declaration\MissionCycles\Interurban.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\LongHaul.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\MunicipalUtility.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\RegionalDelivery.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\UrbanDelivery.vdri" /> <EmbeddedResource Include="Resources\Declaration\PT1.csv" /> <EmbeddedResource Include="Resources\Declaration\VACC\Truck.vacc" /> - <EmbeddedResource Include="Resources\Declaration\VCDV\CoachBus.vcdv" /> - <EmbeddedResource Include="Resources\Declaration\VCDV\RigidSolo.vcdv" /> - <EmbeddedResource Include="Resources\Declaration\VCDV\RigidTrailer.vcdv" /> - <EmbeddedResource Include="Resources\Declaration\VCDV\TractorSemitrailer.vcdv" /> <EmbeddedResource Include="Resources\Declaration\VAUX\ES-Tech.csv" /> <EmbeddedResource Include="Resources\Declaration\VAUX\Fan-Tech.csv" /> <EmbeddedResource Include="Resources\Declaration\VAUX\HVAC-Table.csv" /> <EmbeddedResource Include="Resources\Declaration\VAUX\PS-Table.csv" /> <EmbeddedResource Include="Resources\Declaration\VAUX\SP-Table.csv" /> <EmbeddedResource Include="Resources\Declaration\VAUX\SP-Tech.csv" /> + <EmbeddedResource Include="Resources\Declaration\MissionCycles\HeavyUrban.vdri" /> + <EmbeddedResource Include="Resources\Declaration\MissionCycles\Suburban.vdri" /> + <EmbeddedResource Include="Resources\Declaration\MissionCycles\Urban.vdri" /> + <EmbeddedResource Include="Resources\Declaration\MissionCycles\LongHaul.vdri" /> + <EmbeddedResource Include="Resources\Declaration\MissionCycles\MunicipalUtility.vdri" /> + <EmbeddedResource Include="Resources\Declaration\MissionCycles\RegionalDelivery.vdri" /> + <EmbeddedResource Include="Resources\Declaration\MissionCycles\UrbanDelivery.vdri" /> + <EmbeddedResource Include="Resources\Declaration\VCDV\parameters.csv" /> + <EmbeddedResource Include="Resources\Declaration\WHTC-Weighting-Factors.csv" /> + <EmbeddedResource Include="Resources\Declaration\WHTC.csv" /> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. diff --git a/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs b/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs index 5652458fe23decb7a98d060a15280fbaba467463..f699a54d588067669bf5cbc8ea348508b8a7ed7e 100644 --- a/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs +++ b/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs @@ -1,6 +1,5 @@ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; -using Microsoft.VisualStudio.TestTools.UnitTesting.Web; using TUGraz.VectoCore.FileIO.Reader.Impl; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; @@ -66,25 +65,25 @@ namespace TUGraz.VectoCore.Tests.Integration.EngineOnlyCycle for (var j = 0; j < results.Length; j++) { var field = results[j]; // if (!Double.IsNaN(dataWriter.GetDouble(field))) - Assert.AreEqual((double) row[field.GetName()], dataWriter.GetDouble(field), + Assert.AreEqual((double)row[field.GetName()], dataWriter.GetDouble(field), 0.0001, - String.Format("t: {0} field: {1}", i, field)); + string.Format("t: {0} field: {1}", i, field)); } if (row[ModalResultField.FC.GetName()] is double && - !Double.IsNaN(Double.Parse(row[ModalResultField.FC.GetName()].ToString()))) { - Assert.AreEqual((double) row[ModalResultField.FC.GetName()], + !double.IsNaN(double.Parse(row[ModalResultField.FC.GetName()].ToString()))) { + Assert.AreEqual((double)row[ModalResultField.FC.GetName()], dataWriter.GetDouble(ModalResultField.FC), 0.01, "t: {0} field: {1}", i, ModalResultField.FC); } else { - Assert.IsTrue(Double.IsNaN(dataWriter.GetDouble(ModalResultField.FC)), - String.Format("t: {0}", i)); + Assert.IsTrue(double.IsNaN(dataWriter.GetDouble(ModalResultField.FC)), + string.Format("t: {0}", i)); } } dataWriter.CommitSimulationStep(absTime, dt); absTime += dt; } - dataWriter.Data.WriteToFile(String.Format("result_{0}.csv", TestContext.DataRow["TestName"].ToString())); + dataWriter.Data.WriteToFile(string.Format("result_{0}.csv", TestContext.DataRow["TestName"].ToString())); } [TestMethod] diff --git a/VectoCoreTest/Models/DeclarationDataTest.cs b/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs similarity index 54% rename from VectoCoreTest/Models/DeclarationDataTest.cs rename to VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index 40cec67ef8d8f0c2ee3173145982d07cf404d710..cac31667bd1f8dbdd8070a9dcec44bb65140e2f1 100644 --- a/VectoCoreTest/Models/DeclarationDataTest.cs +++ b/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -1,45 +1,32 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using TUGraz.VectoCore.Exceptions; -using TUGraz.VectoCore.Models; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Tests.Utils; using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.Tests.Models +namespace TUGraz.VectoCore.Tests.Models.Declaration { [TestClass] public class DeclarationDataTest { - public const double Tolerance = 0.0001; - - public static void AssertException<T>(Action func, string message = null) where T : Exception - { - try { - func(); - Assert.Fail("Expected an exception."); - } catch (T ex) { - if (!string.IsNullOrEmpty(message)) { - Assert.AreEqual(message, ex.Message); - } - } - } - + private const double Tolerance = 0.0001; + private MissionType[] missions = Enum.GetValues(typeof(MissionType)).Cast<MissionType>().ToArray(); [TestMethod] public void WheelDataTest() { var wheels = DeclarationData.Wheels; - var tmp = wheels.Lookup("285/70 R 19.5"); + var tmp = wheels.Lookup("285/70 R19.5"); Assert.AreEqual(7.9, tmp.Inertia.Double(), Tolerance); Assert.AreEqual(0.8943, tmp.TyreRadius.Double(), Tolerance); - Assert.AreEqual(0, tmp.SizeClass); + Assert.AreEqual("b", tmp.SizeClass); } [TestMethod] @@ -84,8 +71,8 @@ namespace TUGraz.VectoCore.Tests.Models // EXTRAPOLATE Assert.AreEqual(0.11, pt1.Lookup(3000.RPMtoRad()).Double(), Tolerance); - AssertException<VectoException>(() => pt1.Lookup(200.RPMtoRad())); - AssertException<VectoException>(() => pt1.Lookup(0.RPMtoRad())); + AssertHelper.Exception<VectoException>(() => pt1.Lookup(200.RPMtoRad())); + AssertHelper.Exception<VectoException>(() => pt1.Lookup(0.RPMtoRad())); } @@ -96,16 +83,50 @@ namespace TUGraz.VectoCore.Tests.Models } [TestMethod] - public void AuxESTechTest() + public void WHTCWeightingTest() + { + var whtc = DeclarationData.WHTCCorrection; + + var factors = new { + urban = new[] { 0.11, 0.17, 0.69, 0.98, 0.62, 1.0, 1.0, 1.0, 0.45, 0.0 }, + rural = new[] { 0.0, 0.3, 0.27, 0.0, 0.32, 0.0, 0.0, 0.0, 0.36, 0.22 }, + motorway = new[] { 0.89, 0.53, 0.04, 0.02, 0.06, 0.0, 0.0, 0.0, 0.19, 0.78 } + }; + + var r = new Random(); + for (var i = 0; i < missions.Length; i++) { + var urban = r.NextDouble() * 2; + var rural = r.NextDouble() * 2; + var motorway = r.NextDouble() * 2; + var whtcValue = whtc.Lookup(missions[i], urban, rural, motorway); + Assert.AreEqual(urban * factors.urban[i] + rural * factors.rural[i] + motorway * factors.motorway[i], whtcValue); + } + } + + [TestMethod] + public void VCDVTest() + { + Assert.Inconclusive(); + } + + [TestMethod] + public void DefaultTCTest() + { + Assert.Inconclusive(); + } + + + [TestMethod] + public void AuxElectricSystemTest() { var es = DeclarationData.ElectricSystem; var expected = new[] { - new { Mission = MissionType.LongHaul, Base = 1240, LED = 1290 }, - new { Mission = MissionType.RegionalDelivery, Base = 1055, LED = 1105 }, - new { Mission = MissionType.UrbanDelivery, Base = 974, LED = 1024 }, - new { Mission = MissionType.MunicipalUtility, Base = 974, LED = 1024 }, - new { Mission = MissionType.Construction, Base = 975, LED = 1025 }, + new { Mission = MissionType.LongHaul, Base = 1240, LED = 1190 }, + new { Mission = MissionType.RegionalDelivery, Base = 1055, LED = 1005 }, + new { Mission = MissionType.UrbanDelivery, Base = 974, LED = 924 }, + new { Mission = MissionType.MunicipalUtility, Base = 974, LED = 924 }, + new { Mission = MissionType.Construction, Base = 975, LED = 925 }, new { Mission = MissionType.HeavyUrban, Base = 0, LED = 0 }, new { Mission = MissionType.Urban, Base = 0, LED = 0 }, new { Mission = MissionType.Suburban, Base = 0, LED = 0 }, @@ -116,41 +137,183 @@ namespace TUGraz.VectoCore.Tests.Models foreach (var expectation in expected) { var baseConsumption = es.Lookup(expectation.Mission, technologies: new string[] { }); - var withLEDs = es.Lookup(expectation.Mission, technologies: new[] { "LED lights" }); + var leds = es.Lookup(expectation.Mission, technologies: new[] { "LED lights" }); Assert.AreEqual(expectation.Base, baseConsumption.Double(), Tolerance); - Assert.AreEqual(expectation.LED, withLEDs.Double(), Tolerance); + Assert.AreEqual(expectation.LED, leds.Double(), Tolerance); } } [TestMethod] public void AuxFanTechTest() { - Assert.Inconclusive(); - } + var fan = DeclarationData.Fan; + + const string defaultFan = "Crankshaft mounted - Electronically controlled visco clutch (Default)"; + var expected = new Dictionary<string, int[]> { + { + "Crankshaft mounted - Electronically controlled visco clutch (Default)", + new[] { 618, 671, 516, 566, 1037, 0, 0, 0, 0, 0 } + }, { + "Crankshaft mounted - Bimetallic controlled visco clutch", + new[] { 818, 871, 676, 766, 1277, 0, 0, 0, 0, 0 } + }, { + "Crankshaft mounted - Discrete step clutch", + new[] { 668, 721, 616, 616, 1157, 0, 0, 0, 0, 0 } + }, { + "Crankshaft mounted - On/Off clutch", + new[] { 718, 771, 666, 666, 1237, 0, 0, 0, 0, 0 } + }, { + "Belt driven or driven via transm. - Electronically controlled visco clutch", + new[] { 889, 944, 733, 833, 1378, 0, 0, 0, 0, 0 } + }, { + "Belt driven or driven via transm. - Bimetallic controlled visco clutch", + new[] { 1089, 1144, 893, 1033, 1618, 0, 0, 0, 0, 0 } + }, { + "Belt driven or driven via transm. - Discrete step clutch", + new[] { 939, 994, 883, 883, 1498, 0, 0, 0, 0, 0 } + }, { + "Belt driven or driven via transm. - On/Off clutch", + new[] { 989, 1044, 933, 933, 1578, 0, 0, 0, 0, 0 } + }, { + "Hydraulic driven - Variable displacement pump", + new[] { 738, 955, 632, 717, 1672, 0, 0, 0, 0, 0 } + }, { + "Hydraulic driven - Constant displacement pump", + new[] { 1000, 1200, 800, 900, 2100, 0, 0, 0, 0, 0 } + }, { + "Hydraulic driven - Electronically controlled", + new[] { 700, 800, 600, 600, 1400, 0, 0, 0, 0, 0 } + } + }; - [TestMethod] - public void AuxHVACTest() - { - Assert.Inconclusive(); + for (var i = 0; i < missions.Length; i++) { + // default tech + Watt defaultValue = fan.Lookup(missions[i], ""); + Assert.AreEqual(expected[defaultFan][i], defaultValue.Double(), Tolerance); + + // all fan techs + foreach (var expect in expected) { + Watt value = fan.Lookup(missions[i], expect.Key); + Assert.AreEqual(expect.Value[i], value.Double(), Tolerance); + } + } } [TestMethod] - public void AuxPSTest() + public void AuxHeatingVentilationAirConditionTest() { - Assert.Inconclusive(); + var hvac = DeclarationData.HeatingVentilationAirConditioning; + + var expected = new Dictionary<string, int[]> { + { "1", new[] { 0, 150, 150, 0, 0, 0, 0, 0, 0, 0 } }, + { "2", new[] { 200, 200, 150, 0, 0, 0, 0, 0, 0, 0 } }, + { "3", new[] { 0, 200, 150, 0, 0, 0, 0, 0, 0, 0 } }, + { "4", new[] { 350, 200, 0, 300, 0, 0, 0, 0, 0, 0 } }, + { "5", new[] { 350, 200, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "6", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "7", new[] { 0, 0, 0, 0, 200, 0, 0, 0, 0, 0 } }, + { "8", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "9", new[] { 350, 200, 0, 300, 0, 0, 0, 0, 0, 0 } }, + { "10", new[] { 350, 200, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "11", new[] { 0, 0, 0, 0, 200, 0, 0, 0, 0, 0 } }, + { "12", new[] { 0, 0, 0, 0, 200, 0, 0, 0, 0, 0 } } + }; + + for (var i = 0; i < missions.Length; i++) { + foreach (var expect in expected) { + Watt value = hvac.Lookup(missions[i], expect.Key); + Assert.AreEqual(expect.Value[i], value.Double(), Tolerance); + } + } } [TestMethod] - public void AuxSPTableTest() + public void AuxPneumaticSystemTest() { - Assert.Inconclusive(); + var ps = DeclarationData.PneumaticSystem; + + var expected = new Dictionary<string, int[]> { + { "1", new[] { 0, 1300, 1240, 0, 0, 0, 0, 0, 0, 0 } }, + { "2", new[] { 1180, 1280, 1320, 0, 0, 0, 0, 0, 0, 0 } }, + { "3", new[] { 0, 1360, 1380, 0, 0, 0, 0, 0, 0, 0 } }, + { "4", new[] { 1300, 1340, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "5", new[] { 1340, 1820, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "6", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "7", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "8", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "9", new[] { 1340, 1540, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "10", new[] { 1340, 1820, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "11", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "12", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + }; + + for (var i = 0; i < missions.Length; i++) { + foreach (var expect in expected) { + Watt value = ps.Lookup(missions[i], expect.Key); + Assert.AreEqual(expect.Value[i], value.Double(), Tolerance); + } + } } [TestMethod] - public void AuxSPTechTest() + public void AuxSteeringPumpTest() { - Assert.Inconclusive(); + var sp = DeclarationData.SteeringPump; + + var expected = new Dictionary<string, Dictionary<string, int[]>> { + { + "Fixed displacement", new Dictionary<string, int[]> { + { "1", new[] { 0, 260, 270, 0, 0, 0, 0, 0, 0, 0 } }, + { "2", new[] { 370, 320, 310, 0, 0, 0, 0, 0, 0, 0 } }, + { "3", new[] { 0, 340, 350, 0, 0, 0, 0, 0, 0, 0 } }, + { "4", new[] { 610, 530, 0, 530, 0, 0, 0, 0, 0, 0 } }, + { "5", new[] { 720, 630, 620, 0, 0, 0, 0, 0, 0, 0 } }, + { "6", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "7", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "8", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "9", new[] { 720, 550, 0, 550, 0, 0, 0, 0, 0, 0 } }, + { "10", new[] { 570, 530, 0, 0, 0, 0, 0, 0, 0, 0 } } + } + }, { + "Variable displacement", new Dictionary<string, int[]> { + { "1", new[] { 0, 156, 162, 0, 0, 0, 0, 0, 0, 0 } }, + { "2", new[] { 222, 192, 186, 0, 0, 0, 0, 0, 0, 0 } }, + { "3", new[] { 0, 204, 210, 0, 0, 0, 0, 0, 0, 0 } }, + { "4", new[] { 366, 318, 0, 318, 0, 0, 0, 0, 0, 0 } }, + { "5", new[] { 432, 378, 372, 0, 0, 0, 0, 0, 0, 0 } }, + { "6", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "7", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "8", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "9", new[] { 432, 330, 0, 330, 0, 0, 0, 0, 0, 0 } }, + { "10", new[] { 342, 318, 0, 0, 0, 0, 0, 0, 0, 0 } } + } + }, { + "Hydraulic supported by electric", new Dictionary<string, int[]> { + { "1", new[] { 0, 225, 235, 0, 0, 0, 0, 0, 0, 0 } }, + { "2", new[] { 322, 278, 269, 0, 0, 0, 0, 0, 0, 0 } }, + { "3", new[] { 0, 295, 304, 0, 0, 0, 0, 0, 0, 0 } }, + { "4", new[] { 531, 460, 0, 460, 0, 0, 0, 0, 0, 0 } }, + { "5", new[] { 627, 546, 540, 0, 0, 0, 0, 0, 0, 0 } }, + { "6", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "7", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "8", new[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { "9", new[] { 627, 478, 0, 478, 0, 0, 0, 0, 0, 0 } }, + { "10", new[] { 498, 461, 0, 0, 0, 0, 0, 0, 0, 0 } } + } + } + }; + + foreach (var expect in expected) { + var technology = expect.Key; + foreach (var hdvClasses in expect.Value) { + var hdvClass = hdvClasses.Key; + for (var i = 0; i < missions.Length; i++) { + Watt value = sp.Lookup(missions[i], hdvClass, technology); + Assert.AreEqual(hdvClasses.Value[i], value.Double(), Tolerance); + } + } + } } [TestMethod] @@ -172,7 +335,7 @@ namespace TUGraz.VectoCore.Tests.Models vehicleData.GrossVehicleMassRating, vehicleData.CurbWeight); - Assert.AreEqual("2", segment.HDVClass); + Assert.AreEqual("2", segment.VehicleClass); var data = AccelerationCurveData.ReadFromStream(segment.AccelerationFile); TestAcceleration(data); @@ -182,8 +345,7 @@ namespace TUGraz.VectoCore.Tests.Models var longHaulMission = segment.Missions[0]; Assert.AreEqual(MissionType.LongHaul, longHaulMission.MissionType); - Assert.IsNotNull(longHaulMission.CrossWindCorrectionFile); - Assert.IsTrue(!string.IsNullOrEmpty(new StreamReader(longHaulMission.CrossWindCorrectionFile).ReadLine())); + Assert.AreEqual("RigidSolo", longHaulMission.CrossWindCorrection); Assert.IsTrue(new[] { 0.4, 0.6 }.SequenceEqual(longHaulMission.AxleWeightDistribution)); Assert.IsTrue(new double[] { }.SequenceEqual(longHaulMission.TrailerAxleWeightDistribution)); @@ -200,8 +362,7 @@ namespace TUGraz.VectoCore.Tests.Models var regionalDeliveryMission = segment.Missions[1]; Assert.AreEqual(MissionType.RegionalDelivery, regionalDeliveryMission.MissionType); - Assert.IsNotNull(regionalDeliveryMission.CrossWindCorrectionFile); - Assert.IsTrue(!string.IsNullOrEmpty(new StreamReader(regionalDeliveryMission.CrossWindCorrectionFile).ReadLine())); + Assert.AreEqual("RigidSolo", regionalDeliveryMission.CrossWindCorrection); Assert.IsTrue(new[] { 0.45, 0.55 }.SequenceEqual(regionalDeliveryMission.AxleWeightDistribution)); Assert.IsTrue(new double[] { }.SequenceEqual(regionalDeliveryMission.TrailerAxleWeightDistribution)); @@ -218,8 +379,7 @@ namespace TUGraz.VectoCore.Tests.Models var urbanDeliveryMission = segment.Missions[2]; Assert.AreEqual(MissionType.UrbanDelivery, urbanDeliveryMission.MissionType); - Assert.IsNotNull(urbanDeliveryMission.CrossWindCorrectionFile); - Assert.IsTrue(!string.IsNullOrEmpty(new StreamReader(urbanDeliveryMission.CrossWindCorrectionFile).ReadLine())); + Assert.AreEqual("RigidSolo", urbanDeliveryMission.CrossWindCorrection); Assert.IsTrue(new[] { 0.45, 0.55 }.SequenceEqual(urbanDeliveryMission.AxleWeightDistribution)); Assert.IsTrue(new double[] { }.SequenceEqual(urbanDeliveryMission.TrailerAxleWeightDistribution)); @@ -256,7 +416,7 @@ namespace TUGraz.VectoCore.Tests.Models // // todo axleGear - // var wheels = new DeclarationWheels(container, 0.SI<Meter>()); + // var wheels = new Wheels(container, 0.SI<Meter>()); // var missionVehicleData = new VehicleData(vehicleData, loading, mission.AxleWeightDistribution); // var vehicle = new Vehicle(container, missionVehicleData); diff --git a/VectoCoreTest/Models/Simulation/SimulationTests.cs b/VectoCoreTest/Models/Simulation/SimulationTests.cs index 16da8d874b0aff36ec14e58b25320f7177cde711..3d2cfc5745b3c3472e3572504cf7cfe9feb444f5 100644 --- a/VectoCoreTest/Models/Simulation/SimulationTests.cs +++ b/VectoCoreTest/Models/Simulation/SimulationTests.cs @@ -1,15 +1,13 @@ using System.IO; using System.Linq; -using System.Security.Cryptography.X509Certificates; using Microsoft.VisualStudio.TestTools.UnitTesting; using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.FileIO.Reader.Impl; using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.Utils; using TUGraz.VectoCore.Tests.Utils; +using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Tests.Models.Simulation { @@ -85,9 +83,9 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation public void TestEngineOnly_MultipleJobs() { var resultFiles = new[] { - @"TestEngineOnly-MultipleJobs-result1", - @"TestEngineOnly-MultipleJobs-result2", - @"TestEngineOnly-MultipleJobs-result3" + @"TestEngineOnly-MultipleJobs-result1_" + Path.GetFileNameWithoutExtension(CycleFile) + ".vmod", + @"TestEngineOnly-MultipleJobs-result2_" + Path.GetFileNameWithoutExtension(CycleFile) + ".vmod", + @"TestEngineOnly-MultipleJobs-result3_" + Path.GetFileNameWithoutExtension(CycleFile) + ".vmod" }; var simulation = new JobContainer(new TestSumWriter()); @@ -96,8 +94,10 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation } simulation.Execute(); - ResultFileHelper.TestModFiles(resultFiles.Select(x => x + "_Coach Engine Only short.vmod"), - Enumerable.Repeat(@"TestData\Results\EngineOnlyCycles\24tCoach_EngineOnly short.vmod", resultFiles.Length)); + ResultFileHelper.TestModFiles( + Enumerable.Repeat(@"TestData\Results\EngineOnlyCycles\24tCoach_EngineOnly short.vmod", + resultFiles.Length), + resultFiles); } [TestMethod] @@ -114,7 +114,8 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation // jobContainer.AddRuns(factory.Runs()); jobContainer.Execute(); - ResultFileHelper.TestSumFile(@"TestData\Results\EngineOnlyCycles\24t Coach.vsum", @"TestData\Jobs\24t Coach.vsum"); + ResultFileHelper.TestSumFile(@"TestData\Results\EngineOnlyCycles\24t Coach.vsum", + @"TestData\Jobs\24t Coach.vsum"); ResultFileHelper.TestModFiles(new[] { @"TestData\Results\EngineOnlyCycles\24t Coach_Engine Only1.vmod", @"TestData\Results\EngineOnlyCycles\24t Coach_Engine Only2.vmod", diff --git a/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs b/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs index 66d3a71c4c83821964084c278a181d99d34b2f91..800bcb3ac0f54f51e14dbc3260b8394e8231f745 100644 --- a/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs @@ -1,7 +1,6 @@ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using TUGraz.VectoCore.FileIO.Reader.Impl; -using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Impl; @@ -35,22 +34,22 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent gearbox.CurrentGear = 1; clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), 30.SI<PerSecond>()); - Assert.AreEqual(48.293649, (double) outPort.Torque, 0.001); - Assert.AreEqual(62.119969, (double) outPort.AngularVelocity, 0.001); + Assert.AreEqual(48.293649, (double)outPort.Torque, 0.001); + Assert.AreEqual(62.119969, (double)outPort.AngularVelocity, 0.001); //Test - Clutch opened gearbox.CurrentGear = 0; clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), 30.SI<PerSecond>()); - Assert.AreEqual(0, (double) outPort.Torque, 0.001); - Assert.AreEqual((double) engineData.IdleSpeed, (double) outPort.AngularVelocity, 0.001); + Assert.AreEqual(0, (double)outPort.Torque, 0.001); + Assert.AreEqual((double)engineData.IdleSpeed, (double)outPort.AngularVelocity, 0.001); //Test - Clutch closed gearbox.CurrentGear = 1; clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), 80.SI<PerSecond>()); - Assert.AreEqual(100.0, (double) outPort.Torque, 0.001); - Assert.AreEqual(80.0, (double) outPort.AngularVelocity, 0.001); + Assert.AreEqual(100.0, (double)outPort.Torque, 0.001); + Assert.AreEqual(80.0, (double)outPort.AngularVelocity, 0.001); } } } \ No newline at end of file diff --git a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs index d94e883ceb8aa3e21f3e81a9116378e8efe995ac..2e70fac4fb0e1cb8b295dcb50587335129462a99 100644 --- a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using Microsoft.VisualStudio.TestTools.UnitTesting; -using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.FileIO.Reader.Impl; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; @@ -26,24 +25,6 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent AppDomain.CurrentDomain.SetData("DataDirectory", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); } - /// <summary> - /// Assert an expected Exception. - /// </summary> - /// <typeparam name="T"></typeparam> - /// <param name="func"></param> - /// <param name="message"></param> - public static void AssertException<T>(Action func, string message = null) where T : Exception - { - try { - func(); - Assert.Fail("Expected Exception {0}, but no exception occured.", typeof (T)); - } catch (T ex) { - if (message != null) { - Assert.AreEqual(message, ex.Message); - } - } - } - [TestMethod] public void TestEngineHasOutPort() { @@ -80,7 +61,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var vehicle = new VehicleContainer(); var engineData = EngineeringModeSimulationDataReader.CreateEngineDataFromFile(CoachEngine); var engine = new CombustionEngine(vehicle, engineData); - var gearbox = new EngineOnlyGearbox(vehicle); + new EngineOnlyGearbox(vehicle); var port = engine.OutShaft(); var absTime = new TimeSpan(seconds: 0, minutes: 0, hours: 0); @@ -109,7 +90,6 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent absTime += dt; var power = new[] { 569.3641, 4264.177 }; - ; for (var i = 0; i < 2; i++) { port.Request(absTime, dt, Formulas.PowerToTorque(power[i].SI<Watt>(), engineSpeed), engineSpeed); engine.CommitSimulationStep(dataWriter); @@ -132,7 +112,6 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(-7108.32, dataWriter.GetDouble(ModalResultField.PaEng), 0.001); dataWriter.CommitSimulationStep(absTime, dt); - absTime += dt; dataWriter.Data.WriteToFile(@"test1.csv"); } @@ -159,9 +138,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent //var modalData = new ModalDataWriter(string.Format("load_jump_{0}.csv", TestContext.DataRow["TestName"].ToString())); var modalData = new TestModalDataWriter(); - var idlePower = Double.Parse(TestContext.DataRow["initialIdleLoad"].ToString()).SI<Watt>(); + var idlePower = double.Parse(TestContext.DataRow["initialIdleLoad"].ToString()).SI<Watt>(); - var angularSpeed = Double.Parse(TestContext.DataRow["rpm"].ToString()).RPMtoRad(); + var angularSpeed = double.Parse(TestContext.DataRow["rpm"].ToString()).RPMtoRad(); var t = TimeSpan.FromSeconds(0); var dt = TimeSpan.FromSeconds(0.1); @@ -175,7 +154,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent // dt = TimeSpan.FromSeconds(double.Parse(TestContext.DataRow["dt"].ToString(), CultureInfo.InvariantCulture)); // dt = TimeSpan.FromSeconds(expectedResults.Rows[i].ParseDouble(0)) - t; var engineLoadPower = engineData.GetFullLoadCurve(0).FullLoadStationaryPower(angularSpeed); - idlePower = Double.Parse(TestContext.DataRow["finalIdleLoad"].ToString()).SI<Watt>(); + idlePower = double.Parse(TestContext.DataRow["finalIdleLoad"].ToString()).SI<Watt>(); for (; t.TotalSeconds < 25; t += dt, i++) { dt = TimeSpan.FromSeconds(expectedResults.Rows[i + 1].ParseDouble(0) - expectedResults.Rows[i].ParseDouble(0)); if (t >= TimeSpan.FromSeconds(10)) { @@ -188,7 +167,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent // todo: compare results... Assert.AreEqual(expectedResults.Rows[i].ParseDouble(0), t.TotalSeconds, 0.001, "Time"); Assert.AreEqual(expectedResults.Rows[i].ParseDouble(1), modalData.GetDouble(ModalResultField.Pe_full), 0.1, - String.Format("Load in timestep {0}", t)); + string.Format("Load in timestep {0}", t)); modalData.CommitSimulationStep(); } modalData.Finish(); @@ -233,9 +212,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(58.6430628670095, idle.Double(), 0.000001); Assert.IsTrue(idle.HasEqualUnit(0.SI<PerSecond>())); - var flc0 = engineData.GetFullLoadCurve(0); - - AssertException<KeyNotFoundException>(() => { var flc10000 = engineData.GetFullLoadCurve(1000); }); + engineData.GetFullLoadCurve(0); + AssertHelper.Exception<KeyNotFoundException>(() => engineData.GetFullLoadCurve(1000)); } } } \ No newline at end of file diff --git a/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs b/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs index ecd2c96d0dbf4a0fc1fd62e87c364488895b0263..ba91afff4bc0cab54ac3d23b84279781400cb595 100644 --- a/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs @@ -2,7 +2,6 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using TUGraz.VectoCore.FileIO.Reader.Impl; using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Impl; using TUGraz.VectoCore.Tests.Utils; using TUGraz.VectoCore.Utils; diff --git a/VectoCoreTest/Models/SimulationComponent/WheelsTest.cs b/VectoCoreTest/Models/SimulationComponent/WheelsTest.cs index 27842ad945d7f0dfd5b38a872705b2d34bdf4103..6898e6f147ff7002d9a6a933f9a95cfd853d855c 100644 --- a/VectoCoreTest/Models/SimulationComponent/WheelsTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/WheelsTest.cs @@ -3,7 +3,6 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using TUGraz.VectoCore.FileIO.Reader.Impl; using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent; -using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Impl; using TUGraz.VectoCore.Tests.Utils; using TUGraz.VectoCore.Utils; diff --git a/VectoCoreTest/Models/SimulationComponentData/FuelConsumptionMapTest.cs b/VectoCoreTest/Models/SimulationComponentData/FuelConsumptionMapTest.cs index 965f39a46cf39a3dbd150c770b95f39bc0af5f2d..2fbb805e92de9c0932e1dc1a4a85379569e0f545 100644 --- a/VectoCoreTest/Models/SimulationComponentData/FuelConsumptionMapTest.cs +++ b/VectoCoreTest/Models/SimulationComponentData/FuelConsumptionMapTest.cs @@ -8,41 +8,41 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData { - [TestClass] - public class FuelConsumptionMapTest - { - private const double Tolerance = 0.0001; + [TestClass] + public class FuelConsumptionMapTest + { + private const double Tolerance = 0.0001; - [TestMethod] - public void TestFuelConsumption_FixedPoints() - { - var map = FuelConsumptionMap.ReadFromFile(@"TestData\Components\24t Coach.vmap"); - var lines = File.ReadAllLines(@"TestData\Components\24t Coach.vmap").Skip(1).ToArray(); - AssertMapValuesEqual(lines, map); - } + [TestMethod] + public void TestFuelConsumption_FixedPoints() + { + var map = FuelConsumptionMap.ReadFromFile(@"TestData\Components\24t Coach.vmap"); + var lines = File.ReadAllLines(@"TestData\Components\24t Coach.vmap").Skip(1).ToArray(); + AssertMapValuesEqual(lines, map); + } - [TestMethod] - public void TestFuelConsumption_InterpolatedPoints() - { - var map = FuelConsumptionMap.ReadFromFile(@"TestData\Components\24t Coach.vmap"); - var lines = File.ReadAllLines(@"TestData\Components\24t CoachInterpolated.vmap").Skip(1).ToArray(); - AssertMapValuesEqual(lines, map); - } + [TestMethod] + public void TestFuelConsumption_InterpolatedPoints() + { + var map = FuelConsumptionMap.ReadFromFile(@"TestData\Components\24t Coach.vmap"); + var lines = File.ReadAllLines(@"TestData\Components\24t CoachInterpolated.vmap").Skip(1).ToArray(); + AssertMapValuesEqual(lines, map); + } - private static void AssertMapValuesEqual(string[] lines, FuelConsumptionMap map) - { - for (var i = 1; i < lines.Count(); i++) { - var entry = lines[i].Split(',').Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray(); - try { - Assert.AreEqual((double) entry[2].SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second, - (double) map.GetFuelConsumption(entry[1].SI<NewtonMeter>(), entry[0].RPMtoRad()), - Tolerance, - string.Format("Line: {0}, n={1}, T={2}", (i + 2), entry[0].SI().Rounds.Per.Minute, entry[1])); - } catch (VectoException ex) { - throw new VectoException(string.Format("Row {0}: Error in ConsumptionMap n={1}, T={2}: {3}", - i + 2, entry[0], entry[1], ex.Message)); - } - } - } - } + private static void AssertMapValuesEqual(string[] lines, FuelConsumptionMap map) + { + for (var i = 1; i < lines.Count(); i++) { + var entry = lines[i].Split(',').Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray(); + try { + Assert.AreEqual((double)entry[2].SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second, + (double)map.GetFuelConsumption(entry[1].SI<NewtonMeter>(), entry[0].RPMtoRad()), + Tolerance, + string.Format("Line: {0}, n={1}, T={2}", (i + 2), entry[0].SI().Rounds.Per.Minute, entry[1])); + } catch (VectoException ex) { + throw new VectoException(string.Format("Row {0}: Error in ConsumptionMap n={1}, T={2}: {3}", + i + 2, entry[0], entry[1], ex.Message)); + } + } + } + } } \ No newline at end of file diff --git a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs index cd5feb3699a488ccf97129cc3fe7dd31c86ad2e7..6c723269da2e123455c5f70853112753b96c6d5b 100644 --- a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs +++ b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs @@ -1,8 +1,8 @@ -using System; -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.VisualStudio.TestTools.UnitTesting; using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.FileIO.Reader.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; +using TUGraz.VectoCore.Tests.Utils; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData @@ -90,12 +90,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData [TestMethod] public void Test_FileRead_WrongFileFormat_InsufficientColumns() { - try { - var curve = FullLoadCurve.ReadFromFile(@"TestData\Components\FullLoadCurve insufficient columns.vfld"); - Assert.Fail("this should not be reached."); - } catch (VectoException ex) { + AssertHelper.Exception<VectoException>( + () => FullLoadCurve.ReadFromFile(@"TestData\Components\FullLoadCurve insufficient columns.vfld"), + "FullLoadCurve Data File must consist of 4 columns."); Assert.AreEqual("FullLoadCurve Data File must consist of at least 3 columns.", ex.Message); - } } /// <summary> @@ -125,14 +123,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData [TestMethod] public void Test_FileRead_InsufficientEntries() { - try { - FullLoadCurve.ReadFromFile(@"TestData\Components\FullLoadCurve insufficient entries.vfld"); - Assert.Fail("this should not be reached."); - } catch (VectoException ex) { - Assert.AreEqual( - "FullLoadCurve must consist of at least two lines with numeric values (below file header)", - ex.Message); - } + AssertHelper.Exception<VectoException>( + () => FullLoadCurve.ReadFromFile(@"TestData\Components\FullLoadCurve insufficient entries.vfld"), + "FullLoadCurve must consist of at least two lines with numeric values (below file header)"); } } } \ No newline at end of file diff --git a/VectoCoreTest/Utils/AssertHelper.cs b/VectoCoreTest/Utils/AssertHelper.cs new file mode 100644 index 0000000000000000000000000000000000000000..e126f32b521e2c1d4e5f07ce9e66a98bb674e2f3 --- /dev/null +++ b/VectoCoreTest/Utils/AssertHelper.cs @@ -0,0 +1,24 @@ +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace TUGraz.VectoCore.Tests.Utils +{ + public class AssertHelper + { + /// <summary> + /// Assert an expected Exception. + /// </summary> + public static void Exception<T>(Action func, string message = null) where T : Exception + { + try { + func(); + Assert.Fail("Expected Exception {0}, but no exception occured.", typeof(T)); + } catch (T ex) { + if (!string.IsNullOrEmpty(message)) { + Assert.AreEqual(message, ex.Message, + string.Format("Expected Exception message: {0}, but got message: {1}", message, ex.Message)); + } + } + } + } +} \ No newline at end of file diff --git a/VectoCoreTest/Utils/DummyGearbox.cs b/VectoCoreTest/Utils/DummyGearbox.cs index fd22e802a5d16901885b302aa53e7a6fbb0ff039..e1e361018671d4a4e5e2f302c80707a4c81e06bf 100644 --- a/VectoCoreTest/Utils/DummyGearbox.cs +++ b/VectoCoreTest/Utils/DummyGearbox.cs @@ -1,5 +1,4 @@ using System; -using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation.Data; diff --git a/VectoCoreTest/Utils/ResultFileHelper.cs b/VectoCoreTest/Utils/ResultFileHelper.cs index 3658b316ca073787a1d4174a1f50b11f8dbeb02a..6983a3a49b6a933da100811ec0553c0edb8a8f4b 100644 --- a/VectoCoreTest/Utils/ResultFileHelper.cs +++ b/VectoCoreTest/Utils/ResultFileHelper.cs @@ -1,8 +1,8 @@ using System; -using System.IO; +using System.Collections.Generic; using System.Data; +using System.IO; using System.Linq; -using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using TUGraz.VectoCore.Models.Simulation.Data; diff --git a/VectoCoreTest/VectoCoreTest.csproj b/VectoCoreTest/VectoCoreTest.csproj index 81838a3cf065c19fe8967cc3e0adc937863e6253..b1cdb6c91f579f49830e8380e621d8425d975a3b 100644 --- a/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCoreTest/VectoCoreTest.csproj @@ -71,7 +71,7 @@ <Compile Include="Dummy\FactoryTest.cs" /> <Compile Include="Exceptions\ExceptionTests.cs" /> <Compile Include="Integration\EngineOnlyCycle\EngineOnlyCycleTest.cs" /> - <Compile Include="Models\DeclarationDataTest.cs" /> + <Compile Include="Models\Declaration\DeclarationDataTest.cs" /> <Compile Include="Models\SimulationComponentData\AccelerationCurveTest.cs" /> <Compile Include="Models\SimulationComponentData\FuelConsumptionMapTest.cs" /> <Compile Include="Models\SimulationComponentData\FullLoadCurveTest.cs" /> @@ -84,6 +84,7 @@ <Compile Include="Models\SimulationComponent\WheelsTest.cs" /> <Compile Include="Models\SimulationComponent\VehicleTest.cs" /> <Compile Include="Models\Simulation\DrivingCycleTests.cs" /> + <Compile Include="Utils\AssertHelper.cs" /> <Compile Include="Utils\ResultFileHelper.cs" /> <Compile Include="Utils\MockPorts.cs" /> <Compile Include="Models\Simulation\SimulationTests.cs" /> @@ -291,9 +292,7 @@ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup> - <ItemGroup> - <Folder Include="Models\DeclarationData\" /> - </ItemGroup> + <ItemGroup /> <Choose> <When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'"> <ItemGroup>