I'm quite new to Elmer. I am trying to use it to model centrifugal stresses in a thin 3D slice of a rotor.
If I use a mesh of the whole rotor I am getting sesible results, however if I try to take advantage of symmetries using periodic boundaries, I am not. I suspect that I am providing an incorrect setting somewhere. The natures of the failure seems to be that:
* the "radial projector" seems to make displacements anti-symmetric, rather than symmetric
* the radial displacement on the shaft boundary seems pinned to zero.
I'm also not entirely sure whether the "Normal-Tangential Displacement" line(s) on the periodic boundaries should be required when not specifying an explicit displacement constraint - i.e. I'm not sure how they interact with the radial projector.
The attached image shows the solution I get from this SIF file, when viewed in paraview with a rotational filter, and a displacement warping filter (exaggerated 400x).
Can anyone spot what I'm doing wrong please? Here's my SIF file, and I'm attaching a zip of my mesh.
Many thanks,
Tom
Code: Select all
! Specify the RPM of the rotor here, and then we compute the angular velocity below.
$ rpm = 15000
$ omega = 2 * pi * rpm / 60
Header
CHECK KEYWORDS Warn
Mesh DB "srm_slice/"
Include Path "."
Results Directory "out_slice/"
End
Simulation
Max Output level = 10
Coordinate System = Cartesian
Coordinate Mapping(3) = 1 2 3
Coordinate Scaling = 0.001 ! The mesh is in mm, but we work with SI units internally
Simulation Type = Steady State
Timestepping Method = BDF
BDF Order = 1
Steady State Max Iterations = 1
Use Mesh Names = Logical True
End
! Materials
Material 1
Name = "RotorMaterial"
Heat Conductivity = 16.27 ! [W/(m K)]
Density = 7850.0 ! [kg/m^3]
Heat Capacity = 466 ! [J/(kg K)]
Poisson ratio = 0.285
Mesh Poisson ratio = 0.285
Youngs modulus = 200.0e9 ! [Pa]
End
! Bodies
Body 1
Name = "Lamination"
Target Bodies(1) = 1
Material = 1
Body Force = 1
Equation = 1
End
! Body forces
Body Force 1
Stress Bodyforce 1 = Variable Coordinate 1
Real MATC "7850 * omega^2*tx"
Stress Bodyforce 2 = Variable Coordinate 2
Real MATC "7850 * omega^2*tx"
End
! Equations & solvers
Equation 1
Name = "Rotor equation"
Active Solvers(2) = 1 2
End
Solver 1
Equation = "MooStress"
Procedure = "StressSolve" "StressSolver"
Variable = -dofs 3 Displacement
Exec Solver = Always
Calculate Stresses = Logical True
Displace Mesh = Logical False
Optimize Bandwidth = True
Bubbles = False
Lumped Mass Matrix = False
Steady State Convergence Tolerance = 1.0
Apply Mortar BCs = Logical True
End
Solver 2
Exec Solver = After Timestep
Procedure = "ResultOutputSolve" "ResultOutputSolver"
Output File Name = "step"
Vtu Format = True
Binary Output = False
Single Precision = True
Save Geometry Ids = True
Show Variables = True
End
! Boundaries
Boundary Condition 1
Name = "boundary_lam_shaft"
Target Boundaries(1) = 1
! Set the tangential component of displacement to 0. The radial component should be free.
Normal-Tangential Displacement = Logical True
Displacement 2 = 0.0 # theta-axis
! Displacement 3 = 0.0 # z-axis ! Probably don't want this, as we want to allow the rotor to expand.
End
Boundary Condition 2
Name = "boundary_rotor_independent"
Target Boundaries(1) = 2
Normal-Tangential Displacement = Logical True
Mortar BC = Integer 3
Mortar BC Static = Logical True
Radial Projector = Logical True
Galerkin Projector = Logical True ! If not present, get singular matrix
! Periodic BC results in floating point errors - presumably because mesh isn't conformal on boundary.
! Periodic BC = Integer 3
! Periodic BC Displacement 1 = True ! Normal
! Periodic BC Displacement 2 = True ! Tangential (?? this is what pyleecan does, but seems weird)
! ! TODO Need z axis too?
! Periodic BC Displacement 3 = True ! Tangential (?? this is what pyleecan does, but seems weird)
! Periodic BC Pressure = False
End
Boundary Condition 3
Name = "boundary_rotor_dependent"
Target Boundaries(1) = 3
Normal-Tangential Displacement = Logical True
End