首页/文章/ 详情

PINN求解burger方程,tensorflow框架,附代码(三)

11月前浏览650

TensorFlow 1.x和TensorFlow 2.x区别

  • TensorFlow 1.x版本只有静态图模式,需要手动构建计算图,调试困难,但性能好。
  • TensorFlow 2.x 初期:默认Eager Execution,易于调试,但性能较差。TensorFlow 2.x + @tf.function:两全其美:易于调试 + 高性能,方便在Eager Execution和 Graph Execution间转换

本文提供的代码采用2.x版本

正问题

已知    ,控制方程形式:

 

初始条件:

 

边界条件:

 

该方程的解析表达式通过Hopf-Cole变换获得,较为复杂,感兴趣的读者可自行搜索。

    @tf.function
    def net_f(self, x, t):
        """Compute physics residual"""
        # 使用单个GradientTape计算所有导数
        with tf.GradientTape() as tape2:
            tape2.watch([x, t])
            with tf.GradientTape(persistent=True) as tape1:
                tape1.watch([x, t])
                u = self.net_u(x, t)
            # 计算一阶导数
            u_t = tape1.gradient(u, t)
            u_x = tape1.gradient(u, x)
        # 计算二阶导数
        u_xx = tape2.gradient(u_x, x)
        # 清理tapes
        del tape1
        # Burgers方程残差: u_t + u*u_x - nu*u_xx
        f = u_t + u * u_x - self.nu * u_xx
        return f
  • persistent=True时,tape1可以多次使用,但是需要手动管理内存,tape2自动清理。
  • 代码运行在Eager Execution模式下,但通过@tf.function可以在关键函数上获得了Graph Execution的性能优化。

反问题

参数    和    未知,控制方程形式:

 

已知一些测试点数据,反求未知参数。

np.linalg.norm(u_star, 2)
  • 计算u_star的2范数
u_train_noisy = u_train + noise * np.std(u_train) * np.random.randn(u_train.shape[0], u_train.shape[1])
  • 噪声影响,np.std(u_train)是u_train的标准差,np.random.randn(u_train.shape[0], u_train.shape[1])标准正态分布取值
  • 上图中的黑色标记为进行训练的数据
  • 通过上图显示的信息,可以看到精确数据训练结果和带有噪声数据训练结果和真实结果的对比。


来源:我的博士日记
控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-12-04
最近编辑:11月前
此生君子意逍遥
博士 签名征集中
获赞 62粉丝 134文章 164课程 0
点赞
收藏
作者推荐

DAMASK 3.0耦合MARC实现任意复杂边界的多晶建模分析

DAMASK(Düsseldorf Advanced Material Simulation Kit)是面向材料微观—宏观耦合的多物理场晶体塑性平台,既能做频谱(FFT)网格求解,也能和有限元求解器协同。3.x 版本官方给出三种求解路径:自带的 DAMASK_grid(规则网格)、DAMASK_mesh(非结构化网格),以及商业有限元 MSC Marc 接口(FEM)。这么做的好处是:微结构演化/晶体塑性细节交给 DAMASK,复杂几何与边界条件交给成熟的 FEM。老用户要注意:官方早在 v2 时代就发出弃用 Abaqus 支持的提醒——2.0.3 是最后一个支持 Abaqus 的版本,之后不再维护。因此在 3.x 里,如果你的工况涉及复杂几何、接触、装配边界、多段载荷甚至热—机耦合,单靠频谱/网格解并不总是方便,这时就需要把 DAMASK 与一个 FEM 求解器耦合。官方明确给出的 FEM 选项就是 MSC Marc。DAMASK 与 Marc 通过 HYPELA2 用户子程序耦合,同时还能调用 flux、uedinc 等回调;Marc 输入卡(*.dat)里定义几何与边界,材料/细观模型与 DAMASK 的 material.yaml 通过 StateVariable 2/3 建立映射。官方还给出了求解器设置建议:非对称线性方程解法(如 multifrontal 稀疏)在多数场景更快;若做 DDM 域分解,则要切换回对称解法。这些都是“开箱即用”的接口与工作流细节,对需要快速落地复杂边界条件的多晶计算非常友好。和 Abaqus 相比,Marc 在这类任务上的主要优势(聚焦“与 DAMASK 联用”的落地性):原生耦合链路更清晰:HYPELA2 + 标准输入卡工作流,DAMASK 文档直给字段映射与子程序清单,减少自定义粘合层工作量。复杂边界/接触友好:Marc 在设定复杂边界、非线性接触与多步载荷时的稳健性与可控性是其传统强项,结合 DAMASK 可把“微观—宏观—边界”串成一条线(这一点也体现在官方示例与推荐设置中)。多物理场耦合方便:DAMASK 的热—机等耦合可通过 Marc 的 flux 类用户子程序接入,实现塑性耗散生热等效应的有机整合。版本路线清晰:Abaqus 在 3.x 被官方弃用,Marc 则是 3.x 文档中明确支持与维护的 FEM 选项,减少“接口过期”的不确定性与维护成本。Damask官方提供了一个简单的多晶变形案例,可以直接用于初次的尝试官方案例如下:其中第一个文件是单晶的材料属性文件,定义和使用原生的damsk求解器格式完全一致,第二个文件时多晶模型,边界和网格文件,内容如下图所示:可以直接打开MARC软件在文件夹终端对应(mentat)主界面如图所示:然后导入官方案例如下图所示(不同颜色表示不同材料)提交运算并选择用户子程序即可:运行时可以根据电脑的核心进行多核并行运算:同时可以在计算面板监控运行的状态:计算结果如下图所示(使用marc进行可视化即可):等效应力云图:等效塑性应变云图:目前进行了官方案例的尝试,后续会进行更多案例的展示来源:我的博士日记

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