流体力学计算器 源代码
开源代码库Open FOAM引入本科工程流体力学的教学实践
力学与实践,2013,35(3):91-93. [2] J.H.Ferziger,putational Method for Fluid Dynamics [M].
Springer,2002. [3] https:///.
3 OpenFOAM 引入教学的示例———以二维溃坝问 题为例
为激发学生兴趣,我们选取了一个具有丰富的流动图 案的流动问题—— —溃坝问题,来展示 OpenFOAM 求解获得 的流动演化直观过程。模拟的物理现象:一个静止的水柱位 于水箱左侧,在水箱的底部有一个小障碍,在 t=0s 时刻,让 水柱自由流动,然后会产生水柱崩塌。在崩塌的过程中,水 撞击水箱底部的一个障碍形成复杂的流场结构,其中包括 若干被水包裹的气泡。求解过程包括网格的生成,边界条件 的设定,初始边界条件的设定,求解控制设定,方程求解方 法的选择,离散格式的选择。以下以水和空气的界面为例,
(c) t=10s
(d) t=15s 66
(f) t=25s 图 1 溃坝模拟的流动界面演化图案
4 结论
通过 4 个学时的 CFD 教学实践,引入 OpenFOAM 模拟 了一个具有自由液面的流动问题,极大地激发了学生的学 习兴趣,引导学生做了其它模拟。因此,引入 OpenFOAM 教 学实践,可以让抽象流体力学知识变得生动起来,可以让学 生深刻直观地理解基础理论,还能增强学生的自主学习能 力和分析问题能力,开拓学生对流体力学这门课程应用的 视野。
. AAlblstraRctiIgnhthtisspapReer,stheeropveen dso.urce code of computational
fluid dynamics, OpenFOAM is introduced into the teaching practice of undergraduate's engineering fluid mechanics course. With the aid of post-processing visual flow evolution pattern, we help students understand the basic theory of flow mechanics and cultivate students' rational analysis ability, so as to effectively improve the teaching effect. Key words fluid dynamics;OpenFOAM;open source code
流体力学简单计算MATLAB程式
用matlab进行编程计算第一问:z=30;p1=50*9.8*10^4;p2=2*9.8*10^4;jdc=0.00015;gama=9800;d=0.257;L=50000 ;mu=6*10^(-6);hf=z+(p1-p2)/(0.86*gama)xdc=2*jdc/d;beta=4.15;m=1;Q=(hf*d^(5-m)/(beta*mu^m*L))^(1/(2-m));v=4*Q/(pi*d^2);Re=v*d/mu;Re1=59.7/xdc^(8*xdc/7);Re2=(665-765*log(xdc))/xdc;i=hf/L;if Re<3000Q=Q;elseif 3000<Re<Re1m=0.25;beta=0.0246;Q=(hf*d^(5-m)/(beta*mu^m*L))^(1/(2-m));v=4*Q/(pi*d^2);Re=v*d/mu;elseif Re1<Re<Re2m=0.123;A=10^(0.127*log(jdc/d)-0.627);beta=0.0802*A;Q=(hf*d^(5-m)/(beta*mu^m*L))^(1/(2-m));v=4*Q/(pi*d^2);Re=v*d/mu;elsem=0;langda=1/(2*log(3.7*d/jdc))^2;beta=0.0816*langda;Q=(hf*d^(5-m)/(beta*mu^m*L))^(1/(2-m));v=4*Q/(pi*d^2);Re=v*d/mu;endiQRevhf =588.1395i =0.0118Q =0.0915Re =7.5526e+004v =1.7632利用IF 语句对四种流态一一进行试算,最终的结果水力损失为588.1395m ,水力坡降0.0118第二问:将其中10km换成直径305mm的管子z=30;p1=50*9.8*10^4;p2=2*9.8*10^4;jdc=0.00015;gama=9800;mu=6*10^(-6);d= [0.257 0.305];L=[40000 10000];x=zeros(4,1);Q1=0.0915;hf=z+(p1-p2)/(0.86*gama);xdc=2*jdc./d;beta=4.15;m=1;Q=(hf/(beta*mu^m*(L(1)/d(1)^(5-m)+L(2)/d(2)^(5-m))))^(1/(2-m));v(1)=4*Q/(pi*d(1)^2);v(2)=4*Q/(pi*d(2)^2);Re(1)=v(1)*d(1)/mu;Re(2)=v(2)*d(2)/mu;Re1(1)=59.7/xdc(1)^(8/7);Re1(2)=59.7/xdc(2)^(8/7);Re2(1)=(665-765*log(xdc(1)))/xdc(1);Re2(2)=(665-765*log(xdc(2)))/xdc(2);if Re(1)<3000 & Re(2)<3000Q=Q;elseif 3000<Re(1)<Re1 & 3000<Re(2)<Re1m=0.25;beta=0.0246;Q=(hf/(beta*mu^m*(L(1)/d(1)^(5-m)+L(2)/d(2)^(5-m))))^(1/(2-m));v(1)=4*Q/(pi*d(1)^2);v(2)=4*Q/(pi*d(2)^2);Re(1)=v(1)*d(1)/mu;Re(2)=v(2) *d(2)/mu;elseif Re1<Re(1)<Re2 & Re1<Re(2)<Re2m=0.123;A=10^(0.127*log(jdc/d)-0.627);beta=0.0802*A;Q=(hf/(beta*mu^m*(L(1)/d(1)^(5-m)+L(2)/d(2)^(5-m))))^(1/(2-m));v(1)=4*Q/(pi*d(1)^2);v(2)=4*Q/(pi*d(2)^2);Re(1)=v(1)*d(1)/mu;Re(2)=v(2)*d(2)/mu;elsem=0;langda=1/(2*log(3.7*d/jdc))^2;beta=0.0816*langda;Q=(hf/(beta*mu^m*(L(1)/d(1)^(5-m)+L(2)/d(2)^(5-m))))^(1/(2-m));v(1)=4*Q/(pi*d(1)^2);v(2)=4*Q/(pi*d(2)^2);Re(1)=v(1)*d(1)/mu;Re(2)=v(2)*d(2)/mu;endQ Revq=Q-Q1baifenbi=q/Q1Q =0.0978Re =1.0e+004 *8.0795 6.8080v =1.8863 1.3393q =0.0063baifenbi =0.0694先假设流态均为层流,再进行试算,最终可得输量可提高6.94个百分点。
C语言计算器源代码
C语言计算器源代码下面是一个简单的C语言计算器源代码:```c#include<stdio.h>int mainfloat num1, num2, result;char operator;printf("请输入两个数字:");scanf("%f %f", &num1, &num2);printf("请选择运算符(+,-,*,/):"); scanf(" %c", &operator);switch(operator)case '+':result = num1 + num2;printf("结果: %.2f\n", result);break;case '-':result = num1 - num2;printf("结果: %.2f\n", result);break;case '*':result = num1 * num2;printf("结果: %.2f\n", result); break;case '/':if(num2 != 0)result = num1 / num2;printf("结果: %.2f\n", result); }elseprintf("除数不能为0!\n");}break;default:printf("无效的运算符!\n"); break;}return 0;```这个计算器程序可以接受两个数字和一个运算符作为输入,并根据运算符的类型进行相应的计算。
程序使用了`switch`语句来根据不同的运算符执行不同的操作。
输入数字之后,输出计算结果或者错误提示信息。
python流体数值模拟书
Python流体数值模拟书一、介绍流体数值模拟是指使用计算机对流体力学问题进行模拟和求解的过程。
Python是一种功能强大的编程语言,以其简洁的语法和丰富的库支持而受到广泛的应用。
本书将介绍使用Python进行流体数值模拟的基本原理和技巧。
二、数值模拟的基本原理数值模拟是一种通过将连续的流体问题离散化为网格上的有限元素或体素来近似求解的方法。
通过将流体域划分为离散的单元,可以利用数值算法来求解流体力学方程,并得到流场的数值解。
2.1 流体力学方程流体力学方程是描述流体运动的基本方程组,包括质量守恒方程、动量守恒方程和能量守恒方程。
在数值模拟中,常常使用Navier-Stokes方程组来描述流体力学问题。
2.2 离散化方法离散化方法是将流体域划分为离散的单元,并在每个单元上近似求解流体力学方程。
常用的离散化方法包括有限差分法、有限体积法和有限元法。
2.3 数值算法数值算法是指在离散化网格上求解流体力学方程的算法。
常用的数值算法包括迭代法、时间步进法和求解线性方程组的方法。
三、Python在流体数值模拟中的应用Python作为一种通用的编程语言,拥有丰富的科学计算库和可视化工具。
在流体数值模拟中,Python可以应用于网格生成、求解流体力学方程和可视化等方面。
3.1 网格生成网格生成是流体数值模拟的前期准备工作,Python提供了多种库用于生成结构化和非结构化网格,如PyMesh和gmsh等。
3.2 数值模拟Python提供了多种库用于求解流体力学方程,如FEniCS和OpenFOAM等。
这些库提供了高效的求解器和丰富的求解方法,可以方便地进行流体数值模拟。
3.3 结果可视化流体数值模拟得到的结果常常需要进行可视化分析。
Python提供了多种绘图库,如matplotlib和Mayavi等,可以方便地绘制流场、压力分布等图像。
四、案例分析本章将通过一个简单的案例来演示使用Python进行流体数值模拟的步骤和方法。
matlab流体仿真代码
matlab流体仿真代码在MATLAB中,你可以使用流体仿真工具箱(如CFD Toolbox)进行流体仿真。
然而,编写流体仿真的代码是非常复杂的,因为它涉及到很多物理原理和数学模型。
以下是一个简单的示例,使用MATLAB进行一维流体动力学仿真。
请注意,这只是一个非常基础的示例,真正的流体仿真可能需要更复杂的代码和更多的物理原理。
matlab% 参数设定L = 10; % 管道长度D = 1; % 管道直径rho = 1.225; % 空气密度mu = 1.7894e-5; % 空气动力粘度Re = rho * U * D / mu; % 雷诺数U = 5; % 流速P1 = 101325; % 入口压力P2 = 100000; % 出口压力g = 9.81; % 重力加速度% 一维流动方程% 连续性方程: A1*U1 = A2*U2% 动量方程: P1 + 0.5*rho*U1^2 + rho*g*h1 = P2 + 0.5*rho*U2^2 + rho*g*h2% 能量方程: (P1/rho) + 0.5*U1^2 + g*h1 = (P2/rho) + 0.5*U2^2 + g*h2 A1 = pi*D^2/4; % 入口面积A2 = pi*D^2/4; % 出口面积h1 = 0; % 入口高度h2 = 0; % 出口高度% 解动量方程得到U2U2 = sqrt((2*(P1-P2) + rho*(U^2- U2^2) + 2*rho*g*(h1-h2)) / rho);% 输出结果fprintf('入口流速: %.2f m/s\n', U);fprintf('出口流速: %.2f m/s\n', U2);这只是一个非常简单的示例,真实的流体仿真可能需要考虑更多的因素,如流体的粘性、密度、热传导、压力变化等。
在MATLAB中,你可以使用内置的流体仿真工具箱,如CFD Toolbox,或者第三方工具箱,如ANSYS Fluent的MATLAB接口,来进行更复杂的流体仿真。
python计算有限体积流体力学
python计算有限体积流体力学随着计算机技术和数值计算方法的发展,有限体积法在流体力学求解中得到了广泛的应用。
Python作为一门易于学习且高效的编程语言,被越来越多的科学家和工程师所使用。
在此基础上,可以通过Python计算有限体积法来求解流体力学问题。
1. 有限体积法流程有限体积法(finite volume method)是一种将物理问题离散化的方法,将计算区域划分为有限数量的区域,对于每一个区域,使用质量、动量和能量守恒方程进行求解,然后在整个计算域上通过有限数量的通量来处理守恒方程中的通量项。
计算有限体积法的流程如下:1) 将计算域进行离散化,得到有限数量的控制体;2) 将物理量(如密度、速度、压力等)在每个控制体内进行平均处理,得到离散化后的方程;3) 根据质量、动量和能量守恒方程,列出每个控制体内的守恒方程;4) 根据通量定义,将每个控制体的通量项写成相邻控制体间差分的形式;5) 将相邻控制体间的平均量带入通量式中,得到每个控制体通量项的离散化表示式;6) 整合每个控制体内的离散化守恒方程,得到整个计算域的离散化守恒方程组;7) 解线性方程组,得到每个控制体内的物理量分布。
2. Python计算有限体积法Python作为一种高级编程语言,可以方便地实现有限体积法的计算。
有限体积法的基本数学原理和逻辑可以通过Python程序来表示和实现。
Python计算有限体积法的代码如下:```import numpy as np#定义控制体边界def getBoundary(i,j,gridCols,gridRows): if i == 0:return ("W", None, None)if i == gridCols-1:return ("E", None, None)if j == 0:return ("S", None, None)if j == gridRows-1:return ("N", None, None)#定义通量def getF(u):f = np.zeros_like(u)f[0] = u[0]*u[1]f[1] = u[0]*u[1]*u[1] + u[2]f[2] = u[1]*u[2]return f#定义守恒方程def getFluxes(C, u):F = np.zeros((3,))for i in range(3):F += C[i]*getF(u[i])return F#计算有限体积def solve(nx,ny,dx,dy,nt,inlet,outlet): sigma = 0.9rho = 1.0nu = 0.1dt = sigma*dx*dy/nu#定义初始条件u = np.zeros((3,nx,ny))u[0,:,:] = rhou[1,:,:] = inlet*rhou[2,:,:] = 0.0#定义通量系数C = np.array([[0.0, 1.0, 0.0],[0.0, 0.0, 1.0],[0.0, 0.0, 0.0]])#求解时间循环for t in range(nt):un = u.copy()for i in range(1,nx-1):for j in range(1,ny-1):#计算控制体通量F = getFluxes(C, un[:,i,j])#更新uu[:,i,j] = un[:,i,j] + dt*dx*dy/rho*(un[:,i-1,j]- 2*un[:,i,j] + un[:,i+1,j])/dx**2 \ + dt*dx*dy/rho*(un[:,i,j-1]- 2*un[:,i,j] + un[:,i,j+1])/dy**2 - dt/rho*F#边界处理boundary = getBoundary(i,j,nx,ny)if boundary is not None:if boundary[0] == "W":u[1,i,0] = inlet*rhoelif boundary[0] == "E":u[1,i,-1] = u[1,i,-2]u[2,i,-1] = u[2,i,-2]elif boundary[0] == "S":u[1,0,j] = u[1,1,j]u[2,0,j] = -u[2,1,j]elif boundary[0] == "N":u[1,-1,j] = u[1,-2,j]u[2,-1,j] = -u[2,-2,j]return u```以上代码使用了有限体积法求解了二维的Navier-Stokes方程,其中的边界条件和通量系数可以根据实际问题进行改变。
python流体模拟代码
python流体模拟代码以下是一个简单的使用Python进行流体模拟的示例代码: python.import numpy as np.import matplotlib.pyplot as plt.# 定义模拟流场的网格大小。
nx = 41。
ny = 41。
# 初始化流场变量。
u = np.zeros((ny, nx))。
v = np.zeros((ny, nx))。
p = np.zeros((ny, nx))。
b = np.zeros((ny, nx))。
# 定义流体的参数。
rho = 1。
nu = 0.1。
dt = 0.001。
dx = 2 / (nx 1)。
dy = 2 / (ny 1)。
# 定义辅助函数。
def build_up_b(b, rho, dt, u, v, dx, dy): # 实现计算 b 的函数。
pass.def pressure_poisson(p, dx, dy, b):# 实现求解压力方程的函数。
pass.def cavity_flow(nt, u, v, dt, dx, dy, p, rho, nu): # 实现求解流体模拟的主要函数。
pass.# 设置时间步长和迭代次数。
nt = 100。
cavity_flow(nt, u, v, dt, dx, dy, p, rho, nu)。
# 可视化流场。
plt.contourf(u, cmap='viridis')。
plt.colorbar()。
plt.show()。
以上代码是一个简单的二维流体模拟的示例,其中使用了有限差分法对流场进行离散化处理,并通过迭代求解流体的速度和压力场。
实际的流体模拟涉及到更多复杂的物理模型和数值方法,需要根据具体情况进行更详细的实现。
希望这个示例能够帮助你入门流体模拟的相关知识。
python计算有限体积流体力学
python计算有限体积流体力学有限体积流体力学是一种用于模拟和分析流体在有限体积内的运动和行为的数值方法。
它通过将流体分割为离散的体积单元,并在每个体积单元内求解流体力学方程来描述流体的运动。
本文将介绍有限体积流体力学的基本原理和应用。
有限体积法的基本原理是将流体域划分为一系列小的离散体积单元,称为控制体。
在每个控制体内,流体的守恒方程被离散化为代表质量、动量和能量守恒的方程。
通过求解这些方程,可以得到流体在整个流场内的运动和行为。
有限体积法的首要任务是将流体域划分为离散的控制体。
这可以通过网格生成算法来实现,其中流体域被划分为一系列小的立方体单元。
每个控制体的边界与相邻控制体的边界相连,形成一个网格。
控制体的大小和形状可以根据具体问题进行调整,以满足数值计算的需求。
在每个控制体内,流体的守恒方程被离散化为代表质量、动量和能量守恒的方程。
对于质量守恒,可以利用控制体内的质量变化率来表示。
对于动量守恒,可以利用控制体内的动量变化率和外力对流体的作用来表示。
对于能量守恒,可以利用控制体内的能量变化率、流体的压力和温度来表示。
这些方程可以通过数值差分方法进行离散化,并利用迭代算法求解。
有限体积法的一个重要优势是可以处理复杂的流体边界条件。
在每个控制体的边界上,可以设置不同的边界条件,如固壁、入口和出口条件。
这些边界条件可以根据具体问题进行设定,并在数值计算中进行考虑。
通过合理设置边界条件,可以模拟不同类型的流体流动,如层流、湍流和多相流动。
有限体积法在工程领域有着广泛的应用。
它可以用于分析流体在管道、喷口和涡轮机等设备中的流动行为。
通过模拟流体在这些设备中的运动,可以优化设备的设计和性能。
此外,有限体积法还可以用于模拟自然界中的流体现象,如河流和海洋中的水流。
总结起来,有限体积流体力学是一种用于模拟和分析流体运动的数值方法。
它通过将流体域划分为离散的控制体,并在每个控制体内求解流体力学方程来描述流体的运动。
用c语言编写的计算器源代码
作品:科学计算器作者:欧宗龙编写环境:vc++6.0语言:c#include"stdafx.h"#include<stdio.h>#include<windows.h>#include<windowsx.h>#include"resource.h"#include"MainDlg.h"#include<math.h>#include<string.h>#definePI3.141593BOOLA_Op=FALSE;BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam) {switch(uMsg){HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);}returnFALSE;}BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam){returnTRUE;}voidTrimNumber(chara[])//判断并删除小数点后无用的零{for(unsignedi=0;i<strlen(a);i++){if(a[i]=='.'){for(unsignedj=strlen(a)-1;j>=i;j--){if(a[j]=='0'){a[j]='\0';}elseif(a[j]=='.'){a[j]='\0';}elsebreak;}}}}doubleOperate(charOperator,doublen1,doublen2)//判断符号,进行相应的运算{if(Operator=='0'){}if(Operator=='+'){n2+=n1;}if(Operator=='-'){n2=n1-n2;}if(Operator=='*'){n2*=n1;}if(Operator=='/'){n2=n1/n2;}if(Operator=='^'){n2=pow(n1,n2);}return n2;}////////////////////////////////////////////////voidIntBinary(chara[],intn){if(n>1)IntBinary(a,n/2);sprintf(a,"%s%i",a,n%2);}voiddecimal(chara[],doublem){if(m>0.000001){m=m*2;sprintf(a,"%s%d",a,(long)m);decimal(a,m-(long)m);}}voidBinary(chara[],doubleNum){charDecP[256]="";doublex,y;double*iptr=&y;x=modf(Num,iptr);decimal(DecP,x);IntBinary(a,(int)y);strcat(a,".");strcat(a,DecP);}////////////////////////////////////voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify) {staticDELTIMES=0;staticcharstr[256];staticcharOperator='0';staticdoubleRNum[3];switch(id){caseIDC_BUTTONN1://数字1{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"1");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN2://数字2{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"2");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN3://数字3{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"3");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN4://数字4{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"4");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN5://数字5{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"5");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN6://数字6{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"6");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN7://数字7{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"7");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN8://数字8{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"8");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN9://数字9{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"9");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN0://数字0{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"0");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;case{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));if(DELTIMES==0){strcat(str,".");}DELTIMES++;SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=FALSE;}break;caseIDC_BUTTONADD://加法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='+';DELTIMES=0;A_Op=TRUE;}break;caseIDC_BUTTONSUB://减法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);DELTIMES=0;A_Op=TRUE;Operator='-';}break;caseIDC_BUTTONMUL://乘法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='*';DELTIMES=0;A_Op=TRUE;}break;caseIDC_BUTTONDIV://除法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='/';DELTIMES=0;A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='^';DELTIMES=0;}break;caseIDC_BUTTONPI://圆周率PI,弧度{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));if(atof(str)!=0){RNum[2]=atof(str)*PI;sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);}else{sprintf(str,"%f",PI);SetDlgItemText(hwnd,IDC_EDIT,str);}A_Op=TRUE;}break;caseIDC_BUTTONSQRT://开根号{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=sqrt(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONSIN://三角函数sin函数{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=sin(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=cos(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=tan(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONSQ://平方{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str)*atof(str);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str)*atof(str)*atof(str);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=exp(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=pow(10,atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONLN://lnx{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=log(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONLOG10://log10{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=log10(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONBINARY://十进制转换为二进制{chara[256]="";GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str);Binary(a,RNum[2]);strcpy(str,a);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{DELTIMES=0;Operator='0';RNum[0]=RNum[1]=RNum[2]=0;memset(str,0,sizeof(str));SetDlgItemText(hwnd,IDC_EDIT,NULL);A_Op=FALSE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));inti=strlen(str);str[i-1]='\0';SetDlgItemText(hwnd,IDC_EDIT,str);}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='0';DELTIMES=0;}break;default:break;}}voidMain_OnClose(HWNDhwnd){EndDialog(hwnd,0);}本人拙作,如有不足之处请谅解。
(完整word版)用MATLAB实现计算器程序源代码(word文档良心出品)
function varargout = caculator(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @caculator_OpeningFcn, ...'gui_OutputFcn', @caculator_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});endfunction caculator_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;set(handles.edit1,'string','0');set(handles.edit5,'string','0');guidata(hObject, handles);function varargout = caculator_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;function edit1_Callback(hObject, eventdata, handles)function edit1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction edit2_Callback(hObject, eventdata, handles)function edit2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction edit3_Callback(hObject, eventdata, handles)function edit3_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction pushbutton1_Callback(hObject, eventdata, handles)handles.num1=strcat(get(handles.edit1,'string'),'+');set(handles.edit1,'string',handles.num1);guidata(hObject,handles);function pushbutton2_Callback(hObject, eventdata, handles) handles.num2=strcat(get(handles.edit1,'string'),'-');set(handles.edit1,'string',handles.num2);guidata(hObject,handles);function pushbutton3_Callback(hObject, eventdata, handles) handles.num3=strcat(get(handles.edit1,'string'),'*');set(handles.edit1,'string',handles.num3);guidata(hObject,handles);function pushbutton4_Callback(hObject, eventdata, handles) handles.num4=strcat(get(handles.edit1,'string'),'/');set(handles.edit1,'string',handles.num4);guidata(hObject,handles);function pushbutton_1_Callback(hObject, eventdata, handles) handles.shu1=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu1=strcat(handles.yuanshu,handles.shu1);if length(handles.shu1)<2;elseif (length(handles.shu1)>=2)&&(handles.shu1(end-1)==')')&& (handles.shu1(1)=='l')temp=handles.shu1(end);handles.shu1(end)=handles.shu1(end-1);handles.shu1(end-1)=temp;endset(handles.edit1,'string',handles.shu1);guidata(hObject, handles);function pushbutton_2_Callback(hObject, eventdata, handles) handles.shu2=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu2=strcat(handles.yuanshu,handles.shu2);if length(handles.shu2)<2;elseif (length(handles.shu2)>=2)&&(handles.shu2(end-1)==')')&& (handles.shu2(1)=='l')temp=handles.shu2(end);handles.shu2(end)=handles.shu2(end-1);handles.shu2(end-1)=temp;endset(handles.edit1,'string',handles.shu2);guidata(hObject, handles);function pushbutton_4_Callback(hObject, eventdata, handles) handles.shu4=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu4=strcat(handles.yuanshu,handles.shu4);if length(handles.shu4)<2;elseif (length(handles.shu4)>=2)&&(handles.shu4(end-1)==')')&& (handles.shu4(1)=='l')temp=handles.shu4(end);handles.shu4(end)=handles.shu4(end-1);handles.shu4(end-1)=temp;endset(handles.edit1,'string',handles.shu4);guidata(hObject, handles);function pushbutton_3_Callback(hObject, eventdata, handles) handles.shu3=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu3=strcat(handles.yuanshu,handles.shu3);if length(handles.shu3)<2;elseif (length(handles.shu3)>=2)&&(handles.shu3(end-1)==')')&& (handles.shu3(1)=='l')temp=handles.shu3(end);handles.shu3(end)=handles.shu3(end-1);handles.shu3(end-1)=temp;endset(handles.edit1,'string',handles.shu3);guidata(hObject, handles);function pushbutton_5_Callback(hObject, eventdata, handles) handles.shu5=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu5=strcat(handles.yuanshu,handles.shu5);if length(handles.shu5)<2;elseif (length(handles.shu5)>=2)&&(handles.shu5(end-1)==')')&& (handles.shu5(1)=='l')temp=handles.shu5(end);handles.shu5(end)=handles.shu5(end-1);handles.shu5(end-1)=temp;endset(handles.edit1,'string',handles.shu5);guidata(hObject, handles);function pushbutton_9_Callback(hObject, eventdata, handles) handles.shu9=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu9=strcat(handles.yuanshu,handles.shu9);if length(handles.shu9)<2;elseif (length(handles.shu9)>=2)&&(handles.shu9(end-1)==')')&& (handles.shu9(1)=='l')temp=handles.shu9(end);handles.shu9(end)=handles.shu9(end-1);handles.shu9(end-1)=temp;endset(handles.edit1,'string',handles.shu9);guidata(hObject, handles);function pushbutton_7_Callback(hObject, eventdata, handles) handles.shu7=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu7=strcat(handles.yuanshu,handles.shu7);if length(handles.shu7)<2;elseif (length(handles.shu7)>=2)&&(handles.shu7(end-1)==')')&& (handles.shu7(1)=='l')temp=handles.shu7(end);handles.shu7(end)=handles.shu7(end-1);handles.shu7(end-1)=temp;endset(handles.edit1,'string',handles.shu7);guidata(hObject, handles);function pushbutton_8_Callback(hObject, eventdata, handles) handles.shu8=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu8=strcat(handles.yuanshu,handles.shu8);if length(handles.shu8)<2;elseif (length(handles.shu8)>=2)&&(handles.shu8(end-1)==')')&& (handles.shu8(1)=='l')temp=handles.shu8(end);handles.shu8(end)=handles.shu8(end-1);handles.shu8(end-1)=temp;endset(handles.edit1,'string',handles.shu8);guidata(hObject, handles);function pushbutton_6_Callback(hObject, eventdata, handles) handles.shu6=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu6=strcat(handles.yuanshu,handles.shu6);if length(handles.shu6)<2;elseif (length(handles.shu6)>=2)&&(handles.shu6(end-1)==')')&& (handles.shu6(1)=='l')temp=handles.shu6(end);handles.shu6(end)=handles.shu6(end-1);handles.shu6(end-1)=temp;endset(handles.edit1,'string',handles.shu6);guidata(hObject, handles);function pushbutton18_Callback(hObject, eventdata, handles) handles.jieguo=get(handles.edit1,'string');handles.jieguo=strcat('=',handles.jieguo);eval(['handles.result''1' handles.jieguo]);set(handles.edit5,'string',num2str(handles.result1));guidata(hObject,handles);function pushbutton_0_Callback(hObject, eventdata, handles) handles.shu0=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');if handles.yuanshu(end)=='N';handles.yuanshu(end)='';endif handles.yuanshu(1)=='0';handles.yuanshu=handles.yuanshu(2:end);endhandles.shu0=strcat(handles.yuanshu,handles.shu0);if length(handles.shu0)<2;elseif (length(handles.shu0)>=2)&&(handles.shu0(end-1)==')')&& (handles.shu0(1)=='l')temp=handles.shu0(end);handles.shu0(end)=handles.shu0(end-1);handles.shu0(end-1)=temp;endset(handles.edit1,'string',handles.shu0);guidata(hObject, handles);function pushbutton20_Callback(hObject, eventdata, handles) handles.shu10=get(hObject,'string');handles.yuanshu=get(handles.edit1,'string');handles.shu10=strcat(handles.yuanshu,handles.shu10);set(handles.edit1,'string',handles.shu10);guidata(hObject, handles);function pushbutton21_Callback(hObject, eventdata, handles) function edit5_Callback(hObject, eventdata, handles)function edit5_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction pushbutton22_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.fanhao=strcat('-(',handles.yuanshu,')');set(handles.edit1,'string',handles.fanhao);guidata(hObject, handles);function pushbutton23_Callback(hObject, eventdata, handles)set(handles.edit1,'string','0');set(handles.edit5,'string','0');guidata(hObject, handles);function pushbutton24_Callback(hObject, eventdata, handles)result=questdlg('ÕæµÄÒªÍ˳ö£¿','Í˳öÈ·ÈÏ','È·¶¨','È¡Ïû','È¡Ïû'); if result=='È·¶¨', close(gcf); endfunction pushbutton25_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.sin=strcat('sin(',handles.yuanshu,')');set(handles.edit1,'string',handles.sin);guidata(hObject, handles);function pushbutton26_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.cos=strcat('cos(',handles.yuanshu,')');set(handles.edit1,'string',handles.cos);guidata(hObject, handles);function pushbutton27_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.tan=strcat('tan(',handles.yuanshu,')');set(handles.edit1,'string',handles.tan);guidata(hObject, handles);function pushbutton28_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.ln=strcat('reallog(',handles.yuanshu,')');set(handles.edit1,'string',handles.ln);guidata(hObject, handles);function pushbutton29_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.log=strcat('log',handles.yuanshu,'()');set(handles.edit1,'string',handles.log);guidata(hObject, handles);function pushbutton30_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.daoshu=strcat('1/(',handles.yuanshu,')');set(handles.edit1,'string',handles.daoshu);guidata(hObject, handles);function pushbutton31_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.sqrt=strcat('sqrt(',handles.yuanshu,')');set(handles.edit1,'string',handles.sqrt);guidata(hObject, handles);function pushbutton32_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.pingfang=strcat('(',handles.yuanshu,')^2');set(handles.edit1,'string',handles.pingfang);guidata(hObject, handles);function pushbutton33_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.ncifang=strcat('(',handles.yuanshu,')^N');set(handles.edit1,'string',handles.ncifang);guidata(hObject, handles);function pushbutton35_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.kuohao=strcat('(',handles.yuanshu,')');set(handles.edit1,'string',handles.kuohao);guidata(hObject, handles);function pushbutton36_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.yuanshu=handles.yuanshu(1:(end-1));if length(handles.yuanshu)<1handles.yuanshu='0';endset(handles.edit1,'string',handles.yuanshu);guidata(hObject, handles);% --- Executes on button press in pushbutton37.function pushbutton37_Callback(hObject, eventdata, handles) handles.yuanshu=get(handles.edit1,'string');handles.exp=strcat('exp(',handles.yuanshu,')');set(handles.edit1,'string',handles.exp);guidata(hObject, handles);% --- Executes when user attempts to close figure1.function figure1_CloseRequestFcn(hObject, eventdata, handles)% hObject handle to figure1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Hint: delete(hObject) closes the figuredelete(hObject);%--------------------------------------------------------------------function Untitled_14_Callback(hObject, eventdata, handles)% hObject handle to Untitled_14 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_15_Callback(hObject, eventdata, handles)set(gcf,'color','red')% hObject handle to Untitled_15 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_16_Callback(hObject, eventdata, handles)set(gcf,'color','blue')% hObject handle to Untitled_16 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_17_Callback(hObject, eventdata, handles)set(gcf,'color','green')% hObject handle to Untitled_17 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_18_Callback(hObject, eventdata, handles)set(gcf,'color','black')% hObject handle to Untitled_18 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_19_Callback(hObject, eventdata, handles)set(gcf,'color','yellow')% hObject handle to Untitled_19 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Untitled_20_Callback(hObject, eventdata, handles)set(gcf,'color','m')% hObject handle to Untitled_20 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) function Untitled_1_Callback(hObject, eventdata, handles)function Untitled_2_Callback(hObject, eventdata, handles)function Untitled_3_Callback(hObject, eventdata, handles)function Untitled_4_Callback(hObject, eventdata, handles)function Untitled_4_CreateFcn(hObject, eventdata, handles)function Untitled_5_Callback(hObject, eventdata, handles)function Untitled_6_Callback(hObject, eventdata, handles)。
python计算有限体积流体力学
python计算有限体积流体力学以Python计算有限体积流体力学引言:有限体积法(Finite Volume Method)是一种常用的计算流体力学方法,通过对流体流动区域进行离散化,将其划分为有限个体积单元,然后在每个单元上进行质量、动量和能量的守恒方程求解,从而得到流体的流动特性。
本文将介绍如何使用Python编程语言进行有限体积法的计算,以求解流体力学问题。
一、有限体积法基础有限体积法的核心思想是对流体流动区域进行离散化,将其划分为有限个体积单元。
在每个单元上,假设流体的物理量在该单元内是均匀的,并通过离散化的方式对守恒方程进行求解。
例如,对于质量守恒方程,可以将其离散化为每个单元的质量变化等于入口质量减去出口质量。
二、Python在有限体积法中的应用Python作为一种强大的编程语言,被广泛应用于科学计算和数值模拟领域。
在有限体积法中,Python可以用于编写求解守恒方程的程序,并进行流场的计算和可视化。
1. 网格生成在有限体积法中,首先需要生成流动区域的网格。
Python提供了许多开源的网格生成工具,如PyGmsh、MeshPy等。
这些工具可以根据流动区域的几何形状和边界条件,生成适合计算的网格。
2. 边界条件处理在有限体积法中,边界条件是求解守恒方程的重要一步。
Python可以通过读取边界条件数据文件,将边界条件应用于相应单元,从而模拟真实流动的边界条件。
3. 守恒方程求解Python提供了一些数值计算库,如NumPy和SciPy,可以用于求解守恒方程。
通过将守恒方程离散化为代数方程组,然后利用数值方法进行求解,可以得到流体的流动特性。
4. 结果可视化Python还提供了一些数据可视化库,如Matplotlib和Mayavi,可以用于对流场结果进行可视化。
通过绘制流体的流线、压强分布等图形,可以更直观地理解流体的流动特性。
三、实例分析为了更好地说明Python在有限体积法中的应用,下面以求解一维自由对流问题为例进行实例分析。
流体力学计算器 源代码
以下为 program.cs的代码using System;using System.Collections.Generic;using System.Linq;//using System.Threading.Tasks;using System.Windows.Forms;namespace水力计算优化版{staticclass Program{///<summary>///应用程序的主入口点。
///</summary>[STAThread]staticvoid Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}}}以下为from1.cs的代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;//using System.Threading.Tasks;using System.Windows.Forms;namespace水力计算优化版{publicpartialclass Form1 : Form{publicdouble Q, ZCD, L, d, Md, v, DLnd, YDnd, Re, Pi = 3.14D, Kesi, Re1, Re2, lanbuda; publicdouble b, m, Hf;publicbool YDniandu, Liuliang;public Form1(){InitializeComponent();}privatevoid CanShuCongShe_Click(object sender, EventArgs e){guanjingtextBox.Clear();cucaotextBox.Clear();guanchangtextBox.Clear();midutextBox.Clear();LSutextBox.Clear();LLiangtextBox.Clear();DLitextBox.Clear();YDongtextBox.Clear();LNuotextBox.Clear();LTaitextBox.Clear();MZutextBox.Clear();YChengtextBox.Clear();guanjingtextBox.Focus();}privatevoid LSuradioButton_CheckedChanged(object sender, EventArgs e){if (LSuradioButton.Checked == true){LLiangtextBox.Visible = false;LSutextBox.Visible = true;Liuliang = false;}}privatevoid LLiangradioButton_CheckedChanged(object sender, EventArgs e) {if (LLiangradioButton.Checked == true){LLiangtextBox.Visible = true;LSutextBox.Visible = false;Liuliang = true;}}privatevoid DLiradioButton_CheckedChanged(object sender, EventArgs e){if (DLiradioButton.Checked == true){DLitextBox.Visible = true;YDongtextBox.Visible = false;YDniandu = false;}}privatevoid YDongradioButton_CheckedChanged(object sender, EventArgs e) {if (YDongradioButton.Checked == true){DLitextBox.Visible = false;YDongtextBox.Visible = true;YDniandu = true;}}privatevoid button1_Click(object sender, EventArgs e){if (cucaotextBox.Text == "")cucaotextBox.Focus();if (guanjingtextBox.Text == "")guanjingtextBox .Focus ();if (guanchangtextBox.Text == "")guanchangtextBox.Focus();if (midutextBox.Text == "")midutextBox.Focus();if (LLiangtextBox.Text == "")LLiangtextBox.Focus();if (LSutextBox.Text == "")LSutextBox.Focus();if (YDongtextBox.Text == "")YDongtextBox.Focus();if (DLitextBox.Text == "")DLitextBox.Focus();if (cucaotextBox .Text == "" || guanchangtextBox .Text == "" || guanjingtextBox .Text == "" || midutextBox .Text == ""){MessageBox.Show("请检查是否遗漏数据!");return;}if ((LLiangtextBox.Text == ""&&LSutextBox.Text == "") || (YDongtextBox.Text ==""&&DLitextBox.Text == "")){MessageBox.Show("请检查是否遗漏数据!11");return;}ZCD = float.Parse(cucaotextBox.Text);L = float.Parse(guanchangtextBox.Text);d = float.Parse(guanjingtextBox.Text);Md = float.Parse(midutextBox.Text);if (Liuliang == true){Q = float.Parse(LLiangtextBox.Text);}else{v = float.Parse(LSutextBox.Text);Q = Pi * d * d * v / 4;}if (YDniandu == true){YDnd = float.Parse(YDongtextBox.Text);}else{DLnd = float.Parse(DLitextBox.Text);YDnd = DLnd / Md;}Re = 4 * Q / (Pi * d * YDnd);LNuotextBox.Text = Re.ToString();Kesi =0.002*ZCD /d ;Re1 =59.7/Math .Pow (Kesi ,8/7);Re2 = (665 - 765 * Math.Log10(Kesi)) / Kesi;if (Re <= 2000){LTaitextBox.Text = "层流";lanbuda = 64 / Re;b = 4.15;m = 1;}else{if (3000 < Re && Re <= Re1){LTaitextBox.Text = "水力光滑";lanbuda = 0.3164 / Math.Pow(Re, 1 / 4);b = 0.0246; m = 0.25;}else{if (Re >= Re2){LTaitextBox.Text = "水力粗糙";lanbuda = 0;b = 0; m = 0;}else{LTaitextBox.Text = "混合摩擦";lanbuda = 0;b = 0; m = 0;}}}if (lanbuda == 0)MZutextBox.Text = "不做要求";elseMZutextBox.Text = lanbuda.ToString();if (b != 0 && m != 0){Hf = b * Math.Pow(YDnd, m) * Math.Pow(Q, (2 - m)) * L / Math.Pow(d, (5 - m)); YChengtextBox.Text = Hf.ToString();}elseYChengtextBox.Text = "不做要求"; }}}。
C语言编写的计算器源代码
C语言编写的计算器源代码```c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#define MAX_EXPRESSION_SIZE 100//栈结构定义typedef structint top;double data[MAX_EXPRESSION_SIZE];} Stack;//初始化栈void initStack(Stack *s)s->top = -1;//入栈void push(Stack *s, double value)if (s->top == MAX_EXPRESSION_SIZE - 1)printf("Stack is full. Cannot push element.\n");} elses->data[++(s->top)] = value;}//出栈double pop(Stack *s)if (s->top == -1)printf("Stack is empty. Cannot pop element.\n"); return -1;} elsereturn s->data[(s->top)--];}//获取栈顶元素double peek(Stack *s)if (s->top == -1)return -1;} elsereturn s->data[s->top];}//判断运算符的优先级int getPriority(char operator)switch (operator)case '+':case '-':return 1;case '*':case '/':return 2;case '^':return 3;default:return -1;}//执行四则运算double performOperation(double operand1, double operand2, char operator)switch (operator)case '+':return operand1 + operand2;case '-':return operand1 - operand2;case '*':return operand1 * operand2;case '/':if (operand2 != 0)return operand1 / operand2;} elseprintf("Error: Division by zero.\n");exit(1);}case '^':return pow(operand1, operand2);default:return 0;}//计算表达式结果double evaluateExpression(char *expression) Stack operandStack;Stack operatorStack;initStack(&operandStack);initStack(&operatorStack);int length = strlen(expression);for (int i = 0; i < length; i++)//忽略空格if (expression[i] == ' ')continue;}//数字直接入栈if (isdigit(expression[i]))double num = 0;while (i < length && (isdigit(expression[i]) , expression[i] == '.'))num = num * 10 + (expression[i] - '0');i++;}i--;push(&operandStack, num);}//左括号入栈else if (expression[i] == '(')push(&operatorStack, expression[i]);}//右括号出栈并执行运算,直到遇到左括号else if (expression[i] == ')')while (peek(&operatorStack) != '(')double operand2 = pop(&operandStack);double operand1 = pop(&operandStack);char operator = pop(&operatorStack);double result = performOperation(operand1, operand2, operator);push(&operandStack, result);}pop(&operatorStack);}//运算符出栈并执行运算,直到栈空或者遇到优先级较低的运算符elsewhile (peek(&operatorStack) != -1 &&getPriority(expression[i]) <= getPriority(peek(&operatorStack))) double operand2 = pop(&operandStack);double operand1 = pop(&operandStack);char operator = pop(&operatorStack);double result = performOperation(operand1, operand2, operator);push(&operandStack, result);}push(&operatorStack, expression[i]);}}//处理剩下的运算符while (peek(&operatorStack) != -1)double operand2 = pop(&operandStack);double operand1 = pop(&operandStack);char operator = pop(&operatorStack);double result = performOperation(operand1, operand2, operator);push(&operandStack, result);}return pop(&operandStack); // 返回最终结果int maichar expression[MAX_EXPRESSION_SIZE];printf("Enter an arithmetic expression: ");fgets(expression, MAX_EXPRESSION_SIZE, stdin);double result = evaluateExpression(expression);printf("Result = %.2f\n", result);return 0;```这个计算器可以实现基本的四则运算,支持括号和浮点数。
计算流体力学中的有限体积法:openfoam和matlab高级导论
计算流体力学中的有限体积法:openfoam和matlab高级导论有限体积法(FVM)是计算流体力学(CFD)中常用的离散化方法之一。
它将计算区域划分为有限体积单元,利用守恒方程来描述物理过程,在离散化的单元上逐一求解。
OpenFOAM和Matlab都是常用的计算流体力学软件,下面分别介绍它们在FVM中的应用。
1. OpenFOAM中的FVMOpenFOAM是一个开源的CFD软件,采用FVM方法求解守恒方程。
它提供了一个强大而灵活的求解器库,可以用于求解各种流体流动的问题。
OpenFOAM 的求解方法基于C++编写的高性能数值算法库,可以高效地进行并行计算。
它的优点包括:- 支持多标量分组方法和混合方法的求解;- 可以使用多种涡量法求解技术;- 支持高精度的算法,如高阶量级插值;- 支持不同的边界条件选择;- 提供了与其他流动模拟软件的兼容性。
OpenFOAM应用广泛,涉及的行业包括汽车、航空、能源、建筑物、生物医学等。
在不同行业的应用中,使用OpenFOAM对流体力学现象进行建模、仿真和优化是非常有用的。
2. Matlab中的FVMMatlab也是一种常用的CFD软件,可以利用FVM方法求解守恒方程。
Matlab 提供了用于模拟流体流动和热传递的工具箱,包括有限差分法、有限元法和有限体积法等。
Matlab的优势包括:- 可以支持不同的模型类型,例如Stokes方程、Navier-Stokes方程和Korteweg-de Vries方程等;- 可以使用不同的数值方法,如显式和隐式数值方法、显式和隐式FVM、高阶FVM等;- 适合进行教学演示和基础学术研究。
Matlab的FVM工具箱可以使用自定义代码或预先编译的函数进行扩展。
此外,Matlab还提供了许多用于处理CFD数据的工具,如可视化、数据导出和数据分析等。
总结起来,OpenFOAM和Matlab都是优秀的CFD软件,可以使用FVM方法求解守恒方程并对复杂的流体流动问题进行模拟和优化。
计算器源代码
这几天在做一个小计算器,经过两天的调试终于算是做完了(可能还有小Bug)。
最多可以到10的15次方。
源代码如下(源码我已经放到Skydrive上了,点这里下载):// CalculatorDlg.cpp : implementation file//#include "stdafx.h"#include "Calculator.h"#include "CalculatorDlg.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// CAboutDlg dialog used for App AboutDisplay *Pdisplay;class CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Dataenum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support// Implementationprotected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()// CCalculatorDlg dialogCCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CCalculatorDlg::IDD, pParent), Cal_display(_T("WELCOME")){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);Pdisplay=new Display(this);}void CCalculatorDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, Cal_display);}BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAP// ON_WM_KEYDOWN()ON_BN_CLICKED(IDOK, &CCalculatorDlg::OnBnClickedOk)ON_BN_CLICKED(IDCANCEL, &CCalculatorDlg::OnBnClickedCancel)ON_BN_CLICKED(IDCANCEL2, &CCalculatorDlg::OnBnClickedCancel2) ON_BN_CLICKED(IDOK4, &CCalculatorDlg::OnBnClickedOk4)ON_BN_CLICKED(IDOK6, &CCalculatorDlg::OnBnClickedOk6)ON_BN_CLICKED(IDOK2, &CCalculatorDlg::OnBnClickedOk2)ON_BN_CLICKED(IDCANCEL3, &CCalculatorDlg::OnBnClickedCancel3) ON_BN_CLICKED(IDOK3, &CCalculatorDlg::OnBnClickedOk3)ON_BN_CLICKED(IDCANCEL4, &CCalculatorDlg::OnBnClickedCancel4) ON_BN_CLICKED(IDCANCEL6, &CCalculatorDlg::OnBnClickedCancel6) ON_BN_CLICKED(IDCANCEL5, &CCalculatorDlg::OnBnClickedCancel5) ON_BN_CLICKED(IDCANCEL8, &CCalculatorDlg::OnBnClickedCancel8) ON_BN_CLICKED(IDCANCEL9, &CCalculatorDlg::OnBnClickedCancel9) ON_BN_CLICKED(IDCANCEL7, &CCalculatorDlg::OnBnClickedCancel7) ON_BN_CLICKED(IDOK5, &CCalculatorDlg::OnBnClickedOk5)ON_BN_CLICKED(IDOK7, &CCalculatorDlg::OnBnClickedOk7)ON_BN_CLICKED(IDCANCEL10, &CCalculatorDlg::OnBnClickedCancel10) ON_BN_CLICKED(IDOK8, &CCalculatorDlg::OnBnClickedOk8)ON_BN_CLICKED(IDCANCEL12, &CCalculatorDlg::OnBnClickedCancel12)ON_BN_CLICKED(IDCANCEL11, &CCalculatorDlg::OnBnClickedCancel11)ON_BN_CLICKED(IDOK9, &CCalculatorDlg::OnBnClickedOk9)ON_BN_CLICKED(IDCANCEL13, &CCalculatorDlg::OnBnClickedCancel13)ON_BN_CLICKED(IDOK10, &CCalculatorDlg::OnBnClickedOk10)ON_BN_CLICKED(IDCANCEL15, &CCalculatorDlg::OnBnClickedCancel15)ON_BN_CLICKED(IDCANCEL14, &CCalculatorDlg::OnBnClickedCancel14)ON_WM_KEYUP()END_MESSAGE_MAP()// CCalculatorDlg message handlersBOOL CCalculatorDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}//--------------------------------------------------------------------------------------------------//void CCalculatorDlg::OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags) //{//int a=1;//CDialog::OnKeyDown(nChar, nRepCnt, nFlags);//}//void CCalculatorDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) //{// int a=1;//// CDialog::OnKeyUp(nChar, nRepCnt, nFlags);//}void CCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else if(nID==SC_CLOSE){CCalculatorDlg::OnOK();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.void CCalculatorDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this function to obtain the cursor to display while the user drags// the minimized window.HCURSOR CCalculatorDlg::OnQueryDragIcon(){return static_cast<HCURSOR>(m_hIcon);}//------------------------------OnButtonnClicked 部分-------------------------------------------------------------------------void CCalculatorDlg::OnBnClickedOk(){Caldata.CLEAR();UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel(){Caldata.MC();UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel2() {Caldata.MR();UpdateDisplay();}void CCalculatorDlg::OnBnClickedOk4() {Caldata.KEYIN(1);UpdateDisplay();}void CCalculatorDlg::OnBnClickedOk6() {Caldata.KEYIN(4);UpdateDisplay();}void CCalculatorDlg::OnBnClickedOk2() {Caldata.MM();UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel3() {Caldata.MA();UpdateDisplay();}void CCalculatorDlg::OnBnClickedOk3() {Caldata.PN();UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel4() {Caldata.ADD();UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel6() {Caldata.KEYIN(2);UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel5() {Caldata.KEYIN(3);UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel8() {Caldata.KEYIN(6);UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel9() {Caldata.KEYIN(5);UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel7() {Caldata.MINUS();UpdateDisplay();}void CCalculatorDlg::OnBnClickedOk5(){Caldata.Mode_Error=Caldata.SQRT(); UpdateDisplay();}void CCalculatorDlg::OnBnClickedOk7(){Caldata.SQR();UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel10() {Caldata.BY();UpdateDisplay();}void CCalculatorDlg::OnBnClickedOk8(){Caldata.KEYIN(7);UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel12() {Caldata.KEYIN(8);UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel11() {Caldata.KEYIN(9);UpdateDisplay();}void CCalculatorDlg::OnBnClickedOk9(){Caldata.Mode_Error=Caldata.REC(); UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel13() {Caldata.DIV();UpdateDisplay();}void CCalculatorDlg::OnBnClickedOk10() {Caldata.Dot();UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel15() {Caldata.KEYIN(0);UpdateDisplay();}void CCalculatorDlg::OnBnClickedCancel14() {Caldata.Mode_Error=Caldata.EQUAL();UpdateDisplay();}//------------------------------------------Display部分-----------------------------------------------------------------void CCalculatorDlg::UpdateDisplay(){if(!Caldata.Mode_Error){if(!(Caldata.Mode_Dot)){Cal_display.Format(_T("%lf"),Caldata.Data_Display);for(int i=Cal_display.GetLength()-1;i>1;i--) //去掉尾部多余的0,这个方法可共用,可以写成STATIC{if(Cal_display.GetAt(i)=='.')break;if(Cal_display.GetAt(i)=='0')Cal_display.Delete(i);else break;}}else {if(Caldata.Data_Display!=0){int j=0;Cal_display.Format(_T("%lf"),Caldata.Data_Display);for(int i=Cal_display.GetLength()-1;i>1;i--){if(Cal_display.GetAt(i)=='.')break;if(Cal_display.GetAt(i)=='0')Cal_display.Delete(i);else break;}for(int i=Cal_display.GetLength()-1;i>1;i--){ if(Cal_display.GetAt(i)=='.') break;j++;}if(j<=Caldata.Digi_Dot)for(int i=0;i<Caldata.Digi_Dot-j;i++) //小数输入,尾部补0Cal_display.Append(_T("0")); }else{Cal_display.Format(_T("0."));for(int i=0;i<Caldata.Digi_Dot;i++){Cal_display.Append(_T("0"));}}}}else Cal_display.Format(_T("ERROR"));UpdateData(false);}void CCalculatorDlg::ResetDisplay(){}//--------------------------------CALDATA 部分-----------------------------------------------------------Cal_Data::Cal_Data(){Data_Display=0;Data_Remember=0;Data_Last=0;Mode_Remenber=false;Mode_Input=false;Mode_Dot=false;Mode_Error=false;Digi_Dot=0;calaction=Cal_Action::Action_Null;}void Cal_Data::CLEAR(){Data_Display=0;Data_Last=0;Mode_Input=false;Mode_Error=false;Mode_Dot=false;calaction=Cal_Action::Action_Null;}void Cal_Data::MA(){Data_Remember=Data_Remember+Data_Display; }void Cal_Data::MM(){Data_Remember=Data_Remember-Data_Display; }void Cal_Data::MR(){Data_Display=Data_Remember;Mode_Input=false;}void Cal_Data::MC(){Data_Remember=0;Mode_Remenber=false;}void Cal_Data::ADD(){Data_Last=Data_Display;Mode_Dot=Mode_Input=false; calaction=Cal_Action::Action_Add;}void Cal_Data::MINUS(){Data_Last=Data_Display;Mode_Dot=Mode_Input=false;calaction=Cal_Action::Action_Minus;}void Cal_Data::BY(){Data_Last=Data_Display;Mode_Dot=Mode_Input=false;calaction=Cal_Action::Action_By;}void Cal_Data::DIV(){Data_Last=Data_Display;Mode_Dot=Mode_Input=false;calaction=Cal_Action::Action_Divide;}bool Cal_Data::EQUAL(){double TMP;Digi_Dot=0;Mode_Dot=false;switch(calaction){case Cal_Action::Action_Add : Data_Display+=Data_Last; Mode_Dot=Mode_Input=false;break;case Cal_Action::Action_Minus: Data_Display=Data_Last-Data_Display;Mode_Dot=Mode_Input=false;break;case Cal_Action::Action_By: Data_Display*=Data_Last;Mode_Dot=Mode_Input=false;break;case Cal_Action::Action_Divide: if(Data_Display==0)return true;else Data_Display=Data_Last/Data_Display;Mode_Dot=Mode_Input=false;break;case Cal_Action::Action_Null: Mode_Dot=Mode_Input=false;break;}calaction=Cal_Action::Action_Null;return false;}void Cal_Data::SQR(){Data_Display*=Data_Display;Mode_Dot=Mode_Input=false;}bool Cal_Data::SQRT(){Mode_Dot=Mode_Input=false;if(Data_Display<0)return true;Data_Display=sqrt(Data_Display);return false;}bool Cal_Data::REC(){Mode_Dot=Mode_Input=false;if(Data_Display==0)return true;else Data_Display=1/Data_Display;return false;}void Cal_Data::PN(){if(Data_Display!=0) Data_Display=-Data_Display;}void Cal_Data::Dot(){if(!Mode_Dot) { Mode_Dot=true;Digi_Dot=0;}}void Cal_Data::KEYIN(int value){ if(Data_Display>=100000000000000) //double型的数大于100000000000000后精度不高,所以限定为15位return;if(!Mode_Input){ Mode_Input=true;Data_Display=0;}if(!Mode_Dot){Data_Display*=10.0;Data_Display=Data_Display>=0? Data_Display+(double)value: Data_Display-(double)value;}else{if(Digi_Dot>=6) //小数点后面最多输入到第6位,否者会出错(double的精度不高)return;Digi_Dot++;double TMP=value;for(int i=0;i<Digi_Dot;i++){TMP=TMP/10.0;}Data_Display=Data_Display>=0? Data_Display+TMP:Data_Display-TMP;。
cfd编程实例
cfd编程实例CFD编程实例概述:计算流体力学(Computational Fluid Dynamics,CFD)是一种通过数值计算方法来模拟和分析流体流动行为的工程技术。
在现代工程领域中,CFD广泛应用于气动设计、热传递、流动控制等方面。
本文将结合一个具体的CFD编程实例,介绍CFD的基本原理和应用。
引言:CFD是一种基于计算机数值模拟的流体力学分析方法,通过对流体流动进行离散化、数值化计算,可以获得流体的速度、压力、温度等相关参数。
CFD编程实例是指通过编写计算机程序,实现对流体流动的模拟和分析。
下面以一维对流扩散方程为例,介绍CFD编程实例的具体步骤。
问题描述:假设有一根长为L的导热棒,两端温度分别为T1和T2,导热棒内部存在对流和扩散现象。
我们需要通过CFD方法,计算导热棒上不同位置的温度分布。
解决步骤:1. 网格划分:我们需要将导热棒划分为若干个网格单元,每个网格单元内的温度近似为常数。
可以通过等间距划分或非等间距划分的方法来确定网格的位置和尺寸,以保证结果的精度和计算效率。
2. 离散化:在CFD编程中,需要将连续的物理问题离散化为离散的数值问题。
对于一维对流扩散方程,可以采用有限差分法(Finite Difference Method)对空间和时间进行离散化。
通过将导热棒上的温度场离散为一组节点温度,可以得到节点之间的温度差分方程。
3. 边界条件:在CFD编程中,需要设定合适的边界条件来模拟实际问题。
对于导热棒上的温度分布问题,边界条件即为导热棒两端的温度T1和T2。
4. 数值求解:通过对离散化的温度差分方程进行数值求解,可以得到导热棒上不同位置的温度分布。
常用的数值求解方法包括显式法、隐式法和迎风法等。
在CFD编程中,需要选择合适的数值求解方法来保证计算的稳定性和精度。
5. 结果分析:通过CFD编程实例,我们可以得到导热棒上不同位置的温度分布。
可以通过绘制温度分布曲线、计算平均温度等方式对结果进行分析和评估。
vba流体力学计算
vba流体力学计算
VBA(Visual Basic for Applications)是一种用于自动化任
务和处理数据的编程语言,而流体力学是研究流体运动和力学行为
的科学领域。
在VBA中进行流体力学计算可以通过编写程序来实现。
首先,流体力学计算涉及到一系列的方程和算法,包括流体的
运动方程、连续性方程、动量方程和能量方程等。
在VBA中,你可
以编写程序来模拟这些方程,进行流体力学计算。
在进行VBA流体力学计算时,你需要考虑以下几个方面:
1. 数据输入,确定流体力学计算所需的初始条件和边界条件,
包括流体的密度、粘度、速度场等信息。
这些数据可以通过VBA程
序进行输入和处理。
2. 数值方法,选择合适的数值方法来离散化流体力学方程,常
见的方法包括有限差分法、有限体积法和有限元法等。
在VBA中,
你可以编写程序来实现这些数值方法。
3. 迭代求解,流体力学计算通常需要进行迭代求解,直到达到
收敛条件为止。
在VBA中,你可以编写循环结构来实现迭代求解过程。
4. 结果输出,最终的流体力学计算结果可以通过VBA程序输出到文件或者图形界面上进行展示和分析。
总的来说,VBA可以用于流体力学计算,但需要编写复杂的程序来实现流体力学方程的离散化和求解过程。
同时,考虑到VBA的性能限制,对于大规模或者复杂的流体力学计算,可能需要考虑使用其他更高效的编程语言或者软件来实现。
C语言在流体力学中的应用实例
{ double c1,c2,c3,v;
c1=L1/d1;
c2=L2/d2*pow(d1/d2,4);
c3=Ce+pow(1-pow(d1/d2,2),2)+pow(d1/d2,4);
v=sqrt(2*g*H/(c1*x1+c2*x2+c3));
#define FOMAT5 printf("e1=%lf Re1=%lf k1=%lf\ne2=%lf Re2=%lf k2=%lf\n",e1,fRe(fv1(ld1,ld2),d1),k1,e2,fRe(fv2(ld1,ld2),d2),k2);
double Ce=0.5,L1=300.0,d1=0.6,K1=0.0015,L2=240.0,d2=0.9,K2=0.0003,V=1.0e-6,H=6.0,g=9.807;
v21=fv2(ld12,ld21);
Re2=fRe(v21,d2);
ld22=fld(k2,Re2);
e1=fe(ld11,ld12);
e2=1=ld12;
ld2=ld22;
V1=fv1(ld1,ld2);
V2=fv2(ld1,ld2);
Q=V1*PI*pow(d1,2)/4.0;
e1=0,e2=0,ld1=0,ld2=0,V1=0,V2=0,Q=0;
int n=1;
k1=K1/d1;
k2=K2/d2;
FOMAT1
FOMAT2
v11=fv1(ld11,ld21);
Re1=fRe(v11,d1);
ld12=fld(k1,Re1);
v21=fv2(ld12,ld21);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以下为 program.cs的代码using System;using System.Collections.Generic;using System.Linq;//using System.Threading.Tasks;using System.Windows.Forms;namespace水力计算优化版{staticclass Program{///<summary>///应用程序的主入口点。
///</summary>[STAThread]staticvoid Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}}}以下为from1.cs的代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;//using System.Threading.Tasks;using System.Windows.Forms;namespace水力计算优化版{publicpartialclass Form1 : Form{publicdouble Q, ZCD, L, d, Md, v, DLnd, YDnd, Re, Pi = 3.14D, Kesi, Re1, Re2, lanbuda; publicdouble b, m, Hf;publicbool YDniandu, Liuliang;public Form1(){InitializeComponent();}privatevoid CanShuCongShe_Click(object sender, EventArgs e){guanjingtextBox.Clear();cucaotextBox.Clear();guanchangtextBox.Clear();midutextBox.Clear();LSutextBox.Clear();LLiangtextBox.Clear();DLitextBox.Clear();YDongtextBox.Clear();LNuotextBox.Clear();LTaitextBox.Clear();MZutextBox.Clear();YChengtextBox.Clear();guanjingtextBox.Focus();}privatevoid LSuradioButton_CheckedChanged(object sender, EventArgs e){if (LSuradioButton.Checked == true){LLiangtextBox.Visible = false;LSutextBox.Visible = true;Liuliang = false;}}privatevoid LLiangradioButton_CheckedChanged(object sender, EventArgs e) {if (LLiangradioButton.Checked == true){LLiangtextBox.Visible = true;LSutextBox.Visible = false;Liuliang = true;}}privatevoid DLiradioButton_CheckedChanged(object sender, EventArgs e){if (DLiradioButton.Checked == true){DLitextBox.Visible = true;YDongtextBox.Visible = false;YDniandu = false;}}privatevoid YDongradioButton_CheckedChanged(object sender, EventArgs e) {if (YDongradioButton.Checked == true){DLitextBox.Visible = false;YDongtextBox.Visible = true;YDniandu = true;}}privatevoid button1_Click(object sender, EventArgs e){if (cucaotextBox.Text == "")cucaotextBox.Focus();if (guanjingtextBox.Text == "")guanjingtextBox .Focus ();if (guanchangtextBox.Text == "")guanchangtextBox.Focus();if (midutextBox.Text == "")midutextBox.Focus();if (LLiangtextBox.Text == "")LLiangtextBox.Focus();if (LSutextBox.Text == "")LSutextBox.Focus();if (YDongtextBox.Text == "")YDongtextBox.Focus();if (DLitextBox.Text == "")DLitextBox.Focus();if (cucaotextBox .Text == "" || guanchangtextBox .Text == "" || guanjingtextBox .Text == "" || midutextBox .Text == ""){MessageBox.Show("请检查是否遗漏数据!");return;}if ((LLiangtextBox.Text == ""&&LSutextBox.Text == "") || (YDongtextBox.Text ==""&&DLitextBox.Text == "")){MessageBox.Show("请检查是否遗漏数据!11");return;}ZCD = float.Parse(cucaotextBox.Text);L = float.Parse(guanchangtextBox.Text);d = float.Parse(guanjingtextBox.Text);Md = float.Parse(midutextBox.Text);if (Liuliang == true){Q = float.Parse(LLiangtextBox.Text);}else{v = float.Parse(LSutextBox.Text);Q = Pi * d * d * v / 4;}if (YDniandu == true){YDnd = float.Parse(YDongtextBox.Text);}else{DLnd = float.Parse(DLitextBox.Text);YDnd = DLnd / Md;}Re = 4 * Q / (Pi * d * YDnd);LNuotextBox.Text = Re.ToString();Kesi =0.002*ZCD /d ;Re1 =59.7/Math .Pow (Kesi ,8/7);Re2 = (665 - 765 * Math.Log10(Kesi)) / Kesi;if (Re <= 2000){LTaitextBox.Text = "层流";lanbuda = 64 / Re;b = 4.15;m = 1;}else{if (3000 < Re && Re <= Re1){LTaitextBox.Text = "水力光滑";lanbuda = 0.3164 / Math.Pow(Re, 1 / 4);b = 0.0246; m = 0.25;}else{if (Re >= Re2){LTaitextBox.Text = "水力粗糙";lanbuda = 0;b = 0; m = 0;}else{LTaitextBox.Text = "混合摩擦";lanbuda = 0;b = 0; m = 0;}}}if (lanbuda == 0)MZutextBox.Text = "不做要求";elseMZutextBox.Text = lanbuda.ToString();if (b != 0 && m != 0){Hf = b * Math.Pow(YDnd, m) * Math.Pow(Q, (2 - m)) * L / Math.Pow(d, (5 - m)); YChengtextBox.Text = Hf.ToString();}elseYChengtextBox.Text = "不做要求"; }}}。