📄 sx02.c
字号:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
int TRIDAG(int i,int k);
float H[11],a[11],b[11],c[11],d[11];
int main()
{
/* PRACTICE 02 (D1 IMPLICIT METHOD)*/
float KM,MU,LAMDA;
float DX,DT;
/* float H[11],a[11],b[11],c[11],d[11]; */
float TIME;
int NP,NP01,ndt,mdt;
int ICOUNT,IPRINT;
int i;
KM=20.0;
MU=0.002;
NP=11;
/* NP1=NP+1;*/
NP01=NP-1;
ndt=70;
DX=10.0;
DT=0.005;
LAMDA=KM*DT/(MU*DX*DX);
printf("\nLAMDA=%5.2f\n",LAMDA);
for(i=1;i<NP01;i++)
{a[i]=-LAMDA;
b[i]=1+2*LAMDA;
c[i]=-LAMDA;
}
for(i=0;i<NP;i++)
{H[i]=16;}
H[0]=16.0;
H[NP-1]=16.0;
printf("\nTime Head\n\n");
TIME=0.0;
ICOUNT=1;
IPRINT=4;
for(mdt=0;mdt<ndt;mdt++)
{
TIME=TIME+DT;
H[0]=16.0+TIME*exp(-TIME);
H[NP-1]=16.0-TIME*exp(-TIME);
for(i=1;i<NP01;i++)
{d[i]=H[i];
}
d[1]=d[1]+LAMDA*H[0];
d[NP-2]=d[NP-2]+LAMDA*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 + -