顶部banner
Logo 折叠
学习从这里开始
下载app
返回旧版
首页 成长助手 小邻学院 社区 发现
职业认证 企业服务 行业会议

登录解锁更多功能

还没有账号?立即注册

技术邻
技术引领职场价值
电话
0571-86682823
商务合作
service@jishulink.com
  • 全部  > 
  • CAE仿真

初学者,编了一个用simple算法解couette程序,为什么收敛不了?

浏览: 1566 回答: 1
#include<stdio.h>
#include<stdlib.h>

#define UE 1
#define rou 0.002377
#define miu 3.737e-7
#define dx 0.025
#define dy 0.001
#define dt 0.001
#define sor 0.1

int i, j, k, steps=0, steps_sum;
double p[22][12] = { 0 }, u[23][12] = { 0 }, v[24][13] = { 0 };
double mass_u[23][12] = { 0 }, mass_v[24][13] = { 0 };

void show()
{
    printf("\n************************************%d************************************\n",steps);
    printf("\nu\n");
    for (j = 11; j >=1; j--)
    {
        for (i = 1; i <= 22; i++)
            printf("%.3lf ", u[i][j]);
        printf("\n");
    }        
    printf("\nv\n");
    for (j = 12; j >= 1; j--)
    {
        for (i = 1; i <= 23; i++)
            printf("%.3lf ", v[i][j]);
        printf("\n");
    }
    printf("\np\n");
    for (j = 11; j >= 1; j--)
    {
        for (i = 1; i <= 21; i++)
            printf("%.3lf ", v[i][j]);
        printf("\n");
    }
/*    printf("\nmass_u\n");
    for (j = 11; j >= 1; j--)
    {
        for (i = 1; i <= 22; i++)
            printf("%.3lf ", mass_u[i][j]);
        printf("\n");
    }
    printf("\nmass_v\n");
    for (j = 11; j >= 1; j--)
    {
        for (i = 1; i <= 22; i++)
            printf("%.3lf ", mass_v[i][j]);
        printf("\n");
    }*/
}

void initialize()
{
    for (i = 1; i <= 22; i++)
        u[i][11] = UE;
    v[15][5] = 0; //disturbancr
    for (i = 1; i <= 22; i++)
        mass_u[i][11] = rou*UE;
    mass_v[15][5] = rou*v[15][5];
}

void compute_mass()
{
    double A, B, v_1, v_2, u_1, u_2;
        for (i = 2; i <= 21; i++)
            for (j = 2; j <= 10; j++)
            {
                v_1 = 0.5*(v[i][j + 1] + v[i + 1][j + 1]);
                v_2 = 0.5*(v[i][j] + v[i + 1][j]);
                A = -((rou*u[i + 1][j] * u[i + 1][j] - rou*u[i - 1][j] * u[i - 1][j]) / (2 * dx) + (rou*u[i][j + 1] * v_1 - rou*u[i][j - 1] * v_2) / (2 * dy))
                    + miu*((u[i + 1][j] - 2 * u[i][j] + u[i - 1][j]) / (dx*dx) + (u[i][j + 1] - 2 * u[i][j] + u[i][j - 1]) / (dy*dy));
                mass_u[i][j] = rou*u[i][j] + A*dt - (dt / dx)*(p[i][j] - p[i - 1][j]);
            }
        for (i = 2; i <= 22; i++)
            for (j = 2; j <= 11; j++)
            {
                u_1 = 0.5*(u[i][j - 1] + u[i][j]);
                u_2 = 0.5*(u[i - 1][j - 1] + u[i - 1][j]);
                B = -((rou*v[i + 1][j] * u_1 - rou*v[i - 1][j] * u_2) / (2 * dx) + (rou*v[i][j + 1] * v[i][j + 1] - rou*v[i][j - 1] * v[i][j - 1]) / (2 * dy))
                    + miu*((v[i + 1][j] - 2 * v[i][j] + v[i - 1][j]) / (dx*dx) + (v[i][j + 1] - 2 * v[i][j] + v[i][j - 1]) / (dy*dy));
                mass_v[i][j] = rou*v[i][j] + B*dt - (dt / dy)*(p[i - 1][j] - p[i - 1][j - 1]);
            }
}

void pressure_correct()
{
    double a, b, c;
    double d[22][12] = { 0 };
    double _p[22][12] = { 0 };//pressure correct
    double _p_;//mid
    a = 2 * (dt / (dx*dx) + dt / (dy*dy));
    b = -dt / (dx*dx);
    c = -dt / (dy*dy);
    for (i = 2; i <= 20; i++)
        for (j = 2; j <= 10; j++)
            d[i][j] = (mass_u[i + 1][j] - mass_u[i][j]) / dx + (mass_v[i + 1][i + 1] - mass_v[i + 1][j]) / dy;    
    for (k = 1; k <= 100; k++)
    {
        for (i = 2; i <= 20; i++)
            for (j = 2; j <= 10; j++)
            {
                _p_ = -(b*_p[i + 1][j] + b*_p[i - 1][j] + c*_p[i][j + 1] + c*_p[i][j - 1] + d[i][j]) / a;
                _p[i][j] = _p[i][j] + 0.1*(_p_ - _p[i][j]);
            }

        
    }
    for (i = 2; i <= 20; i++)
        for (j = 2; j <= 20; j++)
            p[i][j] = p[i][j]+(sor*_p[i][j]);
}

void compute_velocity()
{
    for (i = 2; i <= 21; i++)
        for (j = 2; j <= 10; j++)
            u[i][j] = mass_u[i][j] / rou;
    for (i = 2; i <= 22; i++)
        for (j = 2; j <= 11; j++)
            v[i][j] = mass_v[i][j] / rou;
    for (j = 1; j <= 11; j++)
    {
        u[1][j] = u[2][j]; u[22][j] = u[21][j];
    }
    for (j = 1; j <= 12; j++)
        v[23][j] = v[22][j];
}

void main()
{
    double store[6][12] = { 0 };
    int m = 1;
    initialize();
    show();
    steps_sum = 20;
    for (steps = 1; steps <= steps_sum; steps++)
    {
        compute_mass();
        compute_velocity();        
        pressure_correct(); show();
        if (steps == 4 || steps == 20 || steps == 50 || steps == 150 || steps == 300)
        {
            show();
            for (j = 1; j <= 11; j++)
                store[m][j] = u[15][j];
            m += 1;
        }
    }
    printf("\n");
    for (j = 11; j >= 1; j--)
    {
        for (m = 1; m <= 5; m++)
            printf("%.9lf  ", store[m][j]);
        printf("\n");
    }
}
流体力学及仿真

全部回答 (1)

默认 最新
技术工 2017年5月3日
@龙樱@静心图远 @江洋大盗
2017年5月3日
评论 点赞

相似问题

查看全部
  • 程序中用到了map函数,现在想把map函数得到的结果保存到文件中,应该怎么编程? 暂无回答

    程序中用到了map函数,现在想把map函数得到的结果保存到文件中,应该怎么编程(自己写的程序报错了) #include<stdio.h> #include<stdlib.h> #include<math.h> #include <map> using namespace std; map<float,float> g_mapData; FILE *fp = NULL; void insert_ma

  • 关于下面这个帖子中提到的问题,有大佬知道为什么吗? 3个回答

    Xingsheng Sun (Mechanical)(OP)18 Aug 21 21:51 Dear folks, I am trying to use C++ VUMAT in the abaqus on the university supercomputer, but it does not work. I have successfully tested the C++ VUMAT and

  • 基于Python的结构优化? 暂无回答

    abaqus二次开发,源程序由我提供,但是需要进行改变,将单材料的优化程序改为多材料的优化程序,基于Python语言,源代码写的很清楚,改动不会太大,但是会附带后处理的问题解决,详情细聊。 import math,customKernel from abaqus import getInput,getInputs from odbAccess import openOdb ## Function 

推荐阅读

ansys结构动力学仿真

ansys结构动力学仿真

技术邻小李 技术邻小李
¥150
vof案例-射流

vof案例-射流

CFD流 CFD流
免费
遗传算法解决(TSP)商旅问题matlab代码超详细解说(适用于新手)

遗传算法解决(TSP)商旅问题matlab代码超详细解说(适用于新手)

活泼可男_matlab教学 活泼可男_matlab教学
¥10
BOX-3D变宽斜钢箱梁绘图及功能更新演示

BOX-3D变宽斜钢箱梁绘图及功能更新演示

敦樸DUNPU 敦樸DUNPU
免费
abaqus埋地管道受力分析

abaqus埋地管道受力分析

冷月 冷月
¥25
探究实时仿真GPU求解器加速汽车行业设计创新

探究实时仿真GPU求解器加速汽车行业设计创新

Ansys中国 Ansys中国
免费
无网格划分软件midas MeshFree - 功能培训

无网格划分软件midas MeshFree - 功能培训

MIDAS官方 MIDAS官方
免费
船舶行进过程中的流场分布规律分析

船舶行进过程中的流场分布规律分析

龙樱 龙樱
免费
Hyperworks CFD v2022.1前后处理教程

Hyperworks CFD v2022.1前后处理教程

ALTAIR ALTAIR
免费
基于iSIGHT+Workbench的开孔平板性能优化

基于iSIGHT+Workbench的开孔平板性能优化

sjktzy sjktzy
¥5
品索设计-Creo自学练习集讲解(草绘部分)

品索设计-Creo自学练习集讲解(草绘部分)

深圳品索设计Creo培训 深圳品索设计Creo培训
免费
如何为您的应用选择合适的传声器

如何为您的应用选择合适的传声器

HBK声学与振动 HBK声学与振动
免费
Fluent中升力和阻力的计算

Fluent中升力和阻力的计算

宁博士CAE团队 宁博士CAE团队
免费
用EVOLVE对接INSPIRE,加速产品迭代优化

用EVOLVE对接INSPIRE,加速产品迭代优化

咸鱼氮泵 咸鱼氮泵
免费
【入门案例02】Abaqus——钢筋混凝土构件的碳纤维布+钢板加固模拟

【入门案例02】Abaqus——钢筋混凝土构件的碳纤维布+钢板加固模拟

臻元咨询
¥30
精品课程A30-考虑初始缺陷的栓焊连接组合节点滞回模拟

精品课程A30-考虑初始缺陷的栓焊连接组合节点滞回模拟

大平-结构工程 大平-结构工程
¥598
线控底盘市场趋势分析

线控底盘市场趋势分析

小木匠砍树 小木匠砍树
免费
张量计算课程合集

张量计算课程合集

引垂思汀 引垂思汀
¥50
后保险杠低速碰撞分析

后保险杠低速碰撞分析

Crisby_Vectory_TrHo Crisby_Vectory_TrHo
¥70
Altair FlowSimulator一维流体仿真分析软件介绍&模型搭建案例分享

Altair FlowSimulator一维流体仿真分析软件介绍&模型搭建案例分享

ALTAIR ALTAIR
免费