Beispiel #1
0
    def getDisplacement(self):
        """
        ::
                                               D I S P L A C E M E N T   V E C T O R
  
          POINT ID.   TYPE          T1             T2             T3             R1             R2             R3
                 1      G      9.663032E-05   0.0           -2.199001E-04   0.0           -9.121119E-05   0.0
                 2      G      0.0            0.0            0.0            0.0            0.0            0.0
                 3      G      0.0            0.0            0.0            0.0            0.0            0.0

        * analysis_code = 1 (Statics)
        * device_code   = 1 (Print)
        * table_code    = 1 (Displacement)
        * sort_code     = 0 (Sort2,Real,Sorted Results) => sort_bits = [0,0,0]
        * num_wide      = 8 (???)
        """
        (subcaseName, isubcase, transient, dt, analysis_code,
            is_sort1) = self.readSubcaseNameID()
        headers = self.skip(2)
        data_code = {'log': self.log, 'analysis_code': analysis_code,
                    'device_code': 1, 'table_code': 1,
                    'sort_code': 0, 'sort_bits': [0, 0, 0], 'num_wide': 8,
                    'table_name': 'OUG', 'nonlinear_factor': dt}
        #print "headers = %s" %(headers)
        dataTypes = [int, str, float, float, float, float, float, float]
        data = self.readTable(dataTypes)

        if isubcase in self.displacements:
            self.displacements[isubcase].add_f06_data(data, transient)
        else:
            is_sort1 = True
            disp = DisplacementObject(data_code, is_sort1, isubcase)
            disp.add_f06_data(data, transient)
            self.displacements[isubcase] = disp
        self.iSubcases.append(isubcase)
    def storeDisplacements(self, model, U, case):
        """
        fills the displacement object
        """
        self.iSubcases = []
        #self.log = None
        analysisCode = 1
        transient = False
        iSubcase = case.id
        isSort1 = False
        dt = None

        dataCode = {
            'log': self.log,
            'analysisCode': analysisCode,
            'deviceCode': 1,
            'tableCode': 1,
            'sortCode': 0,
            'sortBits': [0, 0, 0],
            'numWide': 8,
            'tableName': 'OUG',
            'nonlinearFactor': None
        }
        #print "headers = %s" %(headers)

        disp = DisplacementObject(dataCode, isSort1, iSubcase, dt=False)

        data = []

        i = 0
        #(nodeID,gridType,t1,t2,t3,r1,r2,r3) = line
        for (nid, node) in sorted(model.nodes.iteritems()):
            line = [nid]
            if node.type == 'GRID':
                line.append('G')
            else:
                raise NotImplementedError('node.type=%s' % (node.type))
            if self.is3D:
                line += U[i:i + 6]  # 1,2,3,4,5,6
                i += 6
            else:
                line += [U[i], U[i + 1], 0., 0., U[i + 2], 0.]  # 1,2,5
                i += 3
            #print("line = ",line)
            data.append(line)
        disp.addF06Data(data, dt)
        self.displacements[iSubcase] = disp
        self.iSubcases.append(iSubcase)
    def storeDisplacements(self, model, U, case):
        """
        fills the displacement object
        """
        self.iSubcases = []
        #self.log = None
        analysisCode = 1
        transient = False
        iSubcase = case.id
        isSort1 = False
        dt = None

        dataCode = {'log': self.log, 'analysisCode': analysisCode,
                    'deviceCode': 1, 'tableCode': 1, 'sortCode': 0,
                    'sortBits': [0, 0, 0], 'numWide': 8, 'tableName': 'OUG',
                    'nonlinearFactor': None}
        #print "headers = %s" %(headers)

        disp = DisplacementObject(dataCode, isSort1, iSubcase, dt=False)

        data = []

        i = 0
        #(nodeID,gridType,t1,t2,t3,r1,r2,r3) = line
        for (nid, node) in sorted(model.nodes.iteritems()):
            line = [nid]
            if node.type == 'GRID':
                line.append('G')
            else:
                raise NotImplementedError('node.type=%s' % (node.type))
            if self.is3D:
                line += U[i:i + 6]  # 1,2,3,4,5,6
                i += 6
            else:
                line += [U[i], U[i + 1], 0., 0., U[i + 2], 0.]  # 1,2,5
                i += 3
            #print("line = ",line)
            data.append(line)
        disp.addF06Data(data, dt)
        self.displacements[iSubcase] = disp
        self.iSubcases.append(iSubcase)
    def writeResults(self, case):
        Us = self.Us
        Um = self.Um
        Ua = self.Ua

        iUs = self.iUs
        iUm = self.iUm
        iUa = self.iUa
        pageNum = 1

        if case.hasParameter('DISPLACEMENT'):
            (value, options) = case.get_parameter('DISPLACEMENT')
            if options is not []:
                UgSeparate = [[Ua, iUa], [Us, iUs], [Um, iUm]]
                Ug = departition_dense_vector(UgSeparate)

                result = DisplacementObject(dataCode, transient)
                result.addF06Data()

                if 'PRINT' in options:
                    f06.write(result.writeF06(header, pageStamp, pageNum))
                if 'PLOT' in options:
                    op2.write(result.writeOP2(self.Title, self.Subtitle))
    def writeResults(self, case):
        Us = self.Us
        Um = self.Um
        Ua = self.Ua

        iUs = self.iUs
        iUm = self.iUm
        iUa = self.iUa
        pageNum = 1

        if case.hasParameter('DISPLACEMENT'):
            (value, options) = case.get_parameter('DISPLACEMENT')
            if options is not []:
                UgSeparate = [[Ua, iUa], [Us, iUs], [Um, iUm]]
                Ug = departition_dense_vector(UgSeparate)

                result = DisplacementObject(dataCode, transient)
                result.addF06Data()

                if 'PRINT' in options:
                    f06.write(result.writeF06(header, pageStamp, pageNum))
                if 'PLOT' in options:
                    op2.write(result.writeOP2(self.Title, self.Subtitle))

        if case.hasParameter('SPCFORCES'):
            (value, options) = case.get_parameter('SPCFORCES')
            if options is not []:
                SPCForces = Ksa * Ua + Kss * Us
                if isMPC:
                    SPCForces += Ksm * Um

                result = SPCForcesObject(dataCode, transient)
                result.addF06Data()
                if 'PRINT' in options:
                    f06.write(result.writeF06(header, pageStamp, pageNum))
                if 'PLOT' in options:
                    op2.write(result.writeOP2(Title, Subtitle))

        if case.hasParameter('MPCFORCES'):
            if options is not []:
                (value, options) = case.get_parameter('MPCFORCES')
                MPCForces = Kma * Ua + Kmm * Um
                if isSPC:
                    MPCForces += Kms * Us

                result = MPCForcesObject(dataCode, transient)
                result.addF06Data()
                if 'PRINT' in options:
                    f06.write(result.writeF06(header, pageStamp, pageNum))
                if 'PLOT' in options:
                    f06.write(result.writeOP2(Title, Subtitle))

        if case.hasParameter('GPFORCE'):
            if options is not []:
                (value, options) = case.get_parameter('GPFORCE')
                AppliedLoads = Kaa * Ua
                if isSPC:
                    AppliedLoads += Kas * Us
                if isMPC:
                    AppliedLoads += Kam * Um

                result = AppliedLoadsObject(dataCode, transient)
                result.addF06Data()
                if 'PRINT' in options:
                    f06.write(result.writeF06(header, pageStamp, pageNum))
                if 'PLOT' in options:
                    op2.write(result.writeOP2(Title, Subtitle))

        if case.hasParameter('STRAIN'):
            if options is not []:
                (value, options) = case.get_parameter('STRAIN')

                for (eid, elem) in sorted(model.elements()):
                    pass

                result = xxxObject(dataCode, transient)
                result.addF06Data()
                if 'PRINT' in options:
                    f06.write(result.writeF06(header, pageStamp, pageNum))
                if 'PLOT' in options:
                    op2.write(result.writeOP2(Title, Subtitle))