📄 sx03.c
字号:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
int TRIDAG(int i,int k);
float H0[11],H[11],a[11],b[11],c[11],d[11];
int main()
{
/* PRACTICE 03 (D1 CRAN-NICOLSION METHOD)*/
float KM,MU,LAMDA;
float DX,DT;
/* float far H[11],a[11],b[11],c[11],d[11]; */
float TIME;
int NP,NP01,ndt,mdt;
int ICOUNT,IPRINT;
int i;
float E;
KM=20.0;
MU=0.002;
NP=11;
/* NP1=NP+1;*/
NP01=NP-1;
ndt=60;
DX=100.0;
DT=0.5;
LAMDA=KM*DT/(MU*DX*DX);
printf("\nLAMDA=%5.2f\n",LAMDA);
E=2.0*(1.0/LAMDA-1);
for(i=0;i<NP;i++)
{H0[i]=0;}
H0[NP-1]=1.0;
H[0]=1.0;
H0[0]=1.0;
H[NP-1]=0.0;
for(i=1;i<NP01;i++)
{a[i]=-1;
b[i]=2.0*(1.0/LAMDA+1);
c[i]=-1;
}
printf("\nTime\t\t\tHead\n\n");
TIME=0.0;
ICOUNT=1;
IPRINT=4;
for(mdt=0;mdt<ndt;mdt++)
{
TIME=TIME+DT;
for(i=1;i<NP01;i++)
{d[i]=H0[i-1]+E*H0[i]+H0[i+1];
}
d[1]=d[1]+H[0];
d[NP-2]=d[NP-2]+H[NP-1];
TRIDAG(1,NP-2);
if(ICOUNT==IPRINT)
{
printf("%5.2f",TIME);
for(i=0;i<NP;i++)
{
printf("%6.2f",H[i]);
}
printf("\n");
ICOUNT=1;
}
else
{
ICOUNT=ICOUNT+1;
}
for(i=1;i<NP01;i++)
{
H0[i]=H[i];
}
}
return 0;
}
int TRIDAG( int IF,int L)
{
int ii,i,j;
float beta[11],gamma[11];
beta[IF]=b[IF];
gamma[IF]=d[IF]/beta[IF];
for(i=IF+1;i<L+1;i++)
{
beta[i]=b[i]-a[i]*c[i-1]/beta[i-1];
gamma[i]=(d[i]-a[i]*gamma[i-1])/beta[i];
}
H[L]=gamma[L];
ii=L-IF;
for(j=1;j<ii+1;j++)
{
i=L-j;
H[i]=gamma[i]-c[i]*H[i+1]/beta[i];
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -