首页/文章/ 详情

AI赋能的复合材料智能设计与多尺度仿真:从微结构建模到工程应用

4月前浏览172

背景  

   

   复合材料因其“轻质高强、刚韧并存、可设计性强”的特性,广泛应用于航空航天、轨道交通、风电能源、新能源汽车等领域。尤其是微/纳结构增强的金属基复合材料,具备优异的比模量与比强度,但其组织复杂、界面多尺度演化、力学响应非线性等特性,使得传统试验与理论方法难以高效评估其服役性能与失效机理。为此,AI技术正在成为该类材料研究与设计的新核心工具。随着人工智能技术与材料科学的深度交叉融合,传统复合材料研发面临的设计周期长、试错成本高、机制不清晰等挑战,正在被新一代智能建模与数据驱动方法逐步破解。AI+复合材料这一前沿交叉学科,正成为推动新材料从结构设计、性能预测、机制识别到制备制造全面智能化的重要方向。

   本课程采用“理论+实操+案例”的递进式教学框架,系统培养AI与复合材料交叉研究的全流程能力。前两天课程聚焦复合材料多尺度建模与智能算法的基础融合:第一天从复合材料疲劳损伤机理出发,结合COMSOLPython实现傅里叶神经算FNO算子回归的应力预测,并通过向后传播BP神经网络完成仿生复材结构强韧性能优化;第二天深入三维复合材料的热力学预测,运用ANSYS生成RVE模型并联合随机森林回归 (RFR) 实现多物理场耦合分析第三天使用离散单元方法 (DEM) 与深度学习进行应力强度因子预测,通过深度神经网络(DNN卷积神经网络(CNN对比揭示应力在材料破坏中的演化规律。第四天基于实验数据驱动,系统讲解ANN模型对PVC材料载荷-位移曲线的跨组分预测技术,涵盖数据预处理、Keras架构优化及k折交叉验证等关键环节。最后一天进阶至使用生成对抗网络 (cGAN) 预测复杂应力场,突破传统CNN局限,实现从正方形到异形结构的载荷自适应建模。课程全程贯穿PFC2D、Abaqus等工业软件与AI技术的协同应用,并集成材料基因工程平台构建方法,最终使学员掌握复合材料“微结构识别-性能预测-机制解析-智能优化”的完整技术链,具备面向航空航天、新能源等场景的复合材料智能化研发能力。


 
 
01      

课程一:AI赋能复合材料智能设计与多尺度仿真(课表上下滑动查看)

02      
课程二:人工智能助力高性能材料疲劳与断裂(课表上下滑动查看)      
03      
课程三:深度学习PINN+大模型辅助(课表上下滑动查看)      
04      
课程四:深度学习固体力学(课表上下滑动查看)      

     

   



   

课程一:AI赋能复合材料智能设计与多尺度仿真    

课程概述  

本课程旨在为学员提供深度学习驱动的复合材料设计与工程应用的深入知识,结合材料力学、固体力学以及深度学习技术,帮助学员理解如何将深度学习应用于复合材料的设计与应用问题。课程内容涵盖了深度学习基础、复合材料疲劳与断裂力学基础理论、复合材料设计、以及深度学习在工程中的应用。课程通过理论讲解、实际操作与案例分析相结合的方式,深入探讨了复合材料微结构智能识别多尺度力学预测界面损伤建模强韧机制优化等技术,并结合实际工程问题,展示了深度学习在汽车航空海洋工业清洁能源的复合材料研发中的应用。


 
 
教学目标  

培养学员掌握AI驱动复合材料研发的核心能力。首先,学员将系统掌握多尺度材料建模方法,包括微结构特征提取 (CNN/GNN)、代表体积单元(RVE)重建(Abaqus/PFC2D)与跨尺度力学响应预测技术,能够通过Python实现傅里叶神经算子(FNO)等先进算法对复合材料应力场进行高精度计算其次,课程将深化AI与力学机理的融合应用,使学员具备动态变化过程的应力集中预测(DEM+DNN)、界面失效建模(相场法+生成对抗网络GAN)等能力,特别是通过条件生成对抗网络(cGAN)突破传统方法在复杂应力场预测中的局限实践层面,学员将完成从材料基因数据库构建(MySQL+Redis)到智能优化设计(PSO/RFR)的全流程实战,例如针对SiCp/Al复合材料通过支持向量回归(r-SVR)实现强度-韧性协同优化最终,学员将具备将COMSOL/ANSYS等工业软件与深度学习框架(TensorFlow/Keras)深度集成的能力,推动复合材料研发范式向数据驱动转型。课程采用“理论讲解+实例实操+项目演练”的教学模式,深入浅出,带你系统掌握AI在复合材料设计、分析与优化中的应用路径。从基础知识出发,逐步进阶至工程级算法实践,快速构建人工智能赋能材料研发的完整认知体系。      

本课程配备独家研发的定制化讲义,经过多轮精心打磨,内容全面覆盖图神经网络、结构识别、性能预测及智能优化等核心模块。讲义理论体系完善,包含丰富实践案例,并提供可复用的代码资源,能够有效帮助科研人员和工程技术人员系统提升AI材料建模与应用能力。      

课程面向复合材料性能分析、智能设计、材料数据建模及人工智能应用研究领域的专业人士,包括企业工程师、高校师生以及材料研发与制造机构的技术管理人员。适合有志于将人工智能技术融入复合材料研发体系、强化数据驱动创新能力的跨领域研究者和从业者。


 
 
授课老师  

本课程主讲老师来自国内人工智能+复合材料研究领域的顶尖团队,长期致力于将人工智能技术与复合材料研发深度融合。老师带领团队构建了完整的智能材料实验研究体系,创新性地开发了多项关键技术:基于深度学习的复合材料微观结构智能表征系统实现了材料缺陷的自动化识别;自主研发的复合材料智能力学测试平台集成了实时数据采集与AI分析功能,大幅提升了实验效率;开发的智能实验设计系统通过算法优化实现了材料制备工艺参数的自动推荐,缩短新型复合材料研发周期。在工程应用方面,老师主持研发的多个AI赋能的复合材料实验系统已成功应用于航空航天、汽车制造等领域的龙头企业,建立了从材料制备、性能测试到数据分析的智能化实验闭环。特别是在物理信息神经网络应用于材料性能预测、计算机视觉辅助微观结构分析等方向取得了突破性进展。本课程将系统分享老师在智能材料实验领域的前沿成果,包括实验数据智能分析方法、AI辅助实验设计技术等实用内容,助力学员掌握材料实验的智能化升级路径。


 
 
课程内容(上下滑动查看)  
AI赋能复合材料智能设计与多尺度仿真课表  

第一天上午        

l复合材料理论知识          

聚焦Eshelby等效夹杂理论、自洽模型、各向异性本构方程、经典层合理论(CLT)等关键技术,通过多尺度分析(细观-宏观)、界面力学、损伤演化解析复合材料强度/刚度/失效难题。研究复合材料行为特殊性:各向异性、多尺度性、界面效应界面脱粘的内聚力模型等。          

l风力发电叶片力学性能与除霜性能分析(实操+代码)          

本案例主要围绕风力发电复材叶片的力学性能与除霜性能进行分析,涵盖复合材料的力学分析、弹性力学应用以及传热分析等方面。首先,从复合材料的力学计算出发,以三层板复合材料为例,深入分析单层板在载荷作用下的应力应变,以此作为材料性能的表征。接着,将这些材料性能应用于实际工程计算中并考虑多重工况,具体包括以加热层作为热源计算叶片的温度变化,并通过分步分析来评估除霜效率。        

在整个过程中,结合仿真与实验进行验证,确保既能够满足复合材料在力学性能上的需求,又能实现良好的除霜效果。通过这一方法,能够全面优化风力发电叶片的设计,提高其在实际应用中的可靠性和效率,尤其是在恶劣环境条件下的除霜性能和力学性能表现。        

     

1复合材料力学计算和传热分析          

l基于算子回归技术的多孔复合材料即时应变计算和拓补优化方法(实操+代码)          

本案例将联合COMSOL Multiphysics和python进行训练数据生成和模型训练。介绍基于二维有限元方法的应力应变计算,并结合基础弹性力学理论对计算结果进行分析。课程中将生成两组不同边界条件下的有限元计算结果,分别是周期性边界和非周期性边界条件。通过建立训练和验证数据集,进一步引入回归算子数学模型,探讨如何通过输入材料属性,预测输出von Mises应力的集中情况。        

在训练过程中,目标是最小化损失函数,该函数定义为观测值(有限元解) 与算子预测值(FNO)的误差。为此,课程将介绍DeepONet3算法 (Python代码实操),并详细讨论傅里叶浅层P、Q的设计以及输入输出层的映射方法。之后对傅里叶神经算子 (FNO) 与传统卷积神经网络 (CNN) 在应力预测中的优势进行比较分析。        

     

2comsol(FEA)联合python(FNO)结合工作流          

第一天下午        

l仿生强韧结构的AI优化设计与制造路径优化研究 (实操+代码+演示)          

本案例聚焦于如何利用机器学习方法实现仿生缝线结构的强韧性能预测与优化设计。缝线结构作为一种典型的仿生增强构型,在力学性能提升中具有巨大潜力,但其复杂的几何参数与非线性结构行为使传统建模方式难以高效预测其强度、刚度与韧性等性能表现。        

实操中将介绍如何基于有限元模拟生成结构–性能数据集,并通过Python脚本快速实现参数扫描与数据输出。接着,利用BP神经网络构建“特征–性能”回归模型,通过80%训练、20%测试的策略评估模型预测能力,掌握如何以误差函数(如MSE、MAE)为指标优化网络结构和超参数。        

课程还将引导学员理解特征变量与目标性能间的映射关系,以及如何结合自学算法与物理先验进行高效建模。最终实现以AI算法为核心,完成仿生缝线结构最大韧性值预测,开展结构参数反演与优化路径规划,为未来智能结构设计提供理论支持与技术路径。        

     

3基于机器学习的仿生缝线优化设计          

第二天        

第二天上午        

l结合深度学习预测泡沫增强复合材料的热力学(实操+代码)          

本课程将介绍如何结合有限元方法与深度学习,进行泡沫材料的热力学性能预测,特别针对充填有空心玻璃微球(Hollow Glass Microballoon, HGM) 的环氧复合材料。首先,简要介绍HGM填充环氧树脂复合材料的制造过程和介绍实验条件,包含单轴压缩测试数据的获取,实验条件的设置,包括常温下及热力学条件下的测试。随后,对材料应力-应变曲线特性进行分析,重点拆解与断裂机理的联系,并探讨材料在温度变化下的力学特性变化机理。        

课程将进一步进行动力学热分析,针对不同体积分数的空心玻璃微球,研究其热力学特性。在模型生成方面,本课程区别于大多数研究使用二维模型的现状, 采用三维模型的构建与研究。 首先,使用MATLAB生成不同体积分数下的随机微球位置,并通过迭代算法(如Lubachevsky–Stillinger算法 (LS) 与随机顺序吸附算法 (RSA) 确保微球位置的随机性,同时避免球与球、球与边界发生干涉。生成的球位置数据将通过VBA脚本转译并读入Autodesk Inventor (CAD软件),以便生成三维几何结构,接着使用ANSYS SpaceClaim进行网格生成。利用ANSYS进行有限元计算,并与实验数据进行对比分析,探讨数值计算的局限性。        

课程还将介绍如何使用随机森林回归(RFR) 模型进行热力学性能预测,具体包括应力应变分析与不同温度下杨氏模量的预测。代码编写将基于Python 3平台,使用NumPy、Pandas、Scikit-learn和Matplotlib等库,帮助学员理解并实现数据处理、建模与可视化。最后,通过对比数值计算与实验数据的结果,进行误差分析。        

     

4几何生成工作流, FEA结果, 预测值, 实验值, FEA结果对比          

第二天下午        

lSiCp(CNT)/Al混杂增强复合材料建模与机制研究 (实操+代码)          

本模块面向“结构–性能–机制”多维数据驱动的材料设计需求,讲授如何构建一个高效、可扩展、面向AI应用的材料数据服务平台。课程将引导学生从系统结构角度理解数据库平台设计的四层架构:数据层、通信层、服务层与展示层,并掌握各层关键技术与逻辑协作关系。        

项目基于粒子群优化(PSO) 方法,完成了具有不同组分体积、形状与分布特征的代表体积单元 (RVE) 重建,并基于Abaqus显式求解器进行了单轴拉伸力学响应模拟,同时开展了粒子群优化迭代算法参数的系统分析。在数据层,学生将学习如何使用MySQL存储结构化数据,Redis加速非关系数据查询,提升系统响应效率;在服务层,基于Django与DRF框架开发REST API,集成Celery实现异步任务调度,通过Python完成核心业务逻辑建模;通信层使用OpenAPI+JWT实现接口标准化与身份验证;展示层使用Vue、TailwindCSS与Quasar等现代前端技术,构建响应式、美观且交互友好的用户界面。在性能预测建模中,项目采用了多种机器学习回归模型 (包括线性回归LR、随机森林RF、支持向量回归SVR等) 预测SiCp/Al复合材料的抗拉强度与韧性指标。模型评估结果显示,r-SVR在多模型中预测精度最优,验证其作为结构–性能关系挖掘的有效工具。最终实现了对多种复合结构形貌参数的快速预测与力学响应评估,为复合材料的结构设计与性能快速评估提供了可复用的机器学习解决方案。

     

5FEA PSO流程图          

     

6FEA 和 PSO 的对比图:(a) 铝基体和 14vol.% SiCp/Al 复合材料的数值与实验应力-应变曲线比较;(b) 粒子群优化和随机搜索方法获得的适应度迭代曲线比较          

第三天        

l深度学习结合DEM的横向裂纹扩展预测 (实操+代码)          

在本案例中,我们探讨了深度学习结合离散单元方法(DEM) 在横向裂纹扩展预测中的应用。首先介绍了DEM离散单元方法的力学模型,并阐述了初始裂纹的判断方法。在模型中,粒子接触假设和矩阵设置是关键组成部分,通过这些假设,问题得到了简化,进而提取了训练数据中的特征,设置了数据点,并实现了从固定纤维数量扩展到任意纤维数量的训练。在深度神经网络 (DNN) 回归模型中,使用了反向传播算法,通过调整输入层、隐藏层和输出层的设置,优化了学习过程。学习率和epoch的设置也确保了避免过拟合问题的出现。        

为了实现DNN分类模型,采用了Keras框架。接着,我们进行了第二次裂纹分析,将第一次裂纹和总变形纳入第二次裂纹预测的特征。实验中,我们引入了卷积神经网络 (CNN) 进行高级特征提取,通过使用批量归一化 (Batch Normalization) 来稳定学习过程,并通过MaxPooling2D层提取重要特征并简化计算。针对不同块的filter设置,分析了输入层的分辨率,并根据DEM解作为监督学习的ground truth进行训练。最后,我们对CNN的误差分析结果进行了评估,并与DNN的结果进行了对比分析和讨论。        

第四天        

l基于实验数据的不同组分PVC材料载荷-位移曲线的ANN预测 (实操+代码)          

简要介绍PVC材料的组成以及载荷-位移测试的实验方法,旨在获得高质量的载荷-位移数据用于神经网络模型的训练。模型的构建采用了前向传播与反向传播算法来学习常规参数,如节点权重与偏置项,并通过网格搜索的方法来优化网络结构及其学习超参数,从而有效控制学习过程并确保其可靠性。        

在ANN模型的配置过程中,主要分为三个阶段。第一阶段为训练数据的预处理,包括异常值过滤与缺失值处理,同时明确特征变量及输入输出节点的定义,输入特征如填充物占比、比能和负载等。数据划分则利用了Scikit-learn的Python库,将原始数据分为训练集与测试集。第二阶段是模型的建立与训练,基于Keras的Dense层及TensorFlow构建网络架构,并引入ReLU激活函数及其原理以增强模型的非线性拟合能力。第三阶段为模型验证,主要通过在训练集上观察验证准确率以及使用测试集评估预训练模型的泛化性能。同时,采用k折交叉验证对模型训练效果进行系统评估,并结合误差与鲁棒性分析加深理解。此外,通过Keras中的EarlyStopping回调机制优化训练周期,并进行参数敏感性分析,以提升整体模型的稳定性与预测精度。本案例中的方法可以准确预测in-between材料组分的力学性能。        

     

7ANN模型执行步骤          

     

8ANN的不同层的层级结构          

第五天        

l深度学习预测层级材料的复杂应力应变场(实操+代码)          

案例五将展示如何应用深度学习方法来预测层级材料中的复杂应力-应变场。在该研究框架中,首先从材料的输入参数出发,依次包括其几何微观结构图形与边界条件,最终映射至应力应变场的输出结果。相较于传统卷积神经网络 (CNN) 方法,生成对抗网络 (GAN) 尤其是在引入条件GAN (cGAN) 后表现出更强的通用性与数据适应性,能够更直接地借助实验数据进行建模和训练。        

在模型构建方面,cGAN中的两个关键组成部分分别为生成器 (Generator) 与判别器(Discriminator)。本案例中,生成器采用了U-Net结构,具备良好的特征提取与空间信息保留能力;判别器则使用PatchGAN架构,用于判别图像的局部区域,从而提升分辨细节的能力。训练过程的稳定性尤为关键,通常需要合理选择训练周期的长度,并结合特定的指标来监测训练状态的稳定性,如损失函数的收敛性与判别器生成器之间的博弈平衡。        

首先对二维代表体积单元(RVE) 的力学行为进行了简化与建模,讲解数据图形化的步骤。引入了随机几何生成器用于构造多样化的训练与测试所需的结构图像。Abaqus有限元方法建立Ground Truth数据库,模型预测结果与真实解之间的误差则通过L2范数(L2 norm)进行量化评估。        

除了基本应力应变场预测之外,模型还能进一步用于次要力学性能的预测,如恢复性与残余应力等。对局部小尺度RVE的可靠性分析显示,增加网络中的隐藏层可有效压缩输入数据维度,并在不损失解析精度的前提下保持预测能力。此外,模型的输入形态也从最初的正方形组分扩展到更复杂的三角形与六边形结构。        

为了更灵活地应对多变的载荷情形,创新了将载荷条件直接施加于图像输入的方式,避免了传统做法中将载荷作为独立训练参数的限制。其在处理多样化加载路径方面展现出显著潜力,尤其是对于分步加载条件的建模与预测。最后分析GAN方法的局限性例如在应力集中区域的预测结果较为平均。        

     

9cGAN工作流          

代码运行环境要求        

# 深度学习框架        

torch>=1.8 # PyTorch 主库        

tensorflow>=2.6 # tensorflow 主库        

# 科学计算        

numpy>=1.19        

pandas>=1.2        

scipy>=1.7 # 可选:补充科学计算功能        

# 数据处理与机器学习        

scikit-learn>=0.24        

openpyxl>=3.0 # 可选:支持Excel数据处理        

# 可视化        

matplotlib>=3.3        

seaborn>=0.11 # 可选:增强可视化        

# API 与认证        

fastapi>=0.68 # 支持OpenAPI规范的Web框架        

uvicorn>=0.15 # ASGI服务器(配合FastAPI)        

pyjwt>=2.0 # JWT认证        

# 其他工具        

tqdm>=4.0 # 进度条工具(可选)

课程二:人工智能辅助高性能材料疲劳与断裂应用研究    

内容概述      

本课程旨在为学员提供深度学习驱动的疲劳与断裂分析的深入知识,结合材料力学、断裂力学以及深度学习技术,帮助学员理解如何将深度学习应用于工程中的疲劳与断裂问题。课程内容涵盖了深度学习基础、疲劳与断裂力学基础理论、疲劳裂纹扩展与断裂分析、以及深度学习在航空、新能源领域等工程中的应用。课程通过理论讲解、实际操作与案例分析相结合的方式,深入探讨了疲劳寿命预测、裂纹检测、损伤识别等技术,并结合实际工程问题,展示了深度学习在不同领域中的应用。

课程的前两天将聚焦于深度学习和疲劳断裂分析的基础理论,介绍深度学习的基本概念、神经网络架构及其在疲劳与断裂分析中的应用,帮助学员建立深度学习的理论框架,并通过Python编程实现疲劳寿命预测模型。第三天的课程将重点探讨疲劳与断裂分析在航空与新能源工程中的实际应用,包括裂纹扩展、疲劳寿命预测等问题,展示深度学习如何提升分析精度和效率。第四天将通过讲解腐蚀疲劳和复合材料寿命预测的基本理论及应用,探讨材料在恶劣环境下的疲劳行为,并利用深度学习方法优化分析过程。最后一天,课程将通过实际案例和操作,帮助学员掌握深度学习驱动的疲劳与断裂分析技术,能够在不同工程背景下灵活应用。同时,课程将介绍DeepSeek技术,展示如何利用其智能分析工具,进一步提高疲劳与断裂问题的诊断精度和处理速度。通过这项技术,学员将了解如何在复杂工程环境中进行高效的数据分析和预测。


     
     
课程背景        

近年来,深度学习技术在多个工程领域取得了显著突破,特别是在疲劳与断裂分析中的应用。传统的疲劳分析方法依赖于物理模型和实验数据,然而,随着结构复杂性的增加和多物理场交互的挑战,传统方法的计算成本和准确性已无法满足高精度要求。深度学习通过强大的数据处理和模式识别能力,能够有效地从大量复杂数据中提取特征,进而提供更高效、更精准的分析。特别是在疲劳寿命预测、裂纹检测与扩展、以及多物理场耦合分析等方面,深度学习展现了巨大的潜力,能够弥补传统方法的不足,提升工程分析的效率与可靠性。

材料力学的传统分析方法在面对多维度、多物理场的复杂问题时,往往需要大量的实验数据支持,并且计算过程繁琐。而人工智能,特别是深度学习的应用,正在推动材料科学领域的革命。通过将物理学定律与深度学习模型结合,如物理信息神经网络(PINN),工程师可以实现更为精确的疲劳与断裂分析。AI技术的引入,不仅使得传统的疲劳与断裂分析方法更为高效,而且能够自动处理非结构化数据,如图像、传感器数据等,打破了传统方法的限制,提升了预测的精度和应用的广泛性。

随着航空航天、风电、桥梁等关键基础设施领域对安全性和可靠性要求的提高,在工程实践中的前沿趋势与挑战方面,深度学习在疲劳与断裂分析中的应用正日益重要。在这些领域,传统的疲劳分析方法面临着复杂负载谱、材料不均匀性和裂纹扩展行为等多方面的挑战,急需更高效、更智能的解决方案。深度学习,尤其是卷积神经网络(CNN)和生成对抗网络(GAN)的引入,为实时监测、裂纹扩展预测和疲劳寿命评估提供了新的方向。未来,结合深度学习与传统方法的混合分析模型,将在智能化、自动化的工程决策过程中扮演越来越重要的角色,推动结构安全与维护管理向更高水平发展。


     
     
教学目标      

本课程的教学目标是通过理论讲解与实践操作,帮助学员全面掌握深度学习在疲劳与断裂分析中的应用,并将所学知识有效应用于工程实践中。首先,学员将深入理解深度学习的基本原理和常见算法,掌握神经网络、卷积神经网络等模型的应用,能够在疲劳与断裂分析中灵活运用深度学习方法。其次,学员将掌握疲劳与断裂力学的基本理论,理解疲劳裂纹扩展、断裂韧性、疲劳寿命预测等关键内容,并能够结合深度学习技术,提升分析的精度和效率。课程还将培养学员进行智能裂纹检测与寿命预测的能力,学员将能够利用深度学习进行裂纹分类与检测,预测疲劳寿命,并通过实际案例进行应用,提升数据驱动的分析能力。此外,学员将在实际工程应用中,运用深度学习方法解决航空结构、风电装备、桥梁等领域的疲劳与断裂问题,提高分析效率与精度。最后,通过编程实践,学员将能够利用Python和深度学习框架(如PyTorch)构建与训练疲劳与断裂分析模型,完成疲劳寿命预测、裂纹检测等任务,掌握深度学习驱动的端到端分析方法,同时掌握如何将DeepSeek技术与传统分析方法相结合,以实现更高效、更精准的疲劳与断裂分析。


     
     
课程内容(上下滑动查看)      
人工智能高性能材料疲劳与断裂课表      

          

Day 1:深度学习基础、疲劳与断裂力学基础理论          

l深度学习基础与应用概述        

l深度学习概述:介绍深度学习的基本概念、历史背景及其在工程与材料科学中的应用前景。        

l神经网络基础        

¡神经网络架构与工作原理:深入讲解神经元模型、前馈神经网络、激活函数等基本概念。(实操+源码)        

¡反向传播算法与梯度下降:讨论深度学习的训练过程,如何通过反向传播优化模型。        

¡常见深度学习网络结构:包括全连接神经网络(ANN)、卷积神经网络(CNN)和递归神经网络(RNN)。        

¡深度学习优化技术:学习常见的优化算法(如AdamSGD)以及其在疲劳与断裂分析中的应用。        

¡物理信息神经网络(PINN)原理剖析(实操+源码)        

     

l深度学习在疲劳与断裂分析中的应用        

¡深度学习与材料疲劳研究的结合:探讨如何利用深度学习分析疲劳现象,包括裂纹检测、裂纹扩展预测及寿命分析等。        

¡数据驱动的疲劳寿命预测模型:如何通过深度学习模型处理和分析疲劳数据(如S-N曲线、载荷谱),提升寿命预测精度。(实操+源码)        

¡深度学习在断裂力学中的应用:通过深度学习优化应力强度因子计算、裂纹尖端应力场预测等。        

¡基于深度学习的损伤识别与分析:利用深度学习技术自动识别材料损伤、裂纹位置和发展趋势。        

¡DeepSeek大模型如何有效应用在疲劳与断裂的科研领域        

     

l材料力学、弹性力学基础与Workbench实操仿真        

¡胡克定律与材料本构关系推导:深入讲解弹性力学中材料本构模型的建立与推导。        

¡Workbench实操仿真应力应变分析:实操仿真材料在加载下的应力、应变关系及其在断裂分析中的重要性。        

¡平面应力/应变问题解析解推导:基于经典的平面应力和应变理论进行实例推导与分析。        

¡断裂力学基础:应力强度因子计算:使用J积分法进行应力强度因子计算,理解裂纹尖端应力场。(实操+源码)        

¡DeepSeek大模型如何有效提升料力学与弹性力学方仿真效率        

     


l疲劳力学与寿命预测理论        

¡疲劳现象与疲劳断裂特征:描述材料在反复载荷作用下的疲劳裂纹扩展与最终断裂。        

¡疲劳寿命的描述方法:S-N曲线与矿物法则:解释疲劳寿命的建模与预测。        

¡概率疲劳建模与应用:介绍蒙特卡洛模拟在疲劳寿命预测应用。(实操+源码)        

¡疲劳断裂行为与局部塑性化:分析疲劳过程中局部塑性变形的作用及其与疲劳裂纹扩展的关系。        

l代码实操:Python实现Weibull分布疲劳寿命预测        

¡利用Python实现经典的Weibull分布进行疲劳寿命预测,理解概率分布与实际疲劳寿命预测的关系。(实操+源码)        

     

Day 2:疲劳裂纹扩展与断裂分析          

l裂纹扩展与断裂力学模型(实操+源码)        

¡应力强度因子与裂纹扩展准则:讲解不同类型的裂纹扩展准则(如Paris法则、Logan法则)。        

¡裂纹的多尺度分析方法:从微观到宏观对裂纹扩展的多尺度分析。        

¡断裂韧性与疲劳裂纹的关系:探讨材料断裂韧性与疲劳裂纹扩展的关系。        

¡损伤力学与裂纹萌生理论:介绍损伤力学中的裂纹萌生模型及其与疲劳寿命的关系。        

l智能裂纹检测与分析(实操+源码)        

¡数字图像相关(DIC)技术与裂纹分析结合:使用DIC技术提取裂纹信息,并结合深度学习模型进行分析。        

¡U-Net深度学习算法在裂纹检测中的应用:基于U-Net网络架构进行裂纹自动分割。        

¡ResNet在裂纹阶段分类中的应用:使用ResNet对裂纹阶段进行分类和预测。        

¡基于深度学习的裂纹特征提取方法:通过深度学习提取裂纹的微观特征,辅助分析裂纹发展过程。        

l实操:PyTorch构建裂纹检测模型        

¡使用PyTorch框架搭建并训练裂纹检测模型,进行裂纹检测与分类任务。        

     

Day 3:疲劳与断裂分析在航空与新能源工程中的应用          

l航空结构的疲劳与断裂分析        

¡飞机蒙皮裂纹多尺度分析框架:结合微观与宏观分析方法进行航空结构疲劳裂纹的多尺度建模。        

¡超分辨率重建技术在裂纹检测中的应用:通过显微图像超分辨率重建提升裂纹检测精度。        

¡裂纹尖端应力场预测与分析:运用有限元与深度学习结合的方法,预测裂纹尖端应力场。        

¡疲劳寿命预测模型与数据驱动方法:构建数据驱动的疲劳寿命预测模型。(实操+源码)        

     


l风电装备寿命预测、桥梁裂纹寿命预测        

¡风电主轴承疲劳分析与寿命预测:分析风电主轴承的疲劳行为,构建寿命预测模型。        

¡物理信息神经网络(PINN)在疲劳分析中的应用:结合物理信息神经网络进行风电装备的疲劳寿命预测。(实操+源码)        

¡载荷谱分析与多物理场耦合模型:探讨风电设备在复杂载荷谱下的疲劳行为。        

¡数据驱动疲劳分析方法的创新与挑战:讨论数据驱动方法在风电装备疲劳分析中的应用和挑战。        

l实操:PyTorch实现寿命的端到端预测、桥梁裂纹寿命预测        

¡通过PyTorch框架实现疲劳寿命的端到端预测。        

     

Day 4:腐蚀疲劳与复合材料寿命预测          

l腐蚀疲劳分析        

¡腐蚀-疲劳耦合的基本理论:探讨腐蚀与疲劳相互作用下的损伤过程。        

¡电化学-力学耦合分析方法:结合电化学与力学模型,分析腐蚀疲劳过程。        

¡迁移学习在腐蚀疲劳分析中的应用:利用迁移学习方法提升腐蚀疲劳预测模型的泛化能力。        

¡腐蚀疲劳模型的实验验证:结合实际数据,验证腐蚀疲劳预测模型的准确性。        

l复合材料疲劳与损伤分析        

¡复合材料疲劳损伤机理:从微观结构上分析复合材料的疲劳损伤行为。        

¡应变分配图像的CNN特征提取技术:通过卷积神经网络(CNN)提取复合材料疲劳损伤过程中的应变图像特征。(实操+源码)        

¡复合材料疲劳寿命的预测方法:建立复合材料疲劳寿命的预测模型,结合物理与数据驱动方法。        

¡多场耦合分析与疲劳预测:综合考虑热、力、电等多场耦合效应,预测复合材料的疲劳寿命。        

l实操:Keras构建复合材料疲劳寿命预测模型        

¡使用Keras搭建复合材料疲劳寿命预测模型,进行基于数据的疲劳分析。        

     

Day 5:高温/极端环境下的金属疲劳与多尺度疲劳分析          

l高温/极端环境下的金属疲劳        

¡高温疲劳机理与特征:讨论温度对金属材料循环变形行为的影响(如蠕变-疲劳交互作用)        

¡蠕变金属疲劳:利用物理信息神经网络预测金属蠕变-疲劳寿命        

¡蠕变金材料的多尺度损伤分析方法:结合微观与宏观分析,研究蠕变金属的疲劳与断裂机制。        

     

l多尺度疲劳分析方法        

¡-微观数据传递的GAN架构:利用生成对抗网络(GAN)进行多尺度疲劳分析数据的生成与处理。(实操+源码)        

¡跨尺度疲劳仿真工作流设计:设计跨尺度的疲劳仿真工作流,提升仿真精度与计算效率。        

¡多尺度损伤累积模型:结合材料的微观结构特征,构建多尺度损伤累积模型。        

¡深度学习与传统方法的融合:将深度学习技术与传统疲劳分析方法相结合,提升疲劳预测精度。(实操+源码)        

l补充:Joule期刊最新疲劳与断裂研究论文解析        

¡讨论最新的疲劳与断裂研究成果,并解析相关科研论文的框架和应用。        

     

授课老师      

本课程的主讲老师来自国内985重点高校,拥有两年海外留学经历,并专注于计算物理与计算材料的研究。老师的学术背景深厚,长期从事复合材料计算与深度学习方法的结合研究,涉及的研究领域包括量子力学、材料科学、仿真技术、人工智能技术等。作为学术团队的一员,老师参与了多项国家自然科学基金面上项目,在国际学术界具有广泛的影响力。老师的研究方向主要集中在深度学习方法应用于第一性原理计算的领域,尤其是在神经网络势函数(NNF)和分子动力学模拟(MD)等领域取得了突破性的成果。凭借扎实的理论功底和丰富的实践经验,老师在如何高效地结合深度学习与材料科学进行分析应用,研究成果被广泛应用于材料设计、能源催化、电子结构计算等多个领域。老师在国际顶级期刊上发表多篇高水平论文,这些论文涉及计算材料、量子力学、机器学习与材料科学的交叉领域,得到了国内外学术界的广泛认可和引用。除此之外,老师还参与了多项学术交流活动,并在多个国际学术会议上做过专题报告,积累了丰富的学术交流和研究合作经验。在教学方面,老师秉承“理论与实践并重”的教学理念,注重将深奥的理论知识与实际应用紧密结合。在本次培训课程中,老师将通过系统的讲解和丰富的实操案例,帮助学员深入理解深度学习方法如何在复合材料中使用,从基础的量子力学原理、密度泛函理论(DFT)到神经网络势函数的应用,再到如何用机器学习方法加速材料模拟,课程内容涉及面广,理论深度与实践操作并行,旨在让学员能够全面掌握并运用相关技术。除了学术与教学的成就,老师在编程与软件工具方面也有着丰富的经验,能够灵活运用Python、Pytorch等编程工具进行大规模计算与数据分析。老师的多项研究成果和编程经验为学员提供了一个独特的学习平台,使得课程内容更加贴近实际需求,帮助学员快速掌握从理论到实践的核心技术。


     
     

课程三:深度学习PINN+大模型辅助编程    

背景      

物理信息神经网络(PINN)的兴起近年来,物理信息神经网络(Physics-Informed Neural Networks, PINN)成为计算科学与人工智能交叉领域的前沿方向。传统数值方法(如有限差分法、有限单元法)在高维、强非线性或反演问题中面临计算效率低、网格依赖性强等瓶颈。PINN通过将控制方程、边界条件等物理先验嵌入神经网络,以无网格方式实现微分方程求解,在流体力学、固体力学、传热学等领域展现出突破性潜力。其核心论文(引用超13,000次)开创了物理驱动深度学习的范式,成为Nature、CMAME等顶刊的研究热点。2. 传统数值方法与机器学习的融合需求有限差分法(FDM)和有限单元法(FEM)虽成熟但依赖离散化,难以处理复杂几何与多物理场耦合问题。机器学习(如CNN、GNN)虽具备强大的数据拟合能力,但缺乏物理可解释性。PINN通过融合物理定律与数据驱动,显著减少训练数据需求,提升泛化性能,并在参数反演、方程发现等逆问题中展现独特优势。此外,深度能量法(DEM)等变体进一步结合能量变分原理,为固体力学问题提供高效解决方案。3. 大模型赋能科学计算的新机遇以DeepSeek、ChatGPT为代表的大模型技术,正在颠覆传统科学编程模式。通过自然语言交互生成PINN代码,可加速复杂瞬态问题的求解流程。本课程结合大模型辅助编程,探索其在微分方程求解、代码调试及多任务优化中的应用,推动“AI for Science”的工程化落地。


     
     
课程目标        
1. 掌握PINN理论与传统数值方法的核心联系      
理解固体力学、流体力学、传热学中的典型偏微分方程(如Navier-Stokes方程、弹性本构方程)及其数学分类(椭圆/抛物/双曲型)。      
对比有限差分法、有限单元法与PINN的底层原理,揭示物理约束与数据驱动的协同机制。      
2. 构建PINN与深度能量法的实践能力      
从零实现一维谐振子、渗流、弹塑性力学等案例的PINN求解代码(基于PyTorch/DeepXDE/SciANN)。      
掌握能量驱动损失函数设计、自动微分等关键技术,复现中科院一区顶刊(如CMAME)中的创新方法。      
3. 探索多领域工业级应用场景      
流体力学:层流模拟、涡旋捕捉与Nature子刊级diffusion-reaction模拟。      
固体力学:超弹性材料大变形、弹塑性问题与能量法优化。      
反问题:材料参数辨识、隐藏物理规律发现。      
4. 精通开源工具链与大模型辅助编程      
熟练使用DeepXDE、SciANN等PINN专用库,配置复杂边界条件与多物理场耦合。利用DeepSeek、ChatGPT生成高鲁棒性PINN代码,解决瞬态偏微分方程问题。      
5. 培养跨学科研究与创新能力      
通过顶刊论文复现(如CMAME、Computers and Geotechnics)与代码对比,深化对物理编码、因果约束、混合变量方案等前沿方向的理解。为计算力学、工业仿真、AI辅助设计等领域的科研与工程实践提供方法论支持。本课程旨在打通物理建模、数值计算与深度学习的知识壁垒,培养兼具理论深度与工程能力的复合型人才,推动智能科学计算在工业4.0与数字孪生中的创新应用。      

     
     
授课老师      

讲师曾在香港和美国工作和学习,具有计算机和经典数值方法的双重教育背景,在中科院一区Top等计算力学顶刊CMAME以一作发表二十篇SCI论文,包括多篇PINN和传统数值主题的顶刊论文。 


     
     
课程内容(上下滑动查看)      
深度学习PINN+大模型编程辅助课表      

Day 1 什么是微分方程(固体、流体、传热)?什么是有限差分法和有限单元法?和机器学习有什么联系?            

1. 学会偏微分方程手动推导            

1.1. 固体力学的偏微分方程            

1.1.1. 平衡方程            

1.1.2. 线弹性本构            

1.1.3. 超弹性本构            

1.1.4. 塑性本构            

1.2. 流体力学的偏微分方程            

1.2.1. 无黏、无旋的势流方程            

1.2.2. 忽略黏性效应欧拉方程            

1.2.3不可压缩纳维-斯托克斯方程            

1.3. 传热学的偏微分方程            

1.3.1.稳态热传导            

1.3.2.瞬态热传导            

1.4. 一般形式的偏微分方程            

1.4.1. 椭圆偏微分方程            

1.4.2. 抛物偏微分方程            

1.4.3. 双曲偏微分方程            

2. 偏微分方程数值解            

2.1. 有限差分法原理            

2.2. 有限单元法原理            

2.3. 实战演练:使用COMSOL求解固体力学和渗流,保存数据            

2.4. 实战演练:使用Abaqus求解弹塑性固体力学,保存数据            

3. 使用Python写一个机器学习的程序            

3.1. 如何运行自己的第一个python程序            

3.2. 常用科学计算库Numpy和Scipy            

3.3. 机器学习的万能python库:scikit-learn            

3.4. 如何在Ubuntu系统上运行python程序            

Day 2 什么是深度学习?什么是物理数据双驱动神经网络PINN            

4. 数据驱动深度神经网络            

4.1 激活函数            

4.2 神经元            

4.3自动微分方法            

4.4损失函数的构建与正则化            

4.5最优化方法            

4.6. 实践:基于Pytorch建立深度神经网络模型并调优            

5. 深度学习进阶            

5.1 卷积神经网络CNN            

5.2 循环神经网络RNN            

5.2.1. 长短记忆神经网络LSTM            

5.2.2.门控循环单元网络GRU            

5.3. 图神经网络GNN            

5.4. Transformer (Attention is all you need! )            

6. PINN=数据+PDE方程,数据需求锐减!泛化性能提升!            

从零开始构建一维谐振子物理信息神经网络(Physics-Informed Neural Networks, PINN)为核心目标,系统讲解如何将物理定律与深度学习结合,实现微分方程的高效求解与物理系统建模。课程从一维谐振子的动力学方程出发,剖析PINN的核心思想:通过神经网络隐式编码控制方程、初始/边界条件等物理约束,将微分方程求解转化为损失函数优化的机器学习问题。学习者将逐步掌握谐振子问题的数学建模方法,利用Python和深度学习框架(如PyTorch)搭建神经网络架构,设计融合数据驱动项与物理残差项(如运动方程残差)的复合损失函数,并通过自动微分技术计算高阶导数,实现从随机初始化到物理规律自洽的模型训练。            

         

Day 3 PINN引用一万三论文详解+深度能量法+ PINNpythonDeep XDE讲解            

7. 物理信息神经网络:一个用于解决涉及非线性偏微分方程的正问题和逆问题的深度学习框架,一万三千次引用的论文讲解和复现            

PINN开山之作:Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations            

深度剖析PINN这一颠覆性框架如何通过深度融合物理定律与深度学习,开创性地解决复杂偏微分方程(PDE)的正反问题。作为计算科学领域的里程碑式工作,PINN首次系统性地提出将控制方程、初始/边界条件等物理先验知识嵌入神经网络架构,通过构造包含PDE残差项、数据拟合项及边界约束项的多目标损失函数,实现无需网格离散的端到端微分方程求解,其创新性地利用自动微分技术高效计算高阶导数,成功攻克了传统数值方法在高维、强非线性及参数反演问题中的瓶颈。本节课从数学机理与代码实践双视角展开:在理论层面,解析PINN如何通过神经网络的万能逼近特性构建连续时空解空间,探讨正问题(如NS方程、热传导预测)中物理残差最小化的泛化能力,以及反问题(如材料参数辨识、隐藏物理规律发现)中PDE系数可微学习机制;在实践层面,基于PyTorch/TensorFlow框架手把手实现PINN原型系统进行网络架构设计(激活函数选择、隐层深度优化)并通过Burgers方程激波捕捉、Navier-Stokes流场重构,对比PINN与高精度数值方法            

         

8. 通过机器学习求解计算力学偏微分方程的能量方法:概念、实现和应用            

深度能量/深度里兹法物理数据双驱动网络 Deep energy method/Deep Ritz method,DEM,DRM,中科院一区TOP数值计算顶刊CMAME:An energy approach to the solution of partial differential equations in computational mechanics via machine learning: Concepts, implementation and applications            

本小结基于能量原理的机器学习方法在计算力学偏微分方程求解中的创新应用展开,深入解析如何将经典力学中的能量变分原理与深度学习技术结合,构建物理驱动的高效求解框架。作为计算力学与人工智能交叉领域的代表性方法,该框架以能量泛函为核心,通过神经网络直接参数化力学场(如位移场或应力场),将传统基于网格的能量离散优化转化为无网格的损失函数优化问题。课程从理论层面剖析能量极小化原理与深度学习优化目标的数学同构性,例如,通过直接最小化总势能泛函,规避传统有限元法对复杂几何和材料非线性的离散困难;利用自动微分技术精确计算能量泛函梯度,在实现层面,本小节系统讲解能量驱动损失函数的设计逻辑,包括如何应变能主导的物理约束与边界条件,通过弹性力学静动态问题、超弹性材料大变形等典型案例,课程对比能量方法与纯数据驱动模型及传统数值方法的性能差异,验证其在预测精度、计算效率与外推能力上的显著提升。            

9. PINN库:DeepXDE讲解            

以深度掌握开源物理信息神经网络库DeepXDE为核心目标,系统讲解其在一维至多维偏微分方程求解中的高效应用。课程从环境配置与基础API入手,详解如何利用DeepXDE快速搭建PINN求解框架:包括定义计算域几何(Interval、Rectangle等)、设定PDE残差方程(通过Lambda函数或自定义偏微分算子)、编码初始/边界条件(Dirichlet、Neumann),以及配置神经网络架构(深度、激活函数、权重初始化策略)。            

         

Day 4 PINN在流体力学中的应用 + Nature子刊详解            

10. 中科院一区论文与代码复现:渗流            

中科院一区顶刊论文复现,A physics-informed data-driven approach for consolidation analysis            

从数据中识别控制方程并求解它们以获得时空响应对于许多实际问题来说是可取的,但也是极具挑战性的。数据驱动的建模显示出在复杂过程中影响知识发现的巨大潜力。为了证明可行性,本研究开发了一种基于物理信息的数据驱动方法,从测量数据中自动恢复渗流理论并获得相应的解。该过程结合了多种算法,包括稀疏回归和基于先验信息的神经网络(PiNet)、变换的弱形式偏微分方程(PDE)(以降低对噪声测量的敏感性)和蒙特卡洛dropout,以实现预测不确定性的测量。结果表明,使用所提出的方法可以准确地提取固结偏微分方程,该方法也被证明对噪声测量具有鲁棒性。PiNet求解的偏微分方程也被证明与实际结果非常吻合,从而突显了其逆分析的潜力。所提出的方法是通用的,提供了一种辅助方法来验证数据的启发式解释,或直接识别模式并获得解决方案,而不需要专家干预。            

         

11. 物理信息网络求解不可压缩层流的深度学习问题            

近年来,基于物理的深度学习引起了人们对解决计算物理问题的极大兴趣,其基本概念是嵌入物理定律来约束/通知神经网络,需要更少的数据来训练可靠的模型。这可以通过将物理方程的残差纳入损失函数来实现。通过最小化损失函数,网络可以近似解。本文提出了一种用于流体动力学的物理信息神经网络(PINN)的混合变量方案,并将其应用于模拟低雷诺数下的稳态和瞬态层流。参数研究表明,混合变量方案可以提高PINN的可训练性和求解精度。还将所提出的PINN方法预测的速度场和压力场与参考数值解进行了比较。仿真结果表明,所提出的PINN在高精度流体流动模拟方面具有巨大的潜力。            

         
         

https://github.com/Raocp/PINN-laminar-flow/blob/master/PINN_steady/SteadyFlowCylinder_mixed.py            

13. CMAME顶刊:考虑因果关系的流体力学PINN改进+学习用JAX实现PINN            

中科院一区TOP数值计算顶刊CMAME:Respecting causality for training physics-informed neural networks            

虽然物理信息神经网络(PINN)的普及率正在稳步上升,但到目前为止,PINN还没有成功地模拟其解表现出多尺度、混沌或湍流行为的动力系统。在这项工作中,将这一缺点归因于现有的PINN公式无法尊重物理系统进化所固有的时空因果结构这是一个基本的局限性,也是最终导致PINN模型收敛到错误解的关键误差来源。通过提出一种简单的PINNs损失函数的重新表述来解决这一病理问题,该函数可以明确地解释模型训练过程中的物理因果关系。证明,仅此简单的修改就足以显著提高精度,并为评估PINN模型的收敛性提供了一种实用的定量机制。我们提供了一系列现有PINN公式失败的基准的最新数值结果,包括混沌洛伦兹系统、混沌状态下的Kuramoto-Sivashinsky方程和Navier-Stokes方程。这是PINN首次成功模拟此类系统,为其应用于工业复杂性问题带来了新的机会。            

         

14. 有限差分法转化为神经网络,nature 子刊精讲            

Encoding physics to learn reaction–diffusion processes            

12.1. 物理编码时空学习            

12.2. PDE系统的正演分析            

12.3. PDE系统的演分析            

12.4. PeRCNN的结构            

12.5. ∏块的普适多项式逼近            

12.6. 方程发现与强泛化能力            

         

Day 5 PINN在固体力学中应用 + PINN的库SciANN讲解 大模型辅助编程            

15. PINN和深度能量法的对比            

中科院一区TOP数值计算顶刊Computers and Geotechnics: A Comprehensive Investigation of Physics-Informed Learning in Forward and Inverse Analysis of Elastic and Elastoplastic Footing            

10.1. Footing问题背景与Ritz方法(正问题)            

- 问题背景:Footing问题的物理意义与工程应用            

- 数学模型:Footing问题的数学描述与控制方程            

- Ritz方法:Ritz方法在正演建模中的应用与实现            

- PINN框架:论文中PINN实现的核心思路与框架解读            

         
         

10.2. Footing问题的逆问题求解            

- 损失函数构建:PINN中物理驱动损失函数的设计与实现            

- 自适应采样:自适应采样方法的原理与实现细节            

- 指数加速:逆问题求解中的指数加速技术            

- 代码复现与结果分析:代码实现与结果分析(数据集大小、高斯噪声的影响)            

         
         

16. JCP顶刊:混合能量法解决固体力学的应力集中问题            

计算力学顶刊Journal of Computational PhysicsThe mixed Deep Energy Method for resolving concentration features in finite strain hyperelasticity            

物理知情神经网络(PINN)的引入导致人们对深度神经网络作为固体力学界PDE的通用近似器的兴趣日益浓厚。最近,深能法(DEM)被提出。DEM基于能量最小化原理,与基于PDE残差的PINN相反。DEM的一个显著优点是,与基于强形式残差的公式相比,它需要对低阶导数进行近似。然而,DEM和经典PINN公式都难以解决应力场和位移场的精细特征,例如固体力学应用中的浓度特征。提出了对深能法(DEM)的扩展,以解决有限应变超弹性的这些特征。开发的称为混合深能法(mDEM)的框架引入了应力测量,作为最近引入的纯位移公式NN的额外输出。使用这种方法,可以更准确地近似Neumann边界条件,并提高通常导致高浓度的空间特征的精度。为了使所提出的方法更加通用,我们引入了一种基于Delaunay积分的数值积分方案,该方案使mDEM框架能够用于具有应力集中的计算域(即具有孔、凹口等的域)通常需要的随机训练点位置集。我们强调了所提出方法的优点,同时展示了经典PINN和DEM公式的缺点。该方法在涉及具有精细几何特征和集中载荷的域的具有挑战性的计算实验的正向计算方面提供了与有限元法(FEM)相当的结果,但还为解决超弹性背景下的逆问题和参数估计提供了独特的能力。            

         

17. PINN库:SciANN讲解与实操            

SciANN是一个高级人工神经网络API,使用Keras和TensorFlow后端用Python编写。它的开发重点是实现不同网络架构的快速实验,并强调科学计算、基于物理的深度学习和反演。能够用几行代码开始深度学习是做好研究的关键。            

         

18. DeepSeekChatGPTGrok生成PINN代码解偏微分方程            

16.1 DeepSeek大模型简介            

16.2. DeepSeek大模型生成PINN代码求解椭圆偏微分方程            

16.2.1. Prompt与任务分解            

16.2.2. 代码运行、可视化和Debug            

16.3. ChatGPT大模型生成PINN代码求解抛物偏微分方程            

16.3.1. Prompt与任务分解            

16.3.2. 代码运行、可视化和Debug            

16.4. DeepSeek、Chat GPT、Grok大模型生成PINN代码效果对比


     
         

课程四:深度学习固体力学          

课程背景        

学习前沿固体力学多物理场耦合问题,训练深度学习在固体力学中的应用。破解难题,引领科研新范式。

         
         

图表 1物理信息神经网络示意图 (Karniadakis et al., 2021)

固体力学及其多物理场问题主要研究固体类材料在外界力场或者其他物理场作用下发生的变形。相关理论和方法广泛应用于工程、材料科学、机械设计、建筑结构等领域。尽管偏微分方程 (Partial Differential Equations, PDEs) 数值离散化在模拟多物理场耦合中取得了巨大进展,但是网格生复杂、方程包含非线性行为、含噪声数据难以整合到逆问题等困难依然突出。作为另一种研究范式,机器学习 (Machine Learning),特别是深度学习 (Deep Learning),在固体力学领域展现出了巨大潜力。神经网络作为替代模型已经证实可以用于解决超弹性等问题。更进一步,由于有监督学习需要大量数据来使得模型“见多识广”,无监督学习的物理信息神经网络可以通过添加物理定律约束来缩小解空间范围,为正逆问题带来了的更多的可能性。总而言之,深度学习可为传统固体力学领域“老树开新花”。


       
       
课程目标        

以问题为导向,提升解决问题的能力培养批判性思维,提供从0到1的路径自我修正能力

1.培养从0到1建模能力:课程注重学科基础能力和科学建模方案。在线弹性基础上进一步扩展到多物理场耦合问题,学习多场耦合问题的新提法以及控制方程的构建。课程对实际现象进行简化处理,提取主要矛盾后建立控制方程,并通过无量纲化减少系统参数,精准揭示现象的演化规律和主导因素。从神经网络底层,着重学习神经网络基本原理。课程注重培养问题从0到1的建模过程,对比经典解法和深度学习解法,探究深度学习在固体力学和多物理场仿真中的前景和局限。

2.培养学科交叉能力:课程旨在培养既精通固体力学学基本提法与多物理场仿真基础方案,又熟练掌握机器学习算法与深度学习技术的复合型人才。学员将深入固体力学和多物理场仿真的时空动态规律,同时精通神经网络、优化算法等关键技术,能够创新性地设计并实施多物理场模型,优化预测精度与效率。

3.展现机器学习优势:通过对比分析,课程将深刻揭示机器学习在多物理场偏微分方程中相较于传统模型的显著优势,包括更强的解拟合能力、更高效的数据处理速度以及更广阔的适用场景。探讨其在应力应变估算、结构设计评估、参数反演策略优化等方面的最新研究进展与广阔应用前景。

4.实战案例分析:通过深入分析机器学习在稳态和瞬态的固体力学和多物理场仿真等预测中的具体应用案例,如质量阻尼弹簧的位移预测,超弹性材料本构模型,相场法断裂深度学习算法,学员可以直观感受其在实际问题解决中深度学习的强大威力与显著成效。这些案例将帮助学员构建理论与实践之间的桥梁,提升解决实际问题的能力。

5.追踪领域前沿动态:课程将引入国际上的知名期刊和团队的最新研究成果,详细介绍机器学习在固体力学和多物理场仿真领域的最新发展态势,包括新型算法的研发、大规模数据集的应用、以及跨学科合作的新模式。旨在激发学员的创新灵感,鼓励他们探索新技术、新方法,推动固体力学和多物理场仿真往更加智能化、自动化、精准化的方向发展。

6.拓宽国际视野,促进跨学科合作:拓宽学员的国际视野,促进他们与国际同行的交流与合作。同时,强调跨学科整合的重要性,鼓励学员在固体力学、机器学习、数据科学等领域之间寻找交叉点,开展创新性研究,为解决全球固体力学建模的挑战贡献智慧与力量。


       
       
授课老师        

主讲老师来自全球排名前20高校,本科毕业于国内顶尖985院校。擅长固体力学以及多物理场耦合问题,对深度学习有丰富经验,常用深度学习解决固体力学和多物理场仿真等问题。近年来发表子刊、SCI论文多篇。研究方向包括:力电耦合,力磁耦合,力化学耦合问题。深度学习方面研究方向包括神经网络 (NN)、循环神经网络 (RNN)、图像目标识别 (Image recognition)、物理信息神经网络 (Physics-informed neural networks)、深度Ritz法等。


       
       
课程内容(上下滑动查看)        
深度学习固体力学课表      


Day 1: 固体力学

Day 1-1

-张量基础

-拉格朗日描述与欧拉描述

-仿射变形假设,变形梯度和极分解

-应变张量:小变形应变,大变形应变

-速度与速度梯度 

-刚体旋转,客观性,客观应变率

-体积微元变化规则,面微元变化规则

-应力张量:柯西应力,PK1应力,PK2应力

         

图表 2 连续体变形示意图

         

图表 3 不同应力定义中使用的等效关系

Day 1-2

-雷诺输运方程

-主守恒方程:质量守恒方程,动量守恒方程,角动量守恒方程

-热力学第一定律

-本构关系:线弹性应变能,各向异性材料应变能

-超弹性问题的强形式与弱形式

         

工具方法

-Python基础以及查询方法

-ChatGPT和Github Copilot辅助工具

         

Day 2: 高等弹性力学与多场耦合

         

图表 4 多物理场耦合问题

Day 2-1

-热力学第二定律

-微状态与熵

-孤立系统、封闭系统、开系统热力学描述,自由能

-统计力学简介,高分子链熵弹性模型

-本构关系构建原则

-耗散系统处理流程

-超弹性问题与亚弹性问题,KKT条件

-小变形塑性问题,接触问题

-不可逆问题数值方法:罚函数法,增广拉格朗日乘子法

Day 2-2

-热力耦合问题

-热-化学-力学耦合问题

-相变,相图,相场法,相场法基础方程

-断裂力学简介,界面演化方程,相场法断裂问题

         

图表 5: 明锐边界与断裂相场法的扩散边界

Day 3: 量纲分析和神经网络Day 3-1

-有限元方法简介

-COMSOL Multiphysics基础教学

-COMSOL Multiphysics演示:

-热弹性,化学-热-力耦合,疲劳因子计算,接触压痕,粘接/脱粘,流固耦合

-COMSOL Multiphysics求解器设置精讲

-量纲分析介绍,量纲分析流程

-量纲分析举例:单摆的周期,液滴的振动,液体表面张力测量

         

图表 6:穿孔板断裂相场演化

         

图表 7 塑性变形中,von Mises应力分布

Day 3-2

-多层感知机和逻辑门

-神经网络结构:激活函数,损失函数

-向前传播与向后传播

-神经网络训练技巧:参数更新算法,Mini-batch,权重初值,早停,正则化,Dropout

Day 4: 循环神经网络与PINNDay 4-1

-时间序列与循环神经网络

-循环神经网络训练技巧

-长短时记忆网络(Long Short-Term Memory, LSTM)

-实操:神经网络模仿卷积算子

Day 4-2

-物理信息神经网络(Physics-Informed Neural Networks,PINN)基本概念

-PINN正问题

-PINN逆问题

-PINN方法原理

重点讲解PINN解偏微分方程的方法原理,讲解在解决具有复杂约束的工程问题时如何构建一个能够同时满足真实数据条件、初值条件、偏微分方程结构以及边界条件的多约束损失函数。

-PINN的正问题和逆问题的构建

-实操案例:PINN预测阻尼常微分方程的响应以及参数逆向算法

-实操案例:1D, 2D热传导方程的PINNs方法求解

Day 5:论文复现

课程目标:

-根据前期所学习的量纲分析和多物理场仿真问题,建立从0到1构建案例的操作流程

论文 (Flaschel et al., 2021)

Unsupervised discovery of interpretable hyperelastic constitutive laws.

         

图表 8具有物理意义的超弹性本构搜索的无监督算法示意图

论文 (Manav et al., 2024)

Phase-field modeling of fracture with physics-informed deep learning.

         

图表 9 对比神经网络和有限元分析获得的L形板的位移和相位场

论文 (Marino et al., 2023)

Automated identification of linear viscoelastic constitutive laws with EUCLID

         


图表 10 Comparison of true and identified response functions ordered as: shear loss, shear storage, bulk loss, bulk storage (row-wise from left to right) and with increasing number of clusters from 1 to 5 (column-wise from top to bottom) for the noise-free case.          


       
授课时间      

AI赋能复合材料智能设计与多尺度仿真授课时间:

2025.8.3-----2025.8.4全天授课(上午9:00-11:30下午13:30-17:00)

2025.8.6-----2025.8.7晚上授课(晚上19:00-22:00)

2025.8.9-----2025.8.10全天授课(上午9:00-11:30下午13:30-17:00)

腾讯会议 线上授课(共五天授课时间 提供全程回放视频)      


深度学习助力高性能材料疲劳分析与断裂应用研究授课时间:

2025.8.23-----2025.8.24全天授课(上午9:00-11:30下午13:30-17:00)

2025.8.28-----2025.8.29晚上授课(晚上19:00-22:00)

2025.8.30-----2025.8.31全天授课(上午9:00-11:30下午13:30-17:00)

腾讯会议 线上授课(共五天授课时间 提供全程回放视频)      


深度学习PINN与大模型编程授课时间:

2025.8.16-----2025.8.17全天授课(上午9:00-11:30下午13:30-17:00)

2025.8.21-----2025.8.22晚上授课(晚上19:00-22:00)

2025.8.23-----2025.8.24全天授课(上午9:00-11:30下午13:30-17:00)

腾讯会议 线上授课(共五天授课时间 提供全程回放视频)      


深度学习固体力学:

2025.7.08-----2025.7.10晚上授课(晚上19:00-22:00)

2025.7.12-----2025.7.13全天授课(上午9:00-11:30下午13:30-17:00)

2025.7.15-----2025.7.17晚上授课(晚上19:00-22:00)

腾讯会议 线上授课(共五天授课时间 提供全程回放视频)      



     
     
课程费用      

AI赋能复合材料智能设计与多尺度仿真/人工智能助力高性能材料疲劳与断裂/深度学习PINN+大模型辅助编程/深度学习固体力学

费用:每人每班¥4980元 (含报名费、培训费、资料费)

优惠政策

优惠一: 两门同报9080元

优惠二:三门同报12800元

优惠三:四门同报15800元

优惠四:课程报一赠一(往期视频任意选择一门赠送)

深度学习流体力学回放内容:深度学习流体力学      

深度学习岩土力学回放内容:深度学习再岩土工程中的应用与实践

优惠四:提前报名缴费学员+转发到朋友圈或者到学术交流群可享受每人300元优惠(仅限15名)

报名费用可开具正规报销发票及提供相关缴费证明、邀请函,可提前开具报销发票、文件用于报销


     
     
课程培训福利与授课方式      

课后学习完毕提供全程录像视频回放,针对与培训课程内容 进行长期答疑,微 信解疑群永不解散,参加本次课程的学员可免费再参加一次本单位后期组织的相同的 专题培训班(任意一期都可以)

                              培训答疑与互动

在培训中进行答疑和问题互动,以帮助学员深入理解课程内容和解决实际问题。

学员可以提出疑问,讲师将提供详细解答,特别是针对技术难点和复杂算法。

通过小组讨论和案例分享,学员将有机会交流经验,获得实时反馈,并进行实践操作演示。

展示学员的学习成果,并提供进一步的提升建议和资源支持,为学员在未来的学习和工作中提供帮助和指导。

授课方式:通过腾讯会议线上直播,从零基础开始讲解,电子PPT和教程+预习视频提前发送给学员,所有培训使用软件都会发送给学员,附赠安装教程和指导安装,培训采取开麦共享屏幕和微 信群解疑,学员和老师交流、学员与学员交流,培训完毕后老师针对与培训内容长期解疑,培训群不解散,往期培训学员对于培训质量和授课方式一致评价极高


     
      
近期学员好评      
     



     
     


来源:我的博士日记
SpaceClaimACTWorkbenchAbaqusComsol振动疲劳断裂复合材料非线性化学通用航空航天轨道交通汽车裂纹理论材料创新方法
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-07-06
最近编辑:4月前
此生君子意逍遥
博士 签名征集中
获赞 57粉丝 112文章 117课程 0
点赞
收藏
作者推荐

考虑背应力的GTN umat 子程序

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& RPL,DDSDDT,DRPLDE,DRPLDT,& STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,& NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,& CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)implicit none! Rate-independent Gurson-Tveergaad-Needleman porous plasticity model!INCLUDE'ABA_PARAM.INC'CHARACTER*80 CMNAMEREAL*8,INTENT(INOUT) :: STRESS(NTENS),STATEV(NSTATV),&DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),&STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),&PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)REAL*8,INTENT(INOUT) :: SSE,SPD,SCD,RPL,DRPLDT,DTIME,TEMP,DTEMP,& PNEWDT,CELENTinteger,intent(inout) :: NDI,NSHR,NOEL,NPT,LAYER,NTENS,NSTATV,& KSPT,KSTEP,KINC,NPROPSINTEGER :: I,J,MAXITERS,DISPREAL*8 :: tol,resREAL*8 :: f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syieldREAL*8 :: K,G,laREAL*8 :: q1,q2,q3,fuREAL*8 :: pi,AREAL*8 :: DEp,DEq,ep,fREAL*8 :: ft,dftdf,epn,fnnREAL*8 :: p,q,sflow,phi,cosht,sinht,dphidq,dphidpREAL*8,DIMENSION(6) :: STRIAL,X,EELAS,EPLAS,BETA,DEin,N,onevec,DSTRESS,BETAiterREAL*8,DIMENSION(6,6) :: CELASREAL*8 :: eratio,qiter,piter,phiter,dpderatio,dqderatio! Constantspi=3.14159265358979tol = 1e-5MAXITERS = 100!Load propertiescall LoadPROPS(f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syield,PROPS,NPROPS,DISP)!Bulk and shear moduliK=EE/(3.0*(1.0-nu))G=EE/(2.0*(1.0+nu))la=K-2.0/3.0*G!Tvergaard values for periodic void distributionsq1=1.5q2=1.0q3=q1**2!Effective porosity at failurefu=(q1-SQRT(q1**2-q3))/q3! Load state variablescall LoadSTATEV(f,ep,DEp,DEq,EELAS,EPLAS,X,STATEV,NSTATV,& NTENS,NDI,NSHR,DROT,DISP)IF (STATEV(NSTATV)==0) THEN ! Initialize porosity f = f0 STATEV(NSTATV)=1END IF!Effective linear elasticity tensor CELASCELAS(1:NTENS,1:NTENS)=0.0DO I=1,NDI DO J=1,NDI CELAS(I,J)=la END DO CELAS(I,I)=2.0*G+laEND DODO I=NDI+1,NTENS CELAS(I,I)=GEND DO! Trial stressSTRIAL=MATMUL(CELAS,EELAS+DSTRAN)! Relative stressBETA=STRIAL-X! Calculate pressure and von mises call pressure(BETA,p) call vonmises(BETA,q)! Flow stresssflow = syield+qinf*(1.0-exp(-b*ep))! Update effective porosity and its derivative call Updateft(f,ft,dftdf,fu,fc,ff)! Yield function call mcosh(1.5*q2*p/sflow,cosht) call msinh(1.5*q2*p/sflow,sinht)phi = (q/sflow)**2 + 2.0*ft*q1*cosht-(1.0+q3*ft**2)IF (DISP>=2) THEN print *, "Phi:", phi print *, "Pressure:", p, "Von Mises:", qEND IFIF (phi<0.0) THEN ! Elastic step ! Update state variables IF (DISP>=2) THEN print *, "EELAS(n):" print *, EELAS print *, "DSTRAN:" print *, DSTRAN print *, "STRESS(n):" print *, STRESS print *, "STRIAL:" print *, STRIAL END IF EELAS = EELAS+DSTRAN EPLAS = EPLAS X = X call UpdateSTATEV(f,ep,DEp,DEq,EELAS,EPLAS,X,STATEV,NSTATV,NTENS,DISP) ! Update STRESS STRESS=STRIAL ! Update DDSDDE DDSDDE = CELASELSE IF (DISP>=2) THEN print *, "***** Yielding *****" END IF fnn = f ! Plastic step ! 22.11.2013 Added estimation for ratio of elasticity DSTRESS = MATMUL(CELAS,DSTRAN) onevec=(/1.0,1.0,1.0,0.0,0.0,0.0/) N = 1.5*(BETA+p*onevec)/q dpderatio = -1.0/3.0*(DSTRESS(1)+DSTRESS(2)+DSTRESS(3)) dqderatio = DOT_PRODUCT(N(1:3),DSTRESS(1:3))+2*DOT_PRODUCT(N(4:6),DSTRESS(4:6)) res = 1000.0 ! Initial guess: ratio of elasticity = 0.1 eratio=0.1 DO I=1,MAXITERS BETAiter=STRESS+(1.0-eratio)*DSTRESS-X call pressure(BETAiter,piter) call vonmises(BETAiter,qiter) ! Yield function call mcosh(1.5*q2*piter/sflow,cosht) call msinh(1.5*q2*piter/sflow,sinht) phiter = (qiter/sflow)**2 + 2.0*ft*q1*cosht-(1.0+q3*ft**2) dphidq=2.0*qiter/sflow**2 dphidp=3.0*q1*q2*ft/sflow*sinht eratio = eratio + phiter/(dphidp*dpderatio + dphidq*dqderatio) res = ABS(phiter) IF (res<tol) EXIT END DO IF ((res>tol) .OR. (eratio<0) .OR. (eratio>1) .OR. (eratio/=eratio)) THEN IF (DISP>=2) THEN print *, "Failed elasticity ratio:", eratio END IF eratio = 0.0 END IF IF (DISP>=2) THEN print *, "Elasticity ratio:", eratio END IF res = 1000.0 ! 12.11.2013 Changed plastic starting-guess ! Close to ideal-plastic starting guess ! Least-squares method, N:N = 3/2 DEp = (1.0-eratio)*(DSTRAN(1)+DSTRAN(2)+DSTRAN(3)) DEq = 2.0/3.0*DOT_PRODUCT(N,(1.0-eratio)*DSTRAN-DEp/3.0*onevec) !DEq = 2.0/3.0*(DOT_PRODUCT(N(1:3),(1.0-eratio)*DSTRAN(1:3)-DEp/3.0)+2*DOT_PRODUCT(N(4:6),(1.0-eratio)*DSTRAN(4:6))) IF ((DEq==0) .and. (DEp==0)) THEN DEq = tol END IF ! 19.11.2013 Extended starting guess to f and ep as well epn = ep fnn = f ep = ep + (-p*DEp + q*DEq)/((1.0-f)*sflow) IF (p<0) THEN A=fn*exp(-0.5*(-en + ep)**2/sn**2)/(sqrt(2.0*pi)*sn) f = f + (1-f)*DEp + A*(ep-epn) ELSE f = f + (1-f)*DEp END IF ! Returns iteration variables: f, ep, DEp, DEq and residual res IF (DISP>=2) THEN print *, "EELAS(n):" print *, EELAS print *, "DSTRAN:" print *, DSTRAN print *, "STRESS(n):" print *, STRESS print *, "STRIAL:" print *, STRIAL print *, "X(n):" print *, X print *, "f(n), ep(n)" print *, fnn, epn print *, "DEp(n), DEq(n)" print *, DEp, DEq END IF ! Analytical tangent added 19.11.2013, Calculated inside PlasticIteration call PlasticIteration(f,ep,DEp,DEq,DDSDDE,STRIAL,X,epn,fnn,MAXITERS,TOL,PROPS,& NPROPS,NTENS,NDI,res,DISP) IF (res>tol) THEN PRINT *, "Plastic iteration failed at",TIME(1),"in element", NOEL, " in point", NPT PNEWDT=0.5 END IF IF (DISP>=2) THEN print *, "f(n+1), ep(n+1)" print *, f, ep print *, "DEp(n+1), DEq(n+1)" print *, DEp, DEq END IF DEin = EPLAS ! Update STRESS,X,DEin call UpdateStress(f,ep,DEp,DEq,STRIAL,X,PROPS,NPROPS,STRESS,DEin,fnn,NTENS,NDI,DISP) IF (DISP>=2) THEN print *, "STRESS(n+1):" print *, STRESS print *, "X(n+1):" print *, X END IF ! Update internal strains using return mapping algorithms EELAS = EELAS+DSTRAN-DEin EPLAS = EPLAS+DEin IF (DISP>=2) THEN print *, "EELAS(n+1):" print *, EELAS END IF ! Update state variables call UpdateSTATEV(f,ep,DEp,DEq,EELAS,EPLAS,X,STATEV,NSTATV,NTENS,DISP) ! Disabled 19.11.2013 for the Analytical consistent tangent to be enabled ! Calculate Numerical consistent tangent DDSDDE ! using Forward-difference method !DISP=5 !call NumericalConsistentTangent(STRESS,STATEV,DSTRAN,DDSDDE,NDI,& ! NSHR,NTENS,NSTATV,PROPS,NPROPS,DROT,DISP) IF (DISP>=2) THEN print *, "DDSDDE:" print *, DDSDDE END IF DISP=0END IFEND SUBROUTINEsubroutine MVector(S) implicit none real(8),dimension(6), intent(inout) :: S S(4:6)=S(4:6)*sqrt(2.0)end subroutinesubroutine MiVector(S) implicit none real(8),dimension(6), intent(inout) :: S S(4:6)=S(4:6)/sqrt(2.0)end subroutinesubroutine MMatrix(S) implicit none real(8),dimension(6,6), intent(inout) :: S S(4:6,1:3) = S(4:6,1:3)*sqrt(2.0) S(1:3,4:6) = S(1:3,4:6)*sqrt(2.0) S(4:6,4:6) = S(4:6,4:6)*2.0end subroutinesubroutine MiMatrix(S) implicit none real(8),dimension(6,6), intent(inout) :: S S(4:6,1:3) = S(4:6,1:3)/sqrt(2.0) S(1:3,4:6) = S(1:3,4:6)/sqrt(2.0) S(4:6,4:6) = S(4:6,4:6)/2.0end subroutinesubroutine UpdateStress(f,ep,DEp,DEq,STRIAL,X,PROPS,& NPROPS,STRESS,DEin,fnn,NTENS,NDI,DISP) implicit none real(8),intent(in) :: DEp,DEq,ep,f real(8),dimension(6),intent(in) :: STRIAL real(8),dimension(6),intent(inout) :: STRESS,X,DEin integer,intent(in) :: NPROPS real(8),dimension(NPROPS),intent(in) :: PROPS real(8),intent(in) :: fnn integer,intent(in) :: NTENS,NDI,DISP real(8),dimension(6) :: onevec,N,BETAplus real(8),dimension(6,6) :: CELAS integer :: I, J real(8) :: f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syield,K,G,la real(8) :: q1,q2,q3,fu real(8) :: T,s,Ds,Deinscl,q,p,qplus,pplus real(8) :: ft,dftdf,ftn,dftndf IF (DISP>=1) THEN print *, "***** Updating STRESS *****" END IF call LoadPROPS(f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syield,PROPS,NPROPS,DISP) !Bulk and shear moduli K=EE/(3.0*(1.0-nu)) G=EE/(2.0*(1.0+nu)) !la=K-2.0/3.0*G !Tvergaard values for periodic void distributions q1=1.5 q2=1.0 q3=q1**2 ! Elasticity tensor CELAS !CELAS(1:NTENS,1:NTENS)=0.0 !DO I=1,NDI ! DO J=1,NDI ! CELAS(I,J)=la ! END DO ! CELAS(I,I)=2.0*G+la !END DO !DO I=NDI+1,NTENS ! CELAS(I,I)=G !END DO !Effective porosity at failure fu=(q1-SQRT(q1**2-q3))/q3 call Updateft(fnn,ftn,dftndf,fu,fc,ff) call Updateft(f,ft,dftdf,fu,fc,ff) s=1.0-ft/fu Ds=(ftn-ft)/fu Deinscl=SQRT(2.0/9.0*DEp**2+DEq**2) T=1.0-Ds/s+s*ga*Deinscl BETAplus = STRIAL-X/T ! Calculate p and q call pressure(BETAplus,pplus) call vonmises(BETAplus,qplus) p = pplus+(K+2.0/9.0*C/T*s)*DEp q = qplus-(G+1.0/3.0*C/T*s)*3.0*DEq onevec = (/1.0,1.0,1.0,0.0,0.0,0.0/) !N=(BETAplus+pplus*onevec)/(2.0/3.0*q+(G+1.0/3.0*C/T*s)*2.0*DEq) ! Changed 12.11.2013 - more compact form N = 1.5*(BETAplus+pplus*onevec)/(q+(3.0*G+C/T*s)*DEq) DEin=1.0/3.0*DEp*onevec+DEq*N DO I=NDI+1,NTENS DEin(I) = DEin(I)*2.0 END DO X = (2.0/3.0*C*DEin*s+X)/T STRESS = STRIAL-K*DEp*onevec-2.0*G*DEq*N !STRESS = STRIAL-MATMUL(CELAS,DEin) IF (DISP>=1) THEN print *, "***** STRESS updated *****" END IFend subroutinesubroutine PlasticIteration(f,ep,DEp,DEq,DDSDDE,STRIAL,X,epn,fnn,MAXITERS,TOL,& PROPS,NPROPS,NTENS,NDI,res,DISP) implicit none real(8),intent(inout) :: DEp,DEq,ep,f real(8),dimension(6,6),intent(inout) :: DDSDDE real(8),dimension(6),intent(in) :: STRIAL,X integer,intent(in) :: NPROPS,MAXITERS,DISP,NTENS,NDI real(8),dimension(NPROPS),intent(in) :: PROPS real(8),intent(in) :: TOL,epn,fnn real(8),intent(inout) :: res real(8), dimension(4,4) :: ALIN real(8), dimension(4) :: BLIN, dXLIN real(8), dimension(6) :: BETAplus real(8) :: f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syield,K,G,la real(8) :: q1,q2,q3,fu,pi real(8) :: T,s,Ds,Deinscl,q,p,Depscl real(8) :: ft,dftdf,ftn,dftndf,Df real(8) :: sinht,cosht real(8) :: pplus,qplus real(8) :: sflow, dsflowdep, A, dAdep real(8) :: dTdDEp, dTdDEq, dTdep, dTdf real(8) :: dpdDEp, dpdDEq, dpdep,dpdf real(8) :: dqdDEp, dqdDEq, dqdep,dqdf real(8) :: mult1,mult2,mult3,mult4 real(8) :: dphidq, dphidq2, dphidp, dphidpdf, dphidp2 real(8) :: dphidqdsflow,dphidpdsflow,dphidsflow real(8) :: F1, dF1dDEp, dF1dDEq, dF1dep, dF1df real(8) :: F2, dF2dDEp, dF2dDEq, dF2dep, dF2df real(8) :: G1, dG1dDEp, dG1dDEq, dG1dep, dG1df real(8) :: G2, dG2dDEp, dG2dDEq, dG2dep, dG2df integer :: I,J real(8), dimension(2,2) :: Amat2,Bmat2,Cmat2 real(8), dimension(2) :: bvec2 real(8), dimension(6) :: N, onevec, dG1dstr, dG2dstr, dF1dstr, dF2dstr real(8), dimension(6) :: dpdstr, dqdstr, dH1dstr, dH2dstr real(8), dimension(6) :: dNdT real(8), dimension(6) :: B1,B2,Bp,Bq,Bep,Bf real(8), dimension(6,6) :: dNdstr,PP,tempmat6,QQ,tempmat7,CELAS real(8), dimension(3,3,3,3) :: Itensor, Ptensor,Qtensor,Ctensor,Dtensor,tensor1,tensor2 real(8) :: qe,dH1dDEp,dH1dDEq,dH2dDEp,dH2dDEq real(8) :: resn IF (DISP>=1) THEN print *, "***** Inside PlasticIteration *****" END IF call LoadPROPS(f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syield,PROPS,NPROPS,DISP) pi=3.14159265358979 !Bulk and shear moduli K=EE/(3.0*(1.0-nu)) G=EE/(2.0*(1.0+nu)) la=K-2.0/3.0*G !Effective linear elasticity tensor CELAS CELAS(1:NTENS,1:NTENS)=0.0 DO I=1,NDI DO J=1,NDI CELAS(I,J)=la END DO CELAS(I,I)=2.0*G+la END DO DO I=NDI+1,NTENS CELAS(I,I)=G END DO !Tvergaard values for periodic void distributions q1=1.5 q2=1.0 q3=q1**2 !Effective porosity at failure fu=(q1-SQRT(q1**2-q3))/q3 call Updateft(f,ftn,dftndf,fu,fc,ff) if (res<tol) THEN res=1.5*tol END IF IF (DISP>=1) THEN print *, "***** Starting PlasticIteration *****" END IF IF (DISP>=3) THEN print *, "f, ep" print *, f, ep print *, "DEp, DEq" print *, DEp, DEq print *, "STRIAL:" print *, STRIAL print *, "X(n):" print *, X END IF ! Plastic iterations do I=1,MAXITERS IF (DISP>=3) THEN print *, "***** Iteration", I, " *****" print *, "f, ep" print *, f, ep print *, "DEp, DEq" print *, DEp, DEq END IF ! 22.11.2013 - Added divergence control resn=res ! Update ft and dftdf call Updateft(f,ft,dftdf,fu,fc,ff) s=1.0-ft/fu Ds=(ftn-ft)/fu Deinscl=SQRT(2.0/9.0*DEp**2+DEq**2) !print *, "s:", s, "Ds:", Ds T=1.0-Ds/s+s*ga*Deinscl !print *, "Deinscl:", Deinscl, "dftdf:", dftdf BETAplus = STRIAL-X/T sflow=syield+qinf*(1.0-exp(-b*ep)) dsflowdep=b*qinf*exp(-b*ep) !print *, "Sflow:", sflow, "T:", T A=fn*exp(-0.5*(-en + ep)**2/sn**2)/(sqrt(2.0*pi)*sn) dAdep=-(ep-en)/sn**2*A !print *, "A:", A ! Calculate p and q call pressure(BETAplus,pplus) call vonmises(BETAplus,qplus) p = pplus+(K+2.0/9.0*C/T*s)*DEp q = qplus-(G+1.0/3.0*C/T*s)*3.0*DEq IF (DISP>=3) THEN print *, "Pressure:", p, "Von Mises:", q END IF call msinh(1.5*q2*p/sflow,sinht) call mcosh(1.5*q2*p/sflow,cosht) !print *, "sinh*:", sinht, "cosh*:", cosht ! Derivatives dTdDEp = 2.0*ga*s*DEp/(9.0*Deinscl) dTdDEq = ga*s*DEq/Deinscl dTdep = 0.0 dTdf = dftdf*(1.0/(fu-ft)-(ftn-ft)/(fu-ft)**2-ga*Deinscl/fu) ! Different in Metzger 2009 dpdDEp = K-(X(1)+X(2)+X(3))/(3.0*T**2)*dTdDEp-2.0*C*DEp*s/(9.0*T**2)*dTdDEp+2.0*C*s/(9.0*T) dpdDEq = -(X(1)+X(2)+X(3))/(3.0*T**2)*dTdDEq-2.0*C*DEp*s/(9.0*T**2)*dTdDEq dpdep = -(X(1)+X(2)+X(3))/(3.0*T**2)*dTdep-2.0*C*DEp*s/(9.0*T**2)*dTdep dpdf = -(X(1)+X(2)+X(3))/(3.0*T**2)*dTdf-2.0*C*DEp*s/(9.0*T**2)*dTdf-2.0*C*DEp/(9.0*T*fu)*dftdf !mult1 = STRIAL(1)**2+STRIAL(2)**2+STRIAL(3)**2+2.0*(STRIAL(4)**2+STRIAL(5)**2+STRIAL(6)**2) !mult2 = 2.0*(STRIAL(1)*X(1)+STRIAL(2)*X(2)+STRIAL(3)*X(3)+2.0*(STRIAL(4)*X(4)+STRIAL(5)*X(5)+STRIAL(6)*X(6))) !mult3 = X(1)**2+X(2)**2+X(3)**2+2.0*(X(4)**2+X(5)**2+X(6)**2) !mult4 = (1.5*mult2/T**2-3.0*mult3/T**3)/SQRT(6.0*(mult1-mult2/T+mult3/T**2)) mult4 = (0.25*(2*X(1)/T**2 - 2*X(2)/T**2)*(STRIAL(1) - STRIAL(2) - X(1)/T + X(2)/T)& + 0.25*(2*X(1)/T**2 - 2*X(3)/T**2)*(STRIAL(1) - STRIAL(3) - X(1)/T + X(3)/T)& + 0.25*(2*X(2)/T**2 - 2*X(3)/T**2)*(STRIAL(2) - STRIAL(3) - X(2)/T + X(3)/T)& + 3.0*X(4)*(STRIAL(4) - X(4)/T)/T**2 + 3.0*X(5)*(STRIAL(5) - X(5)/T)/T**2& + 3.0*X(6)*(STRIAL(6) - X(6)/T)/T**2)/sqrt(3.0*(STRIAL(4) - X(4)/T)**2& + 3.0*(STRIAL(5) - X(5)/T)**2 + 3.0*(STRIAL(6) - X(6)/T)**2& + 0.5*(STRIAL(1) - STRIAL(2) - X(1)/T + X(2)/T)**2& + 0.5*(STRIAL(1) - STRIAL(3) - X(1)/T + X(3)/T)**2& + 0.5*(STRIAL(2) - STRIAL(3) - X(2)/T + X(3)/T)**2) dqdDEp = mult4*dTdDEp& +C*s*DEq/T**2*dTdDEp dqdDEq = mult4*dTdDEq& +C*s*DEq/T**2*dTdDEq-3.0*G-C*s/T dqdep = mult4*dTdep& +C*s*DEq/T**2*dTdep dqdf = mult4*dTdf& +C*DEq*(s/T**2*dTdf+dftdf/(T*fu)) ! Equation 1 dphidq=2.0*q/sflow**2 dphidq2=2.0/sflow**2 dphidp=3.0*q1*q2*ft/sflow*sinht dphidpdf=3.0*q1*q2*dftdf/sflow*sinht dphidp2=4.5*q1*q2**2*ft/sflow**2*cosht dphidqdsflow = -4.0*q/sflow**3 dphidpdsflow = -4.5*ft*p*q1*q2**2*cosht/sflow**3& -3.0*ft*q1*q2*sinht/sflow**2 F1 = DEp*dphidq+DEq*dphidp dF1dDEp = dphidq+DEp*dphidq2*dqdDEp+DEq*dphidp2*dpdDEp dF1dDEq = DEp*dphidq2*dqdDEq+dphidp+DEq*dphidp2*dpdDEq dF1dep = DEp*(dphidq2*dqdep+dphidqdsflow*dsflowdep)& + DEq*(dphidp2*dpdep+dphidpdsflow*dsflowdep) dF1df = DEp*(dphidq2*dqdf) + DEq*(dphidp2*dpdf+dphidpdf) ! Equation 2 F2 = (q/sflow)**2+2.0*ft*q1*cosht-(1.0+q3*ft**2) dphidsflow = -3.0*ft*p*q1*q2*sinht/sflow**2 - 2.0*q**2/sflow**3 dF2dDEp = dphidq*dqdDEp + dphidp*dpdDEp dF2dDEq = dphidq*dqdDEq + dphidp*dpdDEq dF2dep = dphidq*dqdep + dphidp*dpdep + dphidsflow*dsflowdep dF2df = dphidq*dqdf + 2.0*dftdf*q1*cosht + dphidp*dpdf-2.0*q3*dftdf*ft ! Equation 3 Depscl = (-p*DEp+q*DEq)/((1.0-f)*sflow) G1 = (ep-epn)-Depscl dG1dDEp = -(-dpdDEp*DEp-p+dqdDEp*DEq)/((1.0-f)*sflow) dG1dDEq = -(-dpdDEq*DEp+dqdDEq*DEq+q)/((1.0-f)*sflow) dG1dep = 1.0 - (-dpdep*DEp+dqdep*DEq)/((1.0-f)*sflow) + (-p*DEp+q*DEq)/((1.0-f)*sflow**2)*dsflowdep dG1df = -(-dpdf*DEp+dqdf*DEq)/((1.0-f)*sflow) - (-p*DEp+q*DEq)/((1.0-f)**2*sflow) ! Equation 4 IF (p<0) THEN ! Nucleation term is only active under hydrostatic tension p<0 ! Condition added 11.11.2013 Df = (1.0-f)*DEp+A*Depscl !Df = (1.0-f)*DEp+A*(ep-epn) G2 = (f-fnn)-Df !dG2dDEp = f-1.0 !dG2dDEq = 0.0 !dG2dep = -dAdep*(ep-epn)-A !dG2df = 1.0+DEp dG2dDEp = -(1.0-f)+A*dG1dDEp dG2dDEq = A*dG1dDEq dG2dep = -dAdep*Depscl + A*(dG1dep-1.0) dG2df = 1.0 + DEp + A*dG1df ELSE ! Only growth is active under hydrostatic compression p>0 ! Condition added 11.11.2013 Df = (1.0-f)*DEp G2 = (f-fnn)-Df dG2dDEp = f-1.0 dG2dDEq = 0.0 dG2dep = 0.0 dG2df = 1.0+DEp END IF !Linearized system for Newton's iterations ALIN(1,1)=dF1dDEp ALIN(2,1)=dF1dDEq ALIN(3,1)=dF1dep ALIN(4,1)=dF1df ALIN(1,2)=dF2dDEp ALIN(2,2)=dF2dDEq ALIN(3,2)=dF2dep ALIN(4,2)=dF2df ALIN(1,3)=dG1dDEp ALIN(2,3)=dG1dDEq ALIN(3,3)=dG1dep ALIN(4,3)=dG1df ALIN(1,4)=dG2dDEp ALIN(2,4)=dG2dDEq ALIN(3,4)=dG2dep ALIN(4,4)=dG2df BLIN=-1.0*(/F1,F2,G1,G2/) !Convergence check res=0.0 do J=1,4 if (abs(BLIN(J))>res) then res=abs(BLIN(J)) end if end do IF (DISP>=3) THEN print *, "Residual:", res END IF ! Solve linear system IF (DISP>=3) THEN print *, "ALIN" print *, ALIN print *, "BLIN" print *, BLIN END IF call LinearSolve(TRANSPOSE(ALIN),4,BLIN,dXLIN) IF (DISP>=3) THEN print *, "dXLIN" print *, dXLIN END IF !Update variables DEp=DEp+dXLIN(1) DEq=DEq+dXLIN(2) ep=ep+dXLIN(3) f=f+dXLIN(4) ! 22.11.2013 - Divergence control IF ((res<=TOL) .OR. (res>resn)) EXIT end do ! 18.11.2013 Added Analytical Consistent Tangent BETAplus = STRIAL-X/T ! Calculate p and q call pressure(BETAplus,pplus) call vonmises(BETAplus,qplus) p = pplus+(K+2.0/9.0*C/T*s)*DEp q = qplus-(G+1.0/3.0*C/T*s)*3.0*DEq qe = q + 3.0*G*DEq onevec = (/1.0,1.0,1.0,0.0,0.0,0.0/) tempmat6(1:6,1:6) = 0.0 tempmat7(1:6,1:6) = 0.0 N = 1.5*(BETAplus+pplus*onevec)/qplus ! Determine derivatives d/dstr dpdstr = -1.0/3.0*onevec dqdstr = N dF1dstr = dphidp2*dpdstr*DEq + dphidq2*dqdstr*DEp dF2dstr = dphidp*dpdstr + dphidq*dqdstr dG1dstr = -(-dpdstr*DEp+dqdstr*DEq)/((1.0-f)*sflow) IF (p<0) THEN dG2dstr = A*dG1dstr ELSE dG2dstr = 0.0*onevec END IF ! Total differentiation of equations 3 and 4 ! Solve variations varep, varf using static condensation from 2x2 system Amat2 = ALIN(3:4,3:4) Bmat2 = -1.0*ALIN(1:2,3:4) call MatrixInverse2(Amat2, Cmat2) Amat2 = MATMUL(Cmat2,Bmat2) dH1dDEp = Amat2(1,1) dH1dDEq = Amat2(2,1) dH1dstr = -(Cmat2(1,1)*dG1dstr+Cmat2(2,1)*dG2dstr) dH2dDEp = Amat2(1,2) dH2dDEq = Amat2(2,2) dH2dstr = -(Cmat2(1,2)*dG1dstr+Cmat2(2,2)*dG2dstr) ! Variations of internal variables are expressed using varDEp, varDEq and varstr: ! varep = dH1dDEp*varDEp + dH1dDEq*varDEq + DOT_PRODUCT(dH1dstr,varstr) ! varf = dH2dDEp*varDEp + dH2dDEq*varDEq + DOT_PRODUCT(dH2dstr,varstr) ! Total differentiation of equations 1 and 2 with respect to DEp, DEq, ep, f, STRIAL ! Expressing varep and varf using the above relations => varDEp, varDEq, varstr Amat2 = ALIN(1:2,1:2) Amat2(1,1) = Amat2(1,1) + dF1dep*dH1dDEp + dF1df*dH2dDEp Amat2(2,1) = Amat2(2,1) + dF1dep*dH1dDEq + dF1df*dH2dDEq Amat2(1,2) = Amat2(1,2) + dF2dep*dH1dDEp + dF2df*dH2dDEp Amat2(2,2) = Amat2(2,2) + dF2dep*dH1dDEq + dF2df*dH2dDEq B1 = -1.0*(dF1dstr + dF1dep*dH1dstr + dF1df*dH2dstr) B2 = -1.0*(dF2dstr + dF2dep*dH1dstr + dF2df*dH2dstr) call MatrixInverse2(Amat2,Cmat2) ! Variation mapping operators ! dDEp = Bp:dSTRIAL ! dDEq = Bq:dSTRIAL ! dep = Bep:dSTRIAL ! df = Bf:dSTRIAL Bp = Cmat2(1,1)*B1 + Cmat2(2,1)*B2 Bq = Cmat2(1,2)*B1 + Cmat2(2,2)*B2 Bep = dH1dDEp*Bp + dH1dDEq*Bq + dH1dstr Bf = dH2dDEp*Bp + dH2dDEq*Bq + dH2dstr dNdT = -1.5*X/(qplus*T**2)-N/qplus*mult4 !call OUTER_PRODUCT(N,N,tempmat6,6) !PP(1:6,1:6) = 0.0 !PP(1:3,1) = (/2.0/3.0, -1.0/3.0, -1.0/3.0/) !PP(1:3,2) = (/-1.0/3.0, 2.0/3.0, -1.0/3.0/) !PP(1:3,3) = (/-1.0/3.0, -1.0/3.0, 2.0/3.0/) !PP(4,4) = 1.0 !PP(5,5) = 1.0 !PP(6,6) = 1.0 !dNdstr = (1.5*PP-tempmat6)/qe !call OUTER_PRODUCT(onevec,Bp,tempmat6,6) !QQ = 1.0/3.0*tempmat6 !call OUTER_PRODUCT(N,Bq,tempmat6,6) !QQ = QQ + tempmat6 !! Build Dn/Dstr !! dNdT*dTdDEp*varDEp !call OUTER_PRODUCT(dNdT,Bp,tempmat7,6) !tempmat6 = dTdDEp*tempmat7 !! dNdT*dTdDEq*varDEq !call OUTER_PRODUCT(dNdT,Bq,tempmat7,6) !tempmat6 = tempmat6 + dTdDEq*tempmat7 !! dNdT*dTdep*varep !call OUTER_PRODUCT(dNdT,Bep,tempmat7,6) !tempmat6 = tempmat6 + dTdep*tempmat7 !! dNdT*dTdf*varf !call OUTER_PRODUCT(dNdT,Bf,tempmat7,6) !tempmat6 = tempmat6 + dTdf*tempmat7 !! Add dNdstr !tempmat6 = tempmat6 + dNdstr !! Combine to Q matrix !QQ = QQ + tempmat6*DEq !DDSDDE = CELAS - MATMUL(TRANSPOSE(CELAS),MATMUL(QQ,CELAS)) ! 20.11.2013 Added tensor calculus here ! Fourth order identity tensor "Itensor" call IdentityTensor(Itensor) ! Projection tensor "Ptensor" call TensorDyad(onevec,onevec,tensor1) Ptensor = Itensor-1.0/3.0*tensor1 ! Elasticity tensor "Ctensor" CTensor = K*tensor1+2.0*G*Ptensor ! Calculate variation of N ! dN/dstr call TensorDyad(N,N,tensor1) tensor2 = (1.5*Ptensor-tensor1)/qe call TensorDyad(dNdT,dTdDEp*Bp+dTdDEq*Bq+dTdep*Bep+dTdf*Bf,tensor1) ! variation of var(N)/var(str) tensor2 = tensor2 + tensor1 ! Build Q tensor Qtensor = tensor2*DEq call TensorDyad(N,Bq,tensor1) Qtensor = Qtensor + tensor1 call TensorDyad(onevec,Bp,tensor1) Qtensor = Qtensor + 1.0/3.0*tensor1 ! Calculate C_ijst Q_stpq C_pqkl call TensorQuad(Ctensor,Qtensor,Ctensor,tensor1) DTensor = CTensor - tensor1 ! Return 4th order tensor to 6x6 matrix call reduce4tensor(DTensor, DDSDDE) IF (DISP>=1) THEN print *, '***** Finished PlasticIteration *****' END IFend subroutinesubroutine LoadPROPS(f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syield,PROPS,NPROPS,DISP) implicit none real(8),intent(inout) :: f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syield integer, intent(in) :: NPROPS,DISP real(8),dimension(NPROPS), intent(in) :: PROPS IF (DISP>=1) THEN print *, '***** Loading PROPS *****' END IF !Properties for porosity f0=PROPS(1)!f0,initial porosity[GJS-700:0.02,GJV-450:0.05,GJL-250:0.125] fc=PROPS(2)!fc,critical porosity[0.0325,0.08,1.0] ff=PROPS(3)!ff,failure porosity[0.25,0.1,1.0] fn=PROPS(4)!fn,volume fraction of graphite inclusions[0.04,0.1,0.25] sn=PROPS(5)!sn,standard deviation of graphite inclusions[0.001,0.001,-] en=PROPS(6)!en,mean value of graphite inclusions[0.0,0.0,-] qinf=PROPS(7)!Isotropic hardening amplitude b=PROPS(8)!Isotropic hardening exponent sflow=syield+qinf*(1-EXP(-b*ep)) C=PROPS(9)!Cyclic hardening parameter ga=PROPS(10)!Cyclic saturation parameter. In von Mises plasticity C/ga=qinf,ga=b EE=PROPS(11)!Young's modulus nu=PROPS(12)!Poisson's ratio syield=PROPS(13)!Yield stress IF (DISP>=1) THEN print *, '***** PROPS Loaded *****' END IFend subroutinesubroutine LoadSTATEV(f,ep,DEp,DEq,EELAS,EPLAS,X,STATEV,NSTATV,NTENS,NDI,NSHR,DROT,DISP) implicit none real(8),intent(inout) :: f,ep,DEp,DEq integer,intent(in) :: NSTATV,NTENS,NDI,NSHR,DISP real(8),dimension(6),intent(inout) :: EELAS,EPLAS,X real(8),dimension(NSTATV),intent(in) :: STATEV real(8),dimension(3,3),intent(in) :: DROT IF (DISP>=1) THEN print *, '***** Loading STATEV *****' END IF !STATEV(1)=f:Porosity f = STATEV(1) !STATEV(2)=ep:equivalent plastic strain ep=STATEV(2) !STATEV(3)=DEp: Hydrostatic inelastic strain increment DEp=STATEV(3) !STATEV(4)=DEp: Deviatoric inelastic strain increment DEq=STATEV(4) !ROTATE TENSORS !STATEV(5)...STATEV(10)=EELAS CALL ROTSIG(STATEV(5),DROT,EELAS,2,NDI,NSHR) !STATEV(11)...STATEV(16)=EPLAS CALL ROTSIG(STATEV(5+NTENS),DROT,EPLAS,2,NDI,NSHR) !STATEV(17)...STATEV(22)=X CALL ROTSIG(STATEV(5+2*NTENS),DROT,X,1,NDI,NSHR) IF (DISP>=1) THEN print *, '***** STATEV Loaded *****' END IFend subroutinesubroutine UpdateSTATEV(f,ep,DEp,DEq,EELAS,EPLAS,X,STATEV,NSTATV,NTENS,DISP) implicit none real(8),intent(in) :: f,ep,DEp,DEq integer,intent(in) :: NSTATV,NTENS,DISP real(8),dimension(6),intent(in) :: EELAS,EPLAS,X real(8),dimension(NSTATV),intent(inout) :: STATEV integer :: I IF (DISP>=1) THEN print *, '***** Updating STATEV *****' END IF STATEV(1)=f STATEV(2)=ep STATEV(3)=DEp STATEV(4)=DEq DO I=1,NTENS STATEV(4+I)=EELAS(I) STATEV(4+I+NTENS)=EPLAS(I) STATEV(4+I+2*NTENS)=X(I) END DO IF (DISP>=1) THEN print *, '***** STATEV Updated *****' END IFend subroutinesubroutine Updateft(f,ft,dftdf,fu,fc,ff) implicit none real(8),intent(in) :: f,fu,fc,ff real(8),intent(inout) :: ft,dftdf real(8) :: df,k,a,b,c k = (fu-fc)/(ff-fc) df = 0.1*fc if (f<=(fc-df)) then ft = f dftdf = 1.0 elseif ((f>(fc-df)) .and. (f<=(fc+df))) then a = (k-1.0)/(4.0*df) b = fc+(1.0+k)/(1.0-k)*df c = fc+k/(1-k)*df ft = a*(f-b)**2+c dftdf = 2*a*(f-b) else ft = fc + k*(f-fc) dftdf = k end ifend subroutinesubroutine IdentityTensor(II) implicit none real(8), dimension(3,3,3,3), intent(inout) :: II integer :: i,j,k,l DO i=1,3 DO j=1,3 DO k=1,3 DO l=1,3 II(i,j,k,l) = 0.5*(Delta(i,k)*Delta(j,l) + Delta(i,l)*Delta(j,k)) END DO END DO END DO END DOCONTAINS REAL function Delta(i,j) implicit none integer, intent(in) :: i,j IF (i==j) THEN Delta = 1.0 ELSE Delta = 0.0 END IF END FUNCTION Deltaend subroutinesubroutine TensorDyad(a,b,AAt) implicit none real(8), dimension(6), intent(in) :: a,b real(8), dimension(3,3,3,3), intent(inout) :: AAt real(8), dimension(3,3) :: at,bt integer :: i,j,k,l ! Convert vectors to tensor call vector2tensor(a,at) call vector2tensor(b,bt) ! Calculate A_ijkl = a_ij b_kl DO i=1,3 DO j=1,3 DO k=1,3 DO l=1,3 AAt(i,j,k,l) = at(i,j)*bt(k,l) END DO END DO END DO END DOend subroutinesubroutine TensorProd(A,B,RES) implicit none real(8), dimension(3,3,3,3), intent(inout) :: A,B,RES integer :: i,j,k,l,s,t ! Calculates C_ijkl = A_ijst B_stkl RES(1:3,1:3,1:3,1:3) = 0.0 DO i=1,3 DO j=1,3 DO k=1,3 DO l=1,3 DO s=1,3 DO t=1,3 RES(i,j,k,l) = RES(i,j,k,l) + A(i,j,s,t)*B(s,t,k,l) END DO END DO END DO END DO END DO END DOend subroutinesubroutine TensorQuad(A,B,C,RES) implicit none real(8), dimension(3,3,3,3), intent(inout) :: A,B,C,RES real(8), dimension(3,3,3,3) :: temp ! Calculates D_ijkl = A_ijst B_stpq C_pqkl call TensorProd(B,C,temp) call TensorProd(A,temp,RES)end subroutinesubroutine vector2tensor(a,AA) implicit none real(8), dimension(6), intent(in) :: a real(8), dimension(3,3), intent(inout) :: AA AA(1,1) = a(1) AA(2,2) = a(2) AA(3,3) = a(3) AA(3,2) = a(4) AA(2,3) = a(4) AA(1,3) = a(5) AA(3,1) = a(5) AA(1,2) = a(6) AA(2,1) = a(6)end subroutinesubroutine reduce4tensor(AAt, AA) implicit none real(8), dimension(3,3,3,3), intent(in) :: AAt real(8), dimension(6,6), intent(inout) :: AA integer, dimension(2,6) :: idx integer :: row, col,i,j,k,l ! Mapping for the indices idx(1,:) = (/1,2,3,2,1,1/) idx(2,:) = (/1,2,3,3,3,2/) DO row=1,6 i = idx(1,row) j = idx(2,row) DO col=1,6 k = idx(1,col) l = idx(2,col) AA(row,col) = AAt(i,j,k,l) END DO END DOend subroutinesubroutine MatrixInverse2(A,Ainv) implicit none real(8), dimension(2,2), intent(in) :: A real(8), dimension(2,2), intent(inout) :: Ainv real(8) :: detA detA = A(1,1)*A(2,2)-A(1,2)*A(2,1) Ainv(1,1) = A(2,2)/detA Ainv(2,1) = -A(2,1)/detA Ainv(1,2) = -A(1,2)/detA Ainv(2,2) = A(1,1)/detAend subroutinesubroutine OUTER_PRODUCT(a,b,C,n) implicit none real(8), intent(in) :: a(n),b(n) integer, intent(in) :: n real(8), intent(inout) :: C(n,n) integer :: i,j do i=1,n do j=1,n C(i,j) = a(j)*b(i) end do end doend subroutinesubroutine LinearSolve(A,n,b,x) implicit none real(8),intent(in) :: A(n,n),b(n) integer,intent(in) :: n real(8),intent(inout) :: x(n) real(8) :: c(1,n) integer :: ipiv(n),info,nrhs,lda,ldb nrhs=1 lda=n ldb=n c(1,1:n)=b(1:n) call dgesv(n,nrhs,A,lda,ipiv,c,ldb,info) x(1:n)=c(1,1:n)end subroutinesubroutine pressure(S,p) implicit none real(8), dimension(6), intent(in) :: S real(8), intent(inout) :: p p = -(S(1)+S(2)+S(3))/3.0end subroutinesubroutine vonmises(S,q) implicit none real(8), dimension(6), intent(in) :: S real(8), intent(inout) :: q !real(8) :: p !real(8),dimension(6)::onevec q = sqrt(0.5*((S(1)-S(2))**2+(S(2)-S(3))**2+(S(1)-S(3))**2& +6.0*(S(4)**2+S(5)**2+S(6)**2))) !call pressure(S,p) !onevec=(/1.0,1.0,1.0,0.0,0.0,0.0/) !q = sqrt(1.5*DOT_PRODUCT(S+p*onevec,S+p*onevec))end subroutinesubroutine mcosh(x,c) implicit none real(8),intent(in) :: x real(8),intent(inout) :: c real(8) :: xc xc = 30.0 if (abs(x)<=xc) then c = cosh(x) else c = cosh(xc)+sinh(xc)*(abs(x)-xc)+0.5*cosh(xc)*(abs(x)-xc)**2 end ifend subroutinesubroutine msinh(x,s) implicit none real(8), intent(in) :: x real(8), intent(inout) :: s real(8) :: xc xc = 30.0 if (abs(x)<=xc) then s = sinh(x) else s = (cosh(xc)+sinh(xc)*(abs(x)-xc)+0.5*cosh(xc)*(abs(x)-xc)**2)*x/abs(x) end ifend subroutinesubroutine NumericalConsistentTangent(STRESS,STATEV,DSTRAN,DDSDDE,NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,DROT,DISP) implicit none REAL*8,INTENT(IN) :: STRESS(NTENS),STATEV(NSTATV),& DSTRAN(NTENS),PROPS(NPROPS),DROT(3,3) REAL*8,INTENT(INOUT) :: DDSDDE(NTENS,NTENS) integer,intent(in) :: NDI,NSHR,NTENS,NSTATV,NPROPS,DISP INTEGER :: I,J,MAXITERS REAL*8 :: tol,res REAL*8 :: f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syield REAL*8 :: K,G,la REAL*8 :: q1,q2,q3,fu REAL*8 :: pi,cosht,sinht,dphidq,dphidp REAL*8 :: DEp,DEq,ep,f,fnn REAL*8 :: ft, dftdf,ftn REAL*8 :: p,q,sflow,phi,qplus,pplus REAL*8 :: eps,eta,typx REAL*8,DIMENSION(6) :: STRIAL,X,EELAS,EPLAS,BETA,DEin,DSTRAIN,STRESSI,BETAplus,STRAIN REAL*8,DIMENSION(6) :: N,onevec REAL*8,DIMENSION(6,6) :: CELAS REAL*8,DIMENSION(3,3) :: IdentityMatrix ! Constants pi=3.14159265358979 tol = 1e-9 MAXITERS = 20 IF (DISP>=1) THEN print *, '***** Inside NumericalConsistentTangent *****' END IF ! Metzger values !typx=1.0e-9 typx=1.0 eta=1.0e-5 IdentityMatrix(1:3,1) = (/1.0, 0.0, 0.0/) IdentityMatrix(1:3,2) = (/0.0, 1.0, 0.0/) IdentityMatrix(1:3,3) = (/0.0, 0.0, 1.0/) !Load properties call LoadPROPS(f0,fc,ff,fn,sn,en,qinf,b,C,ga,EE,nu,syield,PROPS,NPROPS,DISP) !Bulk and shear moduli K=EE/(3.0*(1.0-nu)) G=EE/(2.0*(1.0+nu)) la=K-2.0/3.0*G !Tvergaard values for periodic void distributions q1=1.5 q2=1.0 q3=q1**2 !Effective porosity at failure fu=(q1-SQRT(q1**2-q3))/q3 ! Load state variables call LoadSTATEV(f,ep,DEp,DEq,EELAS,EPLAS,X,STATEV,NSTATV,& NTENS,NDI,NSHR,IdentityMatrix,DISP) fnn = f !Effective linear elasticity tensor CELAS CELAS(1:NTENS,1:NTENS)=0.0 DO I=1,NDI DO J=1,NDI CELAS(I,J)=la END DO CELAS(I,I)=2.0*G+la END DO DO I=NDI+1,NTENS CELAS(I,I)=G END DO !DEp = DEp/10.0 !DEq = DEq/10.0 DO I=1,NTENS IF (ABS(EELAS(I)+EPLAS(I))>typx) THEN eps=eta*ABS(EELAS(I)+EPLAS(I))*SIGN(1.0,DSTRAN(I)) ELSE eps=eta*typx*SIGN(1.0,DSTRAN(I)) END IF ! Metzger values for perturbation !IF (ABS(DSTRAN(I))>typx) THEN ! eps = sqrt(eta)*DSTRAN(I) !ELSE ! eps = sqrt(eta)*typx*SIGN(1.0,DSTRAN(I)) !END IF DSTRAIN(1:NTENS)=0.0 DSTRAIN(I)=eps ! Trial stress STRIAL=MATMUL(CELAS,EELAS+DSTRAIN) IF (DISP>=3) THEN print *, "DSTRAIN" print *, DSTRAIN print *, "STRESS(n):" print *, STRESS print *, "STRIAL:" print *, STRIAL print *, "X(n):" print *, X END IF ! Relative stress BETA=STRIAL-X call pressure(BETA,p) call vonmises(BETA,q) IF (DISP>=3) THEN print *, "Pressure:", p, "Von Mises:", q END IF ! Flow stress sflow = syield+qinf*(1.0-exp(-b*ep)) ! Update effective porosity and its derivative call Updateft(f,ft,dftdf,fu,fc,ff) ! Yield function call mcosh(1.5*q2*p/sflow,cosht) call msinh(1.5*q2*p/sflow,sinht) phi = (q/sflow)**2 + 2.0*ft*q1*cosht-(1.0+q3*ft**2) IF (phi<0.0) THEN ! Elastic step ! Update DDSDDE DDSDDE(1:NTENS,I) = CELAS(1:NTENS,I) IF (DISP>=2) THEN PRINT *, "***** Elastic step *****" END IF ELSE ! Plastic step res = 1.0 ! 12.11.2013 Changed plastic starting-guess ! Close to ideal-plastic starting guess ! Least-squares method, N:N = 3/2 DEp = DSTRAIN(1)+DSTRAIN(2)+DSTRAIN(3) !IF (ABS(DEp)<TOL) THEN ! DEp = tol*sign(1.0,DEp) !END IF onevec=(/1.0,1.0,1.0,0.0,0.0,0.0/) N = 1.5*(BETA+p*onevec)/q DEq = 2.0/3.0*DOT_PRODUCT(N,DSTRAIN-DEp/3.0*onevec) ! Returns iteration variables: f, ep, DEp, DEq and residual res call PlasticIteration(f,ep,DEp,DEq,DDSDDE,STRIAL,X,0.0,fnn,MAXITERS,TOL,& PROPS,NPROPS,NTENS,NDI,res,DISP-1) ! Check for convergence IF (res>tol) THEN PRINT *, "***** Plastic iteration failed at consistent tangent iteration direction", I, "*****" ! PRINT *, "***** Using elastic tangent *****" ! DDSDDE(1:NTENS,I) = CELAS(1:NTENS,I) ELSE DEin = EPLAS ! Update STRESS,X,DEin call UpdateStress(f,ep,DEp,DEq,STRIAL,X,PROPS,NPROPS,& STRESSI,DEin,fnn,NTENS,NDI,DISP) DDSDDE(1:NTENS,I) = (STRESSI-STRESS)/eps END IF END IF END DO IF (DISP>=1) THEN print *, '***** Finished NumericalConsistentTangent *****' END IFend subroutine状态变量文件来源于JuliaFEM,适用于abaqus材料参数:来源:我的博士日记

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈