Hi,
Am currently performing frequency domain analysis of the damped structure. I observe that the real and the imaginary parts of the results obtained are the same for both the x and y components of the displacement vector. It would be really appreciable if anyone knows what exactly is happening with the below implementation. I will be looking forward to your suggestions:
from dolfin import *
import numpy
from ufl import indices
import matplotlib.pyplot as plt
frequency=50000
omega=2 * numpy.pi * frequency
L = 0.2
H = 0.01
Nx = 200
Ny = 10
mesh = RectangleMesh(Point(0., 0.), Point(L, H), Nx, Ny)
#Function space definition over the mesh
Element1 = VectorElement(“CG”, mesh.ufl_cell(), 1)
Element2 = VectorElement(“CG”, mesh.ufl_cell(), 1)
Define the mixed element
V_elem = MixedElement([Element1, Element2])
Define the mixed function space
Vcomplex = FunctionSpace(mesh, V_elem)
#Material properties
E, rho, nu = 300E+8, 8000, 0.3
#Rayleigh Damping Coefficients
alpha = Constant(0)
beta = Constant(1e-6)
Lame coefficient for constitutive relation
mu = E/2./(1+nu)
lmbda = E * nu/(1+nu)/(1-2*nu)
def eps(v):
return sym(grad(v))
def sigma(v):
dim = v.geometric_dimension()
return 2.0mueps(v) + lmbda*tr(eps(v))*Identity(dim)
#Applying the Boundary conditions
zero=Constant((0.0, 0.0))
one=Constant((0.0, -1.0))
def left(x, on_boundary):
return near(x[0], 0.)
def rigth(x, on_boundary):
return near(x[0], 0.2)
boundary = [DirichletBC(Vcomplex.sub(0), zero, left), DirichletBC(Vcomplex.sub(1), zero, left)]
source = [DirichletBC(Vcomplex.sub(0), one, rigth), DirichletBC(Vcomplex.sub(1), one, rigth)]
bc=boundary+source
#Real and Imaginary parts of the trial and test functions
uR, uI = TrialFunctions(Vcomplex)
wR, wI = TestFunctions(Vcomplex)
M = omega** 2 * rho * (dot(uR,wR) + dot(uI,wI)) *dx
K = (inner(sigma(uR), grad(wR))+inner(sigma(uI), grad(wI)))*dx
C = alpha * M + beta * K
F = M - K + C
a, L = lhs(F), rhs(F)
Set up the PDE
solnU = Function(Vcomplex)
problem = LinearVariationalProblem(a, L, solnU, bcs=bc)
solver = LinearVariationalSolver(problem)
solver.solve()
solnUR, solnUI=solnU.split()
Set up file for exporting results
file_results = XDMFFile(“Amplitude_response.xdmf”)
file_results.parameters[“flush_output”] = True
file_results.parameters[“functions_share_mesh”] = True
file_results.write(solnUR, 0)
file_results.write(solnUI, 0)