Dear Kostas and Egor,

I completely agree with this.

Yves

Le 21/07/2021 à 11:01, Konstantinos Poulios a écrit :
Dear Yves and Egor,

Thanks for your replies. I think there is nothing wrong with getting "lazy", this is the whole point of GetFEM, to make people as "lazy" as possible :)

So, if this is a user case of interest, I would suggest to add the following actions into the projects TODO list: - undeprecate the edges function, test it, and probably move this high level function from the scripting interface to the C++ API - provide convenience functions for creating 1D meshes from edges of 2D meshes, as well as as 1D and 2D meshes from edges and faces of 3D meshes. This could possibly also include the definition of regions that correspond to convex numbers of the parent mesh. - test our interpolate-transformation method, and interpolated_fem and projected_fem objects in cases between meshes of different dimensions (I recall that Andriy has recently tested a bit the latter case in some application)

Best regards
Kostas


On Wed, Jul 21, 2021 at 9:03 AM Yves Renard <[email protected] <mailto:[email protected]>> wrote:

    Dear Egor and Kostas,

    Just to answer to Kostas, I do not remember either why the
    interface function edges is deprecated. It is useful and ther is
    no reason to remove it. May be we can "undeprecate" it !

    And yes, the simplest way to make an integration on a 1D curve of
    a 3D domain is to define a 1D mesh (or a 2D one as suggested by
    Kostas) and to use the interpolate transformation tool (see
    http://getfem.org/userdoc/gasm_high.html#interpolate-transformations
    <http://getfem.org/userdoc/gasm_high.html#interpolate-transformations>).

    Best regards,

    Yves


    I don't remember either


    Le 21/07/2021 à 04:50, Egor Vtorushin a écrit :
    Thank you,  Kostas.  You are very dedicated!
    It is OK, there are few ways to go. People I think have just got
    used to the elegant and convenient way of integration in *getfem
    *and are becoming lazy to do some work :)
    Assuming that we have basic_dof_from_cvid and
    basic_dof_nodes method we have everything we need to implement
    Newton Cotes(for example) formulas manually for each edge.
    It just takes some extra code and time
    I prefer this way, maybe i will try the projection/ interpolation
    approach soon.
    But just for your and Yves notes, even in mechanics(especially in
    fluids), evaluation of field circulation might be useful. Again
    it is not a problem or issue just extra sci/tech/eng service
    Regards and thank you for clarifying things, Egor


    вт, 20 июл. 2021 г. в 20:24, Konstantinos Poulios
    <[email protected] <mailto:[email protected]>>:

        Dear Egor,

        Ok I suspected that you might be in 3D, but referring to
        "quad" made me assume that you were asking about 2D. In this
        case, the question is more tricky because GetFEM's
        architecture does not support 1D integrals in a 3D mesh. As
        you probably know, mesh regions can only contain convexes and
        convex faces. Integration methods are also defined only in
        convexes and convex faces. Hence I am not very positive that
        a solution exists based on the same 3D mesh.

        The only solution that I see is by creating a 2D mesh from
        your 3D mesh. E.g. you could define a 2D mesh that contains
        all faces of a 3D simplex, and then integrate on the faces
        (i.e. edges of this 2D mesh). Or alternatively, you can also
        directly create a 1D mesh in 3D, based on the edges of your
        3D mesh, but these are more difficult to extract.

        In any case, working with 2 meshes, one 3D mesh, and one 2D
        (or 1D) mesh, will require you to transfer information
        between meshes using the different interpolation functions in
        GetFEM, e.g. using an identity interpolate transformation:
        image.png
        I hope that this helps you decide about a strategy and please
        ask again if you need help at lower level with the
        implementation of such a strategy. I have a vague impression
        that this question has also been discussed in the past in the
        mailing list, so you might be able to find some tips in older
        posts as well.

        Not sure why the edges python function is marked as
        deprecated. @Yves: Do you have a hint on that?

        In any case relevant code in C++ can be found in
        
https://git.savannah.nongnu.org/cgit/getfem.git/tree/interface/src/getfemint_misc.cc
        
<https://git.savannah.nongnu.org/cgit/getfem.git/tree/interface/src/getfemint_misc.cc>
        (build_edge_list)
        
https://git.savannah.nongnu.org/cgit/getfem.git/tree/src/bgeot_mesh_structure.cc
        
<https://git.savannah.nongnu.org/cgit/getfem.git/tree/src/bgeot_mesh_structure.cc>
        (mesh_edge_list)
        But these are quite low level functions.

        Best regards
        Kostas





        On Tue, Jul 20, 2021 at 12:20 PM Egor Vtorushin
        <[email protected] <mailto:[email protected]>> wrote:

            Kostas,
            thank you for answering thу question and sorry for the
            delay in communication.  I am sorry for missing
            important point - i am in 3D space
            In 2D HHO example it works fine since

            |# # Boundary selection

            |flst = m.outer_faces() GAMMAD = 1 m.set_region(GAMMAD, flst)||

            managing with 1D faces that are the edges I suppose.
            In 3D all_faces provides access to 2d faces. Consider 4
            points simplex that  have 4 faces. I can integrate over
            an area of one of faces or many using regions built with
            outer_faces output.
            In my situation I have to make 1D integration over edges
            with respect to length. The4 point simplex has 4 faces
            and 6 1D edges.

            |At first glance outer_faces() method doesn't provide
            access to 1D edges for 3D meshes and with is my problem,
            assuming the fact that it returns empty array for dim=1
            or dim=2 |

            |*boxm*.outer_faces() Out[: array([[0, 0, 0, 0, 0, 0],  
                 [0, 1, 2, 3, 4, 5]], dtype=int32)
            *boxm*.outer_faces(3) Out: array([[0, 0, 0, 0, 0, 0],    
               [0, 1, 2, 3, 4, 5]], dtype=int32)
            *boxm*.outer_faces(2) Out: array([], shape=(2, 0),
            dtype=int32) *EMPTY**boxm*.outer_faces(1) Out: array([],
            shape=(2, 0), dtype=int32)|

            |

            |*EMPTY*||

            ||

            |Here *boxm *is 1 convex rectangular |PARALLELEPIPED

            |Regards, Egor|

            ||


            пн, 19 июл. 2021 г. в 15:31, Konstantinos Poulios
            <[email protected] <mailto:[email protected]>>:

                Dear Egor Vtorushin,

                Have a look at the outer_faces method:
                image.png
                if you put only one element in CVIDs you will get
                what you want, I guess.

                I am not sure how efficient it is to calculate these
                integrals for all elements one by one though.

                "mesh.all_faces" might also be relevant for your
                question. You can also have a look at HHO examples like

                
https://git.savannah.nongnu.org/cgit/getfem.git/tree/interface/tests/python/demo_elasticity_HHO.py
                
<https://git.savannah.nongnu.org/cgit/getfem.git/tree/interface/tests/python/demo_elasticity_HHO.py>

                Best regards
                Kostas

                On Mon, Jul 19, 2021 at 8:59 AM Egor Vtorushin
                <[email protected] <mailto:[email protected]>> wrote:

                    Dear Yves,
                    Do you have any hints how to manage 1D integral
                    over a loop containing simplex' or quad' *edges*.
                    Let  I have an electrical field(or current )
                    computed in   simplex or quad mesh nodes. Then i
                    need to calculate the field circulation over
                    edge-loop for each *face *according to Stokes'
                    theorem/formula
                    There is an obsoleted function

                    |edges|(/CVLST=None/, /*args/)

                        Synopsis: [E,C] = Mesh.edges(self [, CVLST][,
                        ‘merge’])

                        [OBSOLETE FUNCTION! will be removed in a
                        future release]

                        Return the list of edges of mesh M for the
                        convexes....

                    Maybe  there is a way to utilize the Mesh.edges
                    function or another way?
                    Regards, Egor Vtorushin


--
       Yves Renard ([email protected]  
<mailto:[email protected]>)       tel : (33) 04.72.43.87.08
       INSA-Lyon
       20, rue Albert Einstein
       69621 Villeurbanne Cedex, FRANCE
       http://math.univ-lyon1.fr/~renard  <http://math.univ-lyon1.fr/~renard>

    ---------


--

  Yves Renard ([email protected])       tel : (33) 04.72.43.87.08
  INSA-Lyon
  20, rue Albert Einstein
  69621 Villeurbanne Cedex, FRANCE
  http://math.univ-lyon1.fr/~renard

---------

Reply via email to