Engine Thermal Simulation

Engine Thermal Simulation

From BeamNG

Released as of version 0.5.3

Jbeam Variables

Engine Section

Engine Section

Name Type Unit Optional Default Value Typical Range Description
Engine
thermalsEnabled bool --- Ok false true/false Controls the whole thermals simulation. If omitted or set to false, the simulation won't be activated
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)
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 Arbitary 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 Arbitary 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 Arbitary value that can be used to fine tune how long it takes before permanent damage to the connecting rod bearings occurs
Radiators
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 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
thermostatTemperature float °C Ok 90 80 - 100 The temperature at which the radiator is included in the cooling loop
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 bool --- 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 bool --- 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":""}
    ],