Justin, 1) The big difference between TRON and BLMVM is that TRON requires hessian information, BLMVM only uses gradient information. Thus TRON will usually converge faster, but requires more information, memory, and a KSP solver. GPCG (gradient projected conjugate gradient) is another gradient-only option, but usually performs worse than BLMVM.
2) TaoGetLinearSolveIterations() will get the total number of KSP iterations per solve Jason On Tue, Apr 21, 2015 at 10:33 AM, Justin Chang <[email protected]> wrote: > Jason, > > Tightening the tolerances did the trick. Thanks. Though I do have a couple > more related questions: > > 1) Is there a general guideline for choosing tron over blmvm or vice > versa? Also is there another tao type that is also suitable given only > bounded constraints? > > 2) Is it possible to obtain the total number of KSP and/or PG iterations > from tron? > > Thanks, > Justin > > On Tue, Apr 21, 2015 at 9:52 AM, Jason Sarich <[email protected]> > wrote: > >> Hi Justin, >> >> blmvm believes that it is already sufficiently close to a minimum, so it >> doesn't do anything. You may need to tighten some of the tolerance to force >> an iteration. >> >> Jason >> >> >> On Tue, Apr 21, 2015 at 9:48 AM, Justin Chang <[email protected]> >> wrote: >> >>> Time step 1: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.0663148 >>> Objective value=-55.5945 >>> total number of iterations=35, (max: 2000) >>> total number of function/gradient evaluations=37, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> Time step 2: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.0682307 >>> Objective value=-66.9675 >>> total number of iterations=23, (max: 2000) >>> total number of function/gradient evaluations=25, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> Time step 3: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.0680522 >>> Objective value=-71.8211 >>> total number of iterations=19, (max: 2000) >>> total number of function/gradient evaluations=22, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> Time step 4: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.0551556 >>> Objective value=-75.1252 >>> total number of iterations=18, (max: 2000) >>> total number of function/gradient evaluations=20, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> Time step 5: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.0675667 >>> Objective value=-77.4414 >>> total number of iterations=6, (max: 2000) >>> total number of function/gradient evaluations=8, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> Time step 6: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.059143 >>> Objective value=-79.5007 >>> total number of iterations=3, (max: 2000) >>> total number of function/gradient evaluations=5, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> Time step 7: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.0433683 >>> Objective value=-81.3546 >>> total number of iterations=5, (max: 2000) >>> total number of function/gradient evaluations=8, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> Time step 8: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.0840676 >>> Objective value=-82.9382 >>> total number of iterations=0, (max: 2000) >>> total number of function/gradient evaluations=1, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> Time step 9: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.0840676 >>> Objective value=-82.9382 >>> total number of iterations=0, (max: 2000) >>> total number of function/gradient evaluations=1, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> Time step 10: >>> >>> Tao Object: 1 MPI processes >>> type: blmvm >>> Gradient steps: 0 >>> TaoLineSearch Object: 1 MPI processes >>> type: more-thuente >>> Active Set subset type: subvec >>> convergence tolerances: fatol=0.0001, frtol=0.0001 >>> convergence tolerances: gatol=0, steptol=0, gttol=0 >>> Residual in Function/Gradient:=0.0840676 >>> Objective value=-82.9382 >>> total number of iterations=0, (max: 2000) >>> total number of function/gradient evaluations=1, (max: 4000) >>> Solution converged: estimated |f(x)-f(X*)|/|f(X*)| <= frtol >>> >>> >>> >>> >>> >>> On Tue, Apr 21, 2015 at 9:28 AM, Jason Sarich <[email protected]> >>> wrote: >>> >>>> Hi Justin, >>>> >>>> what reason is blmvm giving for stopping the solve? (you can use >>>> -tao_view or -tao_converged_reason to get this) >>>> >>>> Jason >>>> >>>> On Mon, Apr 20, 2015 at 6:32 PM, Justin Chang <[email protected]> >>>> wrote: >>>> >>>>> Jason, >>>>> >>>>> I am using TaoGetSolutionStatus(tao,&its, ...) and it gives me >>>>> exactly what I want. However, I seem to be having an issue with blmvm >>>>> >>>>> I wrote my own backward euler code for a transient linear diffusion >>>>> problem with lower bounds >= 0 and upper bounds <= 1. For the first >>>>> several >>>>> time steps I am getting its > 0, and it decreases over time due to the >>>>> nature of the discrete maximum principles. However, at some point my its >>>>> become 0 and the solution does not "update", which seems to me that >>>>> TaoSolve is not doing anything after that. This doesn't happen if I were >>>>> to >>>>> use tron (my KSP and PC are cg and jacobi respectively). >>>>> >>>>> Do you know why this behavior may occur? >>>>> >>>>> Thanks, >>>>> >>>>> On Tue, Apr 14, 2015 at 9:35 AM, Jason Sarich <[email protected]> >>>>> wrote: >>>>> >>>>>> Hi Justin, >>>>>> >>>>>> I have pushed these changes to the "next" branch, your code snippet >>>>>> should work fine there. >>>>>> >>>>>> Note that there is also available (since version 3.5.0) the routine >>>>>> TaoGetSolutionStatus(tao,&its,NULL,NULL,NULL,NULL,NULL) which will >>>>>> provide >>>>>> the >>>>>> same information >>>>>> >>>>>> Jason >>>>>> >>>>>> On Fri, Apr 10, 2015 at 6:28 PM, Justin Chang <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Whatever is convenient and/or follow the "PETSc" standards. >>>>>>> Something similar to SNESGetIterationNumber() or KSPGetIterationNumber() >>>>>>> would be nice. Ideally I want my code to look like this: >>>>>>> >>>>>>> ierr = TaoGetIterationNumber(tao,&its);CHKERRQ(ierr); >>>>>>> ierr = PetscPrintf(PETSC_COMM_WORLD, "Number of Tao iterations = >>>>>>> %D\n", its); >>>>>>> >>>>>>> Thanks :) >>>>>>> >>>>>>> On Fri, Apr 10, 2015 at 5:53 PM, Jason Sarich < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Hi Justin, I'll get this in. I assume that displaying the number of >>>>>>>> iterations with tao_converged_reason is what you are asking for in >>>>>>>> particular? Or did you have something else in mind? >>>>>>>> >>>>>>>> Jason >>>>>>>> On Apr 10, 2015 16:42, "Smith, Barry F." <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> Justin, >>>>>>>>> >>>>>>>>> Sorry TAO simply doesn't even collect this information >>>>>>>>> currently. But yes we should definitely make it available! >>>>>>>>> >>>>>>>>> Jason, >>>>>>>>> >>>>>>>>> Could you please add this; almost all the TaoSolve_xxx() have >>>>>>>>> a local variable iter; change that to tao->niter (I'm guess this is >>>>>>>>> suppose >>>>>>>>> to capture this information) and add a TaoGetIterationNumber() and >>>>>>>>> the uses >>>>>>>>> can access this. Also modify at the end of TaoSolve() >>>>>>>>> -tao_converged_reason >>>>>>>>> to also print the iteration count. At the same time since you add >>>>>>>>> this you >>>>>>>>> can add a tao->totalits which would accumulate all iterations over >>>>>>>>> all the >>>>>>>>> solves for that Tao object and the routine TaoGetTotalIterations() to >>>>>>>>> access this. Note that TaoSolve() would initialize tao->niter = 0 at >>>>>>>>> the >>>>>>>>> top. >>>>>>>>> >>>>>>>>> Thanks >>>>>>>>> >>>>>>>>> Barry >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> > On Apr 10, 2015, at 4:16 PM, Justin Chang <[email protected]> >>>>>>>>> wrote: >>>>>>>>> > >>>>>>>>> > Hi all, >>>>>>>>> > >>>>>>>>> > Is there a way to generically obtain the number of Tao >>>>>>>>> iterations? I am looking through the -help options for Tao and I >>>>>>>>> don't see >>>>>>>>> any metric where you can output this quantity in the manner that you >>>>>>>>> could >>>>>>>>> for SNES or KSP solves. I am currently using blmvm and tron, and the >>>>>>>>> only >>>>>>>>> way I can see getting this metric is by outputting -tao_view and/or >>>>>>>>> -tao_monitor and manually finding this number. I find this cumbersome >>>>>>>>> especially for transient problems where I would like to simply have >>>>>>>>> this >>>>>>>>> number printed for each step instead of ending up with unnecessary >>>>>>>>> info. >>>>>>>>> > >>>>>>>>> > Thanks, >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > -- >>>>>>>>> > Justin Chang >>>>>>>>> > PhD Candidate, Civil Engineering - Computational Sciences >>>>>>>>> > University of Houston, Department of Civil and Environmental >>>>>>>>> Engineering >>>>>>>>> > Houston, TX 77004 >>>>>>>>> > (512) 963-3262 >>>>>>>>> >>>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >
