def __init__(self, model): self.model = model self.n = 0 self.mat1 = MAT1(model) self.mats1 = MATS1(model) #self.mat2 = {} #self.mat4 = {} #self.mat5 = {} #self.mat10 = {} #self.mat2 = MAT1(model) #self.mat4 = MAT1(model) self.mat8 = MAT8(model) #self.mat10 = MAT1(model) self.mathp = MATHP(model)
def __init__(self, model): self.model = model self.n = 0 self.is_built = False self.mat1 = MAT1(model) self.mats1 = MATS1(model) #self.mat2 = MAT2(model) #self.mat4 = MAT4(model) #self.mat5 = MAT5(model) self.mat8 = MAT8(model) #self.mat10 = MAT10(model) #self.mat11 = MAT11(model) self.mathp = MATHP(model)
class Materials(object): def __init__(self, model): self.model = model self.n = 0 self.mat1 = MAT1(model) self.mats1 = MATS1(model) #self.mat2 = {} #self.mat4 = {} #self.mat5 = {} #self.mat10 = {} #self.mat2 = MAT1(model) #self.mat4 = MAT1(model) self.mat8 = MAT8(model) #self.mat10 = MAT1(model) self.mathp = MATHP(model) def add_mat1(self, card, comment): #self.mat1.add(card, comment) #mid = integer(card, 1, 'material_id') self.mat1.add(card=card, comment=comment) def add_mats1(self, card, comment): self.mats1.add(card, comment) def add_mat2(self, card, comment): self.mat2.add(card, comment) def add_mat4(self, card, comment): self.mat4.add(card, comment) def add_mat8(self, card, comment): self.mat8.add(card, comment) def add_mat10(self, card, comment): self.mat10.add(card, comment) def add_mathp(self, card, comment): self.mathp.add(card, comment) def allocate(self, card_count): self.model.log.info('allocate Materials') n = 0 types = self._get_types() names = self._get_type_names() for name, mat in zip(names, types): if name in card_count: self.model.log.info(' allocate %s' % name) n = card_count[name] mat.allocate(n) self.n += n self.n = n #aaa def build(self): n = 0 types = self._get_types() names = self._get_type_names() self.model.log.debug('building Materials') for name, mat in zip(names, types): ni = len(mat) n += ni self.model.log.debug(' building %s; n=%s' % (mat.__class__.__name__, ni)) mat.build() self.n = n def get_stats(self): msg = [] types = self._get_types() names = self._get_type_names() for mat, name in zip(types, names): msg.append(' %-8s: %i' % (name, len(mat))) #nmat = mat.n #if nmat: #msg.append(' %-8s: %i' % (mat.type, nmat)) return msg def get_material_id_by_property_id(self, property_id): n = len(property_id) types = self._get_types(nlimit=True) _material_id = concatenate([ptype.material_id for ptype in types]) self.model.log.debug(_material_id) assert _material_id.shape == (n, ), _material_id.shape return _material_id #def get_density_by_material_id(self, material_id): #rho = zeros(len(material_id), dtype='float64') #for i, mid in enumerate(material_id): #mat = self.get_structural_material(mid) #rho[i] = mat.rho #return rho def get_density_by_material_id(self, material_id): if isinstance(material_id, int): material_id = array([material_id], dtype='int32') n = len(material_id) self.model.log.debug('material_id =%s' % material_id) umids = unique(material_id) density = zeros(n, dtype='float64') mat_types = [ self.mat1, #self.mat2, self.mat8, self.mathp, ] for mat_type in mat_types: for mid in umids: if mid in mat_type.material_id: rho = mat_type.get_density_by_material_id([mid]) i = where(mid == material_id)[0] density[i] = rho assert density.shape == (n, ), density.shape return density def get_density_E_by_material_id(self, material_id): n = len(material_id) rho = zeros(n, dtype='float64') E = zeros(n, dtype='float64') for i, mid in enumerate(material_id): mat = self.get_structural_material(mid) rho[i] = mat.rho E[i] = mat.E() assert density.shape == (n, ), density.shape assert E.shape == (n, ), E.shape return rho, E def get_nonstructural_mass_by_material_id(self, material_id): n = len(material_id) nsm = zeros(n) for i, mid in enumerate(material_id): mat = self.get_structural_material(mid) nsm[i] = mat.nsm assert nsm.shape == (n, ), nsm.shape return nsm def get_E_by_material_id(self, material_id): n = len(material_id) E = zeros(n) for i, mid in enumerate(material_id): mat = self.get_shell_material(mid) E[i] = mat.E() assert E.shape == (n, ), E.shape return E def get_G_by_material_id(self, material_id): n = len(material_id) G = zeros(n) for i, mid in enumerate(material_id): mat = self.get_shell_material(mid) G[i] = mat.G() assert G.shape == (n, ), G.shape return G #def get_material_index_by_material_id(self, property_id): #if property_id is None: #return arange(self.n) #return searchsorted(property_id, self.property_id) def get_structural_material(self, material_id): if material_id in self.mat1: return self.mat1[material_id] elif material_id in self.mat8: return self.mat2[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def get_shell_material(self, material_id): #if material_id in self.mats1: #return self.mats1[material_id] if material_id in self.mat1: return self.mat1[material_id] elif material_id in self.mat2: return self.mat2[material_id] elif material_id in self.mat8: return self.mat8[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def get_solid_material(self, material_id): #if material_id in self.mats1: #return self.mats1[material_id] #if material_id in self.mat11: #return self.mat11[material_id] if material_id in self.mat1: return self.mat1[material_id] elif material_id in self.mat9: return self.mat9[material_id] elif material_id in self.mat10: return self.mat10[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def get_axial_material(self, material_id): if material_id in self.mat3: return self.mat3[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def get_thermal_material(self, material_id): if material_id in self.mat4: return self.mat4[material_id] elif material_id in self.mat5: return self.mat5[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def __getitem__(self, material_id): TypeMap = { 'MAT1' : (self.mat1, self.mat1.material_id), #'MAT2' : (self.mat2, self.mat2.material_id), #'MAT4' : (self.mat4, self.mat4.material_id), #'MAT5' : (self.mat5, self.mat5.material_id), 'MAT8' : (self.mat8, self.mat8.material_id), #'MAT10' : (self.mat10, self.mat10.material_id), #'MATS1' : (self.mats1, self.mats1.material_id), } material_id, int_flag = slice_to_iter(material_id) out = [] self.model.log.debug('material_ids = %s' % material_id) for mid in material_id: obj = None for Type, (mdict, mids) in iteritems(TypeMap): if mdict.n: self.model.log.debug('Type=%s mid=%s mids=%s' % (Type, mid, mids)) if mid in mids: self.model.log.debug(' *mid=%i Type=%s was found' % (mid, Type)) i = where(mid == mids)[0] obj = mdict[mid] #[i] break else: #self.model.log.debug(' mid=%i Type=%s was not found' % (mid, Type)) pass out.append(obj) return out[0] if int_flag else out def __getitem2__(self, material_id): assert isinstance(material_id, int), 'material_id=%r' % material_id types = self._get_types() for mat in types: if material_id in mat.material_id: return mat raise RuntimeError('Could not find material_id=%r' % material_id) def __len__(self): types = self._get_types() n = 0 for mat in types: #n += mat.n n += len(mat) return n def __iter__(self): types = self._get_types() for materials in types: if materials.n: for mid, mat in iteritems(materials): yield mat def _get_types(self): return [self.mat1, #self.mat2, self.mat4, self.mat8, #self.mat10, self.mats1, self.mathp, ] def _get_type_names(self): return ['MAT1', #'MAT2', 'MAT4', 'MAT8', #'MAT10', 'MATS1', 'MATHP', ] def _verify(self, xref=True): for mid, material in sorted(iteritems(self.mat1)): material._verify(xref) def write_bdf(self, f, size=8, is_double=False, material_id=None): self.model.log.debug('Materials.write_bdf.n=%s' % self.n) if self.n: f.write('$MATERIALS\n') types = [ self.mat1, #self.mat2, self.mat4, self.mat8, #self.mat10, self.mats1, self.mathp, ] for materials in types: if materials.n: self.model.log.debug(' writing %s' % materials.type) materials.write_bdf(f, size=size, material_id=material_id)
class Materials(object): def __init__(self, model): self.model = model self.n = 0 self.mat1 = MAT1(model) self.mats1 = MATS1(model) #self.mat2 = {} #self.mat4 = {} #self.mat5 = {} #self.mat10 = {} #self.mat2 = MAT1(model) #self.mat4 = MAT1(model) self.mat8 = MAT8(model) #self.mat10 = MAT1(model) self.mathp = MATHP(model) def add_mat1(self, card, comment): #self.mat1.add(card, comment) #mid = integer(card, 1, 'material_id') self.mat1.add(card=card, comment=comment) def add_mats1(self, card, comment): self.mats1.add(card, comment) def add_mat2(self, card, comment): self.mat2.add(card, comment) def add_mat4(self, card, comment): self.mat4.add(card, comment) def add_mat8(self, card, comment): self.mat8.add(card, comment) def add_mat10(self, card, comment): self.mat10.add(card, comment) def add_mathp(self, card, comment): self.mathp.add(card, comment) def allocate(self, card_count): self.model.log.info('allocate Materials') n = 0 types = self._get_types() names = self._get_type_names() for name, mat in zip(names, types): if name in card_count: self.model.log.info(' allocate %s' % name) n = card_count[name] mat.allocate(n) self.n += n self.n = n #aaa def build(self): n = 0 types = self._get_types() names = self._get_type_names() self.model.log.debug('building Materials') for name, mat in zip(names, types): ni = len(mat) n += ni self.model.log.debug(' building %s; n=%s' % (mat.__class__.__name__, ni)) mat.build() self.n = n def get_stats(self): msg = [] types = self._get_types() names = self._get_type_names() for mat, name in zip(types, names): msg.append(' %-8s: %i' % (name, len(mat))) #nmat = mat.n #if nmat: #msg.append(' %-8s: %i' % (mat.type, nmat)) return msg def get_material_id_by_property_id(self, property_id): n = len(property_id) types = self._get_types(nlimit=True) _material_id = concatenate([ptype.material_id for ptype in types]) self.model.log.debug(_material_id) assert _material_id.shape == (n, ), _material_id.shape return _material_id #def get_density_by_material_id(self, material_id): #rho = zeros(len(material_id), dtype='float64') #for i, mid in enumerate(material_id): #mat = self.get_structural_material(mid) #rho[i] = mat.rho #return rho def get_density_by_material_id(self, material_id): if isinstance(material_id, int): material_id = array([material_id], dtype='int32') n = len(material_id) self.model.log.debug('material_id =%s' % material_id) umids = unique(material_id) density = zeros(n, dtype='float64') mat_types = [ self.mat1, #self.mat2, self.mat8, self.mathp, ] for mat_type in mat_types: for mid in umids: if mid in mat_type.material_id: rho = mat_type.get_density_by_material_id([mid]) i = where(mid == material_id)[0] density[i] = rho assert density.shape == (n, ), density.shape return density def get_density_E_by_material_id(self, material_id): n = len(material_id) rho = zeros(n, dtype='float64') E = zeros(n, dtype='float64') for i, mid in enumerate(material_id): mat = self.get_structural_material(mid) rho[i] = mat.rho E[i] = mat.E() assert density.shape == (n, ), density.shape assert E.shape == (n, ), E.shape return rho, E def get_nonstructural_mass_by_material_id(self, material_id): n = len(material_id) nsm = zeros(n) for i, mid in enumerate(material_id): mat = self.get_structural_material(mid) nsm[i] = mat.nsm assert nsm.shape == (n, ), nsm.shape return nsm def get_E_by_material_id(self, material_id): n = len(material_id) E = zeros(n) for i, mid in enumerate(material_id): mat = self.get_shell_material(mid) E[i] = mat.E() assert E.shape == (n, ), E.shape return E def get_G_by_material_id(self, material_id): n = len(material_id) G = zeros(n) for i, mid in enumerate(material_id): mat = self.get_shell_material(mid) G[i] = mat.G() assert G.shape == (n, ), G.shape return G #def get_material_index_by_material_id(self, property_id): #if property_id is None: #return arange(self.n) #return searchsorted(property_id, self.property_id) def get_structural_material(self, material_id): if material_id in self.mat1: return self.mat1[material_id] elif material_id in self.mat8: return self.mat2[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def get_shell_material(self, material_id): #if material_id in self.mats1: #return self.mats1[material_id] if material_id in self.mat1: return self.mat1[material_id] elif material_id in self.mat2: return self.mat2[material_id] elif material_id in self.mat8: return self.mat8[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def get_solid_material(self, material_id): #if material_id in self.mats1: #return self.mats1[material_id] #if material_id in self.mat11: #return self.mat11[material_id] if material_id in self.mat1: return self.mat1[material_id] elif material_id in self.mat9: return self.mat9[material_id] elif material_id in self.mat10: return self.mat10[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def get_axial_material(self, material_id): if material_id in self.mat3: return self.mat3[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def get_thermal_material(self, material_id): if material_id in self.mat4: return self.mat4[material_id] elif material_id in self.mat5: return self.mat5[material_id] raise RuntimeError('Could not find material_id=%r' % material_id) def __getitem__(self, material_id): TypeMap = { 'MAT1': (self.mat1, self.mat1.material_id), #'MAT2' : (self.mat2, self.mat2.material_id), #'MAT4' : (self.mat4, self.mat4.material_id), #'MAT5' : (self.mat5, self.mat5.material_id), 'MAT8': (self.mat8, self.mat8.material_id), #'MAT10' : (self.mat10, self.mat10.material_id), #'MATS1' : (self.mats1, self.mats1.material_id), } material_id, int_flag = slice_to_iter(material_id) out = [] self.model.log.debug('material_ids = %s' % material_id) for mid in material_id: obj = None for Type, (mdict, mids) in iteritems(TypeMap): if mdict.n: self.model.log.debug('Type=%s mid=%s mids=%s' % (Type, mid, mids)) if mid in mids: self.model.log.debug(' *mid=%i Type=%s was found' % (mid, Type)) i = where(mid == mids)[0] obj = mdict[mid] #[i] break else: #self.model.log.debug(' mid=%i Type=%s was not found' % (mid, Type)) pass out.append(obj) return out[0] if int_flag else out def __getitem2__(self, material_id): assert isinstance(material_id, int), 'material_id=%r' % material_id types = self._get_types() for mat in types: if material_id in mat.material_id: return mat raise RuntimeError('Could not find material_id=%r' % material_id) def __len__(self): types = self._get_types() n = 0 for mat in types: #n += mat.n n += len(mat) return n def __iter__(self): types = self._get_types() for materials in types: if materials.n: for mid, mat in iteritems(materials): yield mat def _get_types(self): return [ self.mat1, #self.mat2, self.mat4, self.mat8, #self.mat10, self.mats1, self.mathp, ] def _get_type_names(self): return [ 'MAT1', #'MAT2', 'MAT4', 'MAT8', #'MAT10', 'MATS1', 'MATHP', ] def _verify(self, xref=True): for mid, material in sorted(iteritems(self.mat1)): material._verify(xref) def write_bdf(self, f, size=8, is_double=False, material_id=None): self.model.log.debug('Materials.write_bdf.n=%s' % self.n) if self.n: f.write('$MATERIALS\n') types = [ self.mat1, #self.mat2, self.mat4, self.mat8, #self.mat10, self.mats1, self.mathp, ] for materials in types: if materials.n: self.model.log.debug(' writing %s' % materials.type) materials.write_bdf(f, size=size, material_id=material_id)
def __init__(self): """creates the attributes for the BDF""" self._nastran_format = 'msc' self.is_nx = False self.is_msc = True self.max_int = 100000000 #---------------------------------------- self._is_cards_dict = True self.punch = None self.reject_lines = [] self.set_precision() #---------------------------------------- self.grid = GRID(self) self.grdset = GRDSET(self) self.point = POINT(self) self.grdset = GRDSET(self) self.spoint = SPOINT(self) self.epoint = EPOINT(self) self.pointax = POINTAX(self) self.coords = Coord(self) #---------------------------------------- # springs self.pelas = PELAS(self) self.celas1 = CELAS1(self) self.celas2 = CELAS2(self) self.celas3 = CELAS3(self) self.celas4 = CELAS4(self) self.elements_spring = ElementsSpring(self) # rods/tubes self.prod = PROD(self) self.crod = CROD(self) self.conrod = CONROD(self) self.ptube = PTUBE(self) self.ctube = CTUBE(self) # bars self.cbar = CBAR(self) #self.cbaror = CBAROR(self) self.pbar = PBAR(self) self.pbarl = PBARL(self) self.properties_bar = PropertiesBar(self) # beams self.cbeam = CBEAM(self) self.pbeam = PBEAM(self) self.pbeaml = PBEAML(self) #: stores PBEAM, PBEAML self.properties_beam = PropertiesBeam(self) # shear #: stores CSHEAR self.cshear = CSHEAR(self) #: stores PSHEAR self.pshear = PSHEAR(self) # shells self.pshell = PSHELL(self) self.pcomp = PCOMP(self) self.pcompg = PCOMPG(self) self.cquad4 = CQUAD4(self) self.ctria3 = CTRIA3(self) self.ctria6 = CTRIA6(self) self.cquad8 = CQUAD8(self) self.ctriax6 = CTRIAX6(self) #self.cquad = CQUAD(self) #: stores PSHELL, PCOMP, PCOMPG self.properties_shell = PropertiesShell(self) #: stores CTRIA3, CTRIA6, CQUAD4, CQUAD8 self.elements_shell = ElementsShell(self) # solids self.psolid = PSOLID(self) self.plsolid = PLSOLID(self) self.ctetra4 = CTETRA4(self) self.ctetra10 = CTETRA10(self) self.cpyram5 = None self.cpyram13 = None self.cpenta6 = CPENTA6(self) self.cpenta15 = CPENTA15(self) self.chexa8 = CHEXA8(self) self.chexa20 = CHEXA20(self) #: stores CTETRA4, CPENTA6, CHEXA8, CTETRA10, CPENTA15, CHEXA20 self.elements_solid = ElementsSolid(self) #: stores PSOLID, PLSOLID self.properties_solid = PropertiesSolid(self) #---------------------------------------- # mass self.conm1 = CONM1(self) self.conm2 = CONM2(self) #self.pmass = PMASS(self) #self.cmass1 = CMASS1(self) #self.cmass2 = CMASS2(self) #self.cmass3 = CMASS3(self) #self.cmass4 = CMASS4(self) #self.cmass5 = CMASS5(self) self.pmass = None self.cmass1 = None self.cmass2 = None self.cmass3 = None self.cmass4 = None self.cmass5 = None self.mass = Mass(self) #---------------------------------------- # b-list elements #self.rbe2 = None #self.rbe3 = None self.cbush = CBUSH(self) self.pbush = PBUSH(self) self.cbush1d = None self.pbush1d = None self.cbush2d = None self.pbush2d = None #---------------------------------------- # control structure self.elements = Elements(self) self.properties = Properties(self) #---------------------------------------- self.mat1 = MAT1(self) self.mats1 = MATS1(self) #self.mat2 = MAT2(self) #self.mat2 = MAT2(self) #self.mat4 = MAT4(self) #self.mat5 = MAT5(self) self.mat8 = MAT8(self) #self.mat10 = MAT10(self) #self.mat11 = MAT11(self) self.mathp = MATHP(self) self.materials = Materials(self) # ---------------------------------------------------------------- self.load = LOADs(self) self.dload = LOADs(self) #self.dload = defaultdict(list) #self.loadset = LOADSET(model) self.force = FORCE(self) self.force1 = FORCE1(self) self.force2 = FORCE2(self) self.moment = MOMENT(self) self.moment1 = MOMENT1(self) self.moment2 = MOMENT2(self) self.grav = GRAV(self) self.rforce = RFORCE(self) self.pload = PLOAD(self) self.pload1 = PLOAD1(self) self.pload2 = PLOAD2(self) #self.pload3 = PLOAD3(self) self.pload4 = PLOAD4(self) self.ploadx1 = PLOADX1(self) self.tload1 = TLOAD1(self) self.tload2 = TLOAD2(self) self.delay = DELAY(self) self.rload1 = RLOAD1(self) #self.rload2 = RLOAD2(self) self.dphase = DPHASE(self) self.darea = DAREA(self) #: stores LOAD, FORCE, MOMENT, etc. self.loads = Loads(self) # ---------------------------------------------------------------- self.tempp1 = TEMPP1(self) self.temp = TEMP(self) self.temps = TEMPs(self) # ---------------------------------------------------------------- #self.spc1 = SPC1(self) #self.spcadd = SPCADD(self) self.spc = {} #class_obj_defaultdict(SPC, model) self.spcd = {} #class_obj_defaultdict(SPCD, model) self.spc1 = {} #class_obj_defaultdict(SPC1, model) self.spcadd = {} self.mpc = {} # the new form, not added... self.mpcadd = {} # ---------------------------------------------------------------- #: stores PARAMs self.params = {} #: stores rigid elements (RBE2, RBE3, RJOINT, etc.) self.rigid_elements = {} #: stores PLOTELs self.plotels = {} # --------------------------- dynamic ---------------------------- #: stores DAREA #self.dareas = {} #self.dphases = {} self.pbusht = {} self.pdampt = {} self.pelast = {} #: frequencies self.frequencies = {} # ---------------------------------------------------------------- #: direct matrix input - DMIG self.dmis = {} self.dmigs = {} self.dmijs = {} self.dmijis = {} self.dmiks = {} self._dmig_temp = defaultdict(list) # ---------------------------------------------------------------- #: SETy self.sets = {} # SET1, SET3 self.asets = [] self.bsets = [] self.csets = [] self.qsets = [] self.usets = {} #: SExSETy self.se_bsets = [] self.se_csets = [] self.se_qsets = [] self.se_usets = {} self.se_sets = {} # ---------------------------------------------------------------- #: tables self.tables = {} #: random_tables self.random_tables = {} #: TABDMP1 self.tables_sdamping = {} # ---------------------------------------------------------------- #: EIGB, EIGR, EIGRL methods self.methods = {} # EIGC, EIGP methods self.cMethods = {} # ---------------------------- optimization -------------------------- # optimization self.dconadds = {} self.dconstrs = {} self.desvars = {} self.ddvals = {} self.dlinks = {} self.dresps = {} self.dtable = None self.dequations = {} #: stores DVPREL1, DVPREL2...might change to DVxRel self.dvprels = {} self.dvmrels = {} self.dvcrels = {} self.dvgrids = {} self.doptprm = None self.dscreen = {} # ------------------------- nonlinear defaults ----------------------- #: stores NLPCI self.nlpcis = {} #: stores NLPARM self.nlparms = {} #: stores TSTEPs self.tsteps = {} #: stores TSTEPNL self.tstepnls = {} #: stores TF self.transfer_functions = {} #: stores DELAY self.delays = {} # --------------------------- aero defaults -------------------------- # aero cards #: stores CAEROx self.caeros = {} #: stores PAEROx self.paeros = {} # stores MONPNT1 self.monitor_points = [] #: stores AECOMP self.aecomps = {} #: stores AEFACT self.aefacts = {} #: stores AELINK self.aelinks = {} #: stores AELIST self.aelists = {} #: stores AEPARAM self.aeparams = {} #: stores AESURF self.aesurf = {} #: stores AESURFS self.aesurfs = {} #: stores AESTAT self.aestats = {} #: stores CSSCHD self.csschds = {} #: store SPLINE1,SPLINE2,SPLINE4,SPLINE5 self.splines = {} # ------ SOL 144 ------ #: stores AEROS self.aeros = None #: stores TRIM self.trims = {} #: stores DIVERG self.divergs = {} # ------ SOL 145 ------ #: stores AERO self.aero = None #: stores FLFACT self.flfacts = {} #: .. todo:: can this be simplified ??? #: stores FLUTTER self.flutters = {} #: mkaeros self.mkaeros = [] # ------ SOL 146 ------ #: stores GUST cards self.gusts = {} # ------------------------- thermal defaults ------------------------- # BCs #: stores thermal boundary conditions - CONV,RADBC self.bcs = {} # e.g. RADBC #: stores PHBDY self.phbdys = {} #: stores convection properties - PCONV, PCONVM ??? self.convection_properties = {} #: stores TEMPD self.tempds = {} # -------------------------contact cards------------------------------- self.bcrparas = {} self.bctadds = {} self.bctparas = {} self.bctsets = {} self.bsurf = {} self.bsurfs = {} # --------------------------------------------------------------------- self._type_to_id_map = defaultdict(list) self._solmap_to_value = { 'NONLIN': 101, # 66 -> 101 per Reference 1 'SESTATIC': 101, 'SESTATICS': 101, 'SEMODES': 103, 'BUCKLING': 105, 'SEBUCKL': 105, 'NLSTATIC': 106, 'SEDCEIG': 107, 'SEDFREQ': 108, 'SEDTRAN': 109, 'SEMCEIG': 110, 'SEMFREQ': 111, 'SEMTRAN': 112, 'CYCSTATX': 114, 'CYCMODE': 115, 'CYCBUCKL': 116, 'CYCFREQ': 118, 'NLTRAN': 129, 'AESTAT': 144, 'FLUTTR': 145, 'SEAERO': 146, 'NLSCSH': 153, 'NLTCSH': 159, 'DBTRANS': 190, 'DESOPT': 200, # guessing #'CTRAN' : 115, 'CFREQ' : 118, # solution 200 names 'STATICS': 101, 'MODES': 103, 'BUCK': 105, 'DFREQ': 108, 'MFREQ': 111, 'MTRAN': 112, 'DCEIG': 107, 'MCEIG': 110, #'HEAT' : None, #'STRUCTURE': None, #'DIVERGE' : None, 'FLUTTER': 145, 'SAERO': 146, } self.rsolmap_to_str = { 66: 'NONLIN', 101: 'SESTSTATIC', # linear static 103: 'SEMODES', # modal 105: 'BUCKLING', # buckling 106: 'NLSTATIC', # non-linear static 107: 'SEDCEIG', # direct complex frequency response 108: 'SEDFREQ', # direct frequency response 109: 'SEDTRAN', # direct transient response 110: 'SEMCEIG', # modal complex eigenvalue 111: 'SEMFREQ', # modal frequency response 112: 'SEMTRAN', # modal transient response 114: 'CYCSTATX', 115: 'CYCMODE', 116: 'CYCBUCKL', 118: 'CYCFREQ', 129: 'NLTRAN', # nonlinear transient 144: 'AESTAT', # static aeroelastic 145: 'FLUTTR', # flutter/aeroservoelastic 146: 'SEAERO', # dynamic aeroelastic 153: 'NLSCSH', # nonlinear static thermal 159: 'NLTCSH', # nonlinear transient thermal 190: 'DBTRANS', 200: 'DESOPT', # optimization }