← Back to team overview

ffc team mailing list archive

Re: mean() for vectors

 

I see. Thanks!

/Johan


> You need to do mean(uc)[i1] or better still something like
>
>     ucbar = mean(uc)
>
> and then use ucbar instead of uc.
>
> This is because the mean is computed as a projection of the Function,
> meaning that a new Function expanded in a new basis (piecewise
> constants) is computed by a linear transformation of the coefficients
> for the original Function, so you can't take the projection of
> individual components (in general).
>
> /Anders
>
>
> On Wed, Dec 21, 2005 at 03:55:40PM +0100, Johan Hoffman wrote:
>> I used it componentwise: mean(uc[i1])
>>
>> Is that ok?
>>
>> /Johan
>>
>>
>> > Yes, it should be supported for vector-valued Functions, but it's not
>> > supported for general expressions:
>> >
>> > 	  mean(f)       # ok
>> > 	  mean(f + g)   # not ok
>> > 	  mean(grad(f)) # not ok
>> >
>> > How have you used it in the form? If it's just mean(f) where f is a
>> > vector-valued function, then it should work.
>> >
>> > /Anders
>> >
>> >
>> > On Wed, Dec 21, 2005 at 01:28:46PM +0100, Johan Hoffman wrote:
>> >> Anders,
>> >>
>> >> Is the mean() function in FFC not supported for vector functions? Or
>> am
>> >> I
>> >> missing something?
>> >>
>> >> /Johan
>> >>
>> >>
>> >>
>> >>
>> >> na41>ffc Poisson.form
>> >> This is FFC, the FEniCS Form Compiler, version 0.2.4.
>> >> For further information, go to http://www/fenics.org/ffc/.
>> >> Parsing Poisson.form
>> >> Output written to Poisson.py
>> >>
>> >> Compiling form: (dXa0/dx0)(dXa1/dx0) | ((d/dXa0)vi0)*((d/dXa1)vi1)*dX
>> +
>> >> (dXa0/dx 1)(dXa1/dx1) | ((d/dXa0)vi0)*((d/dXa1)vi1)*dX
>> >> Finite element of test space:  Lagrange finite element of degree 1 on
>> a
>> >> Triangle  with 1 components
>> >> Finite element of trial space: Lagrange finite element of degree 1 on
>> a
>> >> Triangle  with 1 components
>> >> Compiling tensor representation for interior
>> >> Hard signatures match for terms 0 and 1, factorizing
>> >> Computing reference tensor, this may take some time...
>> >> ................................................................................
>> >> Reference tensor computed in 0.00739 seconds.
>> >> Compiling tensor representation for boundary
>> >> Hard signatures match for terms 0 and 1, factorizing
>> >>
>> >> Compiling form: w0_a0 | vi0*va0*dX
>> >> Finite element of test space:  Lagrange finite element of degree 1 on
>> a
>> >> Triangle  with 1 components
>> >> Finite elements for functions: [Lagrange finite element of degree 1
>> on a
>> >> Triangl e with 1 components]
>> >> Compiling tensor representation for interior
>> >> Computing reference tensor, this may take some time...
>> >> ................................................................................
>> >> Reference tensor computed in 0.012 seconds.
>> >> Compiling tensor representation for boundary
>> >>
>> >> Generating output for DOLFIN
>> >> Output written to Poisson.h
>> >> na41>cd
>> >> na41>cd local/dolfin/src/modules/navierstokes/dolfin/
>> >> na41>ffc NSEContinuity.form
>> >> This is FFC, the FEniCS Form Compiler, version 0.2.4.
>> >> For further information, go to http://www/fenics.org/ffc/.
>> >> Parsing NSEContinuity.form
>> >> Output written to NSEContinuity.py
>> >>
>> >> *** Error at w0_a69 | va69[a7]
>> >> *** Mean values are only supported for Functions.
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> # Copyright (c) 2005 Johan Hoffman (hoffman@xxxxxxxxxxxx)
>> >> # Licensed under the GNU GPL Version 2
>> >> #
>> >> # The contiuity equation for the incompressible
>> >> # Navier-Stokes equations using cG(1)cG(1)
>> >> #
>> >> # Compile this form with FFC: ffc NSEContinuity.form.
>> >>
>> >> name = "NSEContinuity"
>> >> #scalar = FiniteElement("Lagrange", "triangle", 1)
>> >> #vector = FiniteElement("Vector Lagrange", "triangle", 1)
>> >> #constant_scalar = FiniteElement("Discontinuous Lagrange",
>> "triangle",
>> >> 0)
>> >> #constant_vector = FiniteElement("Discontinuous vector Lagrange",
>> >> "triangle", 0)
>> >> scalar = FiniteElement("Lagrange", "tetrahedron", 1)
>> >> vector = FiniteElement("Vector Lagrange", "tetrahedron", 1)
>> >> #constant_vector = FiniteElement("Discontinuous vector Lagrange",
>> >> "tetrahedron", 0)
>> >> constant_scalar = FiniteElement("Discontinuous Lagrange",
>> "tetrahedron",
>> >> 0)
>> >>
>> >> q            = BasisFunction(scalar)
>> >> p            = BasisFunction(scalar)
>> >> #um           = Function(constant_vector)
>> >> uc           = Function(vector)
>> >> f            = Function(vector)
>> >>
>> >> delta1       = Function(constant_scalar)        # stabilization
>> >>
>> >> i0 = Index()
>> >> i1 = Index()
>> >> i2 = Index()
>> >>
>> >> a = delta1*dot(grad(q), grad(p))*dx;
>> >> L = delta1*dot(grad(q), f)*dx - q*uc[i0].dx(i0)*dx -
>> >> delta1*q.dx(i0)*mean(uc[i1])*uc[i0].dx(i1)*dx
>> >> #L = delta1*dot(grad(q), f)*dx - q*uc[i0].dx(i0)*dx -
>> >> delta1*q.dx(i0)*um[i1]*uc[i0].dx(i1)*dx
>> >>
>> >> #a = delta1*q.dx(i0)*p.dx(i0)*dx
>> >> #L = delta1*q.dx(i0)*f[i0]*dx -
>> delta1*q.dx(i0)*uc[i1]*uc[i0].dx(i1)*dx
>> >> -
>> >> q*uc[i0].dx(i0)*dx
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> _______________________________________________
>> >> FFC-dev mailing list
>> >> FFC-dev@xxxxxxxxxx
>> >> http://www.fenics.org/cgi-bin/mailman/listinfo/ffc-dev
>> >>
>> >
>> >
>>
>>
>
> --
> Anders Logg
> Research Assistant Professor
> Toyota Technological Institute at Chicago
> http://www.tti-c.org/logg/
>






References