1*ca4445c7SIlya Fursov #include <petscts.h> 2*ca4445c7SIlya Fursov #include <stdio.h> 3*ca4445c7SIlya Fursov 4*ca4445c7SIlya Fursov #define NEW_VERSION // Applicable for the new features; avoid this for the old (current) TSEvent code 5*ca4445c7SIlya Fursov 6*ca4445c7SIlya Fursov static char help[] = "Simple linear problem with events\n" 7*ca4445c7SIlya Fursov "x_dot = 0.2*y\n" 8*ca4445c7SIlya Fursov "y_dot = -0.2*x\n" 9*ca4445c7SIlya Fursov 10*ca4445c7SIlya Fursov "The following event functions are involved:\n" 11*ca4445c7SIlya Fursov "- two polynomial event functions on rank-0 and last-rank (with zeros: 1.05, 9.05[terminating])\n" 12*ca4445c7SIlya Fursov "- one event function on rank = '1%size', equal to sin(pi*t), zeros = 1,...,10\n" 13*ca4445c7SIlya Fursov "TimeSpan = [0.01, 0.21, 1.01, ..., 6.21, 6.99, 7.21,... 9.21] plus the points: {3, 4, 4+D, 5-D, 5, 6-D, 6, 6+D} with user-defined D\n" 14*ca4445c7SIlya Fursov 15*ca4445c7SIlya Fursov "Options:\n" 16*ca4445c7SIlya Fursov "-dir d : zero-crossing direction for events: 0, 1, -1\n" 17*ca4445c7SIlya Fursov "-flg : additional output in Postevent\n" 18*ca4445c7SIlya Fursov "-restart : flag for TSRestartStep() in PostEvent\n" 19*ca4445c7SIlya Fursov "-term : flag to terminate at 9.05 event (true by default)\n" 20*ca4445c7SIlya Fursov "-dtpost x : if x > 0, then on even PostEvent calls dt_postevent = x is set, on odd PostEvent calls dt_postevent = 0 is set,\n" 21*ca4445c7SIlya Fursov " if x == 0, nothing happens\n" 22*ca4445c7SIlya Fursov "-D z : a small number to define additional TimeSpan points\n"; 23*ca4445c7SIlya Fursov 24*ca4445c7SIlya Fursov #define MAX_NFUNC 100 // max event functions per rank 25*ca4445c7SIlya Fursov #define MAX_NEV 5000 // max zero crossings for each rank 26*ca4445c7SIlya Fursov 27*ca4445c7SIlya Fursov typedef struct { 28*ca4445c7SIlya Fursov PetscMPIInt rank, size; 29*ca4445c7SIlya Fursov PetscReal pi; 30*ca4445c7SIlya Fursov PetscReal fvals[MAX_NFUNC]; // helper array for reporting the residuals 31*ca4445c7SIlya Fursov PetscReal evres[MAX_NEV]; // times of found zero-crossings 32*ca4445c7SIlya Fursov PetscInt evnum[MAX_NEV]; // number of zero-crossings at each time 33*ca4445c7SIlya Fursov PetscInt cnt; // counter 34*ca4445c7SIlya Fursov PetscBool flg; // flag for additional print in PostEvent 35*ca4445c7SIlya Fursov PetscBool restart; // flag for TSRestartStep() in PostEvent 36*ca4445c7SIlya Fursov PetscBool term; // flag to terminate at 9.05 event 37*ca4445c7SIlya Fursov PetscReal dtpost; // post-event step 38*ca4445c7SIlya Fursov PetscInt postcnt; // counter for PostEvent calls 39*ca4445c7SIlya Fursov } AppCtx; 40*ca4445c7SIlya Fursov 41*ca4445c7SIlya Fursov PetscErrorCode EventFunction(TS ts, PetscReal t, Vec U, PetscReal gval[], void *ctx); 42*ca4445c7SIlya Fursov PetscErrorCode Postevent(TS ts, PetscInt nev_zero, PetscInt evs_zero[], PetscReal t, Vec U, PetscBool fwd, void *ctx); 43*ca4445c7SIlya Fursov 44*ca4445c7SIlya Fursov int main(int argc, char **argv) 45*ca4445c7SIlya Fursov { 46*ca4445c7SIlya Fursov TS ts; 47*ca4445c7SIlya Fursov Mat A; 48*ca4445c7SIlya Fursov Vec sol; 49*ca4445c7SIlya Fursov PetscInt n, dir0, m = 0; 50*ca4445c7SIlya Fursov PetscReal tol = 1e-7, D = 0.02; 51*ca4445c7SIlya Fursov PetscInt dir[MAX_NFUNC], inds[2]; 52*ca4445c7SIlya Fursov PetscBool term[MAX_NFUNC], match; 53*ca4445c7SIlya Fursov PetscScalar *x, vals[4]; 54*ca4445c7SIlya Fursov PetscReal tspan[28], dtlast; 55*ca4445c7SIlya Fursov AppCtx ctx; 56*ca4445c7SIlya Fursov TSConvergedReason reason; 57*ca4445c7SIlya Fursov TSAdapt adapt; 58*ca4445c7SIlya Fursov 59*ca4445c7SIlya Fursov PetscFunctionBeginUser; 60*ca4445c7SIlya Fursov PetscCall(PetscInitialize(&argc, &argv, (char *)0, help)); 61*ca4445c7SIlya Fursov setbuf(stdout, NULL); 62*ca4445c7SIlya Fursov PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &ctx.rank)); 63*ca4445c7SIlya Fursov PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &ctx.size)); 64*ca4445c7SIlya Fursov ctx.pi = PetscAcosReal(-1.0); 65*ca4445c7SIlya Fursov ctx.cnt = 0; 66*ca4445c7SIlya Fursov ctx.flg = PETSC_FALSE; 67*ca4445c7SIlya Fursov ctx.restart = PETSC_FALSE; 68*ca4445c7SIlya Fursov ctx.term = PETSC_TRUE; 69*ca4445c7SIlya Fursov ctx.dtpost = 0; 70*ca4445c7SIlya Fursov ctx.postcnt = 0; 71*ca4445c7SIlya Fursov 72*ca4445c7SIlya Fursov // The linear problem has a 2*2 matrix. The matrix is constant 73*ca4445c7SIlya Fursov if (ctx.rank == 0) m = 2; 74*ca4445c7SIlya Fursov inds[0] = 0; 75*ca4445c7SIlya Fursov inds[1] = 1; 76*ca4445c7SIlya Fursov vals[0] = 0; 77*ca4445c7SIlya Fursov vals[1] = 0.2; 78*ca4445c7SIlya Fursov vals[2] = -0.2; 79*ca4445c7SIlya Fursov vals[3] = 0; 80*ca4445c7SIlya Fursov PetscCall(MatCreateAIJ(PETSC_COMM_WORLD, m, m, PETSC_DETERMINE, PETSC_DETERMINE, 2, NULL, 0, NULL, &A)); 81*ca4445c7SIlya Fursov PetscCall(MatSetValues(A, m, inds, m, inds, vals, INSERT_VALUES)); 82*ca4445c7SIlya Fursov PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY)); 83*ca4445c7SIlya Fursov PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY)); 84*ca4445c7SIlya Fursov PetscCall(MatSetOption(A, MAT_NEW_NONZERO_LOCATION_ERR, PETSC_TRUE)); 85*ca4445c7SIlya Fursov 86*ca4445c7SIlya Fursov PetscCall(MatCreateVecs(A, &sol, NULL)); 87*ca4445c7SIlya Fursov PetscCall(VecGetArray(sol, &x)); 88*ca4445c7SIlya Fursov if (ctx.rank == 0) { // initial conditions 89*ca4445c7SIlya Fursov x[0] = 0; // sin(0) 90*ca4445c7SIlya Fursov x[1] = 1; // cos(0) 91*ca4445c7SIlya Fursov } 92*ca4445c7SIlya Fursov PetscCall(VecRestoreArray(sol, &x)); 93*ca4445c7SIlya Fursov 94*ca4445c7SIlya Fursov PetscCall(TSCreate(PETSC_COMM_WORLD, &ts)); 95*ca4445c7SIlya Fursov PetscCall(TSSetProblemType(ts, TS_LINEAR)); 96*ca4445c7SIlya Fursov 97*ca4445c7SIlya Fursov PetscCall(TSSetRHSFunction(ts, NULL, TSComputeRHSFunctionLinear, NULL)); 98*ca4445c7SIlya Fursov PetscCall(TSSetRHSJacobian(ts, A, A, TSComputeRHSJacobianConstant, NULL)); 99*ca4445c7SIlya Fursov 100*ca4445c7SIlya Fursov PetscCall(TSSetTimeStep(ts, 0.099)); 101*ca4445c7SIlya Fursov PetscCall(TSSetType(ts, TSBEULER)); 102*ca4445c7SIlya Fursov PetscCall(TSSetMaxSteps(ts, 10000)); 103*ca4445c7SIlya Fursov PetscCall(TSSetMaxTime(ts, 10.0)); 104*ca4445c7SIlya Fursov PetscCall(TSSetExactFinalTime(ts, TS_EXACTFINALTIME_MATCHSTEP)); 105*ca4445c7SIlya Fursov 106*ca4445c7SIlya Fursov // Set the event handling 107*ca4445c7SIlya Fursov dir0 = 0; 108*ca4445c7SIlya Fursov PetscCall(PetscOptionsGetInt(NULL, NULL, "-dir", &dir0, NULL)); // desired zero-crossing direction 109*ca4445c7SIlya Fursov PetscCall(PetscOptionsHasName(NULL, NULL, "-flg", &ctx.flg)); // flag for additional output 110*ca4445c7SIlya Fursov PetscCall(PetscOptionsGetBool(NULL, NULL, "-restart", &ctx.restart, NULL)); // flag for TSRestartStep() 111*ca4445c7SIlya Fursov PetscCall(PetscOptionsGetBool(NULL, NULL, "-term", &ctx.term, NULL)); // flag to terminate at 9.05 event 112*ca4445c7SIlya Fursov PetscCall(PetscOptionsGetReal(NULL, NULL, "-dtpost", &ctx.dtpost, NULL)); // post-event step 113*ca4445c7SIlya Fursov PetscCall(PetscOptionsGetReal(NULL, NULL, "-D", &D, NULL)); // small number for tspan 114*ca4445c7SIlya Fursov 115*ca4445c7SIlya Fursov n = 0; // event counter 116*ca4445c7SIlya Fursov if (ctx.rank == 0) { // first event -- on rank-0 117*ca4445c7SIlya Fursov dir[n] = dir0; 118*ca4445c7SIlya Fursov term[n++] = PETSC_FALSE; 119*ca4445c7SIlya Fursov } 120*ca4445c7SIlya Fursov if (ctx.rank == ctx.size - 1) { // second event (with optional termination) -- on last rank 121*ca4445c7SIlya Fursov dir[n] = dir0; 122*ca4445c7SIlya Fursov term[n++] = ctx.term; 123*ca4445c7SIlya Fursov } 124*ca4445c7SIlya Fursov if (ctx.rank == 1 % ctx.size) { // third event -- on rank = 1%ctx.size 125*ca4445c7SIlya Fursov dir[n] = dir0; 126*ca4445c7SIlya Fursov term[n++] = PETSC_FALSE; 127*ca4445c7SIlya Fursov } 128*ca4445c7SIlya Fursov PetscCall(TSSetEventHandler(ts, n, dir, term, EventFunction, Postevent, &ctx)); 129*ca4445c7SIlya Fursov PetscCall(TSSetEventTolerances(ts, tol, NULL)); 130*ca4445c7SIlya Fursov 131*ca4445c7SIlya Fursov // Set the time span 132*ca4445c7SIlya Fursov for (PetscInt i = 0; i < 10; i++) { 133*ca4445c7SIlya Fursov tspan[2 * i] = 0.01 + i + (i == 7 ? -0.02 : 0); 134*ca4445c7SIlya Fursov tspan[2 * i + 1] = 0.21 + i; 135*ca4445c7SIlya Fursov } 136*ca4445c7SIlya Fursov tspan[20] = 3; 137*ca4445c7SIlya Fursov tspan[21] = 4; 138*ca4445c7SIlya Fursov tspan[22] = 4 + D; 139*ca4445c7SIlya Fursov tspan[23] = 5 - D; 140*ca4445c7SIlya Fursov tspan[24] = 5; 141*ca4445c7SIlya Fursov tspan[25] = 6 - D; 142*ca4445c7SIlya Fursov tspan[26] = 6; 143*ca4445c7SIlya Fursov tspan[27] = 6 + D; 144*ca4445c7SIlya Fursov PetscCall(PetscSortReal(28, tspan)); 145*ca4445c7SIlya Fursov PetscCall(TSSetTimeSpan(ts, 28, tspan)); 146*ca4445c7SIlya Fursov PetscCall(TSSetFromOptions(ts)); 147*ca4445c7SIlya Fursov 148*ca4445c7SIlya Fursov // Solution 149*ca4445c7SIlya Fursov PetscCall(TSSolve(ts, sol)); 150*ca4445c7SIlya Fursov PetscCall(TSGetConvergedReason(ts, &reason)); 151*ca4445c7SIlya Fursov PetscCall(PetscPrintf(PETSC_COMM_WORLD, "CONVERGED REASON: %" PetscInt_FMT " (TS_CONVERGED_EVENT == %" PetscInt_FMT ")\n", (PetscInt)reason, (PetscInt)TS_CONVERGED_EVENT)); 152*ca4445c7SIlya Fursov 153*ca4445c7SIlya Fursov // The 3 columns printed are: [RANK] [num. of events at the given time] [time of event] 154*ca4445c7SIlya Fursov for (PetscInt j = 0; j < ctx.cnt; j++) PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, "%d\t%" PetscInt_FMT "\t%g\n", ctx.rank, ctx.evnum[j], (double)ctx.evres[j])); 155*ca4445c7SIlya Fursov PetscCall(PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT)); 156*ca4445c7SIlya Fursov 157*ca4445c7SIlya Fursov // print the final time step 158*ca4445c7SIlya Fursov PetscCall(TSGetTimeStep(ts, &dtlast)); 159*ca4445c7SIlya Fursov PetscCall(TSGetAdapt(ts, &adapt)); 160*ca4445c7SIlya Fursov PetscCall(PetscObjectTypeCompare((PetscObject)adapt, TSADAPTNONE, &match)); 161*ca4445c7SIlya Fursov if (match) { 162*ca4445c7SIlya Fursov PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Adapt = none\n")); 163*ca4445c7SIlya Fursov PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Last dt = %g\n", (double)dtlast)); 164*ca4445c7SIlya Fursov } 165*ca4445c7SIlya Fursov 166*ca4445c7SIlya Fursov PetscCall(MatDestroy(&A)); 167*ca4445c7SIlya Fursov PetscCall(TSDestroy(&ts)); 168*ca4445c7SIlya Fursov PetscCall(VecDestroy(&sol)); 169*ca4445c7SIlya Fursov 170*ca4445c7SIlya Fursov PetscCall(PetscFinalize()); 171*ca4445c7SIlya Fursov return 0; 172*ca4445c7SIlya Fursov } 173*ca4445c7SIlya Fursov 174*ca4445c7SIlya Fursov /* 175*ca4445c7SIlya Fursov User callback for defining the event-functions 176*ca4445c7SIlya Fursov */ 177*ca4445c7SIlya Fursov PetscErrorCode EventFunction(TS ts, PetscReal t, Vec U, PetscReal gval[], void *ctx) 178*ca4445c7SIlya Fursov { 179*ca4445c7SIlya Fursov PetscInt n = 0; 180*ca4445c7SIlya Fursov AppCtx *Ctx = (AppCtx *)ctx; 181*ca4445c7SIlya Fursov 182*ca4445c7SIlya Fursov PetscFunctionBeginUser; 183*ca4445c7SIlya Fursov // for the test purposes, event-functions are defined based on t 184*ca4445c7SIlya Fursov // first event -- on rank-0 185*ca4445c7SIlya Fursov if (Ctx->rank == 0) { 186*ca4445c7SIlya Fursov if (t < 2.05) gval[n++] = 0.5 * (1 - PetscPowReal(t - 2.05, 12)); 187*ca4445c7SIlya Fursov else gval[n++] = 0.5; 188*ca4445c7SIlya Fursov } 189*ca4445c7SIlya Fursov 190*ca4445c7SIlya Fursov // second event -- on last rank 191*ca4445c7SIlya Fursov if (Ctx->rank == Ctx->size - 1) { 192*ca4445c7SIlya Fursov if (t > 8.05) gval[n++] = 0.25 * (1 - PetscPowReal(t - 8.05, 12)); 193*ca4445c7SIlya Fursov else gval[n++] = 0.25; 194*ca4445c7SIlya Fursov } 195*ca4445c7SIlya Fursov 196*ca4445c7SIlya Fursov // third event -- on rank = 1%ctx.size 197*ca4445c7SIlya Fursov if (Ctx->rank == 1 % Ctx->size) { gval[n++] = PetscSinReal(Ctx->pi * t); } 198*ca4445c7SIlya Fursov PetscFunctionReturn(PETSC_SUCCESS); 199*ca4445c7SIlya Fursov } 200*ca4445c7SIlya Fursov 201*ca4445c7SIlya Fursov /* 202*ca4445c7SIlya Fursov User callback for the post-event stuff 203*ca4445c7SIlya Fursov */ 204*ca4445c7SIlya Fursov PetscErrorCode Postevent(TS ts, PetscInt nev_zero, PetscInt evs_zero[], PetscReal t, Vec U, PetscBool fwd, void *ctx) 205*ca4445c7SIlya Fursov { 206*ca4445c7SIlya Fursov AppCtx *Ctx = (AppCtx *)ctx; 207*ca4445c7SIlya Fursov 208*ca4445c7SIlya Fursov PetscFunctionBeginUser; 209*ca4445c7SIlya Fursov if (Ctx->flg) { 210*ca4445c7SIlya Fursov PetscCallBack("EventFunction", EventFunction(ts, t, U, Ctx->fvals, ctx)); 211*ca4445c7SIlya Fursov PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, "[%d] At t = %20.16g : %" PetscInt_FMT " events triggered, fvalues =", Ctx->rank, (double)t, nev_zero)); 212*ca4445c7SIlya Fursov for (PetscInt j = 0; j < nev_zero; j++) PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, "\t%g", (double)Ctx->fvals[evs_zero[j]])); 213*ca4445c7SIlya Fursov PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, "\n")); 214*ca4445c7SIlya Fursov PetscCall(PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT)); 215*ca4445c7SIlya Fursov } 216*ca4445c7SIlya Fursov 217*ca4445c7SIlya Fursov if (Ctx->cnt < MAX_NEV && nev_zero > 0) { 218*ca4445c7SIlya Fursov Ctx->evres[Ctx->cnt] = t; 219*ca4445c7SIlya Fursov Ctx->evnum[Ctx->cnt++] = nev_zero; 220*ca4445c7SIlya Fursov } 221*ca4445c7SIlya Fursov 222*ca4445c7SIlya Fursov #ifdef NEW_VERSION 223*ca4445c7SIlya Fursov Ctx->postcnt++; // sync 224*ca4445c7SIlya Fursov if (Ctx->dtpost > 0) { 225*ca4445c7SIlya Fursov if (Ctx->postcnt % 2 == 0) PetscCall(TSSetPostEventStep(ts, Ctx->dtpost)); 226*ca4445c7SIlya Fursov else PetscCall(TSSetPostEventStep(ts, 0)); 227*ca4445c7SIlya Fursov } 228*ca4445c7SIlya Fursov #endif 229*ca4445c7SIlya Fursov 230*ca4445c7SIlya Fursov if (Ctx->restart) PetscCall(TSRestartStep(ts)); 231*ca4445c7SIlya Fursov PetscFunctionReturn(PETSC_SUCCESS); 232*ca4445c7SIlya Fursov } 233*ca4445c7SIlya Fursov /*---------------------------------------------------------------------------------------------*/ 234*ca4445c7SIlya Fursov /*TEST 235*ca4445c7SIlya Fursov test: 236*ca4445c7SIlya Fursov suffix: 1 237*ca4445c7SIlya Fursov requires: !single 238*ca4445c7SIlya Fursov output_file: output/ex3span_1.out 239*ca4445c7SIlya Fursov args: -ts_monitor -ts_adapt_type none -restart 240*ca4445c7SIlya Fursov args: -dtpost 0.1127 -D 0.0015 -dir 0 -ts_max_time 9.8 -ts_dt 0.18 241*ca4445c7SIlya Fursov nsize: 1 242*ca4445c7SIlya Fursov 243*ca4445c7SIlya Fursov test: 244*ca4445c7SIlya Fursov suffix: 1single 245*ca4445c7SIlya Fursov requires: single 246*ca4445c7SIlya Fursov output_file: output/ex3span_1single.out 247*ca4445c7SIlya Fursov args: -ts_monitor -ts_adapt_type none -restart -ts_event_dt_min 1e-6 248*ca4445c7SIlya Fursov args: -dtpost 0.1127 -D 0.0015 -dir 0 -ts_max_time 9.8 -ts_dt 0.18 249*ca4445c7SIlya Fursov nsize: 1 250*ca4445c7SIlya Fursov 251*ca4445c7SIlya Fursov test: 252*ca4445c7SIlya Fursov suffix: 2 253*ca4445c7SIlya Fursov output_file: output/ex3span_2.out 254*ca4445c7SIlya Fursov args: -ts_event_dt_min 1e-6 -dtpost 1 -term 0 -ts_max_time 9.61 255*ca4445c7SIlya Fursov nsize: 1 256*ca4445c7SIlya Fursov 257*ca4445c7SIlya Fursov test: 258*ca4445c7SIlya Fursov suffix: fin8 259*ca4445c7SIlya Fursov output_file: output/ex3span_fin8.out 260*ca4445c7SIlya Fursov args: -ts_max_time 8 261*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 262*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 263*ca4445c7SIlya Fursov args: -dtpost 0.1127 264*ca4445c7SIlya Fursov args: -D {{0.0015 0.03}} 265*ca4445c7SIlya Fursov args: -dir {{0 1 -1}} 266*ca4445c7SIlya Fursov args: -ts_dt 0.302 267*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 268*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 269*ca4445c7SIlya Fursov nsize: 1 270*ca4445c7SIlya Fursov 271*ca4445c7SIlya Fursov test: 272*ca4445c7SIlya Fursov suffix: fin81 273*ca4445c7SIlya Fursov output_file: output/ex3span_fin8.1.out 274*ca4445c7SIlya Fursov args: -ts_max_time 8.1 275*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 276*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 277*ca4445c7SIlya Fursov args: -dtpost 0.1125 278*ca4445c7SIlya Fursov args: -D {{0.0015 0.03}} 279*ca4445c7SIlya Fursov args: -dir {{0 1 -1}} 280*ca4445c7SIlya Fursov args: -ts_dt 0.302 281*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 282*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 283*ca4445c7SIlya Fursov nsize: 2 284*ca4445c7SIlya Fursov 285*ca4445c7SIlya Fursov test: 286*ca4445c7SIlya Fursov suffix: fin821 287*ca4445c7SIlya Fursov output_file: output/ex3span_fin8.21.out 288*ca4445c7SIlya Fursov args: -ts_max_time 8.21 289*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 290*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 291*ca4445c7SIlya Fursov args: -dtpost 0 292*ca4445c7SIlya Fursov args: -D {{0.0015 0.03}} 293*ca4445c7SIlya Fursov args: -dir {{0 1 -1}} 294*ca4445c7SIlya Fursov args: -ts_dt 0.302 295*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 296*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 297*ca4445c7SIlya Fursov nsize: 1 298*ca4445c7SIlya Fursov 299*ca4445c7SIlya Fursov test: 300*ca4445c7SIlya Fursov suffix: fin899 301*ca4445c7SIlya Fursov output_file: output/ex3span_fin8.99.out 302*ca4445c7SIlya Fursov args: -ts_max_time 8.99 303*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 304*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 305*ca4445c7SIlya Fursov args: -dtpost 0.1127 306*ca4445c7SIlya Fursov args: -D {{0.0015 0.03}} 307*ca4445c7SIlya Fursov args: -dir {{0 1 -1}} 308*ca4445c7SIlya Fursov args: -ts_dt 0.302 309*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 310*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 311*ca4445c7SIlya Fursov nsize: 4 312*ca4445c7SIlya Fursov 313*ca4445c7SIlya Fursov test: 314*ca4445c7SIlya Fursov suffix: fin9 315*ca4445c7SIlya Fursov output_file: output/ex3span_fin9.out 316*ca4445c7SIlya Fursov args: -ts_max_time 9 317*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 318*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 319*ca4445c7SIlya Fursov args: -dtpost 0 320*ca4445c7SIlya Fursov args: -D {{0.0015 0.03}} 321*ca4445c7SIlya Fursov args: -dir {{0 1 -1}} 322*ca4445c7SIlya Fursov args: -ts_dt 0.202 323*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 324*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 325*ca4445c7SIlya Fursov nsize: 2 326*ca4445c7SIlya Fursov 327*ca4445c7SIlya Fursov test: 328*ca4445c7SIlya Fursov suffix: fin901 329*ca4445c7SIlya Fursov output_file: output/ex3span_fin9.01.out 330*ca4445c7SIlya Fursov args: -ts_max_time 9.01 331*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 332*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 333*ca4445c7SIlya Fursov args: -dtpost 0.1127 334*ca4445c7SIlya Fursov args: -D {{0.0015 0.03}} 335*ca4445c7SIlya Fursov args: -dir {{0 1 -1}} 336*ca4445c7SIlya Fursov args: -ts_dt 0.6 337*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 338*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 339*ca4445c7SIlya Fursov nsize: 1 340*ca4445c7SIlya Fursov 341*ca4445c7SIlya Fursov test: 342*ca4445c7SIlya Fursov suffix: fin904 343*ca4445c7SIlya Fursov output_file: output/ex3span_fin9.04.out 344*ca4445c7SIlya Fursov args: -ts_max_time 9.04 345*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 346*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 347*ca4445c7SIlya Fursov args: -dtpost 0 348*ca4445c7SIlya Fursov args: -D {{0.0015 0.03}} 349*ca4445c7SIlya Fursov args: -dir {{0 1 -1}} 350*ca4445c7SIlya Fursov args: -ts_dt 0.102 351*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 352*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 353*ca4445c7SIlya Fursov nsize: 1 354*ca4445c7SIlya Fursov 355*ca4445c7SIlya Fursov test: 356*ca4445c7SIlya Fursov suffix: fin905 357*ca4445c7SIlya Fursov output_file: output/ex3span_fin9.05.out 358*ca4445c7SIlya Fursov args: -ts_max_time 9.05 359*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 360*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 361*ca4445c7SIlya Fursov args: -dtpost 0.1127 362*ca4445c7SIlya Fursov args: -D {{0.0015 0.03}} 363*ca4445c7SIlya Fursov args: -dir {{0 1 -1}} 364*ca4445c7SIlya Fursov args: -ts_dt 0.402 365*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 366*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 367*ca4445c7SIlya Fursov nsize: 2 368*ca4445c7SIlya Fursov 369*ca4445c7SIlya Fursov test: 370*ca4445c7SIlya Fursov suffix: fin905etc 371*ca4445c7SIlya Fursov output_file: output/ex3span_fin9.05.out 372*ca4445c7SIlya Fursov args: -ts_max_time {{9.06 9.07 9.1 9.21 9.5 9.99 10 11}} 373*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 374*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 375*ca4445c7SIlya Fursov args: -dtpost 0.11 376*ca4445c7SIlya Fursov args: -D 0.0025 377*ca4445c7SIlya Fursov args: -dir {{0 -1}} 378*ca4445c7SIlya Fursov args: -ts_dt 0.3025 379*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 380*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 381*ca4445c7SIlya Fursov nsize: 2 382*ca4445c7SIlya Fursov 383*ca4445c7SIlya Fursov test: 384*ca4445c7SIlya Fursov suffix: fin906 385*ca4445c7SIlya Fursov output_file: output/ex3span_fin9.06.out 386*ca4445c7SIlya Fursov args: -ts_max_time 9.06 387*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 388*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 389*ca4445c7SIlya Fursov args: -dtpost 0.1121 390*ca4445c7SIlya Fursov args: -D {{0.0015 0.02}} 391*ca4445c7SIlya Fursov args: -dir 1 392*ca4445c7SIlya Fursov args: -ts_dt 0.302 393*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 394*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 395*ca4445c7SIlya Fursov nsize: 1 396*ca4445c7SIlya Fursov 397*ca4445c7SIlya Fursov test: 398*ca4445c7SIlya Fursov suffix: fin91 399*ca4445c7SIlya Fursov output_file: output/ex3span_fin9.1.out 400*ca4445c7SIlya Fursov args: -ts_max_time 9.1 401*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 402*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 403*ca4445c7SIlya Fursov args: -dtpost 0.09 404*ca4445c7SIlya Fursov args: -D {{0.0015 0.03}} 405*ca4445c7SIlya Fursov args: -dir 1 406*ca4445c7SIlya Fursov args: -ts_dt 0.302 407*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 408*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 409*ca4445c7SIlya Fursov nsize: 2 410*ca4445c7SIlya Fursov 411*ca4445c7SIlya Fursov test: 412*ca4445c7SIlya Fursov suffix: fin921 413*ca4445c7SIlya Fursov output_file: output/ex3span_fin9.21.out 414*ca4445c7SIlya Fursov args: -ts_max_time 9.21 415*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 416*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 417*ca4445c7SIlya Fursov args: -dtpost 0.7 418*ca4445c7SIlya Fursov args: -D {{0.0015 0.02}} 419*ca4445c7SIlya Fursov args: -dir 1 420*ca4445c7SIlya Fursov args: -ts_dt 0.22 421*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 422*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 423*ca4445c7SIlya Fursov nsize: 1 424*ca4445c7SIlya Fursov 425*ca4445c7SIlya Fursov test: 426*ca4445c7SIlya Fursov suffix: fin95 427*ca4445c7SIlya Fursov output_file: output/ex3span_fin9.5.out 428*ca4445c7SIlya Fursov args: -ts_max_time 9.5 429*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 430*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 431*ca4445c7SIlya Fursov args: -dtpost 0 432*ca4445c7SIlya Fursov args: -D {{0.0015 0.0135}} 433*ca4445c7SIlya Fursov args: -dir 1 434*ca4445c7SIlya Fursov args: -ts_dt 0.502 435*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 436*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 437*ca4445c7SIlya Fursov nsize: 4 438*ca4445c7SIlya Fursov 439*ca4445c7SIlya Fursov test: 440*ca4445c7SIlya Fursov suffix: fin10 441*ca4445c7SIlya Fursov output_file: output/ex3span_fin10.out 442*ca4445c7SIlya Fursov args: -ts_max_time 10 443*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 444*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 445*ca4445c7SIlya Fursov args: -dtpost 0.17 446*ca4445c7SIlya Fursov args: -D {{0.0015 0.02}} 447*ca4445c7SIlya Fursov args: -dir 1 448*ca4445c7SIlya Fursov args: -ts_dt 0.422 449*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 450*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 451*ca4445c7SIlya Fursov nsize: 2 452*ca4445c7SIlya Fursov 453*ca4445c7SIlya Fursov test: 454*ca4445c7SIlya Fursov suffix: fin11 455*ca4445c7SIlya Fursov output_file: output/ex3span_fin11.out 456*ca4445c7SIlya Fursov args: -ts_max_time 11 457*ca4445c7SIlya Fursov args: -ts_monitor -ts_event_dt_min 1e-6 458*ca4445c7SIlya Fursov args: -ts_adapt_type {{none basic}} 459*ca4445c7SIlya Fursov args: -dtpost 0 460*ca4445c7SIlya Fursov args: -D {{0.0015 0.0016}} 461*ca4445c7SIlya Fursov args: -dir 1 462*ca4445c7SIlya Fursov args: -ts_dt 0.2718281828 463*ca4445c7SIlya Fursov args: -ts_type {{beuler rk alpha rosw bdf}} 464*ca4445c7SIlya Fursov filter: grep "TS dt" | tail -n 1 | cut -f6 -d " " 465*ca4445c7SIlya Fursov nsize: 4 466*ca4445c7SIlya Fursov 467*ca4445c7SIlya Fursov TEST*/ 468