def test_FEM(self): """ test of FEM calculations """ comp = FEM(10) path = os.path.join(os.path.dirname(__file__), 'FEM.mat') data = loadmat(path, struct_as_record=True, mat_dtype=True) # populate inputs comp.flags = Flags() comp.flags.Load = int(data['flags']['Load'][0][0][0][0]) comp.flags.wingWarp = int(data['flags']['wingWarp'][0][0][0][0]) comp.yN = data['yN'] comp.EIx = data['EIx'] comp.EIz = data['EIz'] comp.EA = data['EA'] comp.GJ = data['GJ'] comp.cE = data['cE'] comp.xEA = data['xEA'] comp.fblade = Fblade(10) comp.fblade.Fx = data['Fblade']['Fx'][0][0].flatten() comp.fblade.Fz = data['Fblade']['Fz'][0][0].flatten() comp.fblade.My = data['Fblade']['My'][0][0].flatten() comp.fblade.Q = data['Fblade']['Q'][0][0].flatten() comp.fblade.P = data['Fblade']['P'][0][0].flatten() comp.fblade.Pi = data['Fblade']['Pi'][0][0].flatten() comp.fblade.Pp = data['Fblade']['Pp'][0][0].flatten() comp.mSpar = data['mSpar'] comp.mChord = data['mChord'] comp.xCG = data['xCG'] comp.yWire = data['yWire'].flatten() comp.zWire = data['zWire'][0][0] comp.TWire = data['TWire'].flatten() comp.presLoad = PrescribedLoad() comp.presLoad.y = data['presLoad']['y'][0][0][0][0] comp.presLoad.pointZ = data['presLoad']['pointZ'][0][0][0][0] comp.presLoad.pointM = data['presLoad']['pointM'][0][0][0][0] comp.presLoad.distributedX = data['presLoad']['distributedX'][0][0][0][ 0] comp.presLoad.distributedZ = data['presLoad']['distributedZ'][0][0][0][ 0] comp.presLoad.distributedM = data['presLoad']['distributedM'][0][0][0][ 0] # run comp.run() # check outputs self.check_FEM(comp, data)
def test_Structures(self): """ full up test of integrated structures calculations """ comp = Structures(10) path = os.path.join(os.path.dirname(__file__), 'StrCalc.mat') data = loadmat(path, struct_as_record=True, mat_dtype=True) # populate inputs comp.flags = Flags() comp.flags.Cover = int(data['flags']['Cover'][0][0][0][0]) comp.flags.Quad = int(data['flags']['Quad'][0][0][0][0]) comp.flags.Load = int(data['flags']['Load'][0][0][0][0]) comp.flags.wingWarp = int(data['flags']['wingWarp'][0][0][0][0]) CFRPType = int(data['flags']['CFRPType'][0][0][0][0]) if CFRPType == 1: comp.flags.CFRPType = 'NCT301-1X HS40 G150 33 +/-2%RW' elif CFRPType == 2: comp.flags.CFRPType = 'HexPly 6376 HTS-12K 268gsm 35%RW' elif CFRPType == 3: comp.flags.CFRPType = 'MTM28-1/IM7-GP-145gsm 32 +/-2%Rw' elif CFRPType == 4: comp.flags.CFRPType = 'HexPly 8552 IM7 160gsm 35%RW' elif CFRPType == 5: comp.flags.CFRPType = 'NCT304-1 HR40 G80 40 +/-2%RW' elif CFRPType == 6: comp.flags.CFRPType = 'MTM28-1B/M46J-140-37%RW' else: raise Exception('Unable to decode CFRPType from MATLAB data') WireType = int(data['flags']['WireType'][0][0][0][0]) if WireType == 1: comp.flags.WireType = 'Pianowire' elif WireType == 2: comp.flags.WireType = 'Vectran' else: raise Exception('Unable to decode WireType from MATLAB data') comp.yN = data['yN'] comp.d = data['d'] comp.theta = data['theta'] comp.nTube = data['nTube'] comp.nCap = data['nCap'] comp.lBiscuit = data['lBiscuit'] comp.Jprop = JointProperties() comp.Jprop.d = data['Jprop']['d'][0][0][0][0] comp.Jprop.theta = data['Jprop']['theta'][0][0][0][0] comp.Jprop.nTube = int(data['Jprop']['nTube'][0][0][0][0]) comp.Jprop.nCap = int(data['Jprop']['nCap'][0][0][0][0]) comp.Jprop.lBiscuit = data['Jprop']['lBiscuit'][0][0][0][0] comp.b = int(data['b'][0][0]) comp.cE = data['cE'].flatten() comp.xEA = data['xEA'].flatten() comp.xtU = data['xtU'].flatten() comp.dQuad = data['dQuad'][0][0] comp.thetaQuad = data['thetaQuad'][0][0] comp.nTubeQuad = int(data['nTubeQuad'][0][0]) comp.lBiscuitQuad = data['lBiscuitQuad'][0][0] comp.RQuad = data['RQuad'][0][0] comp.hQuad = data['hQuad'][0][0] comp.ycmax = data['ycmax'][0][0] comp.yWire = data['yWire'][0] comp.zWire = data['zWire'][0][0] comp.tWire = data['tWire'][0][0] comp.TWire = data['TWire'].flatten() comp.TEtension = data['TEtension'][0][0] comp.mElseRotor = data['mElseRotor'][0][0] comp.mElseCentre = data['mElseCentre'][0][0] comp.mElseR = data['mElseR'][0][0] comp.R = data['R'][0][0] comp.mPilot = data['mPilot'][0][0] comp.fblade = Fblade(10) comp.fblade.Fx = data['Fblade']['Fx'][0][0].flatten() comp.fblade.Fz = data['Fblade']['Fz'][0][0].flatten() comp.fblade.My = data['Fblade']['My'][0][0].flatten() comp.fblade.Q = data['Fblade']['Q'][0][0].flatten() comp.fblade.P = data['Fblade']['P'][0][0].flatten() comp.fblade.Pi = data['Fblade']['Pi'][0][0].flatten() comp.fblade.Pp = data['Fblade']['Pp'][0][0].flatten() comp.presLoad = PrescribedLoad() comp.presLoad.y = data['presLoad']['y'][0][0][0][0] comp.presLoad.pointZ = data['presLoad']['pointZ'][0][0][0][0] comp.presLoad.pointM = data['presLoad']['pointM'][0][0][0][0] comp.presLoad.distributedX = data['presLoad']['distributedX'][0][0][0][ 0] comp.presLoad.distributedZ = data['presLoad']['distributedZ'][0][0][0][ 0] comp.presLoad.distributedM = data['presLoad']['distributedM'][0][0][0][ 0] # run comp.run() # check outputs self.assertAlmostEquals(comp.Mtot, data['Mtot'], 10) for i, val in enumerate(data['q']): self.assertAlmostEquals(comp.q[i], val, 4, msg='q[%d] is %f, should be %f' % (i, comp.q[i], val)) self.check_strains(comp, data) self.check_failures(comp, data)
def test_AeroStructural(self): """ Test the AeroStructural assembly """ asm = set_as_top(AeroStructural()) # populate inputs path = os.path.join(os.path.dirname(__file__), 'HeliCalc.mat') data = loadmat(path, struct_as_record=True, mat_dtype=True) config = asm.config config.Ns = int(data['Ns'][0][0]) config.ycmax = data['ycmax'][0] config.rho = data['rho'][0][0] config.visc = data['visc'][0][0] config.vw = data['vw'][0][0] config.vc = data['vc'][0][0] config.R = data['R'][0][0] config.b = int(data['b'][0][0]) config.h = data['h'][0][0] config.Omega = data['Omega'][0][0] config.c = data['c_'][0] config.Cl = data['Cl_'][0] config.Cm = data['Cm_'][0] config.t = data['t_'][0] config.xtU = data['xtU_'][0] config.xtL = data['xtL_'][0] config.yWire = data['yWire'][0] config.zWire = data['zWire'][0][0] config.tWire = data['tWire'][0][0] config.TWire = data['TWire'].flatten() config.TEtension = data['TEtension'][0][0] config.xEA = data['xEA_'][0] config.d = data['d_'][0] config.theta = data['theta_'][0] config.nTube = data['nTube_'][0] config.nCap = data['nCap_'][0] config.lBiscuit = data['lBiscuit_'][0] config.anhedral = data['anhedral'][0][0] config.collective = data['collective'][0][0] config.dQuad = data['dQuad'][0][0] config.thetaQuad = data['thetaQuad'][0][0] config.nTubeQuad = int(data['nTubeQuad'][0][0]) config.lBiscuitQuad = data['lBiscuitQuad'][0][0] config.hQuad = data['hQuad'][0][0] config.mElseRotor = data['mElseRotor'][0][0] config.mElseCentre = data['mElseCentre'][0][0] config.mElseR = data['mElseR'][0][0] config.mPilot = data['mPilot'][0][0] config.flags = Flags() config.flags.Cover = int(data['flags']['Cover'][0][0][0][0]) config.flags.Quad = int(data['flags']['Quad'][0][0][0][0]) config.flags.Load = int(data['flags']['Load'][0][0][0][0]) config.flags.wingWarp = int(data['flags']['wingWarp'][0][0][0][0]) CFRPType = int(data['flags']['CFRPType'][0][0][0][0]) if CFRPType == 1: config.flags.CFRPType = 'NCT301-1X HS40 G150 33 +/-2%RW' elif CFRPType == 2: config.flags.CFRPType = 'HexPly 6376 HTS-12K 268gsm 35%RW' elif CFRPType == 3: config.flags.CFRPType = 'MTM28-1/IM7-GP-145gsm 32 +/-2%Rw' elif CFRPType == 4: config.flags.CFRPType = 'HexPly 8552 IM7 160gsm 35%RW' elif CFRPType == 5: config.flags.CFRPType = 'NCT304-1 HR40 G80 40 +/-2%RW' elif CFRPType == 6: config.flags.CFRPType = 'MTM28-1B/M46J-140-37%RW' else: raise Exception('Unable to decode CFRPType from MATLAB data') WireType = int(data['flags']['WireType'][0][0][0][0]) if WireType == 1: config.flags.WireType = 'Pianowire' elif WireType == 2: config.flags.WireType = 'Vectran' else: raise Exception('Unable to decode WireType from MATLAB data') config.presLoad = PrescribedLoad() config.presLoad.y = data['presLoad']['y'][0][0][0][0] config.presLoad.pointZ = data['presLoad']['pointZ'][0][0][0][0] config.presLoad.pointM = data['presLoad']['pointM'][0][0][0][0] config.presLoad.distributedX = data['presLoad']['distributedX'][0][0][ 0][0] config.presLoad.distributedZ = data['presLoad']['distributedZ'][0][0][ 0][0] config.presLoad.distributedM = data['presLoad']['distributedM'][0][0][ 0][0] # run asm.run() # compare outputs to MATLAB data for i, val in enumerate(data['out']['alphaJig'][0][0]): msg = 'alphaJig[%d] is %f, compared to %f' % ( i, asm.results.alphaJig[i], val) print msg val = data['out']['Ttot'][0][0] msg = 'Ttot is %f, compared to %f' % (asm.results.Ttot, val) print msg val = data['out']['Ptot'][0][0] msg = 'Ptot is %f, compared to %f' % (asm.results.Ptot, val) print msg val = data['out']['MomRot'][0][0] msg = 'MomRot is %f, compared to %f' % (asm.results.MomRot, val) print msg val = data['out']['Mtot'][0][0] msg = 'Mtot is %f, compared to %f' % (asm.struc.Mtot, val) print msg val = data['out']['mQuad'][0][0] msg = 'mQuad is %f, compared to %f' % (asm.struc.mass.mQuad, val) print msg val = data['out']['mCover'][0][0] msg = 'mCover is %f, compared to %f' % (asm.struc.mass.mCover, val) print msg val = data['out']['mWire'][0][0] msg = 'mWire is %f, compared to %f' % (asm.struc.mass.mWire, val) print msg