⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d1q5_c.mht

📁 用于液体模拟
💻 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 &lt;stdlib.h&gt;
#include &lt;math.h&gt;

#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&lt;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&lt;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&lt;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(&amp;f1[0],&amp;f1[1],(xdim-1)*sizeof(double));
  f1[xdim-1]=3Dtmp;
  tmp=3Df2[xdim-1];
  memmove(&amp;f2[1],&amp;f2[0],(xdim-1)*sizeof(double));
  f2[0]=3Dtmp;
  tmp=3Df3[0];
  tmp2=3Df3[1];
  memmove(&amp;f3[0],&amp;f3[2],(xdim-2)*sizeof(double));
  f3[xdim-1]=3Dtmp2;
  f3[xdim-2]=3Dtmp;
  tmp=3Df4[xdim-1];
  tmp2=3Df4[xdim-2];
  memmove(&amp;f4[2],&amp;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&lt;xdim;i++){
    n[i]=3Df0[i]+f1[i]+f2[i]+f3[i]+f4[i];
  }
  for (i=3D0;i&lt;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&lt;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&lt;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(&amp;f1[0],&amp;f1[1],(xdim-1)*sizeof(double));
  f1[xdim-1]=3Dtmp;
  tmp=3Df2[xdim-1];
  memmove(&amp;f2[1],&amp;f2[0],(xdim-1)*sizeof(double));
  f2[0]=3Dtmp;
  tmp=3Df3[0];
  tmp2=3Df3[1];
  memmove(&amp;f3[0],&amp;f3[2],(xdim-2)*sizeof(double));
  f3[xdim-1]=3Dtmp2;
  f3[xdim-2]=3Dtmp;
  tmp=3Df4[xdim-1];
  tmp2=3Df4[xdim-2];
  memmove(&amp;f4[2],&amp;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",&amp;n[0],&amp;xdimi,NULL);
  DefineGraphN_R("u",&amp;ug[0],&amp;xdimi,&amp;ugreq);
  DefineGraphN_R("p",&amp;pg[0],&amp;xdimi,&amp;pgreq);
  DefineGraphN_R("T",&amp;tg[0],&amp;xdimi,&amp;tgreq);
  StartMenu("D1Q3",1);
  DefineFunction("Set Ideal",&amp;SetIdeal);
  DefineFunction("Set Forcing",&amp;SetForcing);
  DefineInt("iterations",&amp;iterations);
  DefineDouble("theta",&amp;theta);
  DefineDouble("pc",&amp;pc);
  DefineDouble("nc",&amp;nc);
  DefineDouble("kappa",&amp;kappa);
  DefineDouble("omega",&amp;omega);
  DefineDouble("Amp",&amp;Amp);
  DefineDouble("n0",&amp;n0);
  DefineDouble("T0",&amp;T0);
  DefineFunction("init",&amp;init);
  DefineGraph(curve2d_,"Graphs");
  DefineInt("Repeat",&amp;Repeat);
  DefineBool("next",&amp;next);
  DefineBool("pause",&amp;pause);
  DefineBool("done",&amp;done);
  EndMenu();
}

void GetData(){
  int i;

  if (ugreq||tgreq) {
    for (i=3D0;i&lt;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&lt;xdim;i++) pg[i]=3Df1[i]+f2[i]+4*f3[i]+4*f4[i];
    pgreq=3D0;
  }
  if (tgreq) {
    for (i=3D0;i&lt;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&lt;Repeat;i++){
	iteration();
      }
    }
    else sleep(1);
  }

  return 0;
}
</PRE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -