Source code for pyNastran.op2.tables.lama_eigenvalues.lama_objects

from __future__ import print_function
from six import iteritems
from math import sqrt

from numpy import array, pi, allclose

from pyNastran.op2.resultObjects.op2_Objects import BaseScalarObject
from pyNastran.f06.f06_formatting import writeFloats13E
#from pyNastran.op2.resultObjects.op2_Objects import scalarObject,array


[docs]class RealEigenvalues(BaseScalarObject): def __init__(self, title): #self.modeNumber = [] BaseScalarObject.__init__(self) self.title = title self.extractionOrder = {} self.eigenvalues = {} self.radians = {} self.cycles = {} self.generalizedMass = {} self.generalizedStiffness = {}
[docs] def get_stats(self): msg = [] neigenvalues = len(self.extractionOrder) msg.append(' type=%s neigenvalues=%s\n' % (self.__class__.__name__, neigenvalues)) msg.append(' title, extractionOrder, eigenvalues, radians, ' 'cycles, generalizedMass, generalizedStiffness\n') return msg
[docs] def isReal(self): return True
[docs] def isComplex(self): return False
[docs] def addF06Line(self, data): (modeNum, extractOrder, eigenvalue, radian, cycle, genM, genK) = data #print('data =', data) self.extractionOrder[modeNum] = extractOrder self.eigenvalues[modeNum] = eigenvalue self.radians[modeNum] = radian #cyclei = sqrt(abs(eigenvalue)) / (2. * pi) #if not allclose(cycle, cyclei): #print('cycle=%s cyclei=%s' % (cycle, cyclei)) self.cycles[modeNum] = cycle self.generalizedMass[modeNum] = genM self.generalizedStiffness[modeNum] = genK
[docs] def add_f06_data(self, data): for line in data: self.addF06Line(line)
[docs] def write_f06(self, f, header, page_stamp, page_num=1): title = '' if self.title is not None: title = '%s' % str(self.title).center(124).rstrip() + '\n' msg = header + [' R E A L E I G E N V A L U E S\n', title, ' MODE EXTRACTION EIGENVALUE RADIANS CYCLES GENERALIZED GENERALIZED\n', ' NO. ORDER MASS STIFFNESS\n'] for (iMode, order) in sorted(iteritems(self.extractionOrder)): eigenvalue = self.eigenvalues[iMode] #cycle = sqrt(abs(eigenvalue)) / (2. * pi) omega = self.radians[iMode] freq = self.cycles[iMode] mass = self.generalizedMass[iMode] stiff = self.generalizedStiffness[iMode] ([eigen, omega, freq, mass, stiff], is_all_zeros) = writeFloats13E([eigenvalue, omega, freq, mass, stiff]) msg.append(' %8s %8s %-13s %-13s %-13s %-13s %s\n' % (iMode, order, eigen, omega, freq, mass, stiff)) msg.append(page_stamp % page_num) f.write(''.join(msg)) return page_num
def __repr__(self): msg = '%-7s %15s %15s %10s %10s %10s %15s\n' % ('ModeNum', 'ExtractionOrder', 'Eigenvalue', 'Radians', 'Cycles', 'GenMass', 'GenStiffness') for modeNum, extractOrder in sorted(iteritems(self.extractionOrder)): eigenvalue = self.eigenvalues[modeNum] radian = self.radians[modeNum] cycle = sqrt(abs(eigenvalue)) / (2. * pi) #cycle = self.cycles[modeNum] genM = self.generalizedMass[modeNum] genK = self.generalizedStiffness[modeNum] msg += '%-7s %15s %15s %10s %10s %10s %15s\n' % (modeNum, extractOrder, eigenvalue, radian, cycle, genM, genK) return msg
[docs]class ComplexEigenvalues(BaseScalarObject): def __init__(self, title): BaseScalarObject.__init__(self) #self.rootNumber = [] self.title = title self.extractionOrder = {} self.eigenvalues = {} self.cycles = {} self.damping = {}
[docs] def get_stats(self): neigenvalues = len(self.extractionOrder) msg = [] msg.append(' type=%s neigenvalues=%s\n' % (self.__class__.__name__, neigenvalues)) msg.append(' isubcase, extractionOrder, eigenvalues, ' 'cycles, damping\n') return msg
[docs] def isReal(self): return False
[docs] def isComplex(self): return True
[docs] def addF06Line(self, data): (rootNum, extractOrder, eigr, eigi, cycle, damping) = data self.extractionOrder[rootNum] = extractOrder self.eigenvalues[rootNum] = array([eigr, eigi]) self.cycles[rootNum] = cycle self.damping[rootNum] = damping
[docs] def add_f06_data(self, data): for line in data: self.addF06Line(line)
[docs] def write_f06(self, f, header, page_stamp, page_num=1): # not proper msg start title = '' if self.title is not None: title = '%s' % str(self.title).center(124).rstrip() + '\n' msg = header + [' C O M P L E X E I G E N V A L U E S U M M A R Y\n', title, '0 ROOT EXTRACTION EIGENVALUE FREQUENCY DAMPING\n', ' NO. ORDER (REAL) (IMAG) (CYCLES) COEFFICIENT\n'] for (iMode, order) in sorted(iteritems(self.extractionOrder)): eigr = self.eigenvalues[iMode][0] eigi = self.eigenvalues[iMode][1] freq = self.cycles[iMode] damping = self.damping[iMode] ([eigr, eigi, freq, damping], is_all_zeros) = writeFloats13E([eigr, eigi, freq, damping]) # imode order eigr eigi freq damping msg.append(' %22s %10s %-15s %-13s %-13s %s\n' % (iMode, order, eigr, eigi, freq, damping)) msg.append(page_stamp % page_num) f.write(''.join(msg)) return page_num
def __repr__(self): msg = '%-7s %15s %15s %10s %10s %10s\n' % ('RootNum', 'ExtractionOrder', 'Eigenvalue', '', 'Cycles', 'Damping') msg += '%-7s %15s %15s %10s\n' % ('', '', 'Real', 'Imaginary') for rootNum, extractOrder in sorted(iteritems(self.extractionOrder)): eigenvalue = self.eigenvalues[rootNum] cycle = self.cycles[rootNum] damping = self.damping[rootNum] msg += '%-7s %15s %15s %10s %10s %10s\n' % (rootNum, extractOrder, eigenvalue[0], eigenvalue[1], cycle, damping) return msg
[docs]class BucklingEigenvalues(BaseScalarObject): def __init__(self, title): BaseScalarObject.__init__(self) #self.rootNumber = [] self.title = title self.extractionOrder = {} self.eigenvalues = {} self.freqs = {} self.omegas = {} self.generalized_mass = {} self.generalized_stiffness = {} #self.cycles = {} #self.damping = {}
[docs] def get_stats(self): neigenvalues = len(self.extractionOrder) msg = [] msg.append(' type=%s neigenvalues=%s\n' % (self.__class__.__name__, neigenvalues)) msg.append(' isubcase, extractionOrder, eigenvalues, ' 'cycles, damping\n') return msg
[docs] def isReal(self): return False
[docs] def isComplex(self): return False
[docs] def isBuckling(self): return True
[docs] def addF06Line(self, data): #print('data =', data) #(iMode, order, eigen, omega, freq, mass, stiff) (rootNum, extractOrder, eigr, omega, freq, mass, stiff) = data self.extractionOrder[rootNum] = extractOrder self.eigenvalues[rootNum] = eigr self.freqs[rootNum] = freq self.omegas[rootNum] = omega self.generalized_mass[rootNum] = mass self.generalized_stiffness[rootNum] = stiff
#def add_f06_data(self, data): #for line in data: #self.addF06Line(line)
[docs] def write_f06(self, f, header, page_stamp, page_num=1): # not proper msg start title = '' if self.title is not None: title = '%s' % str(self.title).center(124).rstrip() + '\n' msg = header + [' R E A L E I G E N V A L U E S\n', title, ' MODE EXTRACTION EIGENVALUE RADIANS CYCLES GENERALIZED GENERALIZED\n', ' NO. ORDER MASS STIFFNESS\n'] for (iMode, order) in sorted(iteritems(self.extractionOrder)): eigr = self.eigenvalues[iMode] omega = self.omegas[iMode] freq = self.freqs[iMode] mass = self.generalized_mass[iMode] stiff = self.generalized_stiffness[iMode] ([eigr, freq, omega, mass, stiff], is_all_zeros) = writeFloats13E([eigr, freq, omega, mass, stiff]) # i ord eig ome f m k msg.append(' %8s%10s%20s%20s%20s%20s %s\n' % (iMode, order, eigr, omega, freq, mass, stiff)) msg.append(page_stamp % page_num) f.write(''.join(msg)) return page_num
#def __repr__(self): #msg = '%-7s %15s %15s %10s %10s %10s\n' % ('RootNum', 'ExtractionOrder', 'Eigenvalue', '', 'Cycles', 'Damping') #msg += '%-7s %15s %15s %10s\n' % ('', '', 'Real', 'Imaginary') #for rootNum, extractOrder in sorted(iteritems(self.extractionOrder)): #eigenvalue = self.eigenvalues[rootNum] #cycle = self.cycles[rootNum] #damping = self.damping[rootNum] #msg += '%-7s %15s %15s %10s %10s %10s\n' % (rootNum, extractOrder, #eigenvalue[0], eigenvalue[1], cycle, damping) #return msg