elastic_solid
对应源码:src/shared/physical_closure/materials/elastic_solid.h与src/shared/physical_closure/materials/elastic_solid.cpp。
1.类关系总览
另外:complex_solid.h/.hpp里有CompositeSolid、ActiveMuscle等会“组合/叠加”这些ElasticSolid派生类的StressPK2。
2.符号与张量(与实现一致)
F:
deformation,变形梯度。J=det(F):体积比。
C=FTF:RightCauchy-Green张量。
b=FFT:LeftCauchy-Green张量。
E=21(C−I):Green-Lagrange应变。
e=21(I−(FFT)−1):EulerianAlmansi应变(代码里通过F构造)。
应力度量:
PK1:P,一阶Piola-Kirchhoff应力。
PK2:S,二阶Piola-Kirchhoff应力。
Cauchy:σ。
Kirchhoff:τ=Jσ。
在固体动力学里常用的换算(见elastic_dynamics.cpp):
由PK2到PK1:P=FS。
由Cauchy到PK1:P=JσF−T。
Kirchhoff分解形式:P=(τ)F−T,其中τ=τvolI+τdev。
3.ElasticSolid(抽象基类)
3.1材料参数与波速
成员(均为reference/初始常量意义):
ρ0:密度(来自
Solid基类中的rho0_)。E0,G0,K0,ν:杨氏模量、剪切模量、体积模量、泊松比(对应
E0_、G0_、K0_、nu_)。c0,ct0,cs0:声速/拉伸波速/剪切波速(对应
c0_、ct0_、cs0_)。
代码中setSoundSpeeds():
这些波速主要用于:时间步控制、接触刚度setContactStiffness(c0_)、以及数值耗散。
3.2统一接口(子类必须给出具体本构)
StressPK1(F,i)、StressPK2(F,i)、StressCauchy(e,i)VolumetricKirchhoff(J)getRelevantStressMeasureName():后处理选择的应力度量名称(如PK2或Cauchy)
3.3Kirchhoff应力的“体积+偏”分解
DeviatoricKirchhoff(deviatoric_be):默认实现非常简单
其中deviatoric_be来自动力学模块对归一化b的去迹部分:
VolumetricKirchhoff(J):由子类定义τvol。
3.4数值耗散
PairNumericalDamping(dE_dt_ij,h):
NumericalDampingRightCauchy/NumericalDampingLeftCauchy:用F˙构造应变率并分离法向/剪切部分,返回一个“应力型”阻尼项,比例系数包含ρ0,c0,cs0。
4.LinearElasticSolid(各向同性线弹性)
4.1 参数换算
构造函数输入(ρ0,E,ν),代码计算:
其中λ0是第一Lame系数。
4.2本构公式(实现细节很重要)
StressPK2(F):
代码使用“对称化的F减I”作为小应变近似:
StressPK1(F):P=FS。StressCauchy(almansi):同样的线弹性形式
VolumetricKirchhoff(J):
4.3 适用范围
适合小变形、小转动(因为应变用21(FT+F)−I,并不是严格的有限变形形式)。
如果存在较大旋转或大拉伸,建议用SVK/Neo-Hookean等超弹性。
getRelevantStressMeasureName()返回PK2,默认更偏向在Lagrangian框架做后处理。
5.Saint-Venant-Kirchhoff Solid(SVK超弹性)
与LinearElasticSolid同参数,但使用有限变形应变:
适用范围:
允许较大位移/转动(几何非线性),但材料本构仍是“线弹性形式”,在大应变下可能出现不物理响应(例如压缩/拉伸非对称等)。
6.NeoHookeanSolid(可压缩Neo-Hookean)
6.1 StressPK2(F)
StressPK2(F)代码实现(并注明允许det(F)为负,参考Smith2018的StableNeo-Hookean思路):
令C=FTF,J=det(F),则
6.2StressCauchy(almansi)
StressCauchy(almansi)代码从Almansi应变反解B:
6.3VolumetricKirchhoff(J)
VolumetricKirchhoff(J)6.4 适用范围
典型大变形弹性体/软组织背景材料。
getRelevantStressMeasureName()返回Cauchy,更适合Eulerian意义的后处理。
7.NeoHookeanSolidIncompressible(不可压缩偏)
7.1StressPK2(F)
StressPK2(F)令C=FTF,I1=tr(C),I3=det(C),则
7.2VolumetricKirchhoff(J)
VolumetricKirchhoff(J)仍使用
7.3重要限制
StressCauchy()在cpp里标记TODO并返回空矩阵,因此不能用于Cauchy应力积分路径。头文件注释写明:Currently only works with
DecomposedIntegration1stHalf,not withIntegration1stHalf。
8.OrthotropicSolid(正交各向异性,仅3D)
构造输入:3个正交主方向ai、对应Ei,Gi,νi(i=1..3)。
实现要点:
继承
LinearElasticSolid时,为了“时间步/声速估计”,父类用max(Ei)和max(νi)近似。派生类内部会构造Ai=ai⊗ai,以及各向异性系数
Mu_[i]与Lambda_(i,j)。
StressPK2(F)使用有限变形应变E=21(FTF−I),然后做双重求和组装:
其中⟨A,E⟩对应代码里的CalculateBiDotProduct(A_[i],strain)。
VolumetricKirchhoff(J)沿用线弹性的
适用范围:
仅3D。
适合木材、复合材料、纤维增强材料等“正交各向异性”弹性。
9.FeneNeoHookeanSolid(FENE有限延展)
在Neo-Hookean基础上引入有限延展参数j1_m_(默认1.0)。
令C=FTF,strain=21(C−I),J=det(F),则
适用范围:
适合链网络/橡胶类材料在大拉伸下“逐渐变硬”的效应。
需要避免1−2tr(strain)/j1m→0导致奇异。
getRelevantStressMeasureName()返回Cauchy。
10.Muscle(全局正交各向异性肌肉)
10.1 参数与方向
输入:ρ0、
bulk_modulus(体积模量意义)、参考纤维方向f0、片层方向s0、以及4组材料参数a0_[k]、b0_[k]。内部构造:f0⊗f0、s0⊗s0、f0⊗s0+s0⊗f0。
10.2 由bulk_modulus与a0,b0反推(E,nu)
代码里把背景剪切模量取为G=a0(仅background):
10.3 StressPK2(F)
令C=FTF,J=det(F),并定义不变量(实现完全一致):
则
VolumetricKirchhoff(J):
适用范围:
适合具有纤维增强的软组织/肌肉,被动各向异性响应。
这里的方向是“全局常量”(所有粒子相同)。
getRelevantStressMeasureName()返回Cauchy。
11.LocallyOrthotropicMuscle(局部纤维/片层方向)
与Muscle同本构,但纤维方向local_f0_[i]与片层方向local_s0_[i]随粒子变化。
源码行为:
registerLocalParameters()注册粒子状态变量Fiber与Sheet。initializeLocalParameters()派生出FiberFiberTensor、SheetSheetTensor、FiberSheetTensor。StressPK2(F,i)把Muscle里的f0,s0替换为local_f0_[i]、local_s0_[i]及其张量积。
适用范围:
适合纤维场空间变化(例如心肌纤维螺旋分布)。
12.与固体动力学积分格式的对齐(怎么选模型更稳)
elastic_dynamics.cpp里提供多条应力路径:
Integration1stHalfPK2:直接用StressPK2(F),再转PK1。Integration1stHalfKirchhoff:用VolumetricKirchhoff(J)+DeviatoricKirchhoff(deviatoric_b)组装Kirchhoff应力。Integration1stHalfCauchy:用StressCauchy(almansi)得到σ,再转PK1。DecomposedIntegration1stHalf:显式使用VolumetricKirchhoff(J)并做一项与ShearModulus()相关的修正,再加LeftCauchy数值耗散。
因此选择建议:
如果材料类没有实现
StressCauchy(例如NeoHookeanSolidIncompressible目前TODO),就不要走Cauchy路径。如果希望用Kirchhoff分解形式,需要
VolumetricKirchhoff(J)合理且DeviatoricKirchhoff足够表达材料偏应力;当前ElasticSolid默认的DeviatoricKirchhoff是G0deviatoric_be,更接近各向同性剪切。各向异性材料(
OrthotropicSolid/Muscle/LocallyOrthotropicMuscle)主要通过StressPK2提供完整偏应力,通常更适合走PK2路径。
13.适用范围速查
LinearElasticSolid:小应变、小转动;快但在大变形下不可靠。SaintVenantKirchhoffSolid:有限变形几何;中等应变可用,但极大应变可能不物理。NeoHookeanSolid:大变形弹性体常用;实现含稳定化处理;同时支持Cauchy后处理。NeoHookeanSolidIncompressible:不可压缩偏;当前不支持StressCauchy;按注释更适合DecomposedIntegration1stHalf。OrthotropicSolid:3D正交各向异性;适合方向性弹性材料。FeneNeoHookeanSolid:大拉伸有限延展效应;注意接近奇异的参数区。Muscle/LocallyOrthotropicMuscle:软组织/肌肉被动各向异性;后者方向可随空间变化。
Last updated