@jetta/axle-load-calculator 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/ai_changelog/INDEX.md +13 -0
- package/.cursor/ai_changelog/_TEMPLATE.md +55 -0
- package/.cursor/rules/code-standards.mdc +103 -0
- package/.cursor/rules/knowledge-base.mdc +14 -0
- package/.cursor/rules/planning-standards.mdc +55 -0
- package/.cursor/skills/document-feature-knowledge/SKILL.md +51 -0
- package/README.md +49 -0
- package/bitbucket-pipelines.yml +81 -0
- package/build/core/contracts/chassi_reference.d.ts +7 -0
- package/build/core/contracts/chassi_reference.d.ts.map +1 -0
- package/build/core/contracts/chassi_reference.js +5 -0
- package/build/core/contracts/ms_faixas_contract.d.ts +13 -0
- package/build/core/contracts/ms_faixas_contract.d.ts.map +1 -0
- package/build/core/contracts/ms_faixas_contract.js +89 -0
- package/build/core/contracts/rotation_enum.d.ts +11 -0
- package/build/core/contracts/rotation_enum.d.ts.map +1 -0
- package/build/core/contracts/rotation_enum.js +9 -0
- package/build/core/contracts/suspension_type.d.ts +5 -0
- package/build/core/contracts/suspension_type.d.ts.map +1 -0
- package/build/core/contracts/suspension_type.js +4 -0
- package/build/core/contracts/transport_record.d.ts +5 -0
- package/build/core/contracts/transport_record.d.ts.map +1 -0
- package/build/core/contracts/transport_record.js +1 -0
- package/build/core/contracts/vehicle_type.d.ts +12 -0
- package/build/core/contracts/vehicle_type.d.ts.map +1 -0
- package/build/core/contracts/vehicle_type.js +10 -0
- package/build/core/contracts/vehicle_version.d.ts +8 -0
- package/build/core/contracts/vehicle_version.d.ts.map +1 -0
- package/build/core/contracts/vehicle_version.js +7 -0
- package/build/core/contracts/wire_flags.d.ts +27 -0
- package/build/core/contracts/wire_flags.d.ts.map +1 -0
- package/build/core/contracts/wire_flags.js +26 -0
- package/build/core/math/float_tools.d.ts +7 -0
- package/build/core/math/float_tools.d.ts.map +1 -0
- package/build/core/math/float_tools.js +14 -0
- package/build/core/math/gaussian_elimination.d.ts +8 -0
- package/build/core/math/gaussian_elimination.d.ts.map +1 -0
- package/build/core/math/gaussian_elimination.js +85 -0
- package/build/core/orchestration/axle_weight_physics.d.ts +7 -0
- package/build/core/orchestration/axle_weight_physics.d.ts.map +1 -0
- package/build/core/orchestration/axle_weight_physics.js +27 -0
- package/build/core/orchestration/collision_checker.d.ts +6 -0
- package/build/core/orchestration/collision_checker.d.ts.map +1 -0
- package/build/core/orchestration/collision_checker.js +67 -0
- package/build/core/orchestration/connector_payload_builder.d.ts +11 -0
- package/build/core/orchestration/connector_payload_builder.d.ts.map +1 -0
- package/build/core/orchestration/connector_payload_builder.js +67 -0
- package/build/core/orchestration/java_mass_center.d.ts +9 -0
- package/build/core/orchestration/java_mass_center.d.ts.map +1 -0
- package/build/core/orchestration/java_mass_center.js +79 -0
- package/build/core/orchestration/output_builder.d.ts +11 -0
- package/build/core/orchestration/output_builder.d.ts.map +1 -0
- package/build/core/orchestration/output_builder.js +15 -0
- package/build/core/orchestration/request_schema.d.ts +65 -0
- package/build/core/orchestration/request_schema.d.ts.map +1 -0
- package/build/core/orchestration/request_schema.js +20 -0
- package/build/core/orchestration/weight_by_axis_task.d.ts +7 -0
- package/build/core/orchestration/weight_by_axis_task.d.ts.map +1 -0
- package/build/core/orchestration/weight_by_axis_task.js +105 -0
- package/build/core/physics/items/allocated_item.d.ts +22 -0
- package/build/core/physics/items/allocated_item.d.ts.map +1 -0
- package/build/core/physics/items/allocated_item.js +29 -0
- package/build/core/physics/items/allocated_item_manager.d.ts +31 -0
- package/build/core/physics/items/allocated_item_manager.d.ts.map +1 -0
- package/build/core/physics/items/allocated_item_manager.js +38 -0
- package/build/core/physics/items/center_of_mass.d.ts +14 -0
- package/build/core/physics/items/center_of_mass.d.ts.map +1 -0
- package/build/core/physics/items/center_of_mass.js +24 -0
- package/build/core/physics/items/compute_grouper_center_of_mass.d.ts +19 -0
- package/build/core/physics/items/compute_grouper_center_of_mass.d.ts.map +1 -0
- package/build/core/physics/items/compute_grouper_center_of_mass.js +28 -0
- package/build/core/physics/items/item_templates.d.ts +32 -0
- package/build/core/physics/items/item_templates.d.ts.map +1 -0
- package/build/core/physics/items/item_templates.js +53 -0
- package/build/core/physics/items/multi_container_allocated_items.d.ts +37 -0
- package/build/core/physics/items/multi_container_allocated_items.d.ts.map +1 -0
- package/build/core/physics/items/multi_container_allocated_items.js +91 -0
- package/build/core/physics/items/rotation_transforms.d.ts +8 -0
- package/build/core/physics/items/rotation_transforms.d.ts.map +1 -0
- package/build/core/physics/items/rotation_transforms.js +21 -0
- package/build/core/physics/models/axle_weight_model.d.ts +32 -0
- package/build/core/physics/models/axle_weight_model.d.ts.map +1 -0
- package/build/core/physics/models/axle_weight_model.js +72 -0
- package/build/core/physics/models/bi_truck_model.d.ts +21 -0
- package/build/core/physics/models/bi_truck_model.d.ts.map +1 -0
- package/build/core/physics/models/bi_truck_model.js +60 -0
- package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.d.ts +21 -0
- package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.d.ts.map +1 -0
- package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.js +69 -0
- package/build/core/physics/models/bitrem_model.d.ts +33 -0
- package/build/core/physics/models/bitrem_model.d.ts.map +1 -0
- package/build/core/physics/models/bitrem_model.js +123 -0
- package/build/core/physics/models/chassi_forces.d.ts +30 -0
- package/build/core/physics/models/chassi_forces.d.ts.map +1 -0
- package/build/core/physics/models/chassi_forces.js +39 -0
- package/build/core/physics/models/deflection/beam_deflection.d.ts +28 -0
- package/build/core/physics/models/deflection/beam_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/beam_deflection.js +78 -0
- package/build/core/physics/models/deflection/bitrem_deflection.d.ts +22 -0
- package/build/core/physics/models/deflection/bitrem_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/bitrem_deflection.js +54 -0
- package/build/core/physics/models/deflection/create_deflection_delegate.d.ts +12 -0
- package/build/core/physics/models/deflection/create_deflection_delegate.d.ts.map +1 -0
- package/build/core/physics/models/deflection/create_deflection_delegate.js +32 -0
- package/build/core/physics/models/deflection/deflection_model.d.ts +19 -0
- package/build/core/physics/models/deflection/deflection_model.d.ts.map +1 -0
- package/build/core/physics/models/deflection/deflection_model.js +23 -0
- package/build/core/physics/models/deflection/deflection_support_manager.d.ts +21 -0
- package/build/core/physics/models/deflection/deflection_support_manager.d.ts.map +1 -0
- package/build/core/physics/models/deflection/deflection_support_manager.js +40 -0
- package/build/core/physics/models/deflection/deflection_tools.d.ts +6 -0
- package/build/core/physics/models/deflection/deflection_tools.d.ts.map +1 -0
- package/build/core/physics/models/deflection/deflection_tools.js +10 -0
- package/build/core/physics/models/deflection/integration_constant_calculator.d.ts +22 -0
- package/build/core/physics/models/deflection/integration_constant_calculator.d.ts.map +1 -0
- package/build/core/physics/models/deflection/integration_constant_calculator.js +48 -0
- package/build/core/physics/models/deflection/rodotrem_deflection.d.ts +22 -0
- package/build/core/physics/models/deflection/rodotrem_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/rodotrem_deflection.js +47 -0
- package/build/core/physics/models/deflection/semi_reboque_deflection.d.ts +21 -0
- package/build/core/physics/models/deflection/semi_reboque_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/semi_reboque_deflection.js +31 -0
- package/build/core/physics/models/deflection/simple_truck_deflection.d.ts +20 -0
- package/build/core/physics/models/deflection/simple_truck_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/simple_truck_deflection.js +28 -0
- package/build/core/physics/models/deflection/vanderleia_deflection.d.ts +21 -0
- package/build/core/physics/models/deflection/vanderleia_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/vanderleia_deflection.js +41 -0
- package/build/core/physics/models/old_tare_model.d.ts +17 -0
- package/build/core/physics/models/old_tare_model.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_model.js +40 -0
- package/build/core/physics/models/old_tare_scale.d.ts +7 -0
- package/build/core/physics/models/old_tare_scale.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_scale.js +8 -0
- package/build/core/physics/models/old_tare_semireboque.d.ts +7 -0
- package/build/core/physics/models/old_tare_semireboque.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_semireboque.js +37 -0
- package/build/core/physics/models/old_tare_truck.d.ts +7 -0
- package/build/core/physics/models/old_tare_truck.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_truck.js +12 -0
- package/build/core/physics/models/old_tare_vanderleia.d.ts +7 -0
- package/build/core/physics/models/old_tare_vanderleia.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_vanderleia.js +31 -0
- package/build/core/physics/models/percentage_on_axles_calculator.d.ts +19 -0
- package/build/core/physics/models/percentage_on_axles_calculator.d.ts.map +1 -0
- package/build/core/physics/models/percentage_on_axles_calculator.js +39 -0
- package/build/core/physics/models/quad_semi_trailer_model.d.ts +21 -0
- package/build/core/physics/models/quad_semi_trailer_model.d.ts.map +1 -0
- package/build/core/physics/models/quad_semi_trailer_model.js +70 -0
- package/build/core/physics/models/rodotrem_model.d.ts +33 -0
- package/build/core/physics/models/rodotrem_model.d.ts.map +1 -0
- package/build/core/physics/models/rodotrem_model.js +101 -0
- package/build/core/physics/models/semi_reboque_base.d.ts +34 -0
- package/build/core/physics/models/semi_reboque_base.d.ts.map +1 -0
- package/build/core/physics/models/semi_reboque_base.js +85 -0
- package/build/core/physics/models/semi_reboque_model.d.ts +41 -0
- package/build/core/physics/models/semi_reboque_model.d.ts.map +1 -0
- package/build/core/physics/models/semi_reboque_model.js +84 -0
- package/build/core/physics/models/simple_truck_base.d.ts +29 -0
- package/build/core/physics/models/simple_truck_base.d.ts.map +1 -0
- package/build/core/physics/models/simple_truck_base.js +57 -0
- package/build/core/physics/models/simple_truck_model.d.ts +41 -0
- package/build/core/physics/models/simple_truck_model.d.ts.map +1 -0
- package/build/core/physics/models/simple_truck_model.js +76 -0
- package/build/core/physics/models/single_container_tare.d.ts +18 -0
- package/build/core/physics/models/single_container_tare.d.ts.map +1 -0
- package/build/core/physics/models/single_container_tare.js +45 -0
- package/build/core/physics/models/tare_model.d.ts +12 -0
- package/build/core/physics/models/tare_model.d.ts.map +1 -0
- package/build/core/physics/models/tare_model.js +36 -0
- package/build/core/physics/models/vanderleia_model.d.ts +33 -0
- package/build/core/physics/models/vanderleia_model.d.ts.map +1 -0
- package/build/core/physics/models/vanderleia_model.js +100 -0
- package/build/core/physics/services/axle_weight_output_builder.d.ts +27 -0
- package/build/core/physics/services/axle_weight_output_builder.d.ts.map +1 -0
- package/build/core/physics/services/axle_weight_output_builder.js +42 -0
- package/build/core/physics/services/axle_weight_service.d.ts +20 -0
- package/build/core/physics/services/axle_weight_service.d.ts.map +1 -0
- package/build/core/physics/services/axle_weight_service.js +91 -0
- package/build/core/physics/services/cm_axle_weight_service.d.ts +12 -0
- package/build/core/physics/services/cm_axle_weight_service.d.ts.map +1 -0
- package/build/core/physics/services/cm_axle_weight_service.js +33 -0
- package/build/core/physics/services/container_corner_forces.d.ts +33 -0
- package/build/core/physics/services/container_corner_forces.d.ts.map +1 -0
- package/build/core/physics/services/container_corner_forces.js +84 -0
- package/build/core/physics/transports/axle_manager.d.ts +22 -0
- package/build/core/physics/transports/axle_manager.d.ts.map +1 -0
- package/build/core/physics/transports/axle_manager.js +34 -0
- package/build/core/physics/transports/axle_record.d.ts +21 -0
- package/build/core/physics/transports/axle_record.d.ts.map +1 -0
- package/build/core/physics/transports/axle_record.js +57 -0
- package/build/core/physics/transports/chassi.d.ts +52 -0
- package/build/core/physics/transports/chassi.d.ts.map +1 -0
- package/build/core/physics/transports/chassi.js +105 -0
- package/build/core/physics/transports/container_record.d.ts +25 -0
- package/build/core/physics/transports/container_record.d.ts.map +1 -0
- package/build/core/physics/transports/container_record.js +49 -0
- package/build/core/physics/transports/containerweight/container_max_weight_calculator.d.ts +27 -0
- package/build/core/physics/transports/containerweight/container_max_weight_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/container_max_weight_calculator.js +40 -0
- package/build/core/physics/transports/containerweight/container_tare_calculator.d.ts +28 -0
- package/build/core/physics/transports/containerweight/container_tare_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/container_tare_calculator.js +55 -0
- package/build/core/physics/transports/containerweight/container_weight_model.d.ts +15 -0
- package/build/core/physics/transports/containerweight/container_weight_model.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/container_weight_model.js +31 -0
- package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.d.ts +17 -0
- package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.js +31 -0
- package/build/core/physics/transports/containerweight/single_container_weight_calculator.d.ts +20 -0
- package/build/core/physics/transports/containerweight/single_container_weight_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/single_container_weight_calculator.js +48 -0
- package/build/core/physics/transports/grouped_containers.d.ts +34 -0
- package/build/core/physics/transports/grouped_containers.d.ts.map +1 -0
- package/build/core/physics/transports/grouped_containers.js +68 -0
- package/build/core/physics/transports/merged_containers.d.ts +26 -0
- package/build/core/physics/transports/merged_containers.d.ts.map +1 -0
- package/build/core/physics/transports/merged_containers.js +45 -0
- package/build/core/physics/transports/tare/bitrem_axle_splitter.d.ts +26 -0
- package/build/core/physics/transports/tare/bitrem_axle_splitter.d.ts.map +1 -0
- package/build/core/physics/transports/tare/bitrem_axle_splitter.js +84 -0
- package/build/core/physics/transports/tare/bitrem_axle_weight_split.d.ts +22 -0
- package/build/core/physics/transports/tare/bitrem_axle_weight_split.d.ts.map +1 -0
- package/build/core/physics/transports/tare/bitrem_axle_weight_split.js +32 -0
- package/build/core/physics/transports/transport.d.ts +33 -0
- package/build/core/physics/transports/transport.d.ts.map +1 -0
- package/build/core/physics/transports/transport.js +110 -0
- package/build/index.d.ts +8 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +10 -0
- package/eslint.config.js +51 -0
- package/package.json +38 -0
- package/src/core/contracts/chassi_reference.ts +7 -0
- package/src/core/contracts/ms_faixas_contract.ts +114 -0
- package/src/core/contracts/rotation_enum.ts +11 -0
- package/src/core/contracts/suspension_type.ts +4 -0
- package/src/core/contracts/transport_record.ts +4 -0
- package/src/core/contracts/vehicle_type.ts +12 -0
- package/src/core/contracts/vehicle_version.ts +7 -0
- package/src/core/contracts/wire_flags.ts +26 -0
- package/src/core/math/float_tools.ts +17 -0
- package/src/core/math/gaussian_elimination.ts +104 -0
- package/src/core/orchestration/axle_weight_physics.ts +37 -0
- package/src/core/orchestration/collision_checker.ts +86 -0
- package/src/core/orchestration/connector_payload_builder.ts +81 -0
- package/src/core/orchestration/java_mass_center.ts +98 -0
- package/src/core/orchestration/output_builder.ts +18 -0
- package/src/core/orchestration/request_schema.ts +26 -0
- package/src/core/orchestration/weight_by_axis_task.ts +140 -0
- package/src/core/physics/items/allocated_item.ts +41 -0
- package/src/core/physics/items/allocated_item_manager.ts +50 -0
- package/src/core/physics/items/center_of_mass.ts +31 -0
- package/src/core/physics/items/compute_grouper_center_of_mass.ts +44 -0
- package/src/core/physics/items/item_templates.ts +65 -0
- package/src/core/physics/items/multi_container_allocated_items.ts +120 -0
- package/src/core/physics/items/rotation_transforms.ts +29 -0
- package/src/core/physics/models/axle_weight_model.ts +109 -0
- package/src/core/physics/models/bi_truck_model.ts +74 -0
- package/src/core/physics/models/bi_truck_tractor_semi_trailer_model.ts +86 -0
- package/src/core/physics/models/bitrem_model.ts +148 -0
- package/src/core/physics/models/chassi_forces.ts +50 -0
- package/src/core/physics/models/deflection/beam_deflection.ts +105 -0
- package/src/core/physics/models/deflection/bitrem_deflection.ts +68 -0
- package/src/core/physics/models/deflection/create_deflection_delegate.ts +46 -0
- package/src/core/physics/models/deflection/deflection_model.ts +33 -0
- package/src/core/physics/models/deflection/deflection_support_manager.ts +56 -0
- package/src/core/physics/models/deflection/deflection_tools.ts +11 -0
- package/src/core/physics/models/deflection/integration_constant_calculator.ts +62 -0
- package/src/core/physics/models/deflection/rodotrem_deflection.ts +57 -0
- package/src/core/physics/models/deflection/semi_reboque_deflection.ts +40 -0
- package/src/core/physics/models/deflection/simple_truck_deflection.ts +35 -0
- package/src/core/physics/models/deflection/vanderleia_deflection.ts +48 -0
- package/src/core/physics/models/old_tare_model.ts +51 -0
- package/src/core/physics/models/old_tare_scale.ts +9 -0
- package/src/core/physics/models/old_tare_semireboque.ts +51 -0
- package/src/core/physics/models/old_tare_truck.ts +15 -0
- package/src/core/physics/models/old_tare_vanderleia.ts +44 -0
- package/src/core/physics/models/percentage_on_axles_calculator.ts +49 -0
- package/src/core/physics/models/quad_semi_trailer_model.ts +87 -0
- package/src/core/physics/models/rodotrem_model.ts +131 -0
- package/src/core/physics/models/semi_reboque_base.ts +103 -0
- package/src/core/physics/models/semi_reboque_model.ts +127 -0
- package/src/core/physics/models/simple_truck_base.ts +70 -0
- package/src/core/physics/models/simple_truck_model.ts +115 -0
- package/src/core/physics/models/single_container_tare.ts +56 -0
- package/src/core/physics/models/tare_model.ts +46 -0
- package/src/core/physics/models/vanderleia_model.ts +125 -0
- package/src/core/physics/services/axle_weight_output_builder.ts +63 -0
- package/src/core/physics/services/axle_weight_service.ts +116 -0
- package/src/core/physics/services/cm_axle_weight_service.ts +45 -0
- package/src/core/physics/services/container_corner_forces.ts +95 -0
- package/src/core/physics/transports/axle_manager.ts +45 -0
- package/src/core/physics/transports/axle_record.ts +68 -0
- package/src/core/physics/transports/chassi.ts +130 -0
- package/src/core/physics/transports/container_record.ts +58 -0
- package/src/core/physics/transports/containerweight/container_max_weight_calculator.ts +59 -0
- package/src/core/physics/transports/containerweight/container_tare_calculator.ts +76 -0
- package/src/core/physics/transports/containerweight/container_weight_model.ts +38 -0
- package/src/core/physics/transports/containerweight/merged_containers_weight_calculator.ts +39 -0
- package/src/core/physics/transports/containerweight/single_container_weight_calculator.ts +65 -0
- package/src/core/physics/transports/grouped_containers.ts +91 -0
- package/src/core/physics/transports/merged_containers.ts +62 -0
- package/src/core/physics/transports/tare/bitrem_axle_splitter.ts +107 -0
- package/src/core/physics/transports/tare/bitrem_axle_weight_split.ts +55 -0
- package/src/core/physics/transports/transport.ts +137 -0
- package/src/index.ts +12 -0
- package/src/service/.gitkeep +0 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_1_basic_truck_input.json +1759 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_2_vanderleia_input.json +1286 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_3_interlink_input.json +2226 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_4_quad_semi_trailer.json +639 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_5_custom_center_of_gravity.json +557 -0
- package/test/data/src/core/physics/axle_weight_calculations/case_2_bitruck.json +664 -0
- package/test/data/src/core/physics/axle_weight_calculations/case_4_quad_semi_trailer.json +674 -0
- package/test/data/src/core/physics/axle_weight_calculations/case_5_bi_truck_semi_trailer.json +674 -0
- package/test/data/src/core/physics/axle_weight_service/case_1_input_truck.json +1025 -0
- package/test/data/src/core/physics/axle_weight_service/case_1_output_truck.json +38 -0
- package/test/data/src/core/physics/axle_weight_service/case_2_vanderleia_input.json +1286 -0
- package/test/data/src/core/physics/axle_weight_service/case_2_vanderleia_output.json +65 -0
- package/test/data/src/core/physics/axle_weight_service/case_3_input_semireboque.json +24625 -0
- package/test/data/src/core/physics/axle_weight_service/case_3_output_semireboque.json +57 -0
- package/test/data/src/core/physics/axle_weight_service/case_4_input_bitrem.json +2226 -0
- package/test/data/src/core/physics/axle_weight_service/case_4_output_bitrem.json +96 -0
- package/test/data/src/core/physics/beam_deflection/case_10_rodotrem_offset.json +474 -0
- package/test/data/src/core/physics/beam_deflection/case_11_bitruck.json +664 -0
- package/test/data/src/core/physics/beam_deflection/case_12_quad_semi_trailer.json +792 -0
- package/test/data/src/core/physics/beam_deflection/case_13_bi_truck_semi_trailer.json +792 -0
- package/test/data/src/core/physics/beam_deflection/case_1_documentation.ipynb +316 -0
- package/test/data/src/core/physics/beam_deflection/case_1_semireboque.json +402 -0
- package/test/data/src/core/physics/beam_deflection/case_2_bitrem.json +434 -0
- package/test/data/src/core/physics/beam_deflection/case_3_rodotrem.json +474 -0
- package/test/data/src/core/physics/beam_deflection/case_4_vanderleia_pneumatica.json +425 -0
- package/test/data/src/core/physics/beam_deflection/case_5_vanderleia_mecanica.json +366 -0
- package/test/data/src/core/physics/beam_deflection/case_6_truck.json +279 -0
- package/test/data/src/core/physics/beam_deflection/case_7_semireboque_structural_offset.json +318 -0
- package/test/data/src/core/physics/beam_deflection/case_8_vanderleia_offset.json +425 -0
- package/test/data/src/core/physics/beam_deflection/case_9_bitrem_offset.json +434 -0
- package/test/data/src/core/physics/bitrem_axle_splitter/case_1_simple_bitrem.json +145 -0
- package/test/data/src/core/physics/bitrem_axle_splitter/case_2_lowered_bitrem.json +238 -0
- package/test/data/src/core/physics/bitrem_axle_splitter/case_3_lowered_positive_proportion.json +238 -0
- package/test/data/src/core/physics/c_m_axle_weight_service/case_1_interlink_trailer.json +94 -0
- package/test/data/src/core/physics/calculations/case_1_simple_truck.json +83 -0
- package/test/data/src/core/physics/calculations/case_2_lowered_bitrem.json +1051 -0
- package/test/data/src/core/physics/calculations/case_3_container_mercedes.json +50 -0
- package/test/data/src/core/physics/container_corner_forces/case_1.json +674 -0
- package/test/data/src/core/physics/container_weight/case_1_basictruck.json +223 -0
- package/test/data/src/core/physics/container_weight/case_2_roadtrain.json +277 -0
- package/test/data/src/core/physics/container_weight/case_3_semireboque_rebaixado.json +197 -0
- package/test/data/src/core/physics/container_weight/case_4_semireboque_neck_limit.json +197 -0
- package/test/data/src/core/physics/container_weight/case_5_vanderleia_rebaixada.json +211 -0
- package/test/data/src/core/physics/container_weight/case_6_lowered_interlink.json +230 -0
- package/test/data/src/core/physics/python_goldens.json +9 -0
- package/test/data/src/core/physics/tare/case_1_simple_vanderleia.json +185 -0
- package/test/data/src/core/physics/tare/case_2_lowered_vanderleia.json +646 -0
- package/test/data/src/core/physics/tare/case_3_lowered_interlink.json +230 -0
- package/test/data/src/core/physics/tare/case_4_negative_tare_VUC.json +483 -0
- package/test/data/src/core/physics/tare/case_5_truck_bitruck.json +664 -0
- package/test/data/src/core/physics/tare/case_6_quad_semi_trailer.json +203 -0
- package/test/data/src/core/physics/tare/case_7_bi_truck_semi_trailer.json +203 -0
- package/test/data/src/core/physics/tare/case_8_triaxle_semi_trailer.json +203 -0
- package/test/data/src/core/physics/time_performance/case_1_center_of_mass.json +2916 -0
- package/test/data/src/core/physics/trucks/bitrem.json +150 -0
- package/test/data/src/core/physics/trucks/lowered_bitrem.json +1216 -0
- package/test/data/src/core/physics/trucks/lowered_bitrem_empty_first_container.json +1182 -0
- package/test/data/src/core/physics/trucks/rodotrem.json +148 -0
- package/test/data/src/core/physics/trucks/semi_reboque.json +91 -0
- package/test/data/src/core/physics/trucks/semi_reboque_rebaixado.json +1629 -0
- package/test/data/src/core/physics/trucks/simple_truck.json +85 -0
- package/test/data/src/core/physics/trucks/vanderleia_mechanical.json +105 -0
- package/test/data/src/core/physics/trucks/vanderleia_pneumatic.json +105 -0
- package/test/src/core/orchestration/request_schema.test.ts +20 -0
- package/test/src/core/orchestration/weight_by_axis_task.test.ts +87 -0
- package/test/src/core/physics/items/center_of_mass.test.ts +38 -0
- package/test/src/core/physics/items/multi_container_allocated_items.test.ts +22 -0
- package/test/src/core/physics/math_input_helpers.ts +64 -0
- package/test/src/core/physics/models/bitrem_model.test.ts +54 -0
- package/test/src/core/physics/models/deflection/deflection_model.test.ts +78 -0
- package/test/src/core/physics/models/rodotrem_model.test.ts +29 -0
- package/test/src/core/physics/models/semi_reboque_model.test.ts +72 -0
- package/test/src/core/physics/models/simple_truck_model.test.ts +23 -0
- package/test/src/core/physics/models/tare_model.test.ts +34 -0
- package/test/src/core/physics/models/vanderleia_model.test.ts +36 -0
- package/test/src/core/physics/services/axle_weight_service.test.ts +56 -0
- package/test/src/core/physics/services/cm_axle_weight_service.test.ts +23 -0
- package/test/src/core/physics/services/container_corner_forces.test.ts +23 -0
- package/test/src/core/physics/test_helpers.ts +13 -0
- package/test/src/core/physics/transports/chassi.test.ts +35 -0
- package/test/src/core/physics/transports/containerweight/container_weight_model.test.ts +57 -0
- package/test/src/core/physics/transports/tare/bitrem_axle_splitter.test.ts +30 -0
- package/test/src/index.test.ts +35 -0
- package/tsconfig.eslint.json +15 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { AllocatedItemManager } from '../../items/allocated_item_manager.js'
|
|
2
|
+
import { DeflectionSupportManager } from './deflection_support_manager.js'
|
|
3
|
+
import { IntegrationConstantCalculator } from './integration_constant_calculator.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Cantilever beam deflection curve (DRAGON-76).
|
|
7
|
+
*/
|
|
8
|
+
export class BeamDeflection
|
|
9
|
+
{
|
|
10
|
+
private readonly support_manager: DeflectionSupportManager
|
|
11
|
+
private readonly constant_1: number
|
|
12
|
+
private readonly constant_2: number
|
|
13
|
+
private readonly external_forces: [number, number][]
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param support_data - Support positions and forces.
|
|
17
|
+
* @param allocated_item_manager - Load items.
|
|
18
|
+
* @param external_forces - Optional external point loads.
|
|
19
|
+
*/
|
|
20
|
+
constructor(
|
|
21
|
+
support_data: [number, number][],
|
|
22
|
+
private readonly allocated_item_manager: AllocatedItemManager,
|
|
23
|
+
external_forces: [number, number][] = []
|
|
24
|
+
)
|
|
25
|
+
{
|
|
26
|
+
this.support_manager = new DeflectionSupportManager(support_data)
|
|
27
|
+
this.external_forces = this.support_manager
|
|
28
|
+
.add_structural_offset_to_external_forces(external_forces)
|
|
29
|
+
const integration = new IntegrationConstantCalculator(
|
|
30
|
+
this.support_manager,
|
|
31
|
+
this.support_manager.structural_offset)
|
|
32
|
+
;[this.constant_1, this.constant_2] = integration.calculate_integration_constants(
|
|
33
|
+
allocated_item_manager)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @param beam_length - Container beam length.
|
|
38
|
+
* @param number_of_curve_samples - Sample count.
|
|
39
|
+
* @returns Deflection values along beam.
|
|
40
|
+
*/
|
|
41
|
+
generate_curve_values(beam_length: number, number_of_curve_samples: number): number[]
|
|
42
|
+
{
|
|
43
|
+
const length = beam_length + this.support_manager.structural_offset
|
|
44
|
+
const y_values: number[] = []
|
|
45
|
+
for (let index = 0; index < number_of_curve_samples; index++)
|
|
46
|
+
{
|
|
47
|
+
const x = (length * index) / (number_of_curve_samples - 1)
|
|
48
|
+
y_values.push(this.evaluate_at_x(x))
|
|
49
|
+
}
|
|
50
|
+
return y_values
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
private evaluate_at_x(x: number): number
|
|
54
|
+
{
|
|
55
|
+
let value = this.constant_1 * x + this.constant_2
|
|
56
|
+
value += this.item_cubic_contribution(x)
|
|
57
|
+
value += this.support_cubic_contribution(x)
|
|
58
|
+
value += this.external_cubic_contribution(x)
|
|
59
|
+
return value
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private item_cubic_contribution(x: number): number
|
|
63
|
+
{
|
|
64
|
+
let value = 0
|
|
65
|
+
for (const item_index of this.allocated_item_manager.list_item_indexes())
|
|
66
|
+
{
|
|
67
|
+
const item = this.allocated_item_manager.get_item(item_index)
|
|
68
|
+
const position = item.zi + item.length / 2 + this.support_manager.structural_offset
|
|
69
|
+
const displacement = x - position
|
|
70
|
+
if (displacement > 0)
|
|
71
|
+
{
|
|
72
|
+
value += (-item.weight / 6) * displacement ** 3
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return value
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
private support_cubic_contribution(x: number): number
|
|
79
|
+
{
|
|
80
|
+
let value = 0
|
|
81
|
+
for (const support_index of this.support_manager.list_support_indexes())
|
|
82
|
+
{
|
|
83
|
+
const displacement = x - this.support_manager.get_position(support_index)
|
|
84
|
+
if (displacement > 0)
|
|
85
|
+
{
|
|
86
|
+
value += (this.support_manager.get_force(support_index) / 6) * displacement ** 3
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return value
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private external_cubic_contribution(x: number): number
|
|
93
|
+
{
|
|
94
|
+
let value = 0
|
|
95
|
+
for (const [position, force] of this.external_forces)
|
|
96
|
+
{
|
|
97
|
+
const displacement = x - position
|
|
98
|
+
if (displacement > 0)
|
|
99
|
+
{
|
|
100
|
+
value += (force / 6) * displacement ** 3
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return value
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { CHASSI_REFERENCE } from '../../../contracts/chassi_reference.js'
|
|
2
|
+
import type { BitremModel } from '../bitrem_model.js'
|
|
3
|
+
import type { ChassiForces } from '../chassi_forces.js'
|
|
4
|
+
import type { MultiContainerAllocatedItems } from '../../items/multi_container_allocated_items.js'
|
|
5
|
+
import { BeamDeflection } from './beam_deflection.js'
|
|
6
|
+
import { calculate_deflection_indicator } from './deflection_tools.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Bitrem interlink + semi beam deflection (sum of two indicators).
|
|
10
|
+
*/
|
|
11
|
+
export class BitremDeflection
|
|
12
|
+
{
|
|
13
|
+
/**
|
|
14
|
+
* @param bitrem_model - Axle weight model.
|
|
15
|
+
* @param number_of_curve_samples - Curve sample count.
|
|
16
|
+
*/
|
|
17
|
+
constructor(
|
|
18
|
+
private readonly bitrem_model: BitremModel,
|
|
19
|
+
private readonly number_of_curve_samples: number
|
|
20
|
+
)
|
|
21
|
+
{}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @param multi_items - Allocated items.
|
|
25
|
+
* @returns Combined deflection indicator.
|
|
26
|
+
*/
|
|
27
|
+
calculate_deflection(multi_items: MultiContainerAllocatedItems): number
|
|
28
|
+
{
|
|
29
|
+
const forces = this.bitrem_model.calculate_chassi_forces(multi_items)
|
|
30
|
+
const interlink = this.interlink_curve(multi_items, forces)
|
|
31
|
+
const semi = this.semitrailer_curve(multi_items, forces)
|
|
32
|
+
return calculate_deflection_indicator(interlink)
|
|
33
|
+
+ calculate_deflection_indicator(semi)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private interlink_curve(multi_items: MultiContainerAllocatedItems, forces: ChassiForces): number[]
|
|
37
|
+
{
|
|
38
|
+
const pin_1 = this.bitrem_model.chassi.get_pin_position(0, CHASSI_REFERENCE.GROUPER_1)
|
|
39
|
+
const axle_3 = this.bitrem_model.chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1)
|
|
40
|
+
const support: [number, number][] = [
|
|
41
|
+
[pin_1, forces.get_force_on_pin(0)],
|
|
42
|
+
[axle_3, forces.get_force_on_axle(2) + forces.get_force_on_axle(3)]
|
|
43
|
+
]
|
|
44
|
+
const pin_2 = this.bitrem_model.chassi.get_pin_position(1, CHASSI_REFERENCE.GROUPER_1)
|
|
45
|
+
const external: [number, number][] = [[pin_2, -forces.get_force_on_pin(1)]]
|
|
46
|
+
const items = multi_items.get_allocated_items_by_grouper_index(1)
|
|
47
|
+
const pin_2_pos = pin_2
|
|
48
|
+
const length = Math.max(pin_2_pos, axle_3)
|
|
49
|
+
return new BeamDeflection(support, items, external).generate_curve_values(
|
|
50
|
+
length,
|
|
51
|
+
this.number_of_curve_samples)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private semitrailer_curve(multi_items: MultiContainerAllocatedItems, forces: ChassiForces): number[]
|
|
55
|
+
{
|
|
56
|
+
const pin_2 = this.bitrem_model.chassi.get_pin_position(1, CHASSI_REFERENCE.GROUPER_2)
|
|
57
|
+
const axle_4 = this.bitrem_model.chassi.get_axle_position(4, CHASSI_REFERENCE.GROUPER_2)
|
|
58
|
+
const support: [number, number][] = [
|
|
59
|
+
[pin_2, forces.get_force_on_pin(1)],
|
|
60
|
+
[axle_4, forces.get_force_on_axle(4)]
|
|
61
|
+
]
|
|
62
|
+
const items = multi_items.get_allocated_items_by_grouper_index(2)
|
|
63
|
+
const length = this.bitrem_model.chassi.get_grouper_end(2, CHASSI_REFERENCE.GROUPER_2)
|
|
64
|
+
return new BeamDeflection(support, items).generate_curve_values(
|
|
65
|
+
length,
|
|
66
|
+
this.number_of_curve_samples)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { VEHICLE_TYPE, type VehicleTypeCode } from '../../../contracts/vehicle_type.js'
|
|
2
|
+
import type { Transport } from '../../transports/transport.js'
|
|
3
|
+
import { SemiReboqueModel } from '../semi_reboque_model.js'
|
|
4
|
+
import { BitremModel } from '../bitrem_model.js'
|
|
5
|
+
import { RodotremModel } from '../rodotrem_model.js'
|
|
6
|
+
import { VanderleiaModel } from '../vanderleia_model.js'
|
|
7
|
+
import { SimpleTruckModel } from '../simple_truck_model.js'
|
|
8
|
+
import { SemiReboqueDeflection } from './semi_reboque_deflection.js'
|
|
9
|
+
import { BitremDeflection } from './bitrem_deflection.js'
|
|
10
|
+
import { RodotremDeflection } from './rodotrem_deflection.js'
|
|
11
|
+
import { VanderleiaDeflection } from './vanderleia_deflection.js'
|
|
12
|
+
import { SimpleTruckDeflection } from './simple_truck_deflection.js'
|
|
13
|
+
|
|
14
|
+
type DeflectionDelegate = {
|
|
15
|
+
calculate_deflection: (multi: import('../../items/multi_container_allocated_items.js').MultiContainerAllocatedItems) => number
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type DelegateFactory = (transport: Transport, samples: number) => DeflectionDelegate
|
|
19
|
+
|
|
20
|
+
const DELEGATE_BY_TYPE: Partial<Record<VehicleTypeCode, DelegateFactory>> = {
|
|
21
|
+
[VEHICLE_TYPE.SEMIREBOQUE]: (t, n) => new SemiReboqueDeflection(new SemiReboqueModel(t), n),
|
|
22
|
+
[VEHICLE_TYPE.REBAIXADO]: (t, n) => new SemiReboqueDeflection(new SemiReboqueModel(t), n),
|
|
23
|
+
[VEHICLE_TYPE.BITREM]: (t, n) => new BitremDeflection(new BitremModel(t), n),
|
|
24
|
+
[VEHICLE_TYPE.RODOTREM]: (t, n) => new RodotremDeflection(new RodotremModel(t), n),
|
|
25
|
+
[VEHICLE_TYPE.VANDERLEIA]: (t, n) => new VanderleiaDeflection(new VanderleiaModel(t), n),
|
|
26
|
+
[VEHICLE_TYPE.CAMINHAO]: (t, n) => new SimpleTruckDeflection(new SimpleTruckModel(t), n),
|
|
27
|
+
[VEHICLE_TYPE.VUC]: (t, n) => new SimpleTruckDeflection(new SimpleTruckModel(t), n)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param transport - Parsed transport.
|
|
32
|
+
* @param number_of_curve_samples - Sample count for deflection curve.
|
|
33
|
+
* @returns Vehicle-specific deflection delegate.
|
|
34
|
+
*/
|
|
35
|
+
export function create_deflection_delegate(
|
|
36
|
+
transport: Transport,
|
|
37
|
+
number_of_curve_samples: number
|
|
38
|
+
): DeflectionDelegate
|
|
39
|
+
{
|
|
40
|
+
const factory = DELEGATE_BY_TYPE[transport.vehicle_type]
|
|
41
|
+
if (!factory)
|
|
42
|
+
{
|
|
43
|
+
throw new Error('Deflection model of this vehicle is not implemented yet')
|
|
44
|
+
}
|
|
45
|
+
return factory(transport, number_of_curve_samples)
|
|
46
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Transport } from '../../transports/transport.js'
|
|
2
|
+
import type { AllocatedItemManager } from '../../items/allocated_item_manager.js'
|
|
3
|
+
import { MultiContainerAllocatedItems } from '../../items/multi_container_allocated_items.js'
|
|
4
|
+
import { create_deflection_delegate } from './create_deflection_delegate.js'
|
|
5
|
+
|
|
6
|
+
type DeflectionDelegate = ReturnType<typeof create_deflection_delegate>
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Vehicle-specific beam deflection facade (DRAGON-76).
|
|
10
|
+
*/
|
|
11
|
+
export class DeflectionModel
|
|
12
|
+
{
|
|
13
|
+
private readonly delegate: DeflectionDelegate
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param transport - Parsed transport.
|
|
17
|
+
* @param number_of_curve_samples - Curve sample count.
|
|
18
|
+
*/
|
|
19
|
+
constructor(transport: Transport, number_of_curve_samples: number)
|
|
20
|
+
{
|
|
21
|
+
this.delegate = create_deflection_delegate(transport, number_of_curve_samples)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @param allocated_by_sequence - Items per container sequence.
|
|
26
|
+
* @returns Deflection indicator.
|
|
27
|
+
*/
|
|
28
|
+
calculate_deflection(allocated_by_sequence: Record<number, AllocatedItemManager>): number
|
|
29
|
+
{
|
|
30
|
+
const multi = new MultiContainerAllocatedItems(allocated_by_sequence)
|
|
31
|
+
return this.delegate.calculate_deflection(multi)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ordered support positions and reaction forces for beam deflection.
|
|
3
|
+
*/
|
|
4
|
+
export class DeflectionSupportManager
|
|
5
|
+
{
|
|
6
|
+
structural_offset = 0
|
|
7
|
+
private readonly support_data: [number, number][]
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @param support_data - [[position, force], ...] sorted by position.
|
|
11
|
+
*/
|
|
12
|
+
constructor(support_data: [number, number][])
|
|
13
|
+
{
|
|
14
|
+
this.support_data = support_data.map((row) => [...row] as [number, number])
|
|
15
|
+
this.evaluate_structural_offset()
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
list_support_indexes(): number[]
|
|
19
|
+
{
|
|
20
|
+
return this.support_data.map((_row, index) => index)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get_position(support_index: number): number
|
|
24
|
+
{
|
|
25
|
+
return this.support_data[support_index][0]
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
get_force(support_index: number): number
|
|
29
|
+
{
|
|
30
|
+
return this.support_data[support_index][1]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @param external_forces - Optional extra point loads.
|
|
35
|
+
* @returns Forces with structural offset applied to positions.
|
|
36
|
+
*/
|
|
37
|
+
add_structural_offset_to_external_forces(
|
|
38
|
+
external_forces: [number, number][]
|
|
39
|
+
): [number, number][]
|
|
40
|
+
{
|
|
41
|
+
return external_forces.map(([position, force]) => [
|
|
42
|
+
position + this.structural_offset,
|
|
43
|
+
force
|
|
44
|
+
])
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private evaluate_structural_offset(): void
|
|
48
|
+
{
|
|
49
|
+
const leftmost = Math.min(...this.support_data.map((row) => row[0]))
|
|
50
|
+
this.structural_offset = leftmost < 0 ? -leftmost : 0
|
|
51
|
+
for (const row of this.support_data)
|
|
52
|
+
{
|
|
53
|
+
row[0] += this.structural_offset
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param curve_values - Beam deflection samples.
|
|
3
|
+
* @returns Scalar deflection indicator.
|
|
4
|
+
*/
|
|
5
|
+
export function calculate_deflection_indicator(curve_values: number[]): number
|
|
6
|
+
{
|
|
7
|
+
const mean = curve_values.reduce((sum, value) => sum + value, 0) / curve_values.length
|
|
8
|
+
const variance = curve_values.reduce((sum, value) => sum + (value - mean) ** 2, 0)
|
|
9
|
+
/ curve_values.length
|
|
10
|
+
return Math.sqrt(variance) + Math.abs(mean)
|
|
11
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { AllocatedItemManager } from '../../items/allocated_item_manager.js'
|
|
2
|
+
import { solve_linear_system } from '../../../math/gaussian_elimination.js'
|
|
3
|
+
import type { DeflectionSupportManager } from './deflection_support_manager.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Integration constants for beam elastic curve (two supports).
|
|
7
|
+
*/
|
|
8
|
+
export class IntegrationConstantCalculator
|
|
9
|
+
{
|
|
10
|
+
private readonly b_constants: number[]
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param deflection_supports - Support manager.
|
|
14
|
+
* @param structural_offset - Beam offset.
|
|
15
|
+
*/
|
|
16
|
+
constructor(
|
|
17
|
+
private readonly deflection_supports: DeflectionSupportManager,
|
|
18
|
+
private readonly structural_offset: number
|
|
19
|
+
)
|
|
20
|
+
{
|
|
21
|
+
this.b_constants = deflection_supports.list_support_indexes().map(() => 0)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @param allocated_items - Load items.
|
|
26
|
+
* @returns Integration constants C1 and C2.
|
|
27
|
+
*/
|
|
28
|
+
calculate_integration_constants(
|
|
29
|
+
allocated_items: AllocatedItemManager
|
|
30
|
+
): [number, number]
|
|
31
|
+
{
|
|
32
|
+
this.calculate_b_constants(allocated_items)
|
|
33
|
+
const a_matrix = this.deflection_supports.list_support_indexes().map((index) => [
|
|
34
|
+
this.deflection_supports.get_position(index),
|
|
35
|
+
1
|
|
36
|
+
])
|
|
37
|
+
const displacement = this.deflection_supports.get_position(1)
|
|
38
|
+
- this.deflection_supports.get_position(0)
|
|
39
|
+
const second_term = (-this.deflection_supports.get_force(0) / 6)
|
|
40
|
+
* displacement * displacement * displacement
|
|
41
|
+
const solution = solve_linear_system(a_matrix, [this.b_constants[0], this.b_constants[1] + second_term])
|
|
42
|
+
return [solution[0], solution[1]]
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private calculate_b_constants(allocated_items: AllocatedItemManager): void
|
|
46
|
+
{
|
|
47
|
+
for (const item_index of allocated_items.list_item_indexes())
|
|
48
|
+
{
|
|
49
|
+
const item = allocated_items.get_item(item_index)
|
|
50
|
+
const center = item.zi + item.length / 2 + this.structural_offset
|
|
51
|
+
const factor = item.weight / 6
|
|
52
|
+
for (const support_index of this.deflection_supports.list_support_indexes())
|
|
53
|
+
{
|
|
54
|
+
const displacement = this.deflection_supports.get_position(support_index) - center
|
|
55
|
+
if (displacement > 0)
|
|
56
|
+
{
|
|
57
|
+
this.b_constants[support_index] += factor * displacement ** 3
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { CHASSI_REFERENCE } from '../../../contracts/chassi_reference.js'
|
|
2
|
+
import type { RodotremModel } from '../rodotrem_model.js'
|
|
3
|
+
import type { ChassiForces } from '../chassi_forces.js'
|
|
4
|
+
import type { MultiContainerAllocatedItems } from '../../items/multi_container_allocated_items.js'
|
|
5
|
+
import { BeamDeflection } from './beam_deflection.js'
|
|
6
|
+
import { calculate_deflection_indicator } from './deflection_tools.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Rodotrem semi + simple trailer deflection indicator sum.
|
|
10
|
+
*/
|
|
11
|
+
export class RodotremDeflection
|
|
12
|
+
{
|
|
13
|
+
/**
|
|
14
|
+
* @param rodotrem_model - Axle weight model.
|
|
15
|
+
* @param number_of_curve_samples - Curve sample count.
|
|
16
|
+
*/
|
|
17
|
+
constructor(
|
|
18
|
+
private readonly rodotrem_model: RodotremModel,
|
|
19
|
+
private readonly number_of_curve_samples: number
|
|
20
|
+
)
|
|
21
|
+
{}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @param multi_items - Allocated items.
|
|
25
|
+
* @returns Combined deflection indicator.
|
|
26
|
+
*/
|
|
27
|
+
calculate_deflection(multi_items: MultiContainerAllocatedItems): number
|
|
28
|
+
{
|
|
29
|
+
const forces = this.rodotrem_model.calculate_chassi_forces(multi_items)
|
|
30
|
+
const semi = this.semi_curve(multi_items, forces)
|
|
31
|
+
const simple = this.simple_curve(multi_items, forces)
|
|
32
|
+
return calculate_deflection_indicator(semi) + calculate_deflection_indicator(simple)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private semi_curve(multi_items: MultiContainerAllocatedItems, forces: ChassiForces): number[]
|
|
36
|
+
{
|
|
37
|
+
const pin = this.rodotrem_model.chassi.get_pin_position(0, CHASSI_REFERENCE.GROUPER_1)
|
|
38
|
+
const axle_3 = this.rodotrem_model.chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1)
|
|
39
|
+
const support: [number, number][] = [[pin, forces.get_force_on_pin(0)], [axle_3, forces.get_force_on_axle(2)]]
|
|
40
|
+
const items = multi_items.get_allocated_items_by_grouper_index(1)
|
|
41
|
+
const length = this.rodotrem_model.chassi.get_grouper_end(1, CHASSI_REFERENCE.GROUPER_1)
|
|
42
|
+
return new BeamDeflection(support, items).generate_curve_values(length, this.number_of_curve_samples)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private simple_curve(multi_items: MultiContainerAllocatedItems, forces: ChassiForces): number[]
|
|
46
|
+
{
|
|
47
|
+
const axle_4 = this.rodotrem_model.chassi.get_axle_position(3, CHASSI_REFERENCE.GROUPER_2)
|
|
48
|
+
const axle_5 = this.rodotrem_model.chassi.get_axle_position(4, CHASSI_REFERENCE.GROUPER_2)
|
|
49
|
+
const support: [number, number][] = [
|
|
50
|
+
[axle_4, forces.get_force_on_axle(3)],
|
|
51
|
+
[axle_5, forces.get_force_on_axle(4)]
|
|
52
|
+
]
|
|
53
|
+
const items = multi_items.get_allocated_items_by_grouper_index(2)
|
|
54
|
+
const length = this.rodotrem_model.chassi.get_grouper_end(2, CHASSI_REFERENCE.GROUPER_2)
|
|
55
|
+
return new BeamDeflection(support, items).generate_curve_values(length, this.number_of_curve_samples)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { SemiReboqueModel } from '../semi_reboque_model.js'
|
|
2
|
+
import type { MultiContainerAllocatedItems } from '../../items/multi_container_allocated_items.js'
|
|
3
|
+
import { BeamDeflection } from './beam_deflection.js'
|
|
4
|
+
import { calculate_deflection_indicator } from './deflection_tools.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Semi-reboque beam deflection indicator.
|
|
8
|
+
*/
|
|
9
|
+
export class SemiReboqueDeflection
|
|
10
|
+
{
|
|
11
|
+
/**
|
|
12
|
+
* @param semi_reboque_model - Axle weight model.
|
|
13
|
+
* @param number_of_curve_samples - Curve sample count.
|
|
14
|
+
*/
|
|
15
|
+
constructor(
|
|
16
|
+
private readonly semi_reboque_model: SemiReboqueModel,
|
|
17
|
+
private readonly number_of_curve_samples: number
|
|
18
|
+
)
|
|
19
|
+
{}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @param multi_items - Allocated items.
|
|
23
|
+
* @returns Deflection indicator scalar.
|
|
24
|
+
*/
|
|
25
|
+
calculate_deflection(multi_items: MultiContainerAllocatedItems): number
|
|
26
|
+
{
|
|
27
|
+
const curve = this.calculate_deflection_curve(multi_items)
|
|
28
|
+
return calculate_deflection_indicator(curve)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private calculate_deflection_curve(multi_items: MultiContainerAllocatedItems): number[]
|
|
32
|
+
{
|
|
33
|
+
const support = this.semi_reboque_model.calculate_support_data(multi_items)
|
|
34
|
+
const allocated = multi_items.get_allocated_items_by_grouper_index(1)
|
|
35
|
+
const beam = new BeamDeflection(support, allocated)
|
|
36
|
+
return beam.generate_curve_values(
|
|
37
|
+
this.semi_reboque_model.calculate_container_length(),
|
|
38
|
+
this.number_of_curve_samples)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { SimpleTruckModel } from '../simple_truck_model.js'
|
|
2
|
+
import type { MultiContainerAllocatedItems } from '../../items/multi_container_allocated_items.js'
|
|
3
|
+
import { BeamDeflection } from './beam_deflection.js'
|
|
4
|
+
import { calculate_deflection_indicator } from './deflection_tools.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Caminhão beam deflection indicator.
|
|
8
|
+
*/
|
|
9
|
+
export class SimpleTruckDeflection
|
|
10
|
+
{
|
|
11
|
+
/**
|
|
12
|
+
* @param simple_truck_model - Axle weight model.
|
|
13
|
+
* @param number_of_curve_samples - Curve sample count.
|
|
14
|
+
*/
|
|
15
|
+
constructor(
|
|
16
|
+
private readonly simple_truck_model: SimpleTruckModel,
|
|
17
|
+
private readonly number_of_curve_samples: number
|
|
18
|
+
)
|
|
19
|
+
{}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @param multi_items - Allocated items.
|
|
23
|
+
* @returns Deflection indicator scalar.
|
|
24
|
+
*/
|
|
25
|
+
calculate_deflection(multi_items: MultiContainerAllocatedItems): number
|
|
26
|
+
{
|
|
27
|
+
const support = this.simple_truck_model.calculate_support_data(multi_items)
|
|
28
|
+
const allocated = multi_items.get_allocated_items_by_grouper_index(1)
|
|
29
|
+
const beam = new BeamDeflection(support, allocated)
|
|
30
|
+
const curve = beam.generate_curve_values(
|
|
31
|
+
this.simple_truck_model.calculate_container_length(),
|
|
32
|
+
this.number_of_curve_samples)
|
|
33
|
+
return calculate_deflection_indicator(curve)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { CHASSI_REFERENCE } from '../../../contracts/chassi_reference.js'
|
|
2
|
+
import type { VanderleiaModel } from '../vanderleia_model.js'
|
|
3
|
+
import type { MultiContainerAllocatedItems } from '../../items/multi_container_allocated_items.js'
|
|
4
|
+
import { BeamDeflection } from './beam_deflection.js'
|
|
5
|
+
import { calculate_deflection_indicator } from './deflection_tools.js'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Vanderleia trailer beam deflection indicator.
|
|
9
|
+
*/
|
|
10
|
+
export class VanderleiaDeflection
|
|
11
|
+
{
|
|
12
|
+
/**
|
|
13
|
+
* @param vanderleia_model - Axle weight model.
|
|
14
|
+
* @param number_of_curve_samples - Curve sample count.
|
|
15
|
+
*/
|
|
16
|
+
constructor(
|
|
17
|
+
private readonly vanderleia_model: VanderleiaModel,
|
|
18
|
+
private readonly number_of_curve_samples: number
|
|
19
|
+
)
|
|
20
|
+
{}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @param multi_items - Allocated items.
|
|
24
|
+
* @returns Deflection indicator scalar.
|
|
25
|
+
*/
|
|
26
|
+
calculate_deflection(multi_items: MultiContainerAllocatedItems): number
|
|
27
|
+
{
|
|
28
|
+
const support = this.generate_support_data(multi_items)
|
|
29
|
+
const allocated = multi_items.get_allocated_items_by_grouper_index(1)
|
|
30
|
+
const beam = new BeamDeflection(support, allocated)
|
|
31
|
+
const length = this.vanderleia_model.chassi.get_grouper_end(1, CHASSI_REFERENCE.GROUPER_1)
|
|
32
|
+
const curve = beam.generate_curve_values(length, this.number_of_curve_samples)
|
|
33
|
+
return calculate_deflection_indicator(curve)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private generate_support_data(multi_items: MultiContainerAllocatedItems): [number, number][]
|
|
37
|
+
{
|
|
38
|
+
const forces = this.vanderleia_model.calculate_chassi_forces(multi_items)
|
|
39
|
+
const trailer_force = forces.get_force_on_axle(2)
|
|
40
|
+
+ forces.get_force_on_axle(3)
|
|
41
|
+
+ forces.get_force_on_axle(4)
|
|
42
|
+
const pin = this.vanderleia_model.chassi.get_pin_position(0, CHASSI_REFERENCE.GROUPER_1)
|
|
43
|
+
const axle_3 = this.vanderleia_model.chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1)
|
|
44
|
+
const axle_5 = this.vanderleia_model.chassi.get_axle_position(4, CHASSI_REFERENCE.GROUPER_1)
|
|
45
|
+
const mean_axle = 0.5 * (axle_5 - axle_3) + axle_3
|
|
46
|
+
return [[pin, forces.get_force_on_pin(0)], [mean_axle, trailer_force]]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { VEHICLE_TYPE } from '../../contracts/vehicle_type.js'
|
|
2
|
+
import type { Transport } from '../transports/transport.js'
|
|
3
|
+
import { scale_tare } from './old_tare_scale.js'
|
|
4
|
+
import { semireboque_tare } from './old_tare_semireboque.js'
|
|
5
|
+
import { vanderleia_tare } from './old_tare_vanderleia.js'
|
|
6
|
+
import { truck_tare } from './old_tare_truck.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Legacy tare split by vehicle type (Python OldTareModel).
|
|
10
|
+
*/
|
|
11
|
+
export class OldTareModel
|
|
12
|
+
{
|
|
13
|
+
/**
|
|
14
|
+
* @param transport - Parsed transport.
|
|
15
|
+
* @returns Tare per axle.
|
|
16
|
+
*/
|
|
17
|
+
calculate(transport: Transport): number[]
|
|
18
|
+
{
|
|
19
|
+
return old_tare_by_vehicle(transport)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @param transport - Parsed transport.
|
|
25
|
+
* @returns Tare per axle for vehicle type.
|
|
26
|
+
*/
|
|
27
|
+
export function old_tare_by_vehicle(transport: Transport): number[]
|
|
28
|
+
{
|
|
29
|
+
const type = transport.vehicle_type
|
|
30
|
+
if (type === VEHICLE_TYPE.BITREM)
|
|
31
|
+
{
|
|
32
|
+
return scale_tare(transport.tare, [0.23, 0.255, 0.285, 0.23])
|
|
33
|
+
}
|
|
34
|
+
if (type === VEHICLE_TYPE.RODOTREM)
|
|
35
|
+
{
|
|
36
|
+
return scale_tare(transport.tare, [0.19, 0.28, 0.21, 0.16, 0.16])
|
|
37
|
+
}
|
|
38
|
+
if (type === VEHICLE_TYPE.SEMIREBOQUE || type === VEHICLE_TYPE.REBAIXADO)
|
|
39
|
+
{
|
|
40
|
+
return semireboque_tare(transport)
|
|
41
|
+
}
|
|
42
|
+
if (type === VEHICLE_TYPE.VANDERLEIA)
|
|
43
|
+
{
|
|
44
|
+
return vanderleia_tare(transport)
|
|
45
|
+
}
|
|
46
|
+
if (type === VEHICLE_TYPE.CAMINHAO || type === VEHICLE_TYPE.VUC)
|
|
47
|
+
{
|
|
48
|
+
return truck_tare(transport)
|
|
49
|
+
}
|
|
50
|
+
return []
|
|
51
|
+
}
|