Пример #1
0
	def __init__(self, **kwargs):
		"""Simulation interface. 
		Used to apply loads on laminate and compute resulting strains/stresses. 

		Workflow : 
			- sim = Sim(laminate = Laminate(...))
			- sim.apply_N([a,b,c] * ureg.GNperm)
			- sim.apply_M([d,e,f] * ureg.GN)
			- sim.solve()
			- sim.return_results()
		"""
		# if isinstance(laminate,Laminate):
		# 	self.laminate = laminate
		# else:
		# 	raise TypeError("Input argument must be of type 'composites.Laminate'")
		x = kwargs
		try:
			self.laminate = x['laminate']
		except AttributeError as e: #['laminate'] does not contain a Laminate
			raise AttributeError("'laminate' must point to 'Laminate' object \n"+e.message)
		except KeyError:
			try:
				self.laminate = Laminate(x['layup'],x['materialID'])
			except KeyError:
				raise KeyError("Could not find keyword args 'laminate' or 'layup' and 'id'")

		self.laminate.compute_all()
		self.e0 = numpy.zeros((3,))   #Average strain from overall in-plane stress 'N'
		self.e_k = None
		self.solved = False
		self.loaded = False
Пример #2
0
        names = ('max', 'quad', 'hash')
        for cols, name in zip(all_cols, names):
            R_min_data = find_R_mins(self.R_data, cols)
            the_min_idx = R_min_data['Lowest R'].idxmin()
            minimum_R[name] = tuple(R_min_data[['Lowest R',
                                                'Mode']].iloc[the_min_idx])

        return minimum_R


if __name__ == '__main__':
    import numpy

    #Create a Simulation object composed of a laminate.
    sim = Sim(laminate=Laminate(
        '0_2/p25/0_2s',
        materialID=5,  #5
        core_thick=0.01))
    #Define and apply load
    P = Q_(1000, 'N')
    b = Q_(0.11, 'm')
    L = Q_(0.51, 'm')
    M1 = -P * L / (4 * b)
    N1 = 0.5 * P / b
    M = Q_([M1.magnitude, 0, 0], M1.units)
    N = Q_([N1.magnitude, 0, 0], N1.units)
    #Apply load
    sim.apply_M(M)
    sim.apply_N(N)
    sim.solve()
    fail = FailureAnalysis(sim)
    R_data = fail.make_table()
Пример #3
0
	               'epsilon_x','epsilon_y','epsilon_s',
	               'sigma_x','sigma_y','sigma_s')
			plies = [ ('%i (%i) - %s' % (layer.index+1,layer.theta,pos)
								) for layer in self.laminate.layers for pos in ['B','T']
						]
			df = pd.DataFrame(data = stacks
                          		,columns=columns
                          		,dtype = float
                          	)
			df['Ply'] = plies
			df.set_index('Ply',inplace = True)

		return df
			
def make_test_sim():
	layup = '0/90'; matID = 1
	a_sim = Sim(layup = layup,materialID = matID)
	a_sim.apply_N([1,0,0]*ureg.Nperm)
	a_sim.solve()
	return a_sim

if __name__ == '__main__':
	# sigma_on = transform_strain([0.0659,-0.0471,-0.0832],'off',30, do_debug = True)
	# print sigma_on
	layups = ['0/90/0/90s','0/45/0/-45s','0/45/0/90s','0/-45/0/45s','p45s']
	for layup in layups:
		sim = Sim(laminate = Laminate(layup,1))
		sim.apply_M([1,0,0]*ureg.GN)
		sim.solve()
		sim.return_stress()