spring_k_1[i] = spring_outer_springConstant #Outer Springs else: spring_k_1[i] = spring_inner_springConstant #Inner Springs print 'Spring Constant Matrix' print spring_k_1 spring_d = np.ones(C.shape[0])*spring_damping #spring damping bar_lengths,spring_lengths = eu.compute_lengths(B,C,N.T) #spring equilibrium length spring_l0 = spring_lengths-0.04 #compute mass matrices density_1 = lambda x:rod_mass density_2 = lambda x:payload_mass if rodMass == 1: bar_mass = np.array ([ mass_matrix.compute_mass_matrix (length = bar_lengths.ravel()[i], density = density_1, sigma=0.)[0] for i in range (B.shape[0]) ]) bar_mass[-1] = np.array([mass_matrix.compute_mass_matrix (length = bar_lengths.ravel()[i], density = density_2, sigma=0.)[0] ]) else: bar_mass = np.array ([ mass_matrix.compute_mass_matrix (length = bar_lengths.ravel()[i], density = density_1, sigma=None)[0] for i in range (B.shape[0]) ]) #compute external forces (gravity :) external_forces_1 = np.zeros(N.shape) if default_gravity == True: force_distribution_gravity = lambda x: (0,0,-9.81) # Earth's gravity else: force_distribution_gravity = lambda x: (0,0,-gravity) # Titan's Gravity for i in xrange(B.shape[0]): #this is pretty complicated for something really simple... if i<(B.shape[0]-1):
strut_lengths = ico.bar_lengths.sum(1) #compute spring+strings eq. length spring_l0 = ico.string_lengths.sum(1)+ico.spring_lengths #attachments constrained_nodes = np.zeros(ico.N.shape[0]).astype(bool) #spring velocity damping spring_d = np.ones(ico.C.shape[0])*0.2 #computed center of mass (to decouple rotational and translational eq. of motion) bar_sigma = [1,0,None,None,None,1] bar_massmatrix = [] #strut mass matrices for i in xrange(ico.B.shape[0]): b, bar_sigma[i], dummy = mass_matrix.compute_mass_matrix(length = strut_lengths[i], sigma=bar_sigma[i], density= lambda x: 0.5*ico.bar_mass[i]*(strut_lengths[i]/ico.bar_lengths[i,0] if x<ico.bar_lengths[i,0]/strut_lengths[i] else strut_lengths[i]/ico.bar_lengths[i,1])) bar_massmatrix.append(b) bar_massmatrix = np.array(bar_massmatrix) #compute nodal forces due to gravity external_forces = np.zeros(ico.N.shape) force_distribution = lambda x: (0,0,-9.81) for i in xrange(ico.B.shape[0]): #this is pretty complicated for something really simple... f0,f1 = mass_matrix.compute_consistent_nodal_forces_vector(length=strut_lengths[i],density=lambda x: 0.5*ico.bar_mass[i]*(strut_lengths[i]/ico.bar_lengths[i,0] if x<ico.bar_lengths[i,0]/strut_lengths[i] else strut_lengths[i]/ico.bar_lengths[i,1]),force_distribution=force_distribution) from_ = ico.B[i].argmin() to_ = ico.B[i].argmax() external_forces[from_] = f0 external_forces[to_] = f1
spring_k_1[i] = spring_inner_springConstant #Inner Springs print 'Spring Constant Matrix' print spring_k_1 spring_d = np.ones(C.shape[0]) * spring_damping #spring damping bar_lengths, spring_lengths = eu.compute_lengths(B, C, N.T) #spring equilibrium length spring_l0 = spring_lengths - 0.04 #compute mass matrices density_1 = lambda x: rod_mass density_2 = lambda x: payload_mass if rodMass == 1: bar_mass = np.array([ mass_matrix.compute_mass_matrix(length=bar_lengths.ravel()[i], density=density_1, sigma=0.)[0] for i in range(B.shape[0]) ]) bar_mass[-1] = np.array([ mass_matrix.compute_mass_matrix(length=bar_lengths.ravel()[i], density=density_2, sigma=0.)[0] ]) else: bar_mass = np.array([ mass_matrix.compute_mass_matrix(length=bar_lengths.ravel()[i], density=density_1, sigma=None)[0] for i in range(B.shape[0]) ])