def generate_multibody_file(): global end_of_fuselage_node global LC # LCR = gc.LagrangeConstraint() # LCR.behaviour = 'lin_vel_node_wrtG' # LCR.velocity = np.zeros((3,)) # LCR.body_number = 0 # LCR.node_number = flat_end_node[0] # LCL = gc.LagrangeConstraint() # LCL.behaviour = 'lin_vel_node_wrtG' # LCL.velocity = np.zeros((3,)) # LCL.body_number = 0 # LCL.node_number = flat_end_node[1] LCF = gc.LagrangeConstraint() LCF.behaviour = 'lin_vel_node_wrtG' LCF.velocity = np.zeros((3, )) LCF.body_number = 0 LCF.node_number = end_of_fuselage_node LCCR = gc.LagrangeConstraint() LCCR.behaviour = 'lin_vel_node_wrtG' LCCR.velocity = np.zeros((3, )) LCCR.body_number = 0 LCCR.node_number = first_node_centre[0] LCCL = gc.LagrangeConstraint() LCCL.behaviour = 'lin_vel_node_wrtG' LCCL.velocity = np.zeros((3, )) LCCL.body_number = 0 LCCL.node_number = first_node_centre[1] # LC = [LCR, LCL, LCF, LCCR, LCCL] LC = [LCF, LCCR, LCCL] MB1 = gc.BodyInformation() MB1.body_number = 0 MB1.FoR_position = np.zeros((6, )) MB1.FoR_velocity = np.zeros((6, )) MB1.FoR_acceleration = np.zeros((6, )) MB1.FoR_movement = 'free' MB1.quat = np.array([1.0, 0.0, 0.0, 0.0]) MB = [MB1] gc.generate_multibody_file(LC, MB, route, case_name)
def generate_multibody_file(): LC2 = gc.LagrangeConstraint() LC2.behaviour = 'hinge_FoR' LC2.rot_axis_AFoR = np.array([1.0, 0.0, 0.0]) LC2.body_FoR = 0 # LC2.node_number = int(0) LC = [] LC.append(LC2) MB1 = gc.BodyInformation() MB1.body_number = 0 MB1.FoR_position = np.zeros((6, )) MB1.FoR_velocity = np.zeros((6, )) MB1.FoR_acceleration = np.zeros((6, )) MB1.FoR_movement = 'free' MB1.quat = np.array([1.0, 0.0, 0.0, 0.0]) MB = [] MB.append(MB1) gc.clean_test_files(route, case_name) gc.generate_multibody_file(LC, MB, route, case_name)
# Create the BC file LC1 = gc.LagrangeConstraint() LC1.behaviour = 'hinge_FoR' LC1.body_FoR = 0 LC1.rot_axis_AFoR = np.array([0.0, 1.0, 0.0]) LC = [] LC.append(LC1) MB1 = gc.BodyInformation() MB1.body_number = 0 MB1.FoR_position = np.zeros((6, ), ) MB1.FoR_velocity = np.zeros((6, ), ) MB1.FoR_acceleration = np.zeros((6, ), ) MB1.FoR_movement = 'free' # MB1.quat = algebra.euler2quat_ag(euler) MB1.quat = np.array([1.0, 0.0, 0.0, 0.0]) MB = [] MB.append(MB1) # Write files gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case']) SimInfo.generate_solver_file() SimInfo.generate_dyn_file(n_tstep) beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case']) gc.generate_multibody_file(LC, MB, SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case']) print("DONE")
def setUp(self): nodes_per_elem = 3 # beam1: uniform and symmetric with aerodynamic properties equal to zero nnodes1 = 11 length1 = 10. mass_per_unit_length = 0.1 mass_iner = 1e-4 EA = 1e9 GA = 1e9 GJ = 1e3 EI = 1e4 # Create beam1 beam1 = gc.AeroelasticInformation() # Structural information beam1.StructuralInformation.num_node = nnodes1 beam1.StructuralInformation.num_node_elem = nodes_per_elem beam1.StructuralInformation.compute_basic_num_elem() beam1.StructuralInformation.set_to_zero(beam1.StructuralInformation.num_node_elem, beam1.StructuralInformation.num_node, beam1.StructuralInformation.num_elem) node_pos = np.zeros((nnodes1, 3), ) node_pos[:, 0] = np.linspace(0.0, length1, nnodes1) beam1.StructuralInformation.generate_uniform_sym_beam(node_pos, mass_per_unit_length, mass_iner, EA, GA, GJ, EI, num_node_elem = 3, y_BFoR = 'y_AFoR', num_lumped_mass=2) beam1.StructuralInformation.boundary_conditions[0] = 1 beam1.StructuralInformation.boundary_conditions[-1] = -1 beam1.StructuralInformation.lumped_mass_nodes = np.array([0, nnodes1-1], dtype=int) beam1.StructuralInformation.lumped_mass = np.array([2., 1.]) beam1.StructuralInformation.lumped_mass_inertia = np.zeros((2, 3, 3),) beam1.StructuralInformation.lumped_mass_position = np.zeros((2, 3),) # Aerodynamic information airfoil = np.zeros((1, 20, 2),) airfoil[0, :, 0] = np.linspace(0., 1., 20) beam1.AerodynamicInformation.create_one_uniform_aerodynamics( beam1.StructuralInformation, chord=1., twist=0., sweep=0., num_chord_panels=4, m_distribution='uniform', elastic_axis=0.5, num_points_camber=20, airfoil=airfoil) # SOLVER CONFIGURATION SimInfo = gc.SimulationInformation() SimInfo.set_default_values() SimInfo.define_uinf(np.array([0.0,1.0,0.0]), 10.) SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader', 'AerogridLoader', 'StaticCoupled', 'DynamicCoupled'] self.name = 'fix_node_velocity_wrtG' SimInfo.solvers['SHARPy']['case'] = self.name SimInfo.solvers['SHARPy']['write_screen'] = 'off' SimInfo.solvers['SHARPy']['route'] = folder + '/' SimInfo.set_variable_all_dicts('dt', 0.1) SimInfo.set_variable_all_dicts('rho', 0.0) SimInfo.set_variable_all_dicts('velocity_field_input', SimInfo.solvers['SteadyVelocityField']) SimInfo.set_variable_all_dicts('folder', folder + '/output/') SimInfo.solvers['BeamLoader']['unsteady'] = 'on' SimInfo.solvers['AerogridLoader']['unsteady'] = 'on' SimInfo.solvers['AerogridLoader']['mstar'] = 2 SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'StraightWake' SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf':10., 'u_inf_direction': np.array([0., 1., 0.]), 'dt': 0.1} SimInfo.solvers['NonLinearStatic']['print_info'] = False SimInfo.solvers['StaticCoupled']['structural_solver'] = 'NonLinearStatic' SimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearStatic'] SimInfo.solvers['StaticCoupled']['aero_solver'] = 'StaticUvlm' SimInfo.solvers['StaticCoupled']['aero_solver_settings'] = SimInfo.solvers['StaticUvlm'] SimInfo.solvers['WriteVariablesTime']['structure_nodes'] = np.array([0, int((nnodes1-1)/2), -1], dtype = int) SimInfo.solvers['WriteVariablesTime']['structure_variables'] = ['pos'] SimInfo.solvers['BeamPlot']['include_FoR'] = True SimInfo.solvers['NonLinearDynamicMultibody']['relaxation_factor'] = 0.0 SimInfo.solvers['NonLinearDynamicMultibody']['min_delta'] = 1e-5 SimInfo.solvers['NonLinearDynamicMultibody']['max_iterations'] = 200 SimInfo.solvers['NonLinearDynamicMultibody']['newmark_damp'] = 1e-3 # SimInfo.solvers['NonLinearDynamicMultibody']['gravity_on'] = 'off' SimInfo.solvers['NonLinearDynamicMultibody']['relaxation_factor'] = 0.0 SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'NonLinearDynamicMultibody' SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearDynamicMultibody'] SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm' SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm'] SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['WriteVariablesTime', 'BeamPlot', 'AerogridPlot'] SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'WriteVariablesTime': SimInfo.solvers['WriteVariablesTime'], 'BeamPlot': SimInfo.solvers['BeamPlot'], 'AerogridPlot': SimInfo.solvers['AerogridPlot']} ntimesteps = 10 SimInfo.define_num_steps(ntimesteps) # Define dynamic simulation SimInfo.with_forced_vel = False SimInfo.with_dynamic_forces = False LC2 = gc.LagrangeConstraint() LC2.behaviour = 'lin_vel_node_wrtG' LC2.velocity = np.zeros((ntimesteps, 3)) LC2.velocity[:int(ntimesteps/2),1] = 0.5 LC2.velocity[int(ntimesteps/2):,1] = -0.5 LC2.body_number = 0 LC2.node_number = int((nnodes1-1)/2) LC = [] # LC.append(LC1) LC.append(LC2) # Define the multibody infromation for the tower and the rotor MB1 = gc.BodyInformation() MB1.body_number = 0 MB1.FoR_position = np.zeros((6,),) MB1.FoR_velocity = np.zeros((6,),) MB1.FoR_acceleration = np.zeros((6,),) MB1.FoR_movement = 'free' MB1.quat = np.array([1.0,0.0,0.0,0.0]) MB = [] MB.append(MB1) gc.clean_test_files( SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case']) SimInfo.generate_solver_file() SimInfo.generate_dyn_file(ntimesteps) beam1.generate_h5_files( SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case']) gc.generate_multibody_file(LC, MB,SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])
def setUp(self): import sharpy.utils.generate_cases as gc deg2rad = np.pi/180. # Structural properties mass_per_unit_length = 1. mass_iner = 1e-4 EA = 1e9 GA = 1e9 GJ = 1e9 EI = 1e9 # Beam1 global nnodes1 nnodes1 = 11 l1 = 1.0 m1 = 1.0 theta_ini1 = 90.*deg2rad # Beam2 nnodes2 = nnodes1 l2 = l1 m2 = m1 theta_ini2 = 00.*deg2rad # airfoils airfoil = np.zeros((1,20,2),) airfoil[0,:,0] = np.linspace(0.,1.,20) # Simulation numtimesteps = 10 dt = 0.01 # Create the structure beam1 = gc.AeroelasticInformation() r1 = np.linspace(0.0, l1, nnodes1) node_pos1 = np.zeros((nnodes1,3),) node_pos1[:, 0] = r1*np.sin(theta_ini1) node_pos1[:, 2] = -r1*np.cos(theta_ini1) beam1.StructuralInformation.generate_uniform_sym_beam(node_pos1, mass_per_unit_length, mass_iner, EA, GA, GJ, EI, num_node_elem = 3, y_BFoR = 'y_AFoR', num_lumped_mass=1) beam1.StructuralInformation.body_number = np.zeros((beam1.StructuralInformation.num_elem,), dtype = int) beam1.StructuralInformation.boundary_conditions[0] = 1 beam1.StructuralInformation.boundary_conditions[-1] = -1 beam1.StructuralInformation.lumped_mass_nodes = np.array([nnodes1-1], dtype = int) beam1.StructuralInformation.lumped_mass = np.ones((1,))*m1 beam1.StructuralInformation.lumped_mass_inertia = np.zeros((1,3,3)) beam1.StructuralInformation.lumped_mass_position = np.zeros((1,3)) beam1.AerodynamicInformation.create_one_uniform_aerodynamics( beam1.StructuralInformation, chord = 1., twist = 0., sweep = 0., num_chord_panels = 4, m_distribution = 'uniform', elastic_axis = 0.25, num_points_camber = 20, airfoil = airfoil) beam2 = gc.AeroelasticInformation() r2 = np.linspace(0.0, l2, nnodes2) node_pos2 = np.zeros((nnodes2,3),) node_pos2[:, 0] = r2*np.sin(theta_ini2) + node_pos1[-1, 0] node_pos2[:, 2] = -r2*np.cos(theta_ini2) + node_pos1[-1, 2] beam2.StructuralInformation.generate_uniform_sym_beam(node_pos2, mass_per_unit_length, mass_iner, EA, GA, GJ, EI, num_node_elem = 3, y_BFoR = 'y_AFoR', num_lumped_mass=1) beam2.StructuralInformation.body_number = np.zeros((beam1.StructuralInformation.num_elem,), dtype = int) beam2.StructuralInformation.boundary_conditions[0] = 1 beam2.StructuralInformation.boundary_conditions[-1] = -1 beam2.StructuralInformation.lumped_mass_nodes = np.array([nnodes2-1], dtype = int) beam2.StructuralInformation.lumped_mass = np.ones((1,))*m2 beam2.StructuralInformation.lumped_mass_inertia = np.zeros((1,3,3)) beam2.StructuralInformation.lumped_mass_position = np.zeros((1,3)) beam2.AerodynamicInformation.create_one_uniform_aerodynamics( beam2.StructuralInformation, chord = 1., twist = 0., sweep = 0., num_chord_panels = 4, m_distribution = 'uniform', elastic_axis = 0.25, num_points_camber = 20, airfoil = airfoil) beam1.assembly(beam2) # Simulation details SimInfo = gc.SimulationInformation() SimInfo.set_default_values() SimInfo.define_uinf(np.array([0.0,1.0,0.0]), 1.) SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader', 'AerogridLoader', # 'InitializeMultibody', 'DynamicCoupled'] global name name = 'double_pendulum_geradin' SimInfo.solvers['SHARPy']['case'] = 'double_pendulum_geradin' SimInfo.solvers['SHARPy']['write_screen'] = 'off' SimInfo.solvers['SHARPy']['route'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/' SimInfo.solvers['SHARPy']['log_folder'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/' SimInfo.set_variable_all_dicts('dt', dt) SimInfo.define_num_steps(numtimesteps) SimInfo.set_variable_all_dicts('rho', 0.0) SimInfo.set_variable_all_dicts('velocity_field_input', SimInfo.solvers['SteadyVelocityField']) SimInfo.set_variable_all_dicts('output', os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/') SimInfo.solvers['BeamLoader']['unsteady'] = 'on' SimInfo.solvers['AerogridLoader']['unsteady'] = 'on' SimInfo.solvers['AerogridLoader']['mstar'] = 2 SimInfo.solvers['WriteVariablesTime']['FoR_number'] = np.array([0, 1], dtype = int) SimInfo.solvers['WriteVariablesTime']['FoR_variables'] = ['mb_quat'] SimInfo.solvers['WriteVariablesTime']['structure_nodes'] = np.array([nnodes1-1, nnodes1+nnodes2-1], dtype = int) SimInfo.solvers['WriteVariablesTime']['structure_variables'] = ['pos'] SimInfo.solvers['NonLinearDynamicMultibody']['gravity_on'] = True SimInfo.solvers['NonLinearDynamicMultibody']['newmark_damp'] = 0.15 SimInfo.solvers['BeamPlot']['include_FoR'] = True SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'NonLinearDynamicMultibody' SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearDynamicMultibody'] SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm' SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm'] SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['WriteVariablesTime', 'BeamPlot', 'AerogridPlot'] SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'WriteVariablesTime': SimInfo.solvers['WriteVariablesTime'], 'BeamPlot': SimInfo.solvers['BeamPlot'], 'AerogridPlot': SimInfo.solvers['AerogridPlot']} SimInfo.solvers['DynamicCoupled']['postprocessors_settings']['WriteVariablesTime']['folder'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/' SimInfo.solvers['DynamicCoupled']['postprocessors_settings']['BeamPlot']['folder'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/' SimInfo.solvers['DynamicCoupled']['postprocessors_settings']['AerogridPlot']['folder'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/' SimInfo.with_forced_vel = False SimInfo.with_dynamic_forces = False # Create the MB and BC files LC1 = gc.LagrangeConstraint() LC1.behaviour = 'hinge_FoR' LC1.body_FoR = 0 LC1.rot_axis_AFoR = np.array([0.0,1.0,0.0]) LC2 = gc.LagrangeConstraint() LC2.behaviour = 'hinge_node_FoR' LC2.node_in_body = nnodes1-1 LC2.body = 0 LC2.body_FoR = 1 LC2.rot_axisB = np.array([0.0,1.0,0.0]) LC = [] LC.append(LC1) LC.append(LC2) MB1 = gc.BodyInformation() MB1.body_number = 0 MB1.FoR_position = np.zeros((6,),) MB1.FoR_velocity = np.zeros((6,),) MB1.FoR_acceleration = np.zeros((6,),) MB1.FoR_movement = 'free' MB1.quat = np.array([1.0,0.0,0.0,0.0]) MB2 = gc.BodyInformation() MB2.body_number = 1 MB2.FoR_position = np.array([node_pos2[0, 0], node_pos2[0, 1], node_pos2[0, 2], 0.0, 0.0, 0.0]) MB2.FoR_velocity = np.zeros((6,),) MB2.FoR_acceleration = np.zeros((6,),) MB2.FoR_movement = 'free' MB2.quat = np.array([1.0,0.0,0.0,0.0]) MB = [] MB.append(MB1) MB.append(MB2) # Write files gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case']) SimInfo.generate_solver_file() SimInfo.generate_dyn_file(numtimesteps) beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case']) gc.generate_multibody_file(LC, MB,SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])