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])
    ])