Hi guys,
I know this is a really basic question, can any tell how to apply spring boundary condition in z-axis at the bottom 4 corners of a 3D plate. Here is the code.
# importing libraries for pre-processing
import dolfin as df
from ufl import nabla_div, nabla_grad
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
import json
from mshr import Polygon, generate_mesh
from scipy.optimize import root
from math import cos, cosh
import sys
import argparse
from functools import partial
import pandas as pd
import meshio as mio
from stl import mesh as mstl
param = {
"length": 1,
"width": 1,
"thickness": 5e-2,
"E": 1e6,
"nu": 0.3,
"rho":1000,
"bc_stiff":1e6,
}
# Lame's Constants
param["mu"] = 0.5 * param["E"] / (1+param["nu"])
param["lmbda"] = param["E"]*param["nu"] / ((1+param["nu"])*(1-2*param["nu"]))
# Global Constants
GRAVITY = 9.81
corner1 = df.Point(0, 0, 0)
# corner2 is diagonally opposite to the corner1
corner2 = df.Point(param["length"],
param["width"],
-param["thickness"])
# res is the resolution of the mesh
res = 2 * int(1/param["thickness"])
mesh = df.BoxMesh(corner1, corner2,
int(res * param["length"]),
int(res * param["width"]),
int(res * param["thickness"]))
# Strain Function
def strain(disp):
return df.sym(df.grad(disp))
# Stress Function
def stress(disp):
dim = disp.geometric_dimension()
return 2.0*param["mu"]*strain(disp) + param["lmbda"]*df.tr(strain(disp))*df.Identity(dim)
V = df.VectorFunctionSpace(mesh, 'Lagrange', degree=1)
u_ = df.TrialFunction(V)
du = df.TestFunction(V)
def corner_spring_bc(x, on_boundary):
"""Function to apply spring boundary condition at the corners of the plate bottom"""
tol = 1/res
bottom = df.near(x[2],-param["thickness"],tol)
if bottom:
left = df.near(x[0],0,tol)
right = df.near(x[0],param["length"],tol)
front = df.near(x[1],param["width"],tol)
back = df.near(x[1],0,tol)
corner1 = left and front
corner2 = left and back
corner3 = right and front
corner4 = right and back
return corner1 or corner2 or corner3 or corner4
return bottom
# Spring boundary Condition in z axis of stiffness param["bc_stiff"]
#bc = ?
Also, am I defining the corner points correctly?