On Fri, 2008-08-15 at 15:30 -0500, Roy Stogner wrote:
> On Fri, 15 Aug 2008, Adam C Powell IV wrote:
> 
> > I'd like to calculate the integral of (grad u)^2 over my domain, after a
> > calculation.
> >
> > Currently, I assign two new variables, and set up new equations for
> > them: Jx-du/dx=0, Jy-du/dy=0.  Then I just square and add the results of
> > calculate_norm (Jx and Jy, L2).  It seems to work.  But this adds two
> > extra field variables and equations to the calculation, multiplying the
> > memory usage and slowing things down a good bit.
> >
> > Alternatively, is it possible to calculate the L2 norm of the field
> > derivative or gradient directly, through a method I've missed?
> 
> Well, for future reference in general: it's possible to calculate the
> L2 norm of the arctangent cubed of the field gradient directly, if
> that's what you want.

And what norm is that???  Oh, reading on...

> Just loop over all the elements the same way
> you would for a residual assembly, calculate whatever function you
> need at each quadrature point, and sum the weighted values to
> numerically integrate the result.

Ah, makes sense.  That would do the second separate-the-derivatives-
calculation thing.  Silly that I didn't think of such a simple loop...

> Helper methods like
> calculate_norm() are intended to simplify common code, not to be a
> straitjacket if you need to do something out of the ordinary.
> 
> Hmm... I didn't mean that last paragraph to sound condescending, but
> did it anyway?  Apparently karma thinks I deserve to be embarrassed
> now.

Well, I deserve to be embarrassed for not simply writing a loop.

> You see, the next thing I was going to say is that you can (in
> the SVN and soon 0.6.3+ libMesh versions) just pass H1_SEMINORM to
> calculate_norm() to get the square root of the integral of the
> gradient squared, and then square that to get the number you want...

Excellent.  Somehow I figured that someone might have needed that common
variation, and coded it, or part of it. :-)

> but glancing at the calculate_norm() implementation, I see I never
> finished adding that feature; the code currently would give you an
> inaccurate result.  I'll go fix that now.

Thank you!  I'll see if I can easily add that patch to my (soon-to-be)
0.6.3 Debian/Ubuntu package.

> > Or if there's nothing quite that convenient, is there a way of
> > calculating the derivatives and putting them into a separate vector
> > in the system, decoupled from the original calculation?
> 
> All variables in a system are coupled by definition; if you really
> needed to keep some post-processed data around, the way to do it
> efficiently would be to add an additional ExplicitSystem to your
> EquationSystems object, then put the decoupled variables there.

I see, not just another vector but a whole ExplicitSystem.  I'll have
other uses for that...

Thanks again,
-Adam
-- 
GPG fingerprint: D54D 1AEE B11C CE9B A02B  C5DD 526F 01E8 564E E4B6

Engineering consulting with open source tools
http://www.opennovation.com/

Attachment: signature.asc
Description: This is a digitally signed message part

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Libmesh-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to