On 7/26/06, Roy Stogner < roystgnr@ices.utexas.edu> wrote:
On Wed, 26 Jul 2006, David Xu wrote:

> On 7/26/06, Roy Stogner < roystgnr@ices.utexas.edu> wrote:
> I see. Do you any of the plotting software that can handle higher
> polynomials?

No.  If I knew of any I'd be using it myself.  ;-)  As it is I usually
get good enough plots from the bisected piecewise linear plots that
libMesh's output functions produce by default.

> I remember you mentioned lagrange only support up to 2nd order. If that's
> correct,

That's correct.

> I may also want to try higher order hierarchic (up to p=5?).

The polynomial degrees supported by each finite element class depend
on the geometric element.  Check out the definition of
FEInterface::max_order() if you want to see what each supports.

On HEX27 elements, the hierarchics support "unlimited" polynomial
degree - but ill conditioning and floating point error will probably
screw up your solution around p=11.

> Will hierarchic (p>2) have the same node re-numbering problem for
> getting xyz?

Wait wait wait - you're talking about two problems here.  When I
mentioned node renumbering before, I was talking about the difficulty
of loading old solutions into new meshes.  The problem in plotting
solutions on non-lagrange elements is different, and yes, the
hierarchics will be equally tricky.

>> The most general way you can do things is to load your eigenvector
>> solutions back into libMesh (preferably into the same running process
>> that gave you the original matrix, so there's no question of node
>> renumbering).  Then you can use the libMesh plotting functions
>> (assuming you're happy with the limitations of those output formats)
>> or use the libMesh FE objects to get an arbitrarily dense cloud of
>> points for your own plotting software.
> That sounds like a project to me.  Would you please point me to the possible
> classes/functions I need to load the eigenvector solutions back into libMesh

Yes:  NumericVector<>::set()  We don't have any "load numeric vector
from file" function, but it shouldn't be too hard to read in a file
and set the coefficients yourself.

> and to plot them? Currently, for the 2nd order lagrange, I just concatenate
> the node xyz locations with the the eigenvector solutions, and then plot
> them in Matlab.

Okay.  If Matlab doesn't have any particular requirements for the
ordering of the points you plot, then it's easy:

No, the ordering of the points is not important in matlab plotting, I think. Basically I loaded a matrix that contains x, y, z, eigenvectors as inividual columns and used surface/mesh/line plot. The only requirement is the each xyz physical location is correspondent to the eigenvector solution.

Loop over all the elements.  On each geometric element, reinit your FE
object with a grid quadrature rule whose order at least equals your
polynomial degree.  Get the XYZ coordinates and the solution value at
each quadrature point, and output them.

I do this after I load the eigenvector solutions back to libMesh, correct? If I reinit FE object with a grid quadrature rule, how can Imake sure the XYZ coordinates at each quadrature point are the ones correspondent to the loaded eigenvectors?

Can I just ouput the xyz at each quadrature point at the element matrices (Ke, Me) assembly step? Output them to a file and concatenate with the eigenvector solutions? Will that work?

That will output vertex and edge points multiple times, but the plot
should look the same.  If your elements are so large that the plot
still looks faceted, use a quadrature rule with more points.

Same question here, if  I use a quadrature rule different from the one used to assemble Ke, Me, will the xyz coordinates at the each quadrature point be correctlycorrespondent to the eigenvector solutions with the size of global DOFs?