← Back to team overview

dolfin team mailing list archive

Re: Visualizing basis functions

 

On Tue, Aug 19, 2008 at 05:33:21PM +0200, Evan Lezar wrote:
> 
> 
> 2008/8/11 Anders Logg <logg@xxxxxxxxx>
> 
>     On Sun, Aug 10, 2008 at 03:54:25PM +0200, Evan Lezar wrote:
>     > Hi there
>     >
>     > After some time away I have once again been able to try and get do grips
>     with
>     > dolfin.  By a bit of a round about way I was able to solve a
>     magnetic-field
>     > based eigenvalue problem giving me the cutoff wavenumbers for a square
>     > waveguide structure - it is still, however, a work in progress.
>     >
>     > One question I do have is regarding the visualization of the results I
>     have
>     > obtained.  To this end I have two questions - the first is simply the
>     > visualization of the basis functions (vector Nedelec) themselves (see the
>     > attached image taken from Finite Element Method for Electromagnetics by
>     Volakis
>     > et al) - how could this be achieved in dolfin?  Put another way - how can
>     I set
>     > the coefficient for a single basis function equal to 1 and zero the rest
>     and
>     > display the result?
> 
>     Marie Rognes has code for doing just this (plotbases.py in the
>     bdm-2007 repository). I don't want to post it myself, but I imagine
>     she would be willing to post the code. Marie?
> 
>     > Then the second question builds on this.  If I have the coefficients
>     associated
>     > with all the basis functions in a system, how would I set up a function
>     to
>     > calculate the weighted sum of the vector basis functions anywhere in the
>     mesh?
>     >
>     > I am using pydolfin.
>     >
>     > If anything is unclear, please contact me so that I can clarify matters.
> 
>     If you have a Function u, you can just call u.eval() to evaluate it at
>     any point x. This will locate the cell to which x belongs and compute
>     the linear combination. Take a look at the demo in demo/function/python/.
> 
> 
> Anders
> 
> I am communicating with Marie regarding the visualization of the basis
> functions - I am still running into problems with the function evaluation. 
> Consider the following:
> 
> mesh = UnitSquare(1,1)
> element = FiniteElement("Nedelec", "triangle", 0)
> 
> # obtain a list of coefficients for the basis fuctions in the finite element
> system
> 
> f = Function(element, mesh, coefficient_list)
> 
> Now this is where the problems start.  As far as I am aware, f should be a
> vector function which could be evaluated at any point (x,y), so for argument's
> sake, let
> p = array((0.5,0.5))
> 
> then if I execute the following
> 
> F_val = f.eval(p)
> 
> Then F_val should contain the x and y components of the function as a weighted
> sum of the basis functions?
> 
> Please let me know if I am understanding this correctly, or if I am doing
> something wrong.
> 
> Evan

When evaluating a Function in Python, you have to do something like
this:

  x = array((0.5, 0.5))
  values = array((0.0, 0.0))
  u.eval(values, x)

Then values will be an array with the two values for the vector-valued
function.

Ideally, one should be able to do

  x = array((0.5, 0.5))
  values = u.eval(x)

or even

  value = u(x)

but this hasn't been fixed in the interface yet.

-- 
Anders

Attachment: signature.asc
Description: Digital signature


Follow ups

References