Matt, Windows does not have drand48()
Note: if you work on this then you should also make drand48() to be the default PetscRandom and add a test example in sys/examples/tests that generates a bunch of numbers and does the usual diff with a file. This will help us track down any misbehaving machines more easily. Barry > On Aug 25, 2015, at 5:34 PM, Matthew Knepley <[email protected]> wrote: > > On Tue, Aug 25, 2015 at 5:09 PM, Barry Smith <[email protected]> wrote: > > > On Aug 25, 2015, at 4:50 PM, Matthew Knepley <[email protected]> wrote: > > > > On Tue, Aug 25, 2015 at 4:44 PM, Barry Smith <[email protected]> wrote: > > > > > On Aug 25, 2015, at 3:22 PM, Matthew Knepley <[email protected]> wrote: > > > > > > On Tue, Aug 25, 2015 at 12:13 PM, Mark Adams <[email protected]> wrote: > > > > > > > > > On Sat, Aug 22, 2015 at 10:39 PM, Barry Smith <[email protected]> wrote: > > > > > > > On Aug 22, 2015, at 9:26 PM, Mark Adams <[email protected]> wrote: > > > > > > > > Good point. I can not see any reason to use the initial guess for the > > > > eigen estimate. > > > > > > Why not, won't it better select for the eigen space actually seen by > > > the linear solver since the linear solver starts with that guess? I am > > > just making this up because I haven't looked how the initial guess > > > affects eigenanalysis for Chebyshev it but ... > > > > > > I've not looked at it, and it would be hard to because it is not a well > > > defined problem. But, if the initial guess is low frequency then it will > > > give a poor estimate for the highest eigen value. It is not clear to me > > > what the relationship is, generally, of an initial guess and the > > > solution, spectrally. Initial guesses will change as the problem evolves > > > but we don't update the eigen estimates. If the user's initial guess > > > happens to be zero then god knows what happens. (This is actually the > > > case for the XGC1 code!!!) It adds one more variable in debugging AMG, > > > which is hard enough as it is. > > > > > > > > > > I would vote for (1). > > > > > > > > Also, I hope cheb->random is the default. > > > > > > Well then different machines will produce different convergence > > > histories which is annoying for any kind of "no change" daily testing. > > > Except for you, most of the rest of us don't like the random default, > > > sorry :-) > > > > > > We can use the determinate random number that I added to GAMG (eg, v(i) = > > > ((double)(gid(i)*51)%100) - 50.)/50. > > > > > > Wait, why are you doing this? Why not just create a PetscRandom and set > > > the seed? > > > > Yes, he should create a new PetscRandom implementation called for > > example deterministic that would do some simple minded thing. All the > > current PetscRandom implementations might create different numbers with > > different OS, or versions of OS thus making "no change" tests impossible. > > > > This makes no sense. drand48() is a 48-bit linear congruential random > > number generator. It should never return a different value given the same > > seed. > > From the makefile > > #requiresfunction 'PETSC_HAVE_DRAND48' > > It appears that not all systems have drand48(). So it is still an issue of > making sure we have a way of generating the exact same numbers on all systems. > > drand48() is POSIX, and its a 1 line algorithm. If you can dig up a system on > which it is missing, I will implement a stopgap. > > Matt > > > Barry > > > > > > > Matt > > > > Barry > > > > > > > > Matt > > > > > > > > > > One of my apps uses a zero RHS for the first solve, just because they > > > > did not care about adding some logic like: if (.not. first_solve) > > > > solve() Using a zero RHS would be catastrophic. > > > > > > There code be a check that rhs norm is zero (cost of a global > > > reduction?) and then use a nonzero initial guess to do the eigenanalysis > > > > > > Too complicated for little gain, or loss even, and requires a reduction. > > > > > > > > > > I trust this is true, because the code works, but we should make sure. > > > > And perhaps Cheby should check that that KSPSolve did all of its > > > > iterations (ie, DIVERGE_ITS, or whatever). Getting this wrong leads to > > > > silent errors that are a pain to debug. > > > > > > Good point, the KSPChebyshevComputeExtremeEigenvalues_Private() > > > routine should check that n returned from KSPGetIterationNumber() is not > > > zero etc. > > > > > > Barry > > > > > > So I think we should: > > > > > > 1) set the initial guess with my new sort of random number (we don't need > > > good quality random number here) > > > 2) add the check for DIVERGE_ITS, or something, in > > > KSPChebyshevComputeExtremeEigenvalues_Private. Should it stop? Probably. > > > > > > Mark > > > > > > > > > > > > > > I can do this. > > > > > > > > Mark > > > > > > > > > > > > > > > > On Sat, Aug 22, 2015 at 6:35 PM, Barry Smith <[email protected]> wrote: > > > > > > > > From KSPSolve_Chebyshev() > > > > > > > > X = ksp->work[0]; > > > > if (cheb->random) { > > > > B = ksp->work[1]; > > > > ierr = VecSetRandom(B,cheb->random);CHKERRQ(ierr); > > > > } else { > > > > B = ksp->vec_rhs; > > > > } > > > > ierr = KSPSolve(cheb->kspest,B,X);CHKERRQ(ierr); > > > > > > > > if (ksp->guess_zero) { > > > > ierr = VecZeroEntries(X);CHKERRQ(ierr); > > > > } > > > > ierr = > > > > KSPChebyshevComputeExtremeEigenvalues_Private(cheb->kspest,&min,&max);CHKERRQ(ierr); > > > > > > > > This seems to do strange stuff with the initial guess for the > > > > eigenanalysis. ksp->work[0] is a work vector used within the Chebyshev > > > > algorithm, so at this point in the code it will have just whatever > > > > stuff it had in it from a previous Chebyshev solver or a zero the first > > > > time through. It seems bad to use this vector as the initial guess for > > > > estimator. Then AFTER the KSPSolve() it zeros ksp->work[0], sometimes? > > > > If the original system being solved has zero initial guess, even though > > > > the values in X will not be used again. WTF? > > > > > > > > Shouldn't the code either > > > > > > > > 1) zero X = ksp->work[0] everytime BEFORE the KSPSolve() or > > > > 2) zero X if ksp->guess_zero and otherwise copy into X the initial > > > > guess vec_sol from the caller before computing the eigenvalues to use > > > > that initial guess in estimating the eigenvalues? > > > > > > > > Barry > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > What most experimenters take for granted before they begin their > > > experiments is infinitely more interesting than any results to which > > > their experiments lead. > > > -- Norbert Wiener > > > > > > > > > > -- > > What most experimenters take for granted before they begin their > > experiments is infinitely more interesting than any results to which their > > experiments lead. > > -- Norbert Wiener > > > > > -- > What most experimenters take for granted before they begin their experiments > is infinitely more interesting than any results to which their experiments > lead. > -- Norbert Wiener
