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
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()
'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()