Ejemplo n.º 1
0
class GRDSET(CardTable):
    table_def = TableDef.create('/NASTRAN/INPUT/CONSTRAINT/GRDSET')
Ejemplo n.º 2
0
class DEFORM(CardTable):
    table_def = TableDef.create('/NASTRAN/INPUT/CONSTRAINT/DEFORM')
Ejemplo n.º 3
0
class TABLEM1(CardTable):
    table_def = TableDef.create('/NASTRAN/INPUT/TABLE/TABLEM1/IDENTITY', rename={'XY_POS': 'POS', 'XY_LEN': 'LEN'})
    from_bdf = TABLED1.from_bdf
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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