1 // ============================================================================= 2 // PROJECT CHRONO - http://projectchrono.org 3 // 4 // Copyright (c) 2014 projectchrono.org 5 // All rights reserved. 6 // 7 // Use of this source code is governed by a BSD-style license that can be found 8 // in the LICENSE file at the top level of the distribution and at 9 // http://projectchrono.org/license-chrono.txt. 10 // 11 // ============================================================================= 12 // Authors: Radu Serban 13 // ============================================================================= 14 // 15 // HMMWV ANCF tire subsystem 16 // 17 // ============================================================================= 18 19 #ifndef HMMWV_ANCF_TIRE_H 20 #define HMMWV_ANCF_TIRE_H 21 22 #include "chrono/fea/ChElementShellANCF_3423.h" 23 #include "chrono_models/ChApiModels.h" 24 #include "chrono_vehicle/wheeled_vehicle/tire/ChANCFTire.h" 25 26 namespace chrono { 27 namespace vehicle { 28 namespace hmmwv { 29 30 /// @addtogroup vehicle_models_hmmwv 31 /// @{ 32 33 /// Deformable tire model for the HMMWV vehicle (using ANCF shell FEA elements) 34 class CH_MODELS_API HMMWV_ANCFTire : public ChANCFTire { 35 public: 36 HMMWV_ANCFTire(const std::string& name); ~HMMWV_ANCFTire()37 ~HMMWV_ANCFTire() {} 38 39 /// Get the tire radius. GetRadius()40 virtual double GetRadius() const override { return m_tire_radius; } 41 /// Get the rim radius (inner tire radius). GetRimRadius()42 virtual double GetRimRadius() const override { return m_rim_radius; } 43 /// Get the tire width. GetWidth()44 virtual double GetWidth() const override { return m_rim_width; } 45 /// Get the default tire pressure. GetDefaultPressure()46 virtual double GetDefaultPressure() const override { return m_default_pressure; } 47 48 /// Return list of nodes connected to the rim. 49 virtual std::vector<std::shared_ptr<fea::ChNodeFEAbase>> GetConnectedNodes() const override; 50 51 /// Create the FEA nodes and elements. 52 /// The wheel rotational axis is assumed to be the Y axis. 53 virtual void CreateMesh(const ChFrameMoving<>& wheel_frame, ///< frame of associated wheel 54 VehicleSide side ///< left/right vehicle side 55 ) override; 56 57 private: 58 virtual void CreateContactMaterial() override; 59 60 static const double m_tire_radius; 61 static const double m_rim_radius; 62 static const double m_rim_width; 63 64 static const int m_div_circumference; 65 int m_div_width; 66 67 static const double m_alpha; 68 static const double m_default_pressure; 69 70 static const double m_rho_0; 71 static const ChVector<> m_E_0; 72 static const ChVector<> m_nu_0; 73 static const ChVector<> m_G_0; 74 static const double m_rho_1; 75 static const ChVector<> m_E_1; 76 static const ChVector<> m_nu_1; 77 static const ChVector<> m_G_1; 78 static const double m_rho_2; 79 static const ChVector<> m_E_2; 80 static const ChVector<> m_nu_2; 81 static const ChVector<> m_G_2; 82 std::vector<std::shared_ptr<fea::ChMaterialShellANCF>> m_materials; 83 84 static const unsigned int m_num_elements_bead; 85 static const unsigned int m_num_layers_bead; 86 static const std::vector<double> m_layer_thickness_bead; 87 static const std::vector<double> m_ply_angle_bead; 88 static const std::vector<int> m_material_id_bead; 89 90 static const unsigned int m_num_elements_sidewall; 91 static const unsigned int m_num_layers_sidewall; 92 static const std::vector<double> m_layer_thickness_sidewall; 93 static const std::vector<double> m_ply_angle_sidewall; 94 static const std::vector<int> m_material_id_sidewall; 95 96 static const unsigned int m_num_elements_tread; 97 static const unsigned int m_num_layers_tread; 98 static const std::vector<double> m_layer_thickness_tread; 99 static const std::vector<double> m_ply_angle_tread; 100 static const std::vector<int> m_material_id_tread; 101 102 static const float m_friction; 103 static const float m_restitution; 104 static const float m_Young; 105 static const float m_Poisson; 106 static const float m_kn; 107 static const float m_gn; 108 static const float m_kt; 109 static const float m_gt; 110 111 static const unsigned int m_num_points; 112 static const double m_profile[71][3]; 113 std::vector<double> m_profile_t; 114 std::vector<double> m_profile_x; 115 std::vector<double> m_profile_y; 116 }; 117 118 /// @} vehicle_models_hmmwv 119 120 } // end namespace hmmwv 121 } // end namespace vehicle 122 } // end namespace chrono 123 124 #endif 125