ange-yaghi / engine-sim

Combustion engine simulator that generates realistic audio.
http://engine-sim.parts/
MIT License
8.67k stars 786 forks source link

so, why can't i use fan-made engines? #410

Open VoltureZh opened 1 year ago

VoltureZh commented 1 year ago

here are the codes for "solus gt":

import "engine_sim.mr"

units units() constants constants() impulse_response_library ir_lib()

label cycle72(72 units.deg) label cycle60(60 units.deg)

private node solus_gt_distributor { input wires; input timing_curve; input rev_limit: 10000 units.rpm; input limiter_duration: 0.045; alias output __out: ignition_module(timing_curve: timing_curve, rev_limit: rev_limit, limiter_duration: limiter_duration) .connect_wire(wires.wire10, 0) .connect_wire(wires.wire4, 1.0 cycle72) .connect_wire(wires.wire9, 2.0 cycle72) .connect_wire(wires.wire3, 3.0 cycle72) .connect_wire(wires.wire8, 4.0 cycle72) .connect_wire(wires.wire2, 5.0 cycle72) .connect_wire(wires.wire7, 6.0 cycle72) .connect_wire(wires.wire1, 7.0 cycle72) .connect_wire(wires.wire6, 8.0 cycle72) .connect_wire(wires.wire5, 9.0 cycle72) ; }

// // 1-6-5-10-2-7-3-8-4-9

private node wires { output wire1: ignition_wire(); output wire2: ignition_wire(); output wire3: ignition_wire(); output wire4: ignition_wire(); output wire5: ignition_wire(); output wire6: ignition_wire(); output wire7: ignition_wire(); output wire8: ignition_wire(); output wire9: ignition_wire(); output wire10: ignition_wire(); output wire11: ignition_wire(); output wire12: ignition_wire(); }

private node add_sym_sample { input angle; input lift; input this; alias output __out: this;

this.add_sample(angle * units.deg, lift * units.thou)
this.add_sample(-angle * units.deg, lift * units.thou)

}

private node solus_gt_lobe_profile_int { alias output __out: harmonic_cam_lobe( duration_at_50_thou: 240 units.deg, gamma: 1.5, lift: 29.5 units.mm, steps: 100 ); }

private node solus_gt_lobe_profile_exh { alias output __out: harmonic_cam_lobe( duration_at_50_thou: 230 units.deg, gamma: 1.5, lift: 28.5 units.mm, steps: 100 ); }

private node solus_gt_camshaft_builder { input lobe_profile: solus_gt_lobe_profile_int(); input ex_lobe_profile: solus_gt_lobe_profile_exh(); input intake_lobe_profile: lobe_profile; input exhaust_lobe_profile: ex_lobe_profile; input lobe_separation: 114.0 units.deg; input intake_lobe_center: lobe_separation; input exhaust_lobe_center: lobe_separation; input advance: -4.5 units.deg; input base_radius: 1.0 * units.inch;

output intake_cam_0: _intake_cam_0;
output intake_cam_1: _intake_cam_1;
output exhaust_cam_0: _exhaust_cam_0;
output exhaust_cam_1: _exhaust_cam_1;

camshaft_parameters params(
    advance: advance,
    base_radius: base_radius
)

camshaft _intake_cam_0(params, lobe_profile: intake_lobe_profile)
camshaft _intake_cam_1(params, lobe_profile: intake_lobe_profile)
camshaft _exhaust_cam_0(params, lobe_profile: exhaust_lobe_profile)
camshaft _exhaust_cam_1(params, lobe_profile: exhaust_lobe_profile)

label rot360(360 * units.deg)
label cyl(720/12 * units.deg)

label offset(0.1) _exhaust_cam_0 .add_lobe(rot360 - exhaust_lobe_center + 7 cycle72 + 1 offset) //1 .add_lobe(rot360 - exhaust_lobe_center + 5 cycle72 + 3 offset) //2 .add_lobe(rot360 - exhaust_lobe_center + 3 cycle72 + 2 offset) //3 .add_lobe(rot360 - exhaust_lobe_center + 1 cycle72 - 2 offset) //4 .add_lobe(rot360 - exhaust_lobe_center + 9 cycle72 - 3 offset) //5

_exhaust_cam_1
    .add_lobe(rot360 - exhaust_lobe_center + 8 * cycle72 +          1* offset)     //10
    .add_lobe(rot360 - exhaust_lobe_center + 6 * cycle72 +          3* offset)     //9
    .add_lobe(rot360 - exhaust_lobe_center + 4 * cycle72 +          2* offset)     //8
    .add_lobe(rot360 - exhaust_lobe_center + 2 * cycle72 -          2* offset)     //7
    .add_lobe(rot360 - exhaust_lobe_center + 0 * cycle72 -          3* offset)     //6

_intake_cam_0
    .add_lobe(rot360 + intake_lobe_center + 7 * cycle72)                      //1
    .add_lobe(rot360 + intake_lobe_center + 5 * cycle72)                      //2
    .add_lobe(rot360 + intake_lobe_center + 3 * cycle72)                      //3
    .add_lobe(rot360 + intake_lobe_center + 1 * cycle72)                      //4
    .add_lobe(rot360 + intake_lobe_center + 9 * cycle72)                     //5 

_intake_cam_1
    .add_lobe(rot360 + intake_lobe_center + 8 * cycle72)                      //10
    .add_lobe(rot360 + intake_lobe_center + 6 * cycle72)                      //9
    .add_lobe(rot360 + intake_lobe_center + 4 * cycle72)                      //8
    .add_lobe(rot360 + intake_lobe_center + 2 * cycle72)                      //7
    .add_lobe(rot360 + intake_lobe_center + 0 * cycle72)                     //6

}

private node add_flow_sample { input lift; input flow; input this; alias output __out: this;

this.add_sample(lift * units.mm, k_28inH2O(flow))

}

private node turbulence_to_flame_speed_ratio { alias output __out: function(5.0) .add_sample(0.0, 3.0 3.0) .add_sample(5.0, 3.0 1.5 5.0) .add_sample(10.0, 3.0 1.5 10.0) .add_sample(15.0, 3.0 1.5 12.0) .add_sample(20.0, 3.0 1.5 15.0) .add_sample(25.0, 3.0 1.5 18.0) .add_sample(30.0, 3.0 1.5 21.0) .add_sample(35.0, 3.0 1.5 25.0) .add_sample(40.0, 3.0 1.5 30.0) .add_sample(45.0, 3.0 1.5 * 34.0); }

public node v10_vehicle { input mass: (1000 + 80) units.kg; //dry weight + driver weight (not with fluids to save weight and achieve more accurate acceleration) input diff_ratio: 3.20; input tire_radius: (27.0/2) units.inch; input drag_coefficient: 0.37; input cross_sectional_area: 1.70 * units.m2;

alias output __out: vehicle;

vehicle vehicle( mass: mass, diff_ratio: diff_ratio, tire_radius: tire_radius, drag_coefficient: drag_coefficient, cross_sectional_area: cross_sectional_area ) }

public node v10_transmission { //there is no data about the Solus GTs' transmission, so this uses custom gear ratios input max_clutch_torque: 1200 * units.lb_ft; alias output __out: transmission(max_clutch_torque) .add_gear(4.221) .add_gear(3.305) .add_gear(2.465) .add_gear(1.741) .add_gear(1.365) .add_gear(1.039) .add_gear(0.759); }

public node solus_gt_head { input intake_camshaft; input exhaust_camshaft; input chamber_volume: 41.0 * units.cc; input flip_display: false;

input flow_attenuation: 1.00;
input lift_scale: 1.0;
alias output __out: head;

function intake_flow(1 * units.mm)
intake_flow
    .add_flow_sample(0 * lift_scale, 0 * flow_attenuation)
    .add_flow_sample(1 * lift_scale, 35 * flow_attenuation)
    .add_flow_sample(2 * lift_scale, 60 * flow_attenuation)
    .add_flow_sample(3 * lift_scale, 90 * flow_attenuation)
    .add_flow_sample(4 * lift_scale, 125 * flow_attenuation)
    .add_flow_sample(5 * lift_scale, 150 * flow_attenuation)
    .add_flow_sample(6 * lift_scale, 175 * flow_attenuation)
    .add_flow_sample(7 * lift_scale, 200 * flow_attenuation)
    .add_flow_sample(8 * lift_scale, 215 * flow_attenuation)
    .add_flow_sample(9 * lift_scale, 230 * flow_attenuation)
    .add_flow_sample(10 * lift_scale, 280 * flow_attenuation)
    .add_flow_sample(11 * lift_scale, 300 * flow_attenuation)
    .add_flow_sample(12 * lift_scale, 345 * flow_attenuation)

function exhaust_flow(1 * units.mm)
exhaust_flow
    .add_flow_sample(0 * lift_scale, 0 * flow_attenuation)
    .add_flow_sample(1 * lift_scale, 35 * flow_attenuation)
    .add_flow_sample(2 * lift_scale, 55 * flow_attenuation)
    .add_flow_sample(3 * lift_scale, 85 * flow_attenuation)
    .add_flow_sample(4 * lift_scale, 105 * flow_attenuation)
    .add_flow_sample(5 * lift_scale, 120 * flow_attenuation)
    .add_flow_sample(6 * lift_scale, 140 * flow_attenuation)
    .add_flow_sample(7 * lift_scale, 150 * flow_attenuation)
    .add_flow_sample(8 * lift_scale, 155 * flow_attenuation)
    .add_flow_sample(9 * lift_scale, 160 * flow_attenuation)
    .add_flow_sample(10 * lift_scale, 200 * flow_attenuation)
    .add_flow_sample(11 * lift_scale, 210 * flow_attenuation)
    .add_flow_sample(12 * lift_scale, 215 * flow_attenuation)

cylinder_head head(
    chamber_volume: chamber_volume,
    intake_runner_volume: 500.0 * units.cc,
    intake_runner_cross_section_area: 2 * 12.4087 * units.cm2,

    intake_port_flow: intake_flow,
    exhaust_port_flow: exhaust_flow,
    intake_camshaft: intake_camshaft,
    exhaust_camshaft: exhaust_camshaft,
    flip_display: flip_display
)

}

public node solus_gt { alias output __out: engine;

//Solus GT
//engine file made by [dacxl]
// 10-4-9-3-8-2-7-1-6-5

engine engine(
    name: "Solus GT (Judd GV5)",
    starter_torque: 200 * units.Nm,
    starter_speed: 1500 * units.rpm,
    redline: 10000 * units.rpm,
    fuel: fuel(
        max_turbulence_effect: 5.0,
        turbulence_to_flame_speed_ratio: turbulence_to_flame_speed_ratio()
    )
)

wires wires()

crankshaft c0(
    throw: 74.92 * units.mm / 2,         //stroke, guessed because theres a lack of data
    flywheel_mass: 4 * 2 * units.Nm,
    mass: 5 * units.kg,
    friction_torque: 13.5 * units.Nm,
    moment_of_inertia: 0.22986844776863666 * 2,
    position_x: 0.0,
    position_y: 0.0,
    tdc: 54.0 * units.deg
)

// 1-6-5-10-2-7-3-8-4-9
//                                                              10-4-9-3-8-2-7-1-6-5
// 6 7
// 5 8
// 4 9
// 3 10
// 2 11
// 1 12

rod_journal rj0(angle: 2 * cycle72)
rod_journal rj2(angle: 1 * cycle72) 
rod_journal rj4(angle: 4 * cycle72)
rod_journal rj6(angle: 2 * cycle72)
rod_journal rj8(angle: 0 * cycle72)

c0
    .add_rod_journal(rj0)
    .add_rod_journal(rj2)
    .add_rod_journal(rj4)
    .add_rod_journal(rj6)
    .add_rod_journal(rj8)

piston_parameters piston_params(
    mass: 300 * units.g,
    compression_height: 55.0 * units.mm,
    wrist_pin_position: 0.0,
    displacement: 0.0
)

connecting_rod_parameters cr_params(
    mass: 200.0 * units.g,
    moment_of_inertia: 0.0015884918028487504,
    center_of_mass: 0.0,
    length: 135.0 * units.mm
)

cylinder_bank_parameters bank_params(
    bore: 94 * units.mm,
    deck_height: (135.0 + 48.8) * units.mm + 95.8 * units.mm / 2.0
)

performer_rpm_intake intake(
    carburetor_cfm: 9000.0,
    idle_flow_rate_cfm: 0.0,
    idle_throttle_plate_position: 0.99927,
    throttle_gamma: 2.0
)

exhaust_system_parameters es_params(
    outlet_flow_rate: k_carb(1000.0),
    primary_tube_length: 8.0 * units.inch,
    primary_flow_rate: k_carb(300.0),
    velocity_decay: 1.0,
    volume: 150.0 * units.L
)

exhaust_system_parameters es_params2(
    outlet_flow_rate: k_carb(1000.0),
    primary_tube_length: 8.0 * units.inch,
    primary_flow_rate: k_carb(300.0),
    velocity_decay: 1.0,
    volume: 150.0 * units.L
)

exhaust_system_parameters es_params3(
    outlet_flow_rate: k_carb(1000.0),
    primary_tube_length: 7.5 * units.inch,
    primary_flow_rate: k_carb(300.0),
    velocity_decay: 1.0,
    volume: 150.0 * units.L
)

exhaust_system_parameters es_params4(
    outlet_flow_rate: k_carb(1000.0),
    primary_tube_length: 7.5 * units.inch,
    primary_flow_rate: k_carb(300.0),
    velocity_decay: 1.0,
    volume: 150.0 * units.L
)

label impulse("../../sound-library/smooth/smooth_40.wav")

exhaust_system exhaust0(
    es_params,
    audio_volume: 1.0 * 0.1,
    impulse_response:
        impulse_response(
            filename: impulse,
            volume: 0.01)
)

exhaust_system exhaust1(
    es_params2,
    audio_volume: 1.0 * 0.1,
    impulse_response:
        impulse_response(
            filename: impulse,
            volume: 0.01)
)

exhaust_system exhaust2(
    es_params3,
    audio_volume: 1.0 * 0.1,
    impulse_response:
        impulse_response(
            filename: impulse,
            volume: 0.01)
)

exhaust_system exhaust3(
    es_params4,
    audio_volume: 1.0 * 0.1,
    impulse_response:
        impulse_response(
            filename: impulse,
            volume: 0.01)
)

// 5 6
// 4 7
// 3 8
// 2 9
// 1 10

cylinder_bank b0(bank_params, angle: 36 * units.deg)
b0
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj0,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire1
    )
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj2,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire2
    )
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj4,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire3
    )
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj6,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire4
    )
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj8,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire5
    )

cylinder_bank b1(bank_params, angle: -36.0 * units.deg)
b1
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj0,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire6
    )
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj2,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire7
    )
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj4,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire8
    )
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj6,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire9
    )
    .add_cylinder(
        piston: piston(piston_params, blowby: k_28inH2O(0.1)),
        connecting_rod: connecting_rod(cr_params),
        rod_journal: rj8,
        intake: intake,
        exhaust_system: exhaust0,
        ignition_wire: wires.wire10
    )

engine
    .add_cylinder_bank(b1)
    .add_cylinder_bank(b0)

engine.add_crankshaft(c0)

harmonic_cam_lobe lobe(
    duration_at_50_thou: 256 * units.deg,
    gamma: 1.1,
    lift: 11.0 * units.mm,
    steps: 100
)

solus_gt_camshaft_builder camshaft(
    lobe_profile: solus_gt_lobe_profile_int(),
    ex_lobe_profile: solus_gt_lobe_profile_exh()
)

b0.set_cylinder_head (
    solus_gt_head(
        intake_camshaft: camshaft.intake_cam_0,
        exhaust_camshaft: camshaft.exhaust_cam_0
    )
)
b1.set_cylinder_head (
    solus_gt_head(
        intake_camshaft: camshaft.intake_cam_1,
        exhaust_camshaft: camshaft.exhaust_cam_1
    )
)
function timing_curve(1000 * units.rpm)
timing_curve
    .add_sample(0 * units.rpm, 10 * units.deg)
    .add_sample(1000 * units.rpm, 15 * units.deg)
    .add_sample(2000 * units.rpm, 18 * units.deg)
    .add_sample(3000 * units.rpm, 21 * units.deg)
    .add_sample(4000 * units.rpm, 22 * units.deg)
    .add_sample(5000 * units.rpm, 23 * units.deg)
    .add_sample(6000 * units.rpm, 25 * units.deg)
    .add_sample(7000 * units.rpm, 26 * units.deg)
    .add_sample(8000 * units.rpm, 27 * units.deg)
    .add_sample(9000 * units.rpm, 28 * units.deg)
    .add_sample(10000 * units.rpm, 30 * units.deg)
    .add_sample(11000 * units.rpm, 30 * units.deg)

engine.add_ignition_module(
    solus_gt_distributor(
        wires: wires,
        timing_curve: timing_curve,
        rev_limit: 10000 * units.rpm,
        limiter_duration: 0.045
    ))

}

VoltureZh commented 1 year ago

Screenshot (7131)

eYuM-coder commented 1 year ago

So... You've downloaded a fan-made engine. One thing I already notice that's out of the ordinary is that there are ten wires connected in the distributor while there are TWELVE total wires, consider removing the 2 extra ignition wires and see if that works.

VoltureZh commented 1 year ago

thanks!

edit: i did it, but it still won't start, it happens to me with every fanmade car