[petsc-users] TSSetExactFinalTime Behavior Without TSAdapt

Hong Zhang hongzhang at anl.gov
Wed Jun 8 22:48:43 CDT 2016


Add TSSetFromOptions(ts_solver) before TSSolve(). Please let us know if it works.

Hong

> On Jun 7, 2016, at 12:49 PM, Paul Urbanczyk <gomer at stanford.edu> wrote:
> 
> Hello,
> 
> See below for my initial code, before adding TSSetExactFinalTime.
> 
> That version yielded the following error:
> 
> [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
> [0]PETSC ERROR: Object is in wrong state
> [0]PETSC ERROR: You must call TSSetExactFinalTime() or use -ts_exact_final_time <stepover,interpolate,matchstep> before calling TSSolve()
> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
> [0]PETSC ERROR: Petsc Development GIT revision: v3.7.1-449-g419beca  GIT Date: 2016-06-01 15:39:33 -0500
> [0]PETSC ERROR: ./urbanSCFD on a arch-linux2-c-debug named prometheus by gomer Tue Jun  7 12:42:05 2016
> [0]PETSC ERROR: Configure options
> [0]PETSC ERROR: #1 TSSolve() line 3946 in /home/gomer/local/petsc/src/ts/interface/ts.c
> 
> I then added:
> 
> TSSetExactFinalTime(ts_solver,TS_EXACTFINALTIME_STEPOVER);
> 
> Running then yielded the following error:
> 
> [0]PETSC ERROR: ------------------------------------------------------------------------
> [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range
> [0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger
> [0]PETSC ERROR: or see http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind
> [0]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac OS X to find memory corruption errors
> [0]PETSC ERROR: likely location of problem given in stack below
> [0]PETSC ERROR: ---------------------  Stack Frames ------------------------------------
> [0]PETSC ERROR: Note: The EXACT line numbers in the stack are not available,
> [0]PETSC ERROR:       INSTEAD the line number of the start of the function
> [0]PETSC ERROR:       is given.
> [0]PETSC ERROR: [0] TSAdaptChoose line 571 /home/gomer/local/petsc/src/ts/adapt/interface/tsadapt.c
> [0]PETSC ERROR: [0] TSStep_Euler line 20 /home/gomer/local/petsc/src/ts/impls/explicit/euler/euler.c
> [0]PETSC ERROR: [0] TSStep line 3707 /home/gomer/local/petsc/src/ts/interface/ts.c
> [0]PETSC ERROR: [0] TSSolve line 3928 /home/gomer/local/petsc/src/ts/interface/ts.c
> [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
> [0]PETSC ERROR: Signal received
> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
> [0]PETSC ERROR: Petsc Development GIT revision: v3.7.1-449-g419beca  GIT Date: 2016-06-01 15:39:33 -0500
> [0]PETSC ERROR: ./urbanSCFD on a arch-linux2-c-debug named prometheus by gomer Tue Jun  7 12:44:17 2016
> [0]PETSC ERROR: Configure options
> [0]PETSC ERROR: #1 User provided function() line 0 in  unknown file
> --------------------------------------------------------------------------
> 
> Finally, I added
> 
> TSAdapt ts_adapt;
> TSGetAdapt(ts_solver,&ts_adapt);
> TSAdaptSetType(ts_adapt,TSADAPTNONE);
> 
> After adding this, the program runs without error.
> 
> Hope that helps.
> 
> Please let me know if I was doing something wrong before to have caused this. It's not pressing for me, though, as my code now appears to be running ok.
> 
> -Paul
> 
> ORIGINAL VERSION WITHOUT TSSetExactFinalTime:
> 
> void cPETScSolverClass::SolveTSProblem()
> {
>    if(mpi_main.getRank() == 0)
>    {
>        std::cout << "*****STARTING SOLUTION*****" << std::endl;
>    }
> 
>    // Set up the time-stepping solver object
>    TSCreate(PETSC_COMM_WORLD,&ts_solver);
> 
>    // Set the problem type to be nonlinear
>    TSSetProblemType(ts_solver,TS_NONLINEAR);
> 
>    // Point the solution to the solution vector (vector of conserved variables)
>    TSSetSolution(ts_solver,solver_main.U_cons);
> 
>    // Set the time-stepping type
>    TSSetType(ts_solver,TSEULER);
> 
>    // Set the initial time and the time step
>    TSSetInitialTimeStep(ts_solver,0.0,0.001);
> 
>    // Set the total duration (number of steps and total time)
>    TSSetDuration(ts_solver,10,0.01);
> 
>    // Point the solver to the monitor function
>    TSMonitorSet(ts_solver,solver_main.TS_Monitor,this,NULL);
> 
>    // Set the distributed array context for the solver
>    TSSetDM(ts_solver,main_da);
> 
>    // Get the nonlinear solver for the time-stepping solver
>    TSGetSNES(ts_solver,&nl_solver);
> 
>    // Write out the initial condition before the solver is started
>    WriteSolutionCSV("initial_condition.csv");
> 
>    // Run the solver!
>    TSSolve(ts_solver,solver_main.U_cons);
> 
>    if(mpi_main.getRank() == 0)
>    {
>        std::cout << "-----COMPLETED SOLUTION-----" << std::endl;
>    }
> 
>    // Write out the solution at the end
>    WriteSolutionCSV("output_test.csv");
> 
>    // Destroy the time-stepping solver
>    TSDestroy(&ts_solver);
> 
> }
> 
> 
> NEW VERSION WITH TSSetExactFinalTime and TSAdaptSetType:
> 
> void cPETScSolverClass::SolveTSProblem()
> {
>    if(mpi_main.getRank() == 0)
>    {
>        std::cout << "*****STARTING SOLUTION*****" << std::endl;
>    }
> 
>    // Set up the time-stepping solver object
>    TSCreate(PETSC_COMM_WORLD,&ts_solver);
> 
>    // Set the problem type to be nonlinear
>    TSSetProblemType(ts_solver,TS_NONLINEAR);
> 
>    // Point the solution to the solution vector (vector of conserved variables)
>    TSSetSolution(ts_solver,solver_main.U_cons);
> 
>    // Set the time-stepping type
>    TSSetType(ts_solver,TSEULER);
> 
>    // Set the initial time and the time step
>    TSSetInitialTimeStep(ts_solver,0.0,0.001);
> 
>    // Set the total duration (number of steps and total time)
>    TSSetDuration(ts_solver,1,0.001);
> 
>    // Set TS exact final time behavior
>    TSSetExactFinalTime(ts_solver,TS_EXACTFINALTIME_STEPOVER);
> 
>    // Set TS adaptive time stepping behavior
>    TSAdapt ts_adapt;
>    TSGetAdapt(ts_solver,&ts_adapt);
>    TSAdaptSetType(ts_adapt,TSADAPTNONE);
> 
>    // Point the solver to the function which evaluates the right hand side
> TSSetRHSFunction(ts_solver,solver_main.RHS,solver_main.FormFunction,this);
> 
>    // Point the solver to the monitor function
>    TSMonitorSet(ts_solver,solver_main.TS_Monitor,this,NULL);
> 
>    // Set the distributed array context for the solver
>    TSSetDM(ts_solver,main_da);
> 
>    // Get the nonlinear solver for the time-stepping solver
>    TSGetSNES(ts_solver,&nl_solver);
> 
>    // Write out the initial condition before the solver is started
>    WriteSolutionCSV("initial_condition.csv");
> 
>    // Run the solver!
>    TSSolve(ts_solver,solver_main.U_cons);
> 
>    if(mpi_main.getRank() == 0)
>    {
>        std::cout << "-----COMPLETED SOLUTION-----" << std::endl;
>    }
> 
>    // Write out the solution at the end
>    WriteSolutionCSV("output_test.csv");
> 
>    // Destroy the time-stepping solver
>    TSDestroy(&ts_solver);
> 
> }
> 
> 
> On 06/05/2016 06:44 PM, Barry Smith wrote:
>>   Paul,
>> 
>>    I don't think this was an expected change. Can you send code or walk us through the steps that led you to this?
>> 
>>   Barry
>> 
>> 
>>> On Jun 3, 2016, at 10:23 AM, Paul Urbanczyk <gomer at stanford.edu> wrote:
>>> 
>>> Hello,
>>> 
>>> I recently upgraded to the latest version of PETSc (3.7.1) from the git repository.
>>> 
>>> Running my code gave me an error message about TSSolve being in the wrong state and needing to call TSSetExactFinalTime.
>>> 
>>> I added this function call with TS_EXACTFINALTIME_STEPOVER, but when I re-ran my code, I got a seg fault and error messages pointing to TSAdaptChoose.
>>> 
>>> After fiddling around for a while, I found that I now needed to explicitly set the time step adaptation through TSAdaptSetType.
>>> 
>>> Can anyone confirm that this is so? If so, it might be helpful to note that in documentation or error messages somewhere.
>>> 
>>> Thanks,
>>> 
>>> Paul
>>> 
>>> 
> 
> 



More information about the petsc-users mailing list