/* Fourth order Runge-Kutta numerical integration */ /* gcc LVadapt.c -o xlv -lm xmgrace -hardcopy -printfile many.ps -param many.par -nxy pops1.dat */ #include #include #include #include /* model parameters and stuff */ #define NUMSPECS (20) #define NUMVARS (NUMSPECS) #define MAXTIME 100.0 #define OUTTIMEINC 1.0 #define STEPSIZE 0.001 #define MAX_ERROR 1.0e-10 #define MIN_ERROR (MAX_ERROR/20.0) #define SCALER 1.2 #define MIN_STEP 0.000001 #define MAX_STEP 0.1 #define ADAPT_TESTS 5 #define RRR ((double)1.0) #define KAVE ((double)1.0) #define KWID ((double)0.1) #define ALPHAWIDTH ((double)0.25) #define INITDENS (KAVE/(double)NUMSPECS) #define ZERO_DENS (0.0) #define RRR ((double)1.0) #define MATSENS ((double)0.001) double state1[NUMVARS], state2[NUMVARS]; double rrr[NUMVARS], alphas[NUMVARS][NUMVARS]; int kkkk[NUMVARS], atesting=0; double stepsize = STEPSIZE; double exp(double), pow(double,double); double zero_dens; int main(int argc, char **argv) { int i, seed; double time = 0.0, printtime = 0.2, nbar; double *oldstate, *newstate, *temp; FILE *fopen(), *fileid, *fileid2, *fileid3, *fileid4, *fileid5; char fname[30]; InitSeed(&seed); srand48(seed); if(argc>1) { sscanf(argv[1],"%lf",&zero_dens); } InitRAlphs(); InitKs(); InitDens(state1); fileid3 = fopen("matrix.dat","w"); OutputMatrix(state1, fileid3); fflush(fileid3); fileid = fopen("pops1.dat","w"); time = printtime = 0.0; oldstate = state1; newstate = state2; while(time<=MAXTIME) { if(time>=printtime) { printtime += OUTTIMEINC; printf( " %3.3f (%7.5f)", time, stepsize); fprintf(fileid," %f ", time); nbar=0.0; for(i=0;iMATSENS) oks[i] = 1; if(oks[i]==1) fprintf(fileid,"%-5d ",i); } fprintf(fileid,"\n"); for(i=0;idiff && in[i]>MAX_ERROR) diff = xxx; } if(diff>MAX_ERROR && stepsize>MIN_STEP) stepsize /= SCALER; /* reduce */ else if(diff