Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // note: this is kinda janky rn
- import "engine_sim.mr"
- import "../../part-library/part_library.mr"
- units units()
- constants constants()
- label cycle(2 * 360 * units.deg)
- label sparkadvance(-60 * units.deg)
- 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();
- }
- public node P60B40_distributor {
- input wires;
- input timing_curve;
- input rev_limit: 8500 * units.rpm;
- alias output __out:
- ignition_module(timing_curve: timing_curve, rev_limit: rev_limit, limiter_duration: 0.01 * units.sec)
- .connect_wire(wires.wire1, ((0.0/4.0) * cycle) + sparkadvance)
- .connect_wire(wires.wire2, ((3.0/4.0) * cycle) + sparkadvance)
- .connect_wire(wires.wire3, ((1.0/4.0) * cycle) + sparkadvance)
- .connect_wire(wires.wire4, ((2.0/4.0) * cycle) + sparkadvance)
- .connect_wire(wires.wire5, ((0.0/4.0) * cycle) + sparkadvance)
- .connect_wire(wires.wire6, ((3.0/4.0) * cycle) + sparkadvance)
- .connect_wire(wires.wire7, ((1.0/4.0) * cycle) + sparkadvance)
- .connect_wire(wires.wire8, ((2.0/4.0) * cycle) + sparkadvance);
- }
- public node P60B40_intake_lobe_profile {
- alias output __out:
- harmonic_cam_lobe(
- duration_at_50_thou: 210 * units.deg,
- gamma: 1.0,
- lift: 10 * units.mm,
- steps: 100
- );
- }
- public node P60B40_exhaust_lobe_profile {
- alias output __out:
- harmonic_cam_lobe(
- duration_at_50_thou: 225 * units.deg,
- gamma: 1.0,
- lift: 12 * units.mm,
- steps: 100
- );
- }
- public node P60B40_camshaft_builder {
- input lobe_profile: P60B40_intake_lobe_profile();
- input ex_lobe_profile: P60B40_exhaust_lobe_profile();
- input intake_lobe_profile: lobe_profile;
- input exhaust_lobe_profile: ex_lobe_profile;
- input lobe_separation: 102.0 * units.deg;
- input intake_lobe_center: lobe_separation;
- input exhaust_lobe_center: lobe_separation;
- input advance: -90.0 * units.deg;
- input base_radius: 0.6 * units.inch;
- output intake_cam_0: _intake_cam_0;
- output exhaust_cam_0: _exhaust_cam_0;
- output intake_cam_1: _intake_cam_1;
- 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 _exhaust_cam_0(params, lobe_profile: exhaust_lobe_profile)
- camshaft _intake_cam_1(params, lobe_profile: intake_lobe_profile)
- camshaft _exhaust_cam_1(params, lobe_profile: exhaust_lobe_profile)
- label rot90(90 * units.deg)
- label rot360(360 * units.deg)
- _intake_cam_0
- .add_lobe(rot360 + intake_lobe_center + 0 * rot90) //0
- .add_lobe(rot360 + intake_lobe_center + 5 * rot90) //1
- .add_lobe(rot360 + intake_lobe_center + 2 * rot90) //2
- .add_lobe(rot360 + intake_lobe_center + 7 * rot90) //3
- _intake_cam_1
- .add_lobe(rot360 + intake_lobe_center + 0 * rot90) //4
- .add_lobe(rot360 + intake_lobe_center + 5 * rot90) //5
- .add_lobe(rot360 + intake_lobe_center + 2 * rot90) //6
- .add_lobe(rot360 + intake_lobe_center + 7 * rot90) //7
- _exhaust_cam_0
- .add_lobe(rot360 - intake_lobe_center + 0 * rot90)
- .add_lobe(rot360 - intake_lobe_center + 5 * rot90)
- .add_lobe(rot360 - intake_lobe_center + 2 * rot90)
- .add_lobe(rot360 - intake_lobe_center + 7 * rot90)
- _exhaust_cam_1
- .add_lobe(rot360 - intake_lobe_center + 0 * rot90)
- .add_lobe(rot360 - intake_lobe_center + 5 * rot90)
- .add_lobe(rot360 - intake_lobe_center + 2 * rot90)
- .add_lobe(rot360 - intake_lobe_center + 7 * rot90)
- }
- private node add_flow_sample {
- input lift;
- input flow;
- input this;
- alias output __out: this;
- this.add_sample(lift * units.thou, k_28inH2O(flow))
- }
- public node P60B40_head {
- input intake_camshaft;
- input exhaust_camshaft;
- input chamber_volume: 60.0 * units.cc;
- input flip_display: false;
- alias output __out: head;
- function intake_flow(50 * units.thou)
- intake_flow
- .add_flow_sample(0, 0)
- .add_flow_sample(250, 225)
- .add_flow_sample(300, 276)
- .add_flow_sample(350, 300)
- .add_flow_sample(400, 346)
- .add_flow_sample(450, 375)
- .add_flow_sample(500, 412)
- .add_flow_sample(550, 430)
- .add_flow_sample(600, 455)
- .add_flow_sample(650, 475)
- .add_flow_sample(700, 494)
- .add_flow_sample(750, 500)
- .add_flow_sample(800, 514)
- .add_flow_sample(850, 514)
- .add_flow_sample(900, 514)
- function exhaust_flow(50 * units.thou)
- exhaust_flow
- .add_flow_sample(0, 0)
- .add_flow_sample(250, 225)
- .add_flow_sample(300, 2700)
- .add_flow_sample(350, 300)
- .add_flow_sample(400, 332)
- .add_flow_sample(450, 340)
- .add_flow_sample(500, 356)
- .add_flow_sample(550, 370)
- .add_flow_sample(600, 381)
- .add_flow_sample(650, 391)
- .add_flow_sample(700, 407)
- .add_flow_sample(750, 414)
- .add_flow_sample(800, 428)
- .add_flow_sample(850, 428)
- .add_flow_sample(900, 428)
- cylinder_head head(
- chamber_volume: chamber_volume,
- intake_runner_volume: 275.0 * units.cc,
- intake_runner_cross_section_area: 9.6123 * 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 P60B40 {
- alias output __out: engine;
- engine engine(
- name: "P60B40",
- starter_torque: 200 * units.lb_ft,
- starter_speed: 2200 * units.rpm,
- redline: 8500 * units.rpm,
- fuel: fuel(
- max_turbulence_effect: 2.0,
- burning_efficiency_randomness: 0.2,
- max_burning_efficiency: 5.00
- )
- )
- wires wires()
- crankshaft c0(
- throw: 72.2 * units.mm/2,
- flywheel_mass: 1 * units.kg,
- mass: 8 * units.kg,
- friction_torque: 0.0 * units.lb_ft,
- moment_of_inertia: 0.03,
- position_x: 0.0,
- position_y: 0.0,
- tdc: (constants.pi / 4)
- )
- piston_parameters piston_params(
- mass: 240 * units.g,
- compression_height: 20.51 * units.mm,
- wrist_pin_position: 0.0,
- displacement: 0 * units.cc
- )
- connecting_rod_parameters cr_params(
- mass: 240.0 * units.g,
- moment_of_inertia: 0.0015884918028487504,
- center_of_mass: 0.0,
- length: 130.72 * units.mm
- )
- cylinder_bank_parameters bank_params(
- bore: 94 * units.mm,
- deck_height: 205 * units.mm
- )
- performer_rpm_intake intake(
- carburetor_cfm: 1200.0,
- idle_flow_rate_cfm: 0.002,
- idle_throttle_plate_position: 0.996,
- throttle_gamma: 1.5
- )
- exhaust_system_parameters es_params0(
- outlet_flow_rate: k_carb(2200.0),
- primary_tube_length: 30.0 * units.inch,
- primary_flow_rate: k_carb(2200.0),
- velocity_decay: 0.0, //0.5
- volume: 300.0 * units.L
- )
- exhaust_system_parameters es_params1(
- outlet_flow_rate: k_carb(2200.0),
- primary_tube_length: 40.0 * units.inch,
- primary_flow_rate: k_carb(2200.0),
- velocity_decay: 0.0, //0.5
- volume: 301.0 * units.L
- )
- rod_journal rj1(angle: 0.0 * units.deg)
- rod_journal rj2(angle: 270.0 * units.deg)
- rod_journal rj3(angle: 180.0 * units.deg)
- rod_journal rj4(angle: 450.0 * units.deg)
- rod_journal rj5(angle: 180.0 * units.deg)
- rod_journal rj6(angle: 450.0 * units.deg)
- rod_journal rj7(angle: 0.0 * units.deg)
- rod_journal rj8(angle: 270.0 * units.deg)
- c0
- .add_rod_journal(rj1)
- .add_rod_journal(rj2)
- .add_rod_journal(rj3)
- .add_rod_journal(rj4)
- .add_rod_journal(rj5)
- .add_rod_journal(rj6)
- .add_rod_journal(rj7)
- .add_rod_journal(rj8)
- impulse_response ir0(filename: "../../sound-library/smooth/smooth_35.wav", volume: 0.001)
- impulse_response ir1(filename: "../../sound-library/smooth/smooth_35.wav", volume: 0.001)
- exhaust_system exhaust0(es_params0, audio_volume: 1.0, impulse_response: ir0)
- exhaust_system exhaust1(es_params1, audio_volume: 1.0, impulse_response: ir1)
- cylinder_bank b0(bank_params, angle: 45 * units.deg)
- b0
- .add_cylinder(
- piston: piston(piston_params, blowby: k_28inH2O(0.1)),
- connecting_rod: connecting_rod(cr_params),
- rod_journal: rj1,
- 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: rj3,
- 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: rj5,
- 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: rj7,
- intake: intake,
- exhaust_system: exhaust0,
- ignition_wire: wires.wire4
- )
- cylinder_bank b1(bank_params, angle: -45 * units.deg)
- b1
- .add_cylinder(
- piston: piston(piston_params, blowby: k_28inH2O(0.1)),
- connecting_rod: connecting_rod(cr_params),
- rod_journal: rj2,
- intake: intake,
- exhaust_system: exhaust1,
- ignition_wire: wires.wire5
- )
- .add_cylinder(
- piston: piston(piston_params, blowby: k_28inH2O(0.1)),
- connecting_rod: connecting_rod(cr_params),
- rod_journal: rj4,
- intake: intake,
- exhaust_system: exhaust1,
- ignition_wire: wires.wire6
- )
- .add_cylinder(
- piston: piston(piston_params, blowby: k_28inH2O(0.1)),
- connecting_rod: connecting_rod(cr_params),
- rod_journal: rj6,
- intake: intake,
- exhaust_system: exhaust1,
- ignition_wire: wires.wire7
- )
- .add_cylinder(
- piston: piston(piston_params, blowby: k_28inH2O(0.1)),
- connecting_rod: connecting_rod(cr_params),
- rod_journal: rj8,
- intake: intake,
- exhaust_system: exhaust1,
- ignition_wire: wires.wire8
- )
- engine
- .add_cylinder_bank(b0)
- .add_cylinder_bank(b1)
- engine.add_crankshaft(c0)
- P60B40_camshaft_builder camshaft(
- lobe_profile: P60B40_intake_lobe_profile(),
- ex_lobe_profile: P60B40_exhaust_lobe_profile()
- )
- b0.set_cylinder_head (
- P60B40_head(
- chamber_volume: 60.0 * units.cc,
- intake_camshaft: camshaft.intake_cam_0,
- exhaust_camshaft: camshaft.exhaust_cam_0,
- flip_display: true
- )
- )
- b1.set_cylinder_head (
- P60B40_head(
- chamber_volume: 60.0 * units.cc,
- intake_camshaft: camshaft.intake_cam_1,
- exhaust_camshaft: camshaft.exhaust_cam_1,
- flip_display: false
- )
- )
- function timing_curve(1000 * units.rpm)
- timing_curve
- .add_sample(0 * units.rpm, 11 * units.deg)
- .add_sample(1000 * units.rpm, 22 * units.deg)
- .add_sample(2000 * units.rpm, 22 * units.deg)
- .add_sample(3000 * units.rpm, 44 * units.deg)
- .add_sample(4000 * units.rpm, 44 * units.deg)
- .add_sample(5000 * units.rpm, 55 * units.deg)
- .add_sample(6000 * units.rpm, 55 * units.deg)
- .add_sample(7000 * units.rpm, 55 * units.deg)
- .add_sample(8000 * units.rpm, 55 * units.deg)
- .add_sample(9000 * units.rpm, 55 * units.deg)
- engine.add_ignition_module(
- P60B40_distributor(
- wires: wires,
- timing_curve: timing_curve,
- rev_limit: 8500 * units.rpm
- ))
- }
- public node P60B40_vehicle {
- alias output __out: vehicle;
- vehicle vehicle(
- mass: 1120 * units.kg,
- drag_coefficient: 0.0012,
- cross_sectional_area: (1900 * units.mm) * (1318 * units.mm),
- diff_ratio: 13.00,
- tire_radius: 22.5 * units.inch,
- rolling_resistance: 2000
- )
- }
- public node P60B40_transmission {
- alias output __out: trans;
- transmission trans(
- max_clutch_torque: 2400 * units.lb_ft
- )
- trans
- .add_gear(2.7)
- .add_gear(2.5)
- .add_gear(2.07)
- .add_gear(1.89)
- .add_gear(1.58)
- .add_gear(1.38)
- .add_gear(1.24)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement