You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FEniCS求解悬臂板固有频率结果异常求助

悬臂板固有频率FEniCS求解结果不匹配问题

我正尝试用FEniCS求解简单悬臂板的固有频率,目标是匹配某论文的结果,但目前得到的结果不正确,排查许久仍未找到问题。以下是代码运行输出及完整代码:

运行输出

/miniconda3/envs/BASim/lib/python3.10/site-packages/ufl/__init__.py:250: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  import pkg_resources
[DESKTOP-PVK4R9R:28050] mca_base_component_repository_open: unable to open mca_btl_openib: librdmacm.so.1: cannot open shared object file: No such file or directory (ignored)
Computing 10 first eigenvalues...

Eigenfrequencies [Hz]:
  Mode 1: 12.11532 Hz
  Mode 2: 44.17645 Hz
  Mode 3: 75.86820 Hz
  Mode 4: 212.21367 Hz
  Mode 5: 273.42441 Hz
  Mode 6: 414.87689 Hz
  Mode 7: 437.26501 Hz
  Mode 8: 685.17764 Hz
  Mode 9: 751.14498 Hz
  Mode 10: 1021.38196 Hz

完整代码

from dolfin import *
import numpy as np

# =============================================================================
# GEOMETRY AND MATERIAL PROPERTIES FROM THE PAPER
# =============================================================================
L = 1.0  # Beam length [m]
B = 0.050  # Beam width [m]  
H = 0.005  # Beam height [m]

E_val = 70e9  # Young's modulus [Pa] = 70 GPa
nu_val = 0.35   # Poisson's ratio
rho_val = 2700  # Density [kg/m³]

E = Constant(E_val)
nu = Constant(nu_val)
rho = Constant(rho_val)

# =============================================================================
# MESH GENERATION
# =============================================================================
Nx = 100
Ny = int(B/L*Nx)+1
Nz = int(H/L*Nx)+1

mesh = BoxMesh(Point(0., 0., 0.), Point(L, B, H), Nx, Ny, Nz)

# =============================================================================
# CONSTITUTIVE RELATIONS
# =============================================================================
mu = E / 2.0 / (1.0 + nu)
lmbda = E * nu / (1.0 + nu) / (1.0 - 2.0 * nu)

def eps(v):
    return sym(grad(v))

def sigma(v):
    dim = v.geometric_dimension()
    return 2.0 * mu * eps(v) + lmbda * tr(eps(v)) * Identity(dim)

# =============================================================================
# FUNCTION SPACE AND BOUNDARY CONDITIONS
# =============================================================================
V = VectorFunctionSpace(mesh, 'Lagrange', degree=1)
u_ = TrialFunction(V)
du = TestFunction(V)

def left(x, on_boundary):
    return near(x[0], 0.0) and on_boundary

bc = DirichletBC(V, Constant((0.0, 0.0, 0.0)), left)

# =============================================================================
# ASSEMBLE STIFFNESS AND MASS MATRICES
# =============================================================================
k_form = inner(sigma(du), eps(u_)) * dx
m_form = rho * dot(du, u_) * dx

K = PETScMatrix()
M = PETScMatrix()

assemble(k_form, tensor=K)
assemble(m_form, tensor=M)

bc.apply(K)
bc.zero(M)

# =============================================================================
# EIGENVALUE SOLVER
# =============================================================================
eigensolver = SLEPcEigenSolver(K, M)
eigensolver.parameters['problem_type'] = 'gen_hermitian'
eigensolver.parameters['spectral_transform'] = 'shift-and-invert'
eigensolver.parameters['spectral_shift'] = 0.0

N_eig = 10
print(f"Computing {N_eig} first eigenvalues...")
eigensolver.solve(N_eig)

# =============================================================================
# PRINT EIGENFREQUENCIES
# =============================================================================
print("\nEigenfrequencies [Hz]:")
for i in range(N_eig):
    r, c, rx, cx = eigensolver.get_eigenpair(i)
    
    if r > 0:
        freq = np.sqrt(r) / (2.0 * np.pi)
        print(f"  Mode {i+1}: {freq:.5f} Hz")
    else:
        print(f"  Mode {i+1}: negative eigenvalue ({r:.2e}) - skipped")

内容的提问来源于stack exchange,提问作者FN-2187

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 14:04:54