distractor
(Mitja JanÄŤiÄŤ)
November 4, 2021, 8:03am
1
Could somebody please explain the behaviour of mean
function?
For example this case works:
real x0 = 0, x1 = 1.;
real y0 = 0, y1 = 0.5;
int n = 80, m = 40;
mesh Th = square(n, m, [x0 + (x1 - x0) * x, y0 + (y1 - y0) * y]);
fespace Vh(Th, P2);
Vh r = 0;
cout << mean(r) << endl;
but a change as simple as different mesh:
real radius1 = 1.0;
real radius2 = 1.3;
border left(t = 0, 1){x = 0; y = radius2 - (radius2 - radius1) * t; label=3;}
border inner(t = pi / 2., 0){x = radius1 * cos(t); y = radius1 * sin(t); label=2;}
border bottom(t = 0, 1){x = radius1 + (radius2 - radius1) * t; y = 0; label=4;}
border outter(t = 0, pi / 2.){x = radius2 * cos(t); y = radius2 * sin(t); label=1;}
mesh Th = buildmesh(left(10) + inner(35) + bottom(10) + outter(50));
fespace Vh(Th, P2);
Vh r = 0;
cout << mean(r) << endl;
results in execution error . Ehm… Why and how to compute the mean in the second case?
ivan
(Ivan Pribec)
November 4, 2021, 5:24pm
2
In the FreeFem++ documentation (Third edition, Version 3.48) the keyword index has a single entry for mean
in the following sentence:
The characteristics of FreeFem++
are:
[..]
Tools to define discontinuous Galerkin finite element formulations P0
, P1dc
, P2dc
and keywords: jump
, mean
, intalledges
.
[...]
The list of built-in functions also doesn’t include mean. So it seems like mean
has a different meaning than one would typically expect.
Perhaps @frederichecht can shed more light on this.
1 Like
prj
November 4, 2021, 5:39pm
3
You are meant to use mean
inside a varf
. This is not computing what you want. What mean do you want in your case? If it’s arithmetic, then you can do cout << r[].sum/r[].n << endl;
3 Likes
ivan
(Ivan Pribec)
November 4, 2021, 5:44pm
4
prj:
r[].sum/r[].n
This would give the mean of the array of DOF’s, right?
prj
November 4, 2021, 5:50pm
5
Yes, is that what you want?
1 Like