Hi Matt i don't know if line search is used in dolfin, but i'll try the parameter continuation and a regularization of the viscosity as proposed by my colleague Jed.
Thanks for your answer! patrick Matthew Knepley wrote: > In general, if a Newton iteration is not converging, you can > > a) Use a better line search (what is used now?) > > b) try a trust-region method > > c) use continuation in your parameter > > Matt > > On Tue, Mar 17, 2009 at 10:38 AM, Patrick Riesen > <[email protected]>wrote: > >> Anders Logg wrote: >>> On Fri, Mar 13, 2009 at 07:48:39PM +0100, Patrick Riesen wrote: >>>> Patrick Riesen wrote: >>>>> Anders Logg wrote: >>>>>> On Wed, Mar 11, 2009 at 10:21:52AM +0100, Patrick Riesen wrote: >>>>>>>> hello >>>>>>>> >>>>>>>> So my Etafunction is now being correctly constructed and there are >> the >>>>>>>> correct values in the dof-vector(). i did this by a function class >>>>>>>> definition and a call to Eta as >>>>>>>> >>>>>>>> >>>>>>>> class Eta: public Function >>>>>>>> { >>>>>>>> Eta (Mesh& mesh, Function& gamma, Form& form, ...) : >> Function(mesh, >>>>>>>> form, argument_id) >>>>>>>> { constructor....something as above } >>>>>>>> >>>>>>>> and then i call it as >>>>>>>> >>>>>>>> f_eta = new Eta(.....); >>>>>>>> >>>>>>>> in the main program. >>>>>>>> >>>>>>>> calling Eta as Function(mesh,form,id) i thought this should create a >>>>>>>> discrete function for f_eta, but the type of the f_eta function is >>>>>>>> 'user'. this gives me an error at the assembly, "missing eval() for >>>>>>>> user-defined function..." >>>>>>>> do i have to add an dummy eval() function to my Eta-class, or what >> do i >>>>>>>> have to change that no eva()-missing error is raised and my f_eta >>>>>>>> function is of type discrete? >>>>>>>> >>>>>>>> thanks for your help, >>>>>>>> patrick >>>>>>>> >>>>>>> sorry, i found an error, now the Eta is of type discrete (all 3 >> argument >>>>>>> functions of my form are now discrete). but the eval() error at >> assembly >>>>>>> of the form is still present. >>>>>> Have you called vector() inside the constructor of Eta? That should >>>>>> make it discrete and the assembler should not complain. Perhaps there >>>>>> is some other function in you form that is missing an eval (or a >>>>>> vector). >>>>>> >>>>> hi anders, >>>>> yes i did that, and now i found the error fortunately. i did not >>>>> initialize the bilinear form correctly with some placeholder function >>>>> for Eta. now the assembly is working, so i can go on. >>>>> >>>>> thank you & regards, >>>>> patrick >>>> hi all >>>> my code is now running but the Eta-funcs still give me some problems. i >>>> have initialized my bilinear/linear form with two constant functions as >>>> >>>> f_eta = new Function(mesh, 1.) >>>> f_Deta = new Function(mesh, 1.) >>> Are you using an old version? This doesn't work with the current >>> interface. >>> >>>> the first newton iteration gives me a newtonian solution from which i >>>> take the velocity to compute the invariant in another form (gamma) and >>>> then i construct the discussed functions Eta, DEta, and renew f_eta, >>>> f_Deta as >>>> >>>> f_eta = new Eta(gamma,.....) >>>> f_Deta = new DEta(gamma,......) >>>> >>>> >>>> so i guess in the second iteration it will assemble with a variable >>>> viscosity as f_eta, f_Deta are different now but it just converges to >>>> the newtonian solution. >>>> >>>> is this a problem, that i constructed the forms with a constant >>>> function? does dolfin then not consider the values in the vector() of >>>> the new discrete functions for f_eta, f_Deta after renewing? >>> Yes, if you construct your form with some Function, then that Function >>> will be used. The form won't change just because you create a new >>> Function later. >> hi, >> thanks again for the help so far, >> now i think i managed to construct my forms correctly and the code is >> running. the solution looks reasonable, starting from newtonian solution >> with n=1 and then changes when the powerlaw exponent is increased. >> >> however, the convergence is poor, e.g. with a powerlaw exponent of n=2 >> it takes almost 30 iterations to converge (incremental criterium) and it >> does not converge beyond n=2 so far. >> >> to compute the variable viscosity terms in my form i followed the >> example of the quadrature elements implementation of the nonlinear >> poisson demo (sect. 6.10 in the ffc manual from nov 2008) and solve a >> linear system with another form-file to obtain the invariant of the >> strain tensor. then as discussed in previous mails (see above) i take >> power n-something of the invariant and compute the viscosity in the >> dof-vector adaptively in each iteration. >> >> is there a way to play around with the newtonsolver? now i use a >> lu-factorization with umfpack and ublas-backend, i just >> had >> >> NewtonSolver newtonsolver; >> >> e.g but i tried the same as >> >> NewtonSolver newtonsolver(lu,default_pc); >> >> i got an error: >> >> In file included from PowerlawStokesSolver.cpp:4: >> PowerlawStokesSolver.h:74: error: 'lu' is not a type >> PowerlawStokesSolver.h:74: error: 'default_pc' is not a type >> >> BTW: i use dolfin0.8.1 with dolfin-grade2 >> >> regards, >> patrick >> >> _______________________________________________ >> DOLFIN-dev mailing list >> [email protected] >> http://www.fenics.org/mailman/listinfo/dolfin-dev >> > > > _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
