class GRDSET(CardTable): table_def = TableDef.create('/NASTRAN/INPUT/CONSTRAINT/GRDSET')
class DEFORM(CardTable): table_def = TableDef.create('/NASTRAN/INPUT/CONSTRAINT/DEFORM')
class TABLEM1(CardTable): table_def = TableDef.create('/NASTRAN/INPUT/TABLE/TABLEM1/IDENTITY', rename={'XY_POS': 'POS', 'XY_LEN': 'LEN'}) from_bdf = TABLED1.from_bdf
class GRID(CardTable): table_def = TableDef.create('/NASTRAN/INPUT/NODE/GRID') def __init__(self, *args, **kwargs): super(GRID, self).__init__(*args, **kwargs) self._grid_dict = None # type: ImmutableDict[int, np.ndarray] self._grid_in_basic_dict = None # type: ImmutableDict[int, np.ndarray] self._grid_index = {} # type: Dict[int, int] def read(self): super(GRID, self).read() self._grid_dict = None self._grid_in_basic_dict = None self._grid_index.clear() @classmethod def from_bdf(cls, cards): card_ids = sorted(cards.keys()) data = np.empty(len(card_ids), dtype=cls.table_def.dtype) id_ = data['ID'] cp = data['CP'] x = data['X'] cd = data['CD'] ps = data['PS'] seid = data['SEID'] def _get_val(val, default): if val in ('', None): val = default return val i = -1 for card_id in card_ids: i += 1 card = cards[card_id] id_[i] = card.nid cp[i] = card.cp x[i] = card.xyz cd[i] = card.cd ps[i] = _get_val(card.ps, DataHelper.default_int) seid[i] = card.seid result = {'IDENTITY': data} return result def get_grid(self, nid): try: index = self._grid_index[nid] except KeyError: index = self._grid_index[nid] = np.searchsorted( self.grid['ID'], nid) return self.grid[index] def grid_dict(self): # type: (bool) -> ImmutableDict[int, np.ndarray] if self._grid_dict is not None: return self._grid_dict result = {} data = self.grid ids = data['ID'] x = data['X'] for i in range(len(ids)): nid = ids[i] arr = np.array(x[i]) arr.setflags(write=False) result[nid] = arr self._grid_dict = ImmutableDict(result) return self._grid_dict def grid_in_basic_dict(self): # type: () -> ImmutableDict[int, np.ndarray] if self._grid_in_basic_dict is not None: return self._grid_in_basic_dict result = {} data = self.grid ids = data['ID'] x = data['X'] cd = data['CD'] position_to_basic = self._h5n.input.coordinate_system.h5n_transformation.position_to_basic for i in range(len(ids)): nid = ids[i] arr = position_to_basic(x[i], cd[i]) arr.setflags(write=False) result[nid] = arr self._grid_in_basic_dict = ImmutableDict(result) return self._grid_in_basic_dict
class NLPARM(CardTable): table_def = TableDef.create('/NASTRAN/INPUT/PARAMETER/NLPARM') @classmethod def from_bdf(cls, cards): card_ids = sorted(cards.keys()) data = np.empty(len(card_ids), dtype=cls.table_def.dtype) sid = data['SID'] ninc = data['NINC'] dt = data['DT'] kmethod = data['KMETHOD'] kstep = data['KSTEP'] maxiter = data['MAXITER'] conv = data['CONV'] intout = data['INTOUT'] epsu = data['EPSU'] epsp = data['EPSP'] epsw = data['EPSW'] maxdiv = data['MAXDIV'] maxqn = data['MAXQN'] maxls = data['MAXLS'] fstress = data['FSTRESS'] lstol = data['LSTOL'] maxbis = data['MAXBIS'] maxr = data['MAXR'] rtolb = data['RTOLB'] miniter = data['MINITER'] # TODO: check that kmethod is correct _kmethod = {'AUTO': 0, 'ITER': 1, 'SEMI': 2, 'FNT': 3, 'PFNT': 4, None: 0, '': 0} # TODO: check that conv is correct; what are the allowed combinations? _conv = {} # TODO: check that intout is correct _intout = {'YES': 1, 'NO': 0, 'ALL': 3, None: DataHelper.default_int, '': DataHelper.default_int} i = -1 for card_id in card_ids: i += 1 card = cards[card_id] sid[i] = card.nlparm_id ninc[i] = card.ninc dt[i] = card.dt kmethod[i] = _kmethod[card.kmethod] kstep[i] = card.kstep maxiter[i] = card.max_iter conv[i] = DataHelper.unknown_int if isinstance(card.int_out, int): intout[i] = card.int_out else: intout[i] = _intout[card.int_out] epsu[i] = card.eps_u epsp[i] = card.eps_p epsw[i] = card.eps_w maxdiv[i] = card.max_div maxqn[i] = card.max_qn maxls[i] = card.max_ls fstress[i] = card.fstress lstol[i] = card.ls_tol maxbis[i] = card.max_bisect maxr[i] = card.max_r rtolb[i] = card.rtol_b try: miniter[i] = card.min_iter except AttributeError: miniter[i] = DataHelper.default_int result = {'IDENTITY': data} return result