def test_rm_sign_and_symmetry_rm_estimate_gerritsma(): r"""Test righting moment sign.""" s = SystemOfForces() for f in rm: s.add_force(Force((f.fx, f.fy, f.fz), (f.px, f.py, f.pz))) assert s.mx > 0 assert s.my == 0. assert s.mz == 0.
def test_trm_sign_and_symmetry_trm_estimate(): r"""Test trim righting moment sign.""" s = SystemOfForces() for f in trm: s.add_force(Force((f.fx, f.fy, f.fz), (f.px, f.py, f.pz))) assert s.my > 0 assert s.mx == 0. assert s.mz == 0.
def test_trm_negative_pitch_trm_estimate(): r"""Test moments with negative trim.""" s1 = SystemOfForces() for f in trm_estimate(trim_angle=-3., displacement=displacement, lwl=lwl, bwl=bwl, Tc=Tc, Gdwl=Gdwl, rho_water=rho_water): s1.add_force(Force((f.fx, f.fy, f.fz), (f.px, f.py, f.pz))) assert s1.mx == 0. assert s1.my < 0 assert s1.mz == 0.
def test_rm_negative_heel_rm_estimate_gerritsma(): r"""Test righting moment with negative heel.""" s1 = SystemOfForces() for f in rm_estimate_gerritsma(boatspeed=1., heel_angle=-30., displacement=displacement, lwl=lwl, bwl=bwl, Tc=Tc, Gdwl=Gdwl, rho_water=rho_water): s1.add_force(Force((f.fx, f.fy, f.fz), (f.px, f.py, f.pz))) assert s1.mx < 0 assert s1.my == 0. assert s1.mz == 0.
def test_rm_going_backwards_rm_estimate_gerritsma(): r"""Test righting moment going backwards.""" s = SystemOfForces() for f in rm_estimate_gerritsma(boatspeed=-1., heel_angle=30., displacement=displacement, lwl=lwl, bwl=bwl, Tc=Tc, Gdwl=Gdwl, rho_water=rho_water): s.add_force(Force((f.fx, f.fy, f.fz), (f.px, f.py, f.pz))) assert s.mx > 0 assert s.my == 0. assert s.mz == 0.
def test_coe_position_sideforce_production_keuning_verwerft(): r"""Centre of effort position tests.""" sof_1 = SystemOfForces() sof_2 = SystemOfForces() force = \ sideforce_production_keuning_verwerft(boatspeed=4., heel_angle=20., leeway_angle=5., rudder_angle=5., keel_projected_area=0.025240, keel_span=0.42 - Tc - bulb_diameter, rudder_projected_area=0.012402, rudder_span=0.248, lwl=lwl, bwl=bwl, Tc=Tc, # hull_coe=None, keel_coe=(0.460, 0., -0.2167), rudder_coe=(0.0536, 0., -0.11495), keel_sweep_back_angle=20.) for f in force: sof_1.add_force(Force((f.fx, f.fy, f.fz), (f.px, f.py, f.pz))) assert sof_1.moment[2] < 0 # assert force.position[0] > 0.0536 # assert force.position[0] < 0.460 # assert force.position[1] < 0. # assert force.position[2] > - 0.2167 force = \ sideforce_production_keuning_verwerft(boatspeed=4., heel_angle=-20., leeway_angle=5., rudder_angle=5., keel_projected_area=0.025240, keel_span=0.42 - Tc - bulb_diameter, rudder_projected_area=0.012402, rudder_span=0.248, lwl=lwl, bwl=bwl, Tc=Tc, # hull_coe=None, keel_coe=(0.460, 0., -0.2167), rudder_coe=(0.0536, 0., -0.11495), keel_sweep_back_angle=20.) for f in force: sof_2.add_force(Force((f.fx, f.fy, f.fz), (f.px, f.py, f.pz))) # assert force.position[0] > 0.0536 # assert force.position[0] < 0.460 # assert force.position[1] > 0. # assert force.position[2] > - 0.2167 assert sof_2.moment[2] < 0
def test_trm_zero_heel_moving_trm_estimate(): r"""Check moments and sum pf forces is 0 when upright.""" s = SystemOfForces() for f in trm_estimate(trim_angle=0., displacement=displacement, lwl=lwl, bwl=bwl, Tc=Tc, Gdwl=Gdwl): s.add_force(Force((f.fx, f.fy, f.fz), (f.px, f.py, f.pz))) assert s.mx == 0. assert s.my == 0. assert s.mz == 0. assert s.x == 0. assert s.y == 0. assert s.z == 0.
def test_rm_zero_heel_rm_estimate_gerritsma(): r"""Test righting moment and sum of forces are 0 when upright.""" s = SystemOfForces() for f in rm_estimate_gerritsma(boatspeed=1., heel_angle=0., displacement=displacement, lwl=lwl, bwl=bwl, Tc=Tc, Gdwl=Gdwl, rho_water=rho_water): s.add_force(Force((f.fx, f.fy, f.fz), (f.px, f.py, f.pz))) assert s.mx == 0. assert s.my == 0. assert s.mz == 0. assert s.x == 0. assert s.y == 0. assert s.z == 0.
def test_system_of_forces_ref_somewhere_else(): r"""Reference is at an arbitrary point.""" sf_2 = SystemOfForces(moments_point_of_reference=(10., 22., 3800.)) sf_2.add_force(force_x_plus_at_0_m1_0) sf_2.add_force(force_x_minus_at_0_1_0) sf_2.add_force(force_y_plus_at_m1_0_0) sf_2.add_force(force_y_minus_at_1_0_0) assert (sf_2.force == [0., 0., 0.]).all() assert (sf_2.moment == [0., 40., 0.]).all()
#!/usr/bin/env python # coding: utf-8 r"""Forces example.""" from ydeos_forces.forces import Force, SystemOfForces force_x_plus_at_0_m1_0 = Force((1., 0., 10.), (0., -1., 0.)) force_x_minus_at_0_1_0 = Force((-1., 0., 10.), (0., 1., 0.)) force_y_plus_at_m1_0_0 = Force((0., 1., 10.), (-1., 0., 0.)) force_y_minus_at_1_0_0 = Force((0., -1., -30.), (1., 0., 0.)) sf = SystemOfForces(moments_point_of_reference=(0., 0., 0.)) sf_2 = SystemOfForces(moments_point_of_reference=(10., 22., 3800.)) sf.add_force(force_x_plus_at_0_m1_0) sf.add_force(force_x_minus_at_0_1_0) sf.add_force(force_y_plus_at_m1_0_0) sf.add_force(force_y_minus_at_1_0_0) sf_2.add_force(force_x_plus_at_0_m1_0) sf_2.add_force(force_x_minus_at_0_1_0) sf_2.add_force(force_y_plus_at_m1_0_0) sf_2.add_force(force_y_minus_at_1_0_0) print('*************') print('System of Forces - ref at 0,0,0') print(f'Total force : {sf.force}') print(f'Total moment : {sf.moment}')
def test_system_of_forces_ref_at_0_0_0(): r"""Reference is at the origin.""" sf = SystemOfForces(moments_point_of_reference=(0., 0., 0.)) sf.add_force(force_x_plus_at_0_m1_0) sf.add_force(force_x_minus_at_0_1_0) sf.add_force(force_y_plus_at_m1_0_0) sf.add_force(force_y_minus_at_1_0_0) assert (sf.force == [0., 0., 0.]).all() assert (sf.moment == [0., 40., 0.]).all() sf = SystemOfForces(moments_point_of_reference=None) sf.add_force(force_x_plus_at_0_m1_0) sf.add_force(force_x_minus_at_0_1_0) sf.add_force(force_y_plus_at_m1_0_0) sf.add_force(force_y_minus_at_1_0_0) assert (sf.force == [0., 0., 0.]).all() assert (sf.moment == [0., 40., 0.]).all() assert sf.x == 0. assert sf.y == 0. assert sf.z == 0. assert sf.mx == 0. assert sf.my == 40. assert sf.mz == 0.