There were bugs in FunctionAssigner in 1.3.0 which were fixed
subsequently. There is no point in trying to get this working in 1.3.0.
Use at least DOLFIN 1.4.0.

Jan


On Mon, 22 Dec 2014 20:12:04 +0100 (CET)
"Marek Capek" <[email protected]> wrote:

> Hello,
> I want to run time-dependent nonlinear problem, therefore I need to
> assign solution from
> previous time step.
> I want to run problem in parallel (MPI).
> The following code runs correctly on single core, however for more
> cores fenics outputs
> following error message
> 
> 
> Traceback (most recent call last):
>   File "example.py", line 83, in <module>
> Traceback (most recent call last):
>   File "example.py", line 83, in <module>
>     assignerVelocity
> =FunctionAssigner(v0.function_space(),v.function_space( ))
>   File
> "/home/marek/Libraries/Fenics/lib/python2.7/site-packages/dolfin/cpp/
> function.py", line 1758, in __init__ assignerVelocity
> =FunctionAssigner(v0.function_space(),v.function_space( ))
>   File
> "/home/marek/Libraries/Fenics/lib/python2.7/site-packages/dolfin/cpp/
> function.py", line 1758, in __init__
> _function.FunctionAssigner_swiginit(self,_function.new_FunctionAssigner( 
> *args))
> RuntimeError: 
> 
> ***
> ------------------------------------------------------------------------
> - *** DOLFIN encountered an error. If you are not able to resolve
> this issue *** using the information listed below, you can ask for
> help at ***
> ***     [email protected]
> ***
> *** Remember to include the error message listed below and, if
> possible, *** include a *minimal* running example to reproduce the
> error. ***
> ***
> ------------------------------------------------------------------------
> - *** Error:   Unable to create function assigner.
> *** Reason:  The receiving and assigning spaces do not have the same
> number of dofs per space.
> *** Where:   This error was encountered inside FunctionAssigner.cpp.
> *** Process: 0
> *** 
> *** DOLFIN version: 1.3.0
> *** Git changeset:  
> 
> 
> 
> the error originates from the following (simplified) code:
> 
> 
> 
> 
> 
> 
> 
> from dolfin import *
> from dolfin.cpp.function import FunctionAssigner
> 
> 
> mesh =  RectangleMesh(0, 0, 3, 1, 5, 5, 'left')
> 
> ffc_options = {"quadrature_degree": 4}
> 
> 
> V = VectorFunctionSpace(mesh, "CG", 2)
> Q = FunctionSpace(mesh, "CG", 1)
> SHEAR_RATE=FunctionSpace(mesh, "CG", 1)
> HEM = FunctionSpace(mesh, "CG",1)
> W = MixedFunctionSpace([V,Q,SHEAR_RATE,HEM])
> 
> class InitialConditionsV(Expression): 
>     def eval(self, values, crossedx):
>         values[0] =  .0
>         values[1] = 0.0
>     def value_shape(self):
>         return (2,)
> 
> class InitialConditionsHem(Expression):
>     def eval(self, values, crossedx):
>         values[0] =  0.45  
>  
> w=Function(W)
> (v, p,shear_rate,hem) = (as_vector((w[0], w[1])), w[2],w[3],w[4] )
> (v_, p_,shear_rate_,hem_) = TestFunctions(W)
>     
> v_init=InitialConditionsV()
> v0=Function(V)
> v0 = interpolate(v_init,V)
> 
> hem_init=InitialConditionsHem()
> hem0=Function(HEM)
> hem0 =interpolate(hem_init,HEM)
> 
> D = 0.5*(grad(v)+grad(v).T)
> T_plasma=2*D
> 
> bcu=[]
> 
> dt= 0.1
> 
> F_ns =(1/dt)*inner((v-v0),v_)*dx + (inner(T_plasma, grad(v_))   -
> div(v_)*p 
> + p_*div(v))*dx() +inner(grad(v)*v_, v)*dx()\
>     +\
>     + shear_rate*shear_rate_*dx() -
> sqrt(2*inner(D,D)+0.001)*shear_rate_*dx( )\
>     +\
>     (1/dt)*(hem-hem0)*hem_*dx +
> inner(v,grad(hem))*hem_*dx()+inner(grad (hem),grad(hem_))*dx()
> +inner(grad(shear_rate),grad(hem_))*dx() 
> J_ns=derivative(F_ns,w)
> NS_problem = NonlinearVariationalProblem(F_ns, w, bcu, J_ns,
> form_compiler_ parameters=ffc_options)
> NS_solver  = NonlinearVariationalSolver(NS_problem)
>     
> prm = NS_solver.parameters
> prm['newton_solver']['absolute_tolerance'] = 1E-9
> prm['newton_solver']['relative_tolerance'] = 1E-9
> prm['newton_solver']['maximum_iterations'] = 100
> prm['newton_solver']['relaxation_parameter'] = .5    #
> prm['reset_jacobian'] = True  ###
> https://bugs.launchpad.net/dolfin/+bug/ 1055645
>     
>     # Compute the full NS solution
> begin("Solving  NS ....")
> NS_solver.solve()
> end()
>     # Extract solutions:
> (v, p,shear_rate,hem) = w.split()
> 
> assignerVelocity
> =FunctionAssigner(v0.function_space(),v.function_space())
> assignerVelocity.assign(v0,v)
> 
> 
> I use in more elaborated code assignment of values of tensor field
> between timesteps, therefore
> I would appreciate advice on this (i.e. for TensorFunctionSpace
> inside MixedFunctionSpace)  issue too.
> Could you please help me and post some hack for this issue?
> 
> Thank You
> 
> Marek C
> 

_______________________________________________
fenics mailing list
[email protected]
http://fenicsproject.org/mailman/listinfo/fenics

Reply via email to