def test_chexa_01(self): model = BDF(debug=False) lines = ['CHEXA,85,22,201,202,203,205,206,207,+PN2', '+PN2,209,210'] card = model._process_card(lines) card = BDFCard(card) size = 8 f = StringIO() hexa = CHEXA8(model) hexa.allocate(1) hexa.add(card) hexa.write_card(f, size) #card.raw_fields() print(f.getvalue())
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.baror = BAROR(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 = {} # type: Dict[key, Any] #: stores PHBDY self.phbdys = {} # type: Dict[key, Any] #: stores convection properties - PCONV, PCONVM ??? self.convection_properties = {} # type: Dict[key, Any] #: stores TEMPD self.tempds = {} # type: Dict[key, Any] # -------------------------contact cards------------------------------- self.bcrparas = {} # type: Dict[key, Any] self.bctadds = {} # type: Dict[key, Any] self.bctparas = {} # type: Dict[key, Any] self.bctsets = {} # type: Dict[key, Any] self.bsurf = {} # type: Dict[key, Any] self.bsurfs = {} # type: Dict[key, Any] # --------------------------------------------------------------------- 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 }