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

Reply via email to