📄 d1q5_c.mht
字号:
From: <óé Microsoft Internet Explorer 5 ±£′?>
Subject:
Date: Fri, 30 Jun 2006 15:41:33 +0800
MIME-Version: 1.0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.physics.ndsu.nodak.edu/wagner/source/D1Q5.c
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2900.2912" name=3DGENERATOR></HEAD>
<BODY><PRE>/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 =
USA
*/
/* An implementation of the D1Q5 model for non-ideal systems */
#include <stdlib.h>
#include <math.h>
#include "mygraph.h"
#define xdim 100
double f0[xdim],f1[xdim],f2[xdim],f3[xdim],f4[xdim],n[xdim];
double n0=3D1, T0=3D0.33333333, Amp=3D0.01, omega=3D1;
double pc=3D1, theta=3D0.1, nc=3D1, kappa=3D0.1;
double ug[xdim],pg[xdim],tg[xdim];
int ugreq=3D0,pgreq=3D0,tgreq=3D0;
int next=3D0,pause=3D1,done=3D0,Repeat=3D1,iterations;
void init(){
int i;
iterations=3D0;
for (i=3D0;i<xdim;i++){
n[i]=3Dn0+Amp*sin(2*M_PI*i/xdim);
f0[i]=3Dn[i]/4 *(4-5*T0+5*T0*T0);
f1[i]=3Dn[i]/6 *( 4*T0-5*T0*T0);
f2[i]=3Dn[i]/6 *( 4*T0-5*T0*T0);
f3[i]=3Dn[i]/24*( -T0+5*T0*T0);
f4[i]=3Dn[i]/24*( -T0+5*T0*T0);
}
}
void init_analytical(){
int i;
iterations=3D0;
for (i=3D0;i<xdim;i++){
n[i]=3Dn0+Amp*(1.0*random()/RAND_MAX-0.5);
f0[i]=3Dn[i]/4 *(4-5*T0+5*T0*T0);
f1[i]=3Dn[i]/6 *( 4*T0-5*T0*T0);
f2[i]=3Dn[i]/6 *( 4*T0-5*T0*T0);
f3[i]=3Dn[i]/24*( -T0+5*T0*T0);
f4[i]=3Dn[i]/24*( -T0+5*T0*T0);
}
}
void (*iteration)();
void iteration_ideal(){
double u,T,tmp,tmp2;
int i;
iterations++;
for (i=3D0;i<xdim;i++){
n[i]=3Df0[i]+f1[i]+f2[i]+f3[i]+f4[i];
u=3Df1[i]-f2[i]+2*f3[i]-2*f4[i];
T=3D(f1[i]+f2[i]+4*f3[i]+4*f4[i])/n[i]-u*u;
f0[i]+=3Domega*(n[i]/4.*(4-5*T+5*T*T-(5-6*T)*u*u+u*u*u*u)-f0[i]);
=
f1[i]+=3Domega*(n[i]/6.*(4*T-5*T*T+(4-3*T)*u+(4-6*T)*u*u-u*u*u-u*u*u*u)-f=
1[i]);
=
f2[i]+=3Domega*(n[i]/6.*(4*T-5*T*T-(4-3*T)*u+(4-6*T)*u*u+u*u*u-u*u*u*u)-f=
2[i]);
=
f3[i]+=3Domega*(n[i]/24.*(-T+5*T*T-(2-6*T)*u-(1-6*T)*u*u+2*u*u*u+u*u*u*u)=
-f3[i]);
=
f4[i]+=3Domega*(n[i]/24.*(-T+5*T*T+(2-6*T)*u-(1-6*T)*u*u-2*u*u*u+u*u*u*u)=
-f4[i]);
}
tmp=3Df1[0];
memmove(&f1[0],&f1[1],(xdim-1)*sizeof(double));
f1[xdim-1]=3Dtmp;
tmp=3Df2[xdim-1];
memmove(&f2[1],&f2[0],(xdim-1)*sizeof(double));
f2[0]=3Dtmp;
tmp=3Df3[0];
tmp2=3Df3[1];
memmove(&f3[0],&f3[2],(xdim-2)*sizeof(double));
f3[xdim-1]=3Dtmp2;
f3[xdim-2]=3Dtmp;
tmp=3Df4[xdim-1];
tmp2=3Df4[xdim-2];
memmove(&f4[2],&f4[0],(xdim-2)*sizeof(double));
f4[0]=3Dtmp2;
f4[1]=3Dtmp;
}
void iteration_forcing(){
static double p[xdim],pp[xdim];
double u,T,nu[xdim],TT[xdim],F,tmp,tmp2,phi,dn,ddn,dp,ddp;
int i,ip,im,ipp,imm;
iterations++;
for (i=3D0;i<xdim;i++){
n[i]=3Df0[i]+f1[i]+f2[i]+f3[i]+f4[i];
}
for (i=3D0;i<xdim;i++){
ip=3D(i+1)%xdim;
im=3D(i+xdim-1)%xdim;
dn=3D0.5*(n[ip]-n[im]);
ddn=3D(n[ip]-2*n[i]+n[im]);
phi=3D(n[i]-nc)/nc;
nu[i]=3Df1[i]-f2[i]+2*f3[i]-2*f4[i];
TT[i]=3D0.333333333 =
/*(f1[i]+f2[i]+4*f3[i]+4*f4[i]-nu[i]*nu[i])/n[i]*/;
p[i]=3Dpc*(phi+1)*(phi+1)*(3*phi*phi-2*phi+1-2*theta)
-kappa*(n[i]*ddn-0.5*dn*dn)-n[i]*TT[i];
}
for (i=3D0;i<xdim;i++){
ip=3D(i+1)%xdim;
im=3D(i+xdim-1)%xdim;
pp[i]=3D1.5*p[i]-0.25*(p[ip]+p[im]);
}
for (i=3D0;i<xdim;i++){
ip=3D(i+1)%xdim;ipp=3D(ip+1)%xdim;
im=3D(i+xdim-1)%xdim; imm=3D(im+xdim-1)%xdim;
T=3DTT[i];
dp=3D(4.-3*T)/6.*(pp[ip]-pp[im])-(1-3*T)/12.*(pp[ipp]-pp[imm]);
F=3Ddp;
u=3Dnu[i]/n[i];
f0[i]+=3Domega*(n[i]/4.*(4-5*T+5*T*T-(5-6*T)*u*u+u*u*u*u)-f0[i]);
=
f1[i]+=3Domega*(n[i]/6.*(4*T-5*T*T+(4-3*T)*u+(4-6*T)*u*u-u*u*u-u*u*u*u)-f=
1[i])
+(4-3*T)*F;
=
f2[i]+=3Domega*(n[i]/6.*(4*T-5*T*T-(4-3*T)*u+(4-6*T)*u*u+u*u*u-u*u*u*u)-f=
2[i])
-(4-3*T)*F;
=
f3[i]+=3Domega*(n[i]/24.*(-T+5*T*T-(2-6*T)*u-(1-6*T)*u*u+2*u*u*u+u*u*u*u)=
-f3[i])
-(2-6*T)*F;
=
f4[i]+=3Domega*(n[i]/24.*(-T+5*T*T+(2-6*T)*u-(1-6*T)*u*u-2*u*u*u+u*u*u*u)=
-f4[i])
+(2-6*T)*F;
}
tmp=3Df1[0];
memmove(&f1[0],&f1[1],(xdim-1)*sizeof(double));
f1[xdim-1]=3Dtmp;
tmp=3Df2[xdim-1];
memmove(&f2[1],&f2[0],(xdim-1)*sizeof(double));
f2[0]=3Dtmp;
tmp=3Df3[0];
tmp2=3Df3[1];
memmove(&f3[0],&f3[2],(xdim-2)*sizeof(double));
f3[xdim-1]=3Dtmp2;
f3[xdim-2]=3Dtmp;
tmp=3Df4[xdim-1];
tmp2=3Df4[xdim-2];
memmove(&f4[2],&f4[0],(xdim-2)*sizeof(double));
f4[0]=3Dtmp2;
f4[1]=3Dtmp;
}
void SetIdeal(){
iteration=3Diteration_ideal;
}
void SetForcing(){
iteration=3Diteration_forcing;
}
void GUI(){
static int xdimi=3Dxdim;
DefineGraphN_R("n",&n[0],&xdimi,NULL);
DefineGraphN_R("u",&ug[0],&xdimi,&ugreq);
DefineGraphN_R("p",&pg[0],&xdimi,&pgreq);
DefineGraphN_R("T",&tg[0],&xdimi,&tgreq);
StartMenu("D1Q3",1);
DefineFunction("Set Ideal",&SetIdeal);
DefineFunction("Set Forcing",&SetForcing);
DefineInt("iterations",&iterations);
DefineDouble("theta",&theta);
DefineDouble("pc",&pc);
DefineDouble("nc",&nc);
DefineDouble("kappa",&kappa);
DefineDouble("omega",&omega);
DefineDouble("Amp",&Amp);
DefineDouble("n0",&n0);
DefineDouble("T0",&T0);
DefineFunction("init",&init);
DefineGraph(curve2d_,"Graphs");
DefineInt("Repeat",&Repeat);
DefineBool("next",&next);
DefineBool("pause",&pause);
DefineBool("done",&done);
EndMenu();
}
void GetData(){
int i;
if (ugreq||tgreq) {
for (i=3D0;i<xdim;i++) ug[i]=3D(f1[i]-f2[i]+2*f3[i]-2*f4[i])
/(f0[i]+f1[i]+f2[i]+f3[i]+f4[i]);
ugreq=3D0;
}
if (pgreq) {
for (i=3D0;i<xdim;i++) pg[i]=3Df1[i]+f2[i]+4*f3[i]+4*f4[i];
pgreq=3D0;
}
if (tgreq) {
for (i=3D0;i<xdim;i++) tg[i]=3D(f1[i]+f2[i]+4*f3[i]+4*f4[i])
/(f0[i]+f1[i]+f2[i]+f3[i]+f4[i])-ug[i]*ug[i];
tgreq=3D0;
}
}
int main(int argc, char *argv[]){
int newdata=3D1;
int i;
SetIdeal();
init();
GUI();
while (done=3D=3D0){
Events(newdata);
GetData();
DrawGraphs();
if (next|| !pause){
newdata=3D1;
next=3D0;
for (i=3D0;i<Repeat;i++){
iteration();
}
}
else sleep(1);
}
return 0;
}
</PRE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -