Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. OpenFOAM libtorch tutorial step by step

OpenFOAM libtorch tutorial step by step

已定时 已固定 已锁定 已移动 OpenFOAM
84 帖子 18 发布者 95.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #75

    在本帖12楼我贴出了原生PINN求解对流方程的方法,存在数值震荡。最近我开源了PINN + TVD格式的代码,请参考: http://dyfluid.com/pinn4.html

    在画图的时候,需要原生PINN预测的速度数据。在此: U-PINN-V

    9月CFD算法编程课: http://dyfluid.com/class.html

    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • I 离线
    I 离线
    iaasoqhu
    在 中回复了 李东岳 最后由 编辑
    #76

    @李东岳 谢谢李博士,已经搞定了

    1 条回复 最后回复
  • 剑 离线
    剑 离线
    剑金锋
    写于 最后由 编辑
    #77

    李老师,有没有尝试过使用GPU的libtorch+openfoam,我配置完,编译通过了,但用的还是CPU,感觉挺难搞的。

    X 1 条回复 最后回复
  • D 离线
    D 离线
    DJohn1211
    在 中回复了 李东岳 最后由 DJohn1211 编辑
    #78

    @李东岳 李老师您好,我在复现您这个例子的时候有一些细节有些糊涂?想请问您具体是怎么做的呢,能分享一下您的算例吗

    @李东岳 在 OpenFOAM libtorch tutorial step by step 中说:

    代码越来越复杂。这是执行一系列的卷积、池化操作等输出的8个通道的流场结果:

    http://dyfluid.com/cnn.html#id6

    捕获.JPG

    下图是自编码器进行重组的流场:

    cnnreal.JPG

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #79

    CNN处理的时候,你需要生成不同的OpenFOAM网格,http://dyfluid.com/cnn.html#id6 我在这里面做了4次池化,那你就需要4套openfoam网格

    autoDecoder_cavity.tar.xz

    我有这个算例,但是代码都是课堂现写,之前都是计划LCO课堂给大家讲的算例,写完了代码之后用我准备的算例去验证,后来大家一听一个不吱声,太难不讲了。目前我对CNN这方面也没有之前那么高涨,还没有重写代码的计划。

    9月CFD算法编程课: http://dyfluid.com/class.html

    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • C 在线
    C 在线
    CTC
    在 中回复了 水润晨阳 最后由 编辑
    #80

    @水润晨阳 你好, 你知道怎么编译和挂载了吗

    1 条回复 最后回复
  • X 离线
    X 离线
    xyl308120
    在 中回复了 剑金锋 最后由 编辑
    #81

    @剑金锋

    老哥,我把东岳老师那个1D槽道流的代码用AI改成了CUDA版本。然后在https://download.pytorch.org/libtorch/cu117 (我的cuda版本是11.7)下载的gpu版本的libtorch。现在发现已经可以用gpu训练了,但是训练速度还不如cpu,慢不少。 准备后续再捣鼓一下。 我机器配置 GPU: nvidia T400 4G, CPU:I7-12700,供参考

    #include <torch/torch.h>
    #include <torch/cuda.h> // 添加CUDA支持
    
    using namespace std;
    
    class NN : public torch::nn::Module {
        torch::nn::Sequential net_;
    public:
        NN() {
            net_ = register_module("net", torch::nn::Sequential(
                torch::nn::Linear(1,8),
                torch::nn::Tanh(),
                torch::nn::Linear(8,1)
            ));
        }
        torch::Tensor forward(torch::Tensor x) {
            return net_->forward(x);
        }
    };
    
    int main() {
        // 设备检测与设置
        torch::Device device = torch::kCPU;
        if (torch::cuda::is_available()) {
            std::cout << "CUDA可用,使用GPU加速训练" << std::endl;
            device = torch::kCUDA;
        }
    
        int iter = 1;
        int IterationNum = 1000000;
        double learning_rate = 0.001;
        double dy = 0.00125;
        int cellN = static_cast<int>(0.05/dy);
    
        // 模型迁移至GPU
        auto model = std::make_shared<NN>();
        model->to(device);
        
        // 优化器
        auto opti = std::make_shared<torch::optim::AdamW>(
            model->parameters(), 
            torch::optim::AdamWOptions(learning_rate)
        );
    
        // 数据迁移至GPU (关键步骤!)
        auto init = torch::full({}, 1.0).to(device);
        auto mesh = torch::arange(-0.05, 0, dy, torch::requires_grad())
                    .unsqueeze(1).to(device);
        auto dpdxByNu = torch::ones({cellN, 1}, torch::kFloat).to(device);
        auto nut = torch::zeros({cellN}).to(device);
            
        for (int i = 0; i < IterationNum; i++) {
            opti->zero_grad();
            auto upred = model->forward(mesh);
            
            // 梯度计算(确保权重张量在GPU)
            auto dudy = torch::autograd::grad(
                {upred}, {mesh}, 
                {torch::ones_like(upred).to(device)}, true, true
            )[0];
            
            auto dudyy = torch::autograd::grad(
                {dudy}, {mesh}, 
                {torch::ones_like(upred).to(device)}, true, true
            )[0];
    
            auto dudyTop = dudy[cellN - 1][0];
            auto meanU = torch::mean(upred);
            auto ubottom = torch::full_like(upred[0], 0.0375).to(device); // 边界条件迁移
            auto dpdxByNu = torch::full({cellN}, 1.2e-05/1e-08).to(device);
            
            // 损失计算
            auto loss_bottom = torch::mse_loss(upred[0], ubottom);
            auto loss_top = torch::mse_loss(dudyTop, torch::zeros_like(dudyTop));
            auto loss_bd = loss_bottom + 1000*loss_top;
            auto loss_ini = 1000*torch::mse_loss(meanU, init);
            auto loss_pde = torch::mse_loss(-dudyy.reshape({cellN}), dpdxByNu);
            auto loss = loss_pde + loss_bd + loss_ini;
    
            // 反向传播
            loss.backward();
            opti->step();
            
            // 输出需同步到CPU
            if (iter % 500 == 0) {
                double loss_value = loss.item<double>();
                cout << iter << " loss = " << loss_value << endl;
            }
            iter++;
        }
    
        torch::save(model, "model.pth");
        std::cout << "训练完成!" << std::endl;
        return 0;
    }
    
    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #82

    现在发现已经可以用gpu训练了,但是训练速度还不如cpu,慢不少。

    看你GPU占用多少。

    9月CFD算法编程课: http://dyfluid.com/class.html

    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    X 1 条回复 最后回复
  • X 离线
    X 离线
    xyl308120
    在 中回复了 李东岳 最后由 xyl308120 编辑
    #83

    @李东岳
    东岳老师你好,我训练的时候GPU占比%38左右。 我还想顺便请教一下

    loss_ini = 1000*crit(meanU, init)
    

    这个损失的意义。 因为我发现1D槽道流openfoam基准数据的平均值差不多就是1左右,而这里相当于是要对训练添加一个整体约束之类的东西吗。

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #84

    是的,一个整体平均值约束。

    增加神经元看看能不能把GPU拉上100%

    9月CFD算法编程课: http://dyfluid.com/class.html

    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]