[Getdp] Evaluate a scalar field at some points, print values on terminal and use them in PostOperation

gilles quemener quemener at lpccaen.in2p3.fr
Tue May 24 14:58:41 CEST 2016


Hi Michael, 

Thanks a lot for your answer, it helped me a bit but I still have some problems using registers. 
In the GetDP, Gmsh and Onelab sources, I could not find any folder named "benchmarks". 
However, I looked at the GetDP manual as well as at the different examples in the "models" 
folder but still I could not figured out how to use registers in Print and Echo commands. 
In the following code snippet you will find among other things I have tested what fails at parsing 
time. 

//Post Operation 
//============== 
PostOperation{ 
{Name Map_u; NameOfPostProcessing CubicCavity; 
Operation{ 

// Stores in register #1 the scalar potential value evaluated at point {0, 0, 0.5}: 
Print [ utotm, OnPoint {0, 0, 0.5}, StoreInRegister 1, Format SimpleTable, File "Result_Dummy.txt" ]; // WORKS !!! 

// Stores in register #2 the minimum value of the scalar potential over region GammaInner: 
Print [ utotm, OnElementsOf GammaInner, StoreMinInRegister 2, Format SimpleTable, File "Result_Dummy.txt" ]; // WORKS !!! 
Echo [ Sprintf("Min = %g", #1) ]; // FAILS !!!! 

// Stores in register #3 the maximum value of the scalar potential over region GammaInner: 
Print [ utotm, OnElementsOf GammaInner, StoreMaxInRegister 3, Format SimpleTable, File "Result_Dummy.txt" ]; // WORKS !!! 
Echo [ Sprintf("Max = %g", #2) ]; // FAILS !!!! 

// Tentative to retrieve iso-contour points for the potential utotm = (utotmMin + utotmMax) / 2 : 
Print [ utotm, OnElementsOf GammaInner, Iso { 0.5 * (#2 + #3) }, Sort Position, Format SimpleTable, File "out1.txt" ]; // FAILS !!!! 
Print [ utotm, OnElementsOf GammaInner, Iso { Evaluate[ 0.5 * (#2 + #3)] }, Sort Position, Format SimpleTable, File "out2.txt" ]; // FAILS !!!! 
} 
} 
} 

Thanks a lot for any help, 

Gilles 

> De: "michael asam" <michael.asam at infineon.com>
> À: quemener at lpccaen.in2p3.fr
> Cc: getdp at geuz.org
> Envoyé: Mardi 24 Mai 2016 09:53:54
> Objet: RE: Evaluate a scalar field at some points, print values on terminal and
> use them in PostOperation

> Hi Gilles,

> you can evaluate the value at a specified point in a PostOperation like this:

> Print[ u, OnPoint {xp, yp, zp} , File "MyResult" , Format SimpleTable];

> You can also find the min/max value and/or the corresponding coordinates and
> store them

> in a register for later use in another PostProcessing (search in the manual for
> StoreMinInRegister

> and StoreMinXinRegister):

> Print[ u, OnElementsOf TotalDomain, StoreMaxInRegister 1, Format SimpleTable,
> File "Result_Dummy.txt"];

> There are various examples in the folder benchmarks in the source code showing
> the usage

> of registers and how to print number results directly in Gmsh’s sidebar.

> Cheers,

> Michael

> From: getdp [mailto:getdp-bounces at ace20.montefiore.ulg.ac.be] On Behalf Of
> gilles quemener
> Sent: Monday, May 23, 2016 2:30 PM
> To: getdp at onelab.info
> Subject: [Getdp] Evaluate a scalar field at some points, print values on
> terminal and use them in PostOperation

> Hi,

> Currently I am trying to evaluate a scalar field solution at some given points

> and to evaluate the min and max of this scalar field. Once this is done I would

> like to print these quantities on the terminal window as well as to use them for

> further PostOperation.

> Assume GetDP has solved my problem and is able to compute scalar fieldsu

> and utotm as described in the GetDP script below.

> How can I get the following quantities at Point {xp, yp, zp}:

> u1 = u(xp, yp, zp)

> u2 = utotm(xp, yp, zp)

> and:

> umin = min(u) over a region

> umax = max(u) over a region

> utotmmin = min(utotm) over a region

> utotmmax = max(utotm) over a region

> I have tried several syntaxes for the different quantities above, but none
> passed the parsing phase w/o error.

> Therefore if someone has clues or a solution, it would be very helpful !

> //Post Processing
> //===============

> PostProcessing{
> {Name CubicCavity; NameOfFormulation CubicCavity;
> Quantity{
> {Name u; Value {Local{[{u}]; In TotalDomain; Jacobian JVol;}}}
> {Name utotm; Value {Local{[{u}-scalpot[]]; In TotalDomain; Jacobian JVol;}}}
> }
> }
> }

> //Post Operation
> //==============

> PostOperation{
> {Name Map_u; NameOfPostProcessing CubicCavity;
> Operation{
> Print [ u, OnElementsOf GammaInner, File "uIIsur_3D.pos" ];// works !
> Print [ utotm, OnElementsOf GammaInner, File "uIImuI_3D.pos" ];// works !

> Print [ utotm, OnElementsOf GammaInner, Iso {0.65}, Sort Position, Format
> SimpleTable, File "out.txt" ];// works !

> // Note: Be carefull, in order to visualize the .pos file below in Gmsh, it does
> not work w/ option "Iso-values"

> // even if it is a single iso-contour/iso-value, I have to use option
> "Continuous Map" (?!?!)

> Print [ utotm, OnElementsOf GammaInner, Iso {0.65}, Format Gmsh, File "toto.pos"
> ];// works !

> // How to print the value of scalar field u or utotm at a specific point (e.g.
> (0,0,1.3)) on terminal ?
> Printf [ "U=%g", u(0, 0, 1.3) ];
> Printf [ "Utotm=%g", utotm(0, 0, 1.3) ];

> // How to get min and max values on some region and use them in other
> PostOperation ?

> umin = Min(u[]) OnElementsOf GammaInner;
> umax = Max(u[]) OnElementsOf GammaInner;

> N = 10;

> du = (umax - umin) / N;

> For i In (1, N)

> uval = umin + (i - 0.5) * du;

> Print[ utotm, OnElementsOf GammaInner, Iso { uval }, Sort Position, Format
> SimpleTable, File >> "out.txt" ];

> EndFor

> }
> }
> }

> Thanks a lot for any help,

> Gilles
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://onelab.info/pipermail/getdp/attachments/20160524/2bf62046/attachment-0001.html>


More information about the getdp mailing list