[Dune] Handling checkinside for curvilinear elements

Aleksejs Fomins aleksejs.fomins at lspr.ch
Tue Jul 29 10:17:17 CEST 2014


Dear Andreas,

Thank you for your advice.

To the best of my knowledge, Newton's method can not deal with local
extrema. In 1D if the derivative of the function is close to 0 the
outcome is unpredictable, if it is a minima it is likely to get stuck
inside. Does it exhibit the same behaviour in 3D, where Jacobian inverse
is used as a generalization of dividing by the derivative of the function?

My observations show that higher order polynomial interpolation does
produce local extrema within the reference tetrahedron. Note, that it is
still a one-to-one map inside the tetrahedron, meaning that there should
be a single solution to f(x) = p inside the tetrahedron. Just that it
has local minima and maxima within the domain.

Can you suggest how to deal with this problem?

Kind regards,
Aleksejs


On 07/28/2014 06:10 PM, Andreas Dedner wrote:
> PS: for local I would have though you can use a Newton method.to find a
> root of
> F(y) = global(y)-x
> for some given global point x. That should be uniquely solvable
> otherwise your reference mapping is not
> one-on-one and that would be "!unfortunate".
> Andreas
> 
> On 28/07/14 17:03, Andreas Dedner wrote:
>> Hi.
>> I think all your problems boil down to the last one: implementing the
>> method local.
>> If you have local then a point is a global point x is within an
>> element if local(x) is within the
>> reference element. That is what we use for the hoerarchicSearch class
>> (a utility class in
>> dune grid which should then be directly useable for your second point).
>> I don't think I understand your first problem since you are still
>> using the same reference element, right?
>> So a condition for a point being inside the reference element has
>> nothing to do with your global mapping,
>> be it straight faced or not.
>> Best
>> Andreas
>>
>> On 28/07/14 16:55, Aleksejs Fomins wrote:
>>> Dear Dune,
>>>
>>> I am currently implementing curvilinear tetrahedral grid for dune.
>>>
>>> The following functionality will be required:
>>>
>>> 1) dune/geometry/genericreferenceelements.hh has function isinside()
>>> which checks whether the point is inside of the tetrahedron. This
>>> functionality will not be valid for curvilinear tetrahedrons.
>>>
>>> Where should I implement the new functionality? Should I directly edit
>>> the genericreferenceelements.hh or should I define a new method inside
>>> my new version of multilineargeometry.hh, or sth else?
>>>
>>> Where is this functionality used?
>>>
>>> Also, if you have suggestions on how to mathematically check this,
>>> please advise me. I have a conjecture that the point is inside if it is
>>> on the correct side of each face, and it is on the correct side of the
>>> face if det(d, v1, v2) has the right sign, where d is the distance
>>> vector between this point and the closest point on the surface, and v1
>>> and v2 are the surface tangential unit vectors given by the parametric
>>> coordinates.
>>>
>>> 2) We personally would really need the functionality of finding the
>>> tetrahedron to which a given global coordinate belongs. Extending this
>>> to curvilinear is trivial - first find the element to which it would
>>> have belonged to if the tetrahedrons were straight-sided, then check
>>> whether it is actually inside this tetrahedron or one of its neighbors
>>> using the isinside() method.
>>>
>>> Is this (straight-sided) functionality already implemented in dune
>>> somewhere? Is it efficient? I mean, whether it loops over all elements
>>> and checks isinside(), or whether it uses something more sophisticated
>>> like octrees.
>>>
>>> 3) Another mathematics-related question. To map from local to global
>>> coordinates within an element I simply evaluate the linear combination
>>> of lagrange polynomials.
>>>
>>> How do I map from global to local?
>>>
>>> The best thing that comes to my mind is to write an iterative
>>> optimization algorithm minimizing the distance between given local
>>> coordinate and the expected one. It will have to be random like MCMC
>>> because the problem will have local minima. Please comment if you have
>>> good ideas :)
>>>
>>> Thank you,
>>> Aleksejs
>>>
>>>
>>>
>>> _______________________________________________
>>> Dune mailing list
>>> Dune at dune-project.org
>>> http://lists.dune-project.org/mailman/listinfo/dune
>>
>>
>>
>> _______________________________________________
>> Dune mailing list
>> Dune at dune-project.org
>> http://lists.dune-project.org/mailman/listinfo/dune
> 
> 
> 
> 
> _______________________________________________
> Dune mailing list
> Dune at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 551 bytes
Desc: OpenPGP digital signature
URL: <https://lists.dune-project.org/pipermail/dune/attachments/20140729/1eac552f/attachment.sig>


More information about the Dune mailing list