Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Select Git revision
  • 5a7d2046b7200e0bab587639e0b6d581b7639bef
  • stable default
  • feat-fchv-bus
  • fix-h2-ice-bus
  • powertrains-multiple-axles
  • amdm3/develop
  • issue-1039
  • amdm3/main
  • test/nuget_publish
  • IEPC-experiments
  • amdm2/main
  • amdm2/develop
  • aptngearbox-not-auto
  • playground
  • official/main
  • official/develop
  • issue-templates
  • pdf-reports
  • HEV-timeruns-dev
  • timerun-empower-hybrids
  • timerun-pwheel-hybrids
  • Release/v5.0.3
  • Release/v5.0.1
  • Release/5.0.0-RC
  • Nuget/v0.11.4-DEV
  • Release/v0.11.4-DEV
  • Release/4.3.4-DEV
  • Release/4.3.3
  • Release/4.3.2-RC
  • Release/v4.3.0-DEV
  • Release/4.2.7
  • XMLConverterTool/4.2.6.0
  • Release/4.2.6-RC
  • Release/v4.2.5
  • Release/v4.2.3
  • Release/v4.2.2.3539-RC
  • Release/v4.2.1.3469
  • Release/v0.11.2.3456-DEV
  • Release/v4.2.0.3448-RC
  • Release/v4.1.3.3415
  • Release/v4.1.1.3413
41 results

VehicleData.cs

Blame
  • Forked from VECTO / VECTO Sim
    10511 commits behind the upstream repository.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    VehicleData.cs 5.28 KiB
    /*
    * This file is part of VECTO.
    *
    * Copyright © 2012-2016 European Union
    *
    * Developed by Graz University of Technology,
    *              Institute of Internal Combustion Engines and Thermodynamics,
    *              Institute of Technical Informatics
    *
    * VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
    * by the European Commission - subsequent versions of the EUPL (the "Licence");
    * You may not use VECTO except in compliance with the Licence.
    * You may obtain a copy of the Licence at:
    *
    * https://joinup.ec.europa.eu/community/eupl/og_page/eupl
    *
    * Unless required by applicable law or agreed to in writing, VECTO
    * distributed under the Licence is distributed on an "AS IS" basis,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the Licence for the specific language governing permissions and
    * limitations under the Licence.
    *
    * Authors:
    *   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
    *   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
    *   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
    *   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
    *   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
    *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
    */
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using TUGraz.VectoCore.Exceptions;
    using TUGraz.VectoCore.Models.Declaration;
    using TUGraz.VectoCore.Models.Simulation.Data;
    using TUGraz.VectoCore.Utils;
    
    namespace TUGraz.VectoCore.Models.SimulationComponent.Data
    {
    	[CustomValidation(typeof(VehicleData), "ValidateVehicleData")]
    	public class VehicleData : SimulationComponentData
    	{
    		//public string BasePath { get; internal set; }
    		private List<Axle> _axleData;
    
    		public VehicleCategory VehicleCategory { get; internal set; }
    		public VehicleClass VehicleClass { get; internal set; }
    		//public CrossWindCorrectionMode CrossWindCorrectionMode { get; internal set; }
    
    		[Required, ValidateObject]
    		public ICrossWindCorrection CrossWindCorrectionCurve { get; internal set; }
    
    		/// <summary>
    		///     Set the properties for all axles of the vehicle
    		/// </summary>
    		[ValidateObject]
    		public List<Axle> AxleData
    		{
    			get { return _axleData; }
    			internal set
    			{
    				_axleData = value;
    				ComputeRollResistanceAndReducedMassWheels();
    			}
    		}
    
    		public AxleConfiguration AxleConfiguration { get; internal set; }
    
    		[Required, SIRange(500, 40000)]
    		public Kilogram CurbWeight { get; internal set; }
    
    		[Required, SIRange(0, 40000)]
    		public Kilogram CurbWeigthExtra { get; internal set; }
    
    		[Required, SIRange(0, 40000)]
    		public Kilogram Loading { get; internal set; }
    
    		[Required, SIRange(3500, 40000)]
    		public Kilogram GrossVehicleMassRating { get; internal set; }
    
    		[Required, SIRange(0.1, 0.7)]
    		public Meter DynamicTyreRadius { get; internal set; }
    
    		public KilogramSquareMeter WheelsInertia { get; internal set; }
    
    
    		public string Rim { get; internal set; }
    
    		[Required, SIRange(0, 1E12)]
    		public double TotalRollResistanceCoefficient { get; private set; }
    
    		public CrossWindCorrectionMode CrossWindCorrectionMode { get; set; }
    
    		public Kilogram TotalVehicleWeight()
    		{
    			var retVal = 0.SI<Kilogram>();
    			retVal += CurbWeight ?? 0.SI<Kilogram>();
    			retVal += CurbWeigthExtra ?? 0.SI<Kilogram>();
    			retVal += Loading ?? 0.SI<Kilogram>();
    			return retVal;
    		}
    
    		public Kilogram TotalCurbWeight()
    		{
    			var retVal = 0.SI<Kilogram>();
    			retVal += CurbWeight ?? 0.SI<Kilogram>();
    			retVal += CurbWeigthExtra ?? 0.SI<Kilogram>();
    			return retVal;
    		}
    
    		protected void ComputeRollResistanceAndReducedMassWheels()
    		{
    			if (TotalVehicleWeight() == 0.SI<Kilogram>()) {
    				throw new VectoException("Total vehicle weight must be greater than 0! Set CurbWeight and Loading before!");
    			}
    			if (DynamicTyreRadius == null) {
    				throw new VectoException("Dynamic tyre radius must be set before axles!");
    			}
    
    			var g = Physics.GravityAccelleration;
    
    			var RRC = 0.0.SI<Scalar>();
    			var wheelsInertia = 0.0.SI<KilogramSquareMeter>();
    			foreach (var axle in _axleData) {
    				var nrWheels = axle.TwinTyres ? 4 : 2;
    				RRC += axle.AxleWeightShare * axle.RollResistanceCoefficient *
    						Math.Pow((axle.AxleWeightShare * TotalVehicleWeight() * g / axle.TyreTestLoad / nrWheels).Value(),
    							Physics.RollResistanceExponent - 1);
    				wheelsInertia += nrWheels * axle.Inertia;
    			}
    			TotalRollResistanceCoefficient = RRC;
    			WheelsInertia = wheelsInertia;
    		}
    
    		public ValidationResult ValidateVehicleData(VehicleData vehicleData, ValidationContext validationContext)
    		{
    			var weightShareSum = vehicleData.AxleData.Sum(axle => axle.AxleWeightShare);
    			if (!weightShareSum.IsEqual(1.0, 1E-10)) {
    				return new ValidationResult(
    					string.Format("Sum of axle weight share is not 1! sum: {0}, difference: {1}",
    						weightShareSum, 1 - weightShareSum));
    			}
    
    			if (vehicleData.TotalVehicleWeight() > vehicleData.GrossVehicleMassRating) {
    				return new ValidationResult(
    					string.Format("Total Vehicle Weight is greater than GrossVehicleMassRating! sum: {0},  GVM: {1}",
    						vehicleData.TotalVehicleWeight(), vehicleData.GrossVehicleMassRating));
    			}
    
    			return ValidationResult.Success;
    		}
    	}
    }