double calc_growth(double a) { double t1, t2; t1 = INTEGRATE(dtda3, 0.0, a, a/10., 1e-8); t2 = calc_a_dot(a)/a; return(2.5 * simu.omega0 * t1 * t2); }
/*========================================================================== * calc_super_t: calculate super_t(a) via integration *==========================================================================*/ double calc_super_t(double a) { double super_t; double dsuper_tda(double); super_t = (double) INTEGRATE(dsuper_tda, a, (double)1.0, (double)0.1*a, (double)1.e-5); return(-super_t); }
/*========================================================================== * calc_t: calculate t(a) via integration *==========================================================================*/ double calc_t(double a) { double t; double dtda(double); t = (double) INTEGRATE(dtda, (double)0.0, a, (double)0.1*a, (double)1.e-5); return(t); }
int main() { KPP_REAL dval[NSPEC]; int i; /* ---- TIME VARIABLES ------------------ */ RTOLS = 1e-3; TSTART = 3600*12; TEND = TSTART + 3600*24*5; DT = 3600.; TEMP = 236.21; Initialize(); for( i = 0; i < NVAR; i++ ) { RTOL[i] = RTOLS; ATOL[i] = 1.0; } STEPMIN = 0.01; STEPMAX = 900; /* ********** TIME LOOP **************************** */ InitSaveData(); printf("\n%7s %7s ", "done[%]", "Time[h]"); for( i = 0; i < NMONITOR; i++ ) printf( "%8s ", SPC_NAMES[MONITOR[i]] ); for( i = 0; i < NMASS; i++ ) printf( "(%6s) ", SMASS[i] ); TIME = TSTART; while (TIME <= TEND) { GetMass( C, dval ); printf("\n%6.1f%% %7.2f ", (TIME-TSTART)/(TEND-TSTART)*100, TIME/3600 ); for( i = 0; i < NMONITOR; i++ ) printf( "%9.3e ", C[ MONITOR[i] ]/CFACTOR ); for( i = 0; i < NMASS; i++ ) printf( "%9.3e ", dval[i]/CFACTOR ); SaveData(); INTEGRATE( TIME , TIME+DT ); TIME += DT; } /* *********** END TIME LOOP *********************** */ printf("\n"); CloseSaveData(); return 0; /*didnt return anything initially */ }
double collapse(double age0, double acc) { double age, omega0_safe, omega_ta, omax, omin; double dtda_ta(double); /* this routine (ab-)uses COMMON variable simu.omega0 */ omega0_safe = simu.omega0; age = (double)-1.; omax = omax0; omin = omin0; while( fabs(age-age0) > acc*age0 && omax-omin > acc*simu.omega0) { simu.omega0 = (double)0.5*(omax+omin); age = INTEGRATE(dtda_ta, (double)0., (double)1., (double)0.1, acc); if (age > age0) omin = simu.omega0; else omax = simu.omega0; } #ifdef VERBOSE if (omax == omax0 || omin == omin0) { fprintf(stderr,"WARNING: presumed bounds for omega are inadequate in COLLAPSE.\n"); fprintf(stderr,"WARNING: omax=%g,omax0=%g,omin=%g,omin0=%g\n",(omax),(omax0),(omin),(omin0)); } #endif // fprintf(stderr, "age0 = %f, age = %f\n", age0, age); // fprintf(stderr, "omega0 = %f\n", simu.omega0); // // FILE *fp; // fp = fopen ("por.dat", "w"); // for(simu.omega0 = 0; simu.omega0 <= 20; simu.omega0+=.1) // { // age = INTEGRATE(dtda_ta, (double)0., (double)1., (double)0.1, acc); // fprintf(fp, "%f %f\n", simu.omega0, age); // } /* get back original value */ omega_ta = simu.omega0; simu.omega0 = omega0_safe; return (omega_ta); }
void main() { KPP_REAL rtols; KPP_REAL Tstart, Tend, DT; FILE * fp; int i; /* ---- TIME VARIABLES ------------------ */ rtols = 1e-3; for( i = 0; i < NVAR; i++ ) { RTOL[i] = rtols; ATOL[i] = 1E-18; } Initialize(); fp = fopen("Extrapd.m", "w"); fprintf( fp, "ed=[\n"); Tstart = 3600*12; Tend = Tstart + 3600*24*5; STEPMIN = 0.001; STEPMAX = 900; DT = 3600.; TEMP = 236.21; /* -- BELOW THIS LIMIT USE TAYLOR INSTEAD OF EXP --- */ /* ********** TIME LOOP **************************** */ TIME = Tstart; while (TIME <= Tend) { printf("\nMonitor: "); for( i = 0; i < NMONITOR; i++ ) printf( "%12.8g ", C[ MONITOR[i] ]/CFACTOR ); fprintf( fp, "\n%6.1f ", (TIME-Tstart)/3600.0 ); for( i = 0; i < NLOOKAT; i++ ) fprintf( fp, "%24.16e ", C[ LOOKAT[i] ]/CFACTOR ); INTEGRATE( DT ); } /* *********** END TIME LOOP *********************** */ fprintf(fp, "\n];"); fclose( fp ); printf("\n"); }
void saprc99(double *conc, double temp, double tstart, double tend, double dt) { C = conc; VAR = &C[0]; FIX = &C[74]; TEMP = temp; //236.21; TSTART = tstart; //3600*12; TEND = tend; //TSTART + 3600*24*5; DT = dt; //3600.; TIME = TSTART; while (TIME <= TEND) { INTEGRATE( TIME , TIME+DT ); TIME += DT; } }