fenics线弹性固体力学的数学模型见上篇:FEniCS学习笔记10:线弹性固体力学问题求解
已知,边界载荷定义在项中
因此,施加压力载荷只需关键2步
第一步:将压力载荷赋值到中即可,即
这一步关键是得到边界的法线向量,采用函数ufl.FacetNormal(mesh)得到所有边界的法线向量
n=ufl.FacetNormal(domain)
T=-p*n
第二步:得到载荷边界
假设载荷边界为y=0和z=0的两个边界面
def PLoad1_boundary(x):
return np.isclose(x[1], 0)
def PLoad2_boundary(x):
return np.isclose(x[2], 0)
# PLoad facets marked with 1 and 2
PLoad1_facets=mesh.locate_entities_boundary(domain, fdim, PLoad1_boundary)
PLoad2_facets=mesh.locate_entities_boundary(domain, fdim, PLoad2_boundary)
marked_facets = np.hstack([PLoad1_facets, PLoad2_facets])
marked_values = np.hstack([np.full_like(PLoad1_facets, 1), np.full_like(PLoad2_facets, 2)])
sorted_facets = np.argsort(marked_facets)
facet_tag = mesh.meshtags(domain, fdim, marked_facets[sorted_facets], marked_values[sorted_facets])
ds = ufl.Measure("ds", subdomain_id=(1,2), subdomain_data=facet_tag)
最后 得到求解需要的,其中项本文不赘述。
L = ufl.dot(f, v) * ufl.dx + ufl.dot(T, v) * ds