?? 2.txt
字號:
char svname[25]= "./Data/ot1????.dat";
stp=count/OUTPUT;
svname[10] = '0' + stp/1000;
svname[11] = '0' + (stp%1000)/100;
svname[12] = '0' + ((stp%1000)%100)/10;
svname[13] = '0' + ((stp%1000)%100)%10;
if ((fp=fopen (svname,"w+")) == NULL){
printf("%s was not opened!\n",svname);
printf("’Maybe you should make ’Data’ directory....\n");
exit(1);
}
printf("in %d steps, data outputted to %s...........",count, svname);
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
fprintf(fp,"%2d %2d %30.22e\n",i,j,f[i][j]);
}
}
printf("Done\n");
fclose(fp);
return(0);
}
int output2(double f[IMAX][JMAX], int count){
FILE *fp;
int i, j;
int stp;
char svname[25]= "./Data/ot2????.dat";
stp=count/OUTPUT;
svname[10] = '0' + stp/1000;
svname[11] = '0' + (stp%1000)/100;
svname[12] = '0' + ((stp%1000)%100)/10;
svname[13] = '0' + ((stp%1000)%100)%10;
if ((fp=fopen (svname,"w+")) == NULL){
printf("%s was not opened!\n",svname);
printf("’Maybe you should make ’Data’ directory....\n");
exit(1);
}
printf("in %d steps, data outputted to %s...........",count, svname);
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
fprintf(fp,"%2d %2d %30.22e\n",i,j,f[i][j]);
}
}
printf("Done\n");
fclose(fp);
return(0);
}
int output3(double f[IMAX][JMAX], int count){
FILE *fp;
int i, j;
int stp;
char svname[25]= "./Data/ot3????.dat";
stp=count/OUTPUT;
svname[10] = '0' + stp/1000;
svname[11] = '0' + (stp%1000)/100;
svname[12] = '0' + ((stp%1000)%100)/10;
svname[13] = '0' + ((stp%1000)%100)%10;
if ((fp=fopen (svname,"w+")) == NULL){
printf("%s was not opened!\n",svname);
printf("’Maybe you should make ’Data’ directory....\n");
exit(1);
}
printf("in %d steps, data outputted to %s...........",count, svname);
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
fprintf(fp,"%2d %2d %30.22e\n",i,j,f[i][j]);
}
}
printf("Done\n");
fclose(fp);
return(0);
}
int output4(double f[IMAX][JMAX], int count){
FILE *fp;
int i, j;
int stp;
char svname[25]= "./Data/ot4????.dat";
stp=count/OUTPUT;
svname[10] = '0' + stp/1000;
svname[11] = '0' + (stp%1000)/100;
svname[12] = '0' + ((stp%1000)%100)/10;
svname[13] = '0' + ((stp%1000)%100)%10;
if ((fp=fopen (svname,"w+")) == NULL){
printf("%s was not opened!\n",svname);
printf("’Maybe you should make ’Data’ directory....\n");
exit(1);
}
printf("in %d steps, data outputted to %s...........",count, svname);
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
fprintf(fp,"%2d %2d %30.22e\n",i,j,f[i][j]);
}
}
printf("Done\n");
fclose(fp);
return(0);
}
int output5(double f[IMAX][JMAX], int count){
FILE *fp;
int i, j;
int stp;
char svname[25]= "./Data/ot5????.dat";
stp=count/OUTPUT;
svname[10] = '0' + stp/1000;
svname[11] = '0' + (stp%1000)/100;
svname[12] = '0' + ((stp%1000)%100)/10;
svname[13] = '0' + ((stp%1000)%100)%10;
if ((fp=fopen (svname,"w+")) == NULL){
printf("%s was not opened!\n",svname);
printf("’Maybe you should make ’Data’ directory....\n");
exit(1);
}
printf("in %d steps, data outputted to %s...........",count, svname);
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
fprintf(fp,"%2d %2d %30.22e\n",i,j,f[i][j]);
}
}
printf("Done\n");
fclose(fp);
return(0);
}
int output1d(double f[IMAX][JMAX], int count){
FILE *fp;
int i, j;
int stp;
char svname[25]= "./Data/1dp????.dat";
stp=count/OUTPUT;
svname[10] = '0' + stp/1000;
svname[11] = '0' + (stp%1000)/100;
svname[12] = '0' + ((stp%1000)%100)/10;
svname[13] = '0' + ((stp%1000)%100)%10;
if ((fp=fopen (svname,"w+")) == NULL){
printf("%s was not opened!\n",svname);
printf("’Maybe you should make ’Data’ directory....\n");
exit(1);
}
printf("in %d steps, data outputted to %s...........",count, svname);
for(j=0; j<JMAX; j++){
fprintf(fp,"%16.8e\n",f[IMAX-4][j]);
}
fclose(fp);
printf("Done\n");
return(0);
}
int output1d_cav(double u[IMAX][JMAX], double v[IMAX][JMAX], int count){
FILE *fpu, *fpv;
int i, j;
int stp;
char dcau[25]="./Data/cau????.dat";
char dcav[25]="./Data/cav????.dat";
stp=count/OUTPUT_CAV;
dcau[10] = '0' + stp/1000;
dcau[11] = '0' + (stp%1000)/100;
dcau[12] = '0' + ((stp%1000)%100)/10;
dcau[13] = '0' + ((stp%1000)%100)%10;
dcav[10] = '0' + stp/1000;
dcav[11] = '0' + (stp%1000)/100;
dcav[12] = '0' + ((stp%1000)%100)/10;
dcav[13] = '0' + ((stp%1000)%100)%10;
if ((fpu=fopen (dcau,"w+")) == NULL){
printf("%s was not opened!\n",dcau);
printf("’Maybe you should make ’Data’ directory....\n");
exit(1);
}
if ((fpv=fopen (dcav,"w+")) == NULL){
printf("%s was not opened!\n",dcav);
printf("’Maybe you should make ’Data’ directory....\n");
exit(1);
}
fclose(fpu);
fclose(fpv);
return(0);
}
int set_initial_condition(double rho[IMAX][JMAX], double gxrho[IMAX][JMAX], double gyrho[IMAX][JMAX],
double rhon[IMAX][JMAX], double gxrhon[IMAX][JMAX], double gyrhon[IMAX][JMAX],
double u[IMAX][JMAX], double gxu[IMAX][JMAX], double gyu[IMAX][JMAX],
double un[IMAX][JMAX], double gxun[IMAX][JMAX], double gyun[IMAX][JMAX],
double v[IMAX][JMAX], double gxv[IMAX][JMAX], double gyv[IMAX][JMAX],
double vn[IMAX][JMAX], double gxvn[IMAX][JMAX], double gyvn[IMAX][JMAX],
double phi[IMAX][JMAX], double gxphi[IMAX][JMAX], double gyphi[IMAX][JMAX],
double phin[IMAX][JMAX], double gxphin[IMAX][JMAX], double gyphin[IMAX][JMAX],
double p[IMAX][JMAX], double gxp[IMAX][JMAX], double gyp[IMAX][JMAX],
double pn[IMAX][JMAX], double gxpn[IMAX][JMAX], double gypn[IMAX][JMAX]){
int i,j;
double zz, dlt;
dlt=DD0R*D0;
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
/* water area */
if(j<=INLET+1){
/***** for phi *****/
phi[i][j]=dphi(IN_PHI); /* water */
phin[i][j]=dphi(IN_PHI); /* water */
/***** for rho *****/
rho[i][j]=IN_RHO;
rhon[i][j]=IN_RHO;
/***** for pressure *****/
p[i][j]=RHOwater*G*(INLET-(j-1.5))*DY+Patm;
pn[i][j]=p[i][j];
u[i][j]=IN_U;
v[i][j]=IN_V;
un[i][j]=u[i][j];
vn[i][j]=v[i][j];
}
else{
/* air area */
/***** for phi *****/
phi[i][j]=dphi(0.); /* air */
phin[i][j]=dphi(0.); /* air */
/***** for rho *****/
rho[i][j]=RHOair;
rhon[i][j]=RHOair;
/***** for pressure *****/
p[i][j]=Patm;
pn[i][j]=p[i][j];
/***** for velocity *****/
u[i][j]=IN_U;
v[i][j]=0.;
un[i][j]=u[i][j];
vn[i][j]=v[i][j];
}
}
}
/***** for gradient *****/
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
gxrho[i][j]=0.;
gyrho[i][j]=0.;
gxp[i][j]=0.;
gyp[i][j]=0.;
gxphi[i][j]=0.;
gyphi[i][j]=0.;
gxu[i][j]=0.;
gyu[i][j]=0.;
gxv[i][j]=0.;
gyv[i][j]=0.;
gxrhon[i][j]=0.;
gyrhon[i][j]=0.;
gxpn[i][j]=0.;
gypn[i][j]=0.;
gxphin[i][j]=0.;
gyphin[i][j]=0.;
gxun[i][j]=0.;
gyun[i][j]=0.;
gxvn[i][j]=0.;
gyvn[i][j]=0.;
}
}
/***** for gradient *****/
for(i=2; i<IMAX-1; i++){
for(j=2; j<JMAX-1; j++){
ITVLM+=iphi(phi[i][j]);
}
}
return(0);
}
int re_calc_output(double t, int count, double rho[IMAX][JMAX], double gxrho[IMAX][JMAX], double gyrho[IMAX][JMAX],
double rhon[IMAX][JMAX], double gxrhon[IMAX][JMAX], double gyrhon[IMAX][JMAX],
double u[IMAX][JMAX], double gxu[IMAX][JMAX], double gyu[IMAX][JMAX],
double un[IMAX][JMAX], double gxun[IMAX][JMAX], double gyun[IMAX][JMAX],
double v[IMAX][JMAX], double gxv[IMAX][JMAX], double gyv[IMAX][JMAX],
double vn[IMAX][JMAX], double gxvn[IMAX][JMAX], double gyvn[IMAX][JMAX],
double phi[IMAX][JMAX], double gxphi[IMAX][JMAX], double gyphi[IMAX][JMAX],
double phin[IMAX][JMAX], double gxphin[IMAX][JMAX], double gyphin[IMAX][JMAX],
double p[IMAX][JMAX], double gxp[IMAX][JMAX], double gyp[IMAX][JMAX],
double pn[IMAX][JMAX], double gxpn[IMAX][JMAX], double gypn[IMAX][JMAX]){
FILE *fp;
int i,j;
if ((fp=fopen ("./Data/ContCalcData.dat","w+")) == NULL){
printf("’./Data/ContCalcData.dat’ was not opened!\n");
printf("’Maybe you should make ’Data’ directory....\n");
exit(1);
}
fprintf(fp,"%10d\n",count);
fprintf(fp,"%16.8e\n",t);
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
fprintf(fp,"%16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e\n",
rho[i][j], gxrho[i][j], gyrho[i][j], rhon[i][j], gxrhon[i][j], gyrhon[i][j],
u[i][j], gxu[i][j], gyu[i][j], un[i][j]);
fprintf(fp,"%16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e\n",
gxun[i][j], gyun[i][j], v[i][j], gxv[i][j], gyv[i][j],
vn[i][j], gxvn[i][j], gyvn[i][j], phi[i][j], gxphi[i][j]);
fprintf(fp,"%16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e %16.8e\n",
gyphi[i][j], phin[i][j], gxphin[i][j], gyphin[i][j], p[i][j],
gxp[i][j], gyp[i][j], pn[i][j], gxpn[i][j], gypn[i][j]);
}
}
fclose(fp);
return(0);
}
int update(double rho[IMAX][JMAX], double rhon[IMAX][JMAX],
double u[IMAX][JMAX], double un[IMAX][JMAX],
double v[IMAX][JMAX], double vn[IMAX][JMAX],
double p[IMAX][JMAX], double pn[IMAX][JMAX],
double phi[IMAX][JMAX], double phin[IMAX][JMAX]){
int i,j;
double oldp[IMAX][JMAX];
/* -- for printf old pressure -- */
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
oldp[i][j]=p[i][j];
}
}
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
rho[i][j]=rhon[i][j];
if(rho[i][j]<=RHOair){
rho[i][j]=RHOair;
phi[i][j]=dphi(0.);
}
if(rho[i][j]>=RHOwater){
rho[i][j]=RHOwater;
phi[i][j]=dphi(1.);
}
phi[i][j]=phin[i][j];
if(iphi(phi[i][j])<0.){
rho[i][j]=RHOair;
phi[i][j]=dphi(0.);
}
if(iphi(phi[i][j])>1.){
rho[i][j]=RHOwater;
phi[i][j]=dphi(1.);
}
u[i][j]=un[i][j];
v[i][j]=vn[i][j];
p[i][j]=pn[i][j];
if(p[i][j]<=0.){
printf("(update) Negative Pressure %16.3e oldp=%16.3e at (%d,%d)\n",p[i][j],oldp[i][j],i,j);
printf("%16.3e %16.3e %16.3e\n",p[i-1][j+1],p[i][j+1],p[i+1][j+1]);
printf("%16.3e %16.3e %16.3e\n",p[i-1][j ],p[i][j ],p[i+1][j ]);
printf("%16.3e %16.3e %16.3e\n",p[i-1][j-1],p[i][j-1],p[i+1][j-1]);
printf("--- oldp ---\n");
printf("%16.3e %16.3e %16.3e\n",oldp[i-1][j+1],oldp[i][j+1],oldp[i+1][j+1]);
printf("%16.3e %16.3e %16.3e\n",oldp[i-1][j ],oldp[i][j ],oldp[i+1][j ]);
printf("%16.3e %16.3e %16.3e\n",oldp[i-1][j-1],oldp[i][j-1],oldp[i+1][j-1]);
return(-1);
}
}
}
return(0);
}
int check(double rho[IMAX][JMAX], double p[IMAX][JMAX], double tmp1[IMAX][JMAX], double tmp2[IMAX][JMAX]){
int i,j;
for(i=0; i<IMAX; i++){
for(j=0; j<JMAX; j++){
if(rho[i][j]<=0.){
printf("(check) Negative density %16.8e at (%d,%d)\n",rho[i][j],i,j);
printf(" %16d %16d %16d %16d %16d\n", i-2,i-1,i,i+1,i+2);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j+2,rho[i-2][j+2],rho[i-1][j+2],rho[i][j+2],rho[i+1][j+2],rho[i+2][j+2]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j+1,rho[i-2][j+1],rho[i-1][j+1],rho[i][j+1],rho[i+1][j+1],rho[i+2][j+1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j ,rho[i-2][j ],rho[i-1][j ],rho[i][j ],rho[i+1][j ],rho[i+2][j ]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j-1,rho[i-2][j-1],rho[i-1][j-1],rho[i][j-1],rho[i+1][j-1],rho[i+2][j-1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j-2,rho[i-2][j-2],rho[i-1][j-2],rho[i][j-2],rho[i+1][j-2],rho[i+2][j-2]);
printf("----- pressure -----\n");
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j+2,p[i-2][j+2],p[i-1][j+2],p[i][j+2],p[i+1][j+2],p[i+2][j+2]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j+1,p[i-2][j+1],p[i-1][j+1],p[i][j+1],p[i+1][j+1],p[i+2][j+1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j ,p[i-2][j ],p[i-1][j ],p[i][j ],p[i+1][j ],p[i+2][j ]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j-1,p[i-2][j-1],p[i-1][j-1],p[i][j-1],p[i+1][j-1],p[i+2][j-1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j-2,p[i-2][j-2],p[i-1][j-2],p[i][j-2],p[i+1][j-2],p[i+2][j-2]);
printf("----- tmp1 -----\n");
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j+2,tmp1[i-2][j+2],tmp1[i-1][j+2],tmp1[i][j+2],tmp1[i+1][j+2],tmp1[i+2][j+2]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j+1,tmp1[i-2][j+1],tmp1[i-1][j+1],tmp1[i][j+1],tmp1[i+1][j+1],tmp1[i+2][j+1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j ,tmp1[i-2][j ],tmp1[i-1][j ],tmp1[i][j ],tmp1[i+1][j ],tmp1[i+2][j ]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j-1,tmp1[i-2][j-1],tmp1[i-1][j-1],tmp1[i][j-1],tmp1[i+1][j-1],tmp1[i+2][j-1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j-2,tmp1[i-2][j-2],tmp1[i-1][j-2],tmp1[i][j-2],tmp1[i+1][j-2],tmp1[i+2][j-2]);
printf("----- tmp2 -----e\n");
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j+2,tmp2[i-2][j+2],tmp2[i-1][j+2],tmp2[i][j+2],tmp2[i+1][j+2],tmp2[i+2][j+2]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j+1,tmp2[i-2][j+1],tmp2[i-1][j+1],tmp2[i][j+1],tmp2[i+1][j+1],tmp2[i+2][j+1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j ,tmp2[i-2][j ],tmp2[i-1][j ],tmp2[i][j ],tmp2[i+1][j ],tmp2[i+2][j ]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j-1,tmp2[i-2][j-1],tmp2[i-1][j-1],tmp2[i][j-1],tmp2[i+1][j-1],tmp2[i+2][j-1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",
j-2,tmp2[i-2][j-2],tmp2[i-1][j-2],tmp2[i][j-2],tmp2[i+1][j-2],tmp2[i+2][j-2]);
exit(-1);
}
if(p[i][j]<=0.){
printf("(check) Negative Pressure %16.3e at (%d,%d)\n",p[i][j],i,j);
printf(" %16d %16d %16d %16d %16d\n", i-2,i-1,i,i+1,i+2);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j+2,p[i-2][j+2],p[i-1][j+2],p[i][j+2],p[i+1][j+2],p[i+2][j+2]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j+1,p[i-2][j+1],p[i-1][j+1],p[i][j+1],p[i+1][j+1],p[i+2][j+1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j ,p[i-2][j ],p[i-1][j ],p[i][j ],p[i+1][j ],p[i+2][j ]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j-1,p[i-2][j-1],p[i-1][j-1],p[i][j-1],p[i+1][j-1],p[i+2][j-1]);
printf("%3d : %16.8e %16.8e %16.8e %16.8e %16.8e\n",j-2,p[i-2][j-2],p[i-1][j-2],p[i][j-2],p[i+1][j-2],p[i+2][j-2]);
exit(-1);
}
}
}
return(0);
}
double sound_velocity(int i, int j, double rho[IMAX][JMAX], double p[IMAX][JMAX], double phi[IMAX][JMAX]){
double cair2, cwater2, c2, csrho;
//----- original -----
// cair2=GAMMA*p[i][j]/rho[i][j];
// cwater2=KAPPA*(p[i][j]+B)/rho[i][j];
//----- improved -----
cair2=GAMMA*p[i][j]/RHOair;
cwater2=KAPPA*(p[i][j]+B)/RHOwater;
//--------------------
if(iphi(phi[i][j])<0. || iphi(phi[i][j])>1.){
printf("(sound_velocity) INVALID iphi value (=%16.8e) at (%d,%d)\n",iphi(phi[i][j]),i,j);
exit(-1);
}
c2=(1.-iphi(phi[i][j]))*cair2 + iphi(phi[i][j])*cwater2;
if(c2<=0.){
printf("Negative Sound Speed =%16.8e at (%2d,%2d), iphi=%16.8e, cair2=%16.8e, cwater2=%16.8e\n",
c2, i,j,iphi(phi[i][j]),cair2, cwater2);
exit(-1);
}
return(c2);
}
int bc_p(double pn[IMAX][JMAX]){
int i,j;
/********** B.C. for Pressure & Sound speed *****************************/
/* LEFT side */
/*... outlet ...*/
for(j=2; j<=OUTLET+1; j++){
pn[0 ][j]=pn[2 ][j];
pn[1 ][j]=pn[2 ][j];
}
/*... wall ...*/
for(j=OUTLET+2; j<=JMAX-3; j++){
pn[0 ][j]=pn[3 ][j];
pn[1 ][j]=pn[2 ][j];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -