Source code for pyfem.solvers.DynEigSolver

# SPDX-License-Identifier: MIT
# Copyright (c) 2011–2026 Joris J.C. Remmers

from pyfem.util.BaseModule import BaseModule

from numpy import zeros, array, pi
from pyfem.fem.Assembly import assembleTangentStiffness, assembleMassMatrix

from pyfem.util.logger   import getLogger
from numpy import sqrt
import h5py

logger = getLogger()

#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------

[docs] class DynEigSolver ( BaseModule ): def __init__( self , props , globdat ): self.tol = 1.0e-3 self.eigenCount = 5 BaseModule.__init__( self , props ) #------------------------------------------------------------------------------ # #------------------------------------------------------------------------------
[docs] def run( self , props , globdat ): self.writeHeader() K,fint = assembleTangentStiffness( props, globdat ) M,_ = assembleMassMatrix ( props , globdat ) eigenvals , globdat.eigenvecs = globdat.dofs.eigensolve( K , M , self.eigenCount ) globdat.eigenvals = sqrt( eigenvals ) globdat.elements.commitHistory() globdat.active = False self.printResults( globdat.eigenvals )
#------------------------------------------------------------------------------ # #------------------------------------------------------------------------------
[docs] def printResults( self , eigenvals): logger.info(' Eigenfrequencies') logger.info(" ----------------------------------------------------------") logger.info(' Mode | Eigenvalue | Frequency') for i,val in enumerate(eigenvals): logger.info(f" {i+1:4d} | {val:6.4e} rad/s | {val/(2.0*pi):6.4e} Hz")