FEniCS学习笔记11:固体力学压力载荷如何施加

fenics线弹性固体力学的数学模型见上篇:FEniCS学习笔记10:线弹性固体力学问题求解

已知,边界载荷定义在项\int_{\partial \Omega _{T}}^{}Tds

因此,施加压力载荷只需关键2步

第一步:将压力载荷赋值到T中即可,即T=-p\cdot n

这一步关键是得到边界的法线向量n,采用函数ufl.FacetNormal(mesh)得到所有边界的法线向量

n=ufl.FacetNormal(domain)
T=-p*n

第二步:得到载荷边界\partial \Omega _{T}

假设载荷边界为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(v)=\int_{\Omega }^{} f\cdot vdx+\int_{\partial \Omega _{T}}^{}Tds,其中f项本文不赘述。

L = ufl.dot(f, v) * ufl.dx + ufl.dot(T, v) * ds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值