[Dune] Basic question on coordinate transformation
Aleksejs Fomins
aleksejs.fomins at lspr.ch
Thu Jun 11 11:25:15 CEST 2015
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hey Jö,
Thank you for your quick reply, Thanks to your example I now understand why I want something other than the coordinate transform. I will try to read up on Piola transforms.
In the meantime I have understood one of the sources of my bug: In curvilinear geometries det(J) can easily be 0 on the boundary, which makes jit misbehave.
I'll mention my solution when I find it,
Aleksejs
On 10/06/15 19:12, Jö Fahlke wrote:
> Dear Aleksejs,
>
> I guess the short answer is that normal are not coordinates, and so they don't
> transform like coordinates.
>
> Take for instance the following equilateral triangle in global coordinates:
>
>
> g2
> / \
> / \
> / \
> ----g1----
>
> You have the two coordinates from your counterexample: g1 in the center of one
> side (we'll call that side the base) and g2 at the opposite tip. The line
> through g1 and g2 is orthogonal to the base.
>
> Now let's look at this in the reference triangle:
>
> l2
> | \
> | \
> | \
> ---l1---
>
> The line connecting l1 and l2 is clearly not orthogonal to the base in the
> _reference coordinate system_.
>
> The problem is that the coordinate transformation in general does not conserve
> angles. If I remember correctly, what you want is the Piola transformation (I
> haven't really checked that, somebody please correct me if I'm blurting
> garbage here).
>
> Regards,
> Jö.
>
> Am Wed, 10. Jun 2015, 15:40:42 +0200 schrieb Aleksejs Fomins:
>> Date: Wed, 10 Jun 2015 15:40:42 +0200
>> From: Aleksejs Fomins <aleksejs.fomins at lspr.ch>
>> To: Dune <dune at dune-project.org>
>> Subject: [Dune] Basic question on coordinate transformation
>>
>> Dear Dune,
>>
>> I have always been puzzled by Jacobian transformations. And now, I might have a bug in their implementation in curvilinear geometry, so I thought it's a good time to sort out the unclear steps.
>>
>> When I look at, e.g., affine geometry, I see that the Jacobian Transposed is defined in such a way that
>> (1) global() = origin + J * local
>> So "J" is a matrix that transforms from local to global coordinates.
>>
>> However, if I look at the implementation of a surface normal, e.g. in GeometryGrid->Intersection->outerNormal I see that
>> refNormal = refElement.integrationOuterNormal( indexInInside() );
>> jit.mv( refNormal, normal );
>> so in order to transform the local (reference) normal to global coordinates, one multiplies it by the inverse of the Jacobian.
>>
>> I am somewhat unable to convince myself why this works. My simplest counter-proof is to take the above equation (1) at 2 different locations and subtract from one another
>>
>> p_global = g2 - g1 = J * l2 - J * l1 = J (l2 - l1) = J * p_local
>>
>> I would be grateful if somebody could hint me on why the transformation of the normal is correct, or perhaps the nicest place to read about this.
>>
>> Thank you,
>> Aleksejs
>>
>> _______________________________________________
>> Dune mailing list
>> Dune at dune-project.org
>> http://lists.dune-project.org/mailman/listinfo/dune
>>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
iQIcBAEBAgAGBQJVeVP7AAoJEDkNM7UOEwMZxrcP/iZZsmIfUQ9ApxdoTxXiijh/
jxRXAiPmSec/pkNRx14nyCENbajWusZ3BLJLmo+nNICo8jZFJXYCd5bWDqQBcHLo
5Co5erTPmjlp2nWeAwAc5oXhUIOv4/T47oy65xATVEdATll2NrlrhdyeK4iVfCq8
fqBjhQmM7VDHwYT6lJ3maNKuWGsTfOX9JYcTui2sR8ZlgX1KTZd2eMxkFTGQmxiL
ESagrxY4m/95+PtX2FJDGznVfOsdURnFlXVpXKb9S3VcmV3zx6NQ06nprkb9Aain
7RVRPSiuRD4uQX+euFNpuso717XgJZ0r0oMXMWcuLCtDD8cYyL/fxlmt2bWsU6U0
8KYlfkzWex7t0L9aQiiGSzYQDvikCbHTKOMYz1JMXP1O286IkjJwq87eNBsqm4mv
6DuVo55a5ikWiAzw1viISXXiY8ScAE+Z1V4oT05WLvQwc7L/KU3x4mVcPiAEB1Jd
9RjwCNSkO6YMtOgBoshpxCv6qHbW45V0zhNfi53zqE67wUdbUR+Wga5O+znQB6bv
CUSzx01qQzZj9qxUEBh1V1948nVPBUQZSBFUcjU45U9d+fNaPtDzZ4KJB9FGhWr/
V2dS31n1tBBR7kl7rQnHeD7JfKsY6NoT3Mg+0N3/Peca8cIqepLBBNSO6WmJENON
C0AklM20gxuuhZvu1lxf
=hpTu
-----END PGP SIGNATURE-----
More information about the Dune
mailing list