Engine Thermal Simulation

Engine Thermal Simulation

From BeamNG

Revision as of 00:42, 4 November 2019 by Toron Beldevar (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Released as of version 0.5.3. All information as of version 0.15. CombustionEngines in BeamNG support complex and detailed thermal systems. If enabled, the heat flow from the cylinder, to the cylinder wall, oil and coolant galleries, engine block, exhaust manifold, and then out to the air is considered, and the engine can be damaged if temperatures are not kept under control.

Jbeam Variables

Engine Section

Engine Section

Name Type Unit Optional Default Value Typical Range Description
Engine
thermalsEnabled boolean --- Ok false true/false Controls the whole thermals simulation. If omitted or set to false, the simulation won't be activated
isAirCooledOnly boolean --- Ok false true/false If set to true, the engine will not use coolant, and instead depend on oil and air cooling.
engineBlockMaterial string --- Ok iron aluminium/aluminum/iron Specifies which material the engine block is made from. This is important for internal heat/energy transfer calculations
oilVolume float L Ok 5 3 - 40 How much oil the engine has available
engineBlockAirCoolingEfficiency float --- Ok 3 1 - 50 Reflects how well the actual engine block can conduct heat to the surrounding air. Mostly depends on the exterior design of the engine block (surface area, fins, etc)
engineBlockAirflowCoef float --- Ok 1 1 - 1.3 How much airflow is over the block, increasing or decreasing it's passive cooling ability. Depends on design of engine compartment.
blockFanMaxAirSpeed float m/s Ok 0 0 - 10 Can be used to simulate an air cooled engine. If set higher than 0, the game will simulate a fan attached to the engine to help cool it by air.
cylinderWallTemperatureDamageThreshold float °C Ok 160 120 - 250 Specifies the maximum temperature the cylinder walls can sustain without starting to get damaged
engineBlockTemperatureDamageThreshold float °C Ok 140 120 - 250 Specifies the maximum temperature the engine block can sustain without starting to get damaged
headGasketDamageThreshold float --- Ok 1,500,000 500,000 - 3,000,000 Arbitrary value that can be used to fine tune how long it takes before permanent damage to the head gasket occurs
pistonRingDamageThreshold float --- Ok 1,000,000 500,000 - 3,000,000 Arbitrary value that can be used to fine tune how long it takes before permanent damage to the piston rings occurs
connectingRodDamageThreshold float --- Ok 2,000,000 500,000 - 3,000,000 Arbitrary value that can be used to fine tune how long it takes before permanent damage to the connecting rod bearings occurs
headGasketBlownOverride boolean --- Ok false true/false Set engine to have head gasket damage on spawn
pistonRingsDamagedOverride boolean --- Ok false true/false Set engine to have piston ring damage on spawn
connectingRodBearingsDamagedOverride boolean --- Ok false true/false Set engine to have connecting rod bearing damage on spawn
hasOilStarvingDamage boolean --- Ok false true/false Set engine to have oil starvation damage on spawn
Coolant Radiator
radiatorArea float Ok 0 0.2 - 1 Effective size of the coolant to air radiator
radiatorEffectiveness float --- Ok 0 10,000 - 30,000 Specifies how fast the radiator can transfer energy from the coolant to the air, the higher, the faster
coolantVolume float L Ok 1.5 5 - 80 How much coolant the cooling system has available
radiatorFanType string --- Ok --- electric/mechanical Specifies the type of radiator fan that is used. Electric fans always spin at full RPM, mechanical fans are tied to the engine RPM
radiatorFanTemperature float °C Ok 105 95 - 115 The temperature at which the radiator fan is turned on
radiatorFanMaxAirSpeed float m/s Ok 0 1 - 5 The maximum airspeed through the radiator the fan can achieve
mechanicalFanRPMCoef float --- Ok 0.5 0.5 Pulley ratio of mechanical fan to engine crankshaft
thermostatTemperature float °C Ok 90 80 - 100 The temperature at which the radiator is included in the cooling loop
radiatorDeformThreshold float --- Ok 0.015 0.015 Percent deformation radiator can endure before beginning to leak
Oil Radiator
oilThermostatTemperature float °C Ok 110 90 - 120 The temperature at which the oil radiator is included in the cooling loop
oilRadiatorArea float Ok 0 0.1 - 0.5 Effective size of the oil to air radiator
oilRadiatorEffectiveness float --- Ok 0 100,000 - 300,000 Specifies how fast the oil radiator can transfer energy from the oil to the air, the higher, the faster

Example configuration

Engine part:

	
"engine":{
        //cooling and oil system
        "thermalsEnabled":true //absolutely required, without this the thermal simulation will be disabled
        "engineBlockMaterial":"iron"
        "oilVolume":6

        //engine durability
        "cylinderWallTemperatureDamageThreshold":160
        "headGasketDamageThreshold":1500000
        "pistonRingDamageThreshold":1500000
        "connectingRodDamageThreshold":1500000
    },

Radiator part:

	
"engine":{
        //cooling system
        "radiatorArea":0.4,
        "radiatorEffectiveness":15000,
        "coolantVolume":10
        "radiatorFanType":"electric",
        "radiatorFanTemperature":105
        "radiatorFanMaxAirSpeed":2,
        "thermostatTemperature":90
    },

Tying the simulation into the vehicle

The exhaust chain system allows exhaust particles to exit out the tailpipe, or the last intact section of exhaust if a section breaks off.

Nodes Section

Nodes Section

Name Type Unit Optional Default Value Typical Range Description
isExhaust boolean --- Ok false true/false A node property used to define the starting node of the engine exhaust particle system, typically one of the engine block nodes


Beams Section

Beams Section

Name Type Unit Optional Default Value Typical Range Description
isExhaust boolean --- Ok false true/false A beam property used to define a chain of beams from the starting node to exhaust exit(s), used by the engine exhaust particle system.
A visual example of exhaust chain nodes and beams


The thermal simulation also makes use of engineGroups and deformGroups to integrate the simulation into the vehicle.


engineGroups

engineGroups

engineGroups are a special node property used to tag nodes for certain engine related features.

Name Description
engine_block This engineGroup is used to define the mass of the engine for thermal simulation. Put all the engine block nodes in this engineGroup and make sure that those nodes have a realistic weight as they will be used to caculate the weight of the engine block.
radiator This engineGroup is used to define the location of steam generation point on the radiator. Put 2 nodes in the group to define locations for the steam particles.

Just defining the engineGroups is not enough, you must also, in an "engine":{} section in the main vehicle jbeam, link the names of the engineGroups to the variables of the thermal simulation. For example:

"engine":{
        "radiator": {"[engineGroup]:":["radiator"]}
        "engineBlock": {"[engineGroup]:":["engine_block"]}
    },

An example of engineGroups in the nodes section of an engine part:

"nodes": [
         ["id", "posX", "posY", "posZ"],
         {"selfCollision":false}
         {"collision":true}
         //--4.1L I6 Engine-
         {"frictionCoef":0.5},
         {"nodeMaterial":"|NM_METAL"},
         {"nodeWeight":23},
         {"group":"pickup_engine"},
         {"engineGroup":["pickup_engine_block","pickup_exhaust_manifold"]}
         ["e1r", -0.14, -1.07, 0.43],
         {"engineGroup":"pickup_engine_block"},
         ["e1l", 0.14, -1.07, 0.43],
         ["e2r", -0.14, -1.72, 0.43],
         ["e2l", 0.14, -1.72, 0.43],
         {"engineGroup":["pickup_engine_block","pickup_engine_intake"]}
         ["e3r", -0.15, -1.07, 0.88],
         ["e3l", 0.15, -1.07, 0.88],
         ["e4r", -0.15, -1.72, 0.88,],
         ["e4l", 0.15, -1.72, 0.88],
         {"engineGroup":""}
         {"group":""},
    ],


deformGroups

deformGroups

deformGroups are used to measure beam deformation in order to control damage states. See http://wiki.beamng.com/DeformGroups

Name Description
radiator_damage This deformGroup is used to sense deformation of the radiator. When beams in this group deform, the thermal simulation causes coolant to leak and cooling effectiveness to go down.

An example of deformGroups used in the beams section of a radiator part:

"beams": [
          ["id1:", "id2:"],
          {"beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0},
          {"beamSpring":501000,"beamDamp":50},
          {"beamDeform":1000,"beamStrength":"FLT_MAX"},
          //radiator shape
          {"deformGroup":"radiator_damage", "deformationTriggerRatio":0.02},
          ["f1r","fr5l"],
          ["f1l","fr5r"],
          //radiator crush
          {"deformationTriggerRatio":0.1}
          {"beamType":"|SUPPORT", "beamLongBound":1.0},
          ["fr5r","fr6r"],
          ["fr5r","fr6r"],
          ["fr5","fr6"],
          ["f1r","f3r"],
          ["f1r","f3"],
          ["f1","f3l"],
          {"deformGroup":""}
    ],
Vehicle Creation
Get started: Introduction to Vehicle Creation
JBeam
Overview
Physics
Dynamics
Visuals
Extras
Upkeep
Deprecated
See also: JBeam ExamplesJBeam Physics Theory