#include #include #define F77NAME(x) x## _ #define F77_NAME(name) name## __ struct linearad_common { double statelft,statergt,alpha,beta,ca,la,cr,lr,lc; }; extern struct linearad_common F77NAME(linearad); /********************************************************************* * This subroutine reads the parameter values from the inpu file. * *********************************************************************/ void readinput(int argc, char** argv, int* ncells, int *gcells, int* nsteps, int* stpstp, double* tmax, double* tstp, int* nonlin_f) { FILE *fpr; char temp[30]; double value; fpr=fopen(argv[1], "r"); for(;fscanf(fpr, "%s", temp)!= EOF;) { if(strcmp(temp, "Main")==0); else if(strcmp(temp, "statelft")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", &value); F77NAME(linearad).statelft = value; } else if(strcmp(temp, "statergt")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", &value); F77NAME(linearad).statergt = value; } else if(strcmp(temp, "alpha")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", &value); F77NAME(linearad).alpha = value; } else if(strcmp(temp, "beta")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", &value); F77NAME(linearad).beta = value; } else if(strcmp(temp, "ca")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", &value); F77NAME(linearad).ca = value; } else if(strcmp(temp, "la")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", &value); F77NAME(linearad).la = value; } else if(strcmp(temp, "cr")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", &value); F77NAME(linearad).cr = value; } else if(strcmp(temp, "lr")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", &value); F77NAME(linearad).lr = value; } else if(strcmp(temp, "lc")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", &value); F77NAME(linearad).lc = value; } else if(strcmp(temp, "ncells")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%d", ncells); } else if(strcmp(temp, "gcells")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%d", gcells); } else if(strcmp(temp, "nsteps")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%d", nsteps); } else if(strcmp(temp, "stpstp")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%d", stpstp); } else if(strcmp(temp, "tmax")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", tmax); } else if(strcmp(temp, "tstp")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%lf", tstp); } else if(strcmp(temp, "nonlin_f")==0) { fscanf(fpr, "%s", temp); sscanf(temp, "%d", nonlin_f); } } fclose(fpr); } /************************************************************************** * This subroutine write the data to a file. * * Name of the file is specified by the string "filename". * * The output is in a matrix format defined by columns and rows. * **************************************************************************/ void writeout(int column, int row, double *x, char* filename) { FILE *fpw; int ic, jc; fpw=fopen(filename,"w"); for(ic=0; ic