Dear Andy,
The primary level-set function describes the geometry of the crack : its
0 level-set should contain the crack itself.
The secondary level-set function describes the crack front, the crack
correspond to the part of the domain where the level-set function is
non-positive.
This is mostly explained for the 3D case in the paper.
Gravouil A, Moës N, Belytschko T. Non-planar 3D crack growth by the
extended finite element and level sets. Part I and II. International
Journal for Numerical Methods in Engineerin, 2002.
If you want a model for the enrichment and the adaptation of integration
for the 3D case, you can have a look to the program
/contrib/delaminated_crack/delaminated_crack.cc
Best Regards,
Yves
Le 21/06/2016 04:12, Andrew Roberts a écrit :
> Thank you Yves for that insight. After researching the level set
> mathematics a bit more, including papers authored in part by you, I
> understand I am attempting to establish calculations through a
> "fictitious domain". In the 2d crack problem (crack.cc), I see the
> following:
>
> base_small_vector ls_function(const base_node P, int num = 0) {
> scalar_type x = P[0], y = P[1];
> base_small_vector res(2);
> switch (num) {
> case 0: {
> res[0] = y;
> res[1] = -.5 + x;
> } break;
> case 1: {
> res[0] = gmm::vect_dist2(P, base_node(0.5, 0.)) - .25;
> res[1] = gmm::vect_dist2(P, base_node(0.25, 0.0)) - 0.27;
> } break;
> case 2: {
> res[0] = x - 0.25;
> res[1] = gmm::vect_dist2(P, base_node(0.25, 0.0)) - 0.35;
> } break;
> default: assert(0);
> }
> return res;
> }
>
> How are these three level set functions determined as to correspond to
> physical phenomena and how can than be imposed onto 3d behavior. I've
> tried just toying with these functions in my 3d code and I receive
> "segmentation fault".
>
>
> Thank you,
> Andy
>
> On Thu, Jun 16, 2016 at 4:26 AM, Yves Renard <[email protected]
> <mailto:[email protected]>> wrote:
>
>
> Dear Andy,
>
> First, just a remark for the future version of Getfem, the two lines
>
> getfem::crack_singular_xy_function *s = new
> getfem::crack_singular_xy_function(j);
> vfunc[j] = getfem::global_function_on_level_set(ls, *s);
>
> will have to be changed to
>
> auto s = std::make_shared<getfem::crack_singular_xy_function>(j);
> vfunc[j] = getfem::global_function_on_level_set(ls, s);
>
>
> My first error in the code is in fact :
>
> what(): Error in ../../src/getfem_fem_global_function.cc, line 95 :
> Convexes of different dimension: to be done
>
> Indicating that there is both 2D and 3D elements in the mesh : may be
> you should select only the 3D elements.
>
>
> I look a bit into the code. For me the main mistake in the code is
> that
>
> mls.adapt();
> mfls.adapt();
> mim.adapt();
>
> are called but the level set value is not set. To be clear
>
> getfem::level_set ls(mesh);
>
> defined an invalid level set function which is zero everywhere.
> You have
> to set its value using
> ls.values(0) (see tests/crack.cc for instance) before calling adapt()
> methods.
>
>
> Best regards,
>
> Yves.
>
>
>
>
>
> Le 15/06/2016 19:21, [email protected]
> <mailto:[email protected]> a écrit :
> > Hi Andrew,
> >
> > I already had this error message, a long time ago. If I remember
> well,
> > this message can appear when the degree of the level-set is
> wrong, in view
> > of the way the level-set is defined and/or used. This degree
> must be 1
> > when it is a curve (in 2D), or 2 when it is a surface (in 3D):
> >
> > getfem::level_set ls(mesh, degree = 1, with_secondary = false);
> >
> > http://download.gna.org/getfem/html/homepage/userdoc/xfem.html
> >
> > In your code, by default the degree of the level-set is equal to
> 1, and in
> > what follows it seems that we are in a 3D context.
> >
> > Maybe the problem comes also from the fact that you may have to
> specify
> > secondary level-set functions. In that case your level-set
> object is not a
> > scalar-type anymore, but a vector.
> >
> > Sincerely,
> >
> > S.C
> >
> >
> >
> >
>
> https://online.uni-graz.at/kfu_online/visitenkarte.show_vcard?pPersonenId=8E061E23CBE613F4&pPersonenGruppe=3
> >
> >
> >
> >
> >> Send Getfem-users mailing list submissions to
> >> [email protected] <mailto:[email protected]>
> >>
> >> To subscribe or unsubscribe via the World Wide Web, visit
> >> https://mail.gna.org/listinfo/getfem-users
> >> or, via email, send a message with subject or body 'help' to
> >> [email protected]
> <mailto:[email protected]>
> >>
> >> You can reach the person managing the list at
> >> [email protected] <mailto:[email protected]>
> >>
> >> When replying, please edit your Subject line so it is more specific
> >> than "Re: Contents of Getfem-users digest..."
> >>
> >>
> >> Today's Topics:
> >>
> >> 1. Re: "level is zero!" (Andrew Roberts)
> >>
> >>
> >>
> ----------------------------------------------------------------------
> >>
> >> Message: 1
> >> Date: Tue, 14 Jun 2016 16:35:59 -0500
> >> From: Andrew Roberts <[email protected]
> <mailto:[email protected]>>
> >> To: Yves Renard <[email protected]
> <mailto:[email protected]>>
> >> Cc: [email protected] <mailto:[email protected]>
> >> Subject: Re: [Getfem-users] "level is zero!"
> >> Message-ID:
> >>
> <capb_fnwceawrrmg-heuqbpkynvgxgxuwyp3isvrslxwap8r...@mail.gmail.com
> <mailto:capb_fnwceawrrmg-heuqbpkynvgxgxuwyp3isvrslxwap8r...@mail.gmail.com>>
> >> Content-Type: text/plain; charset="utf-8"
> >>
> >> Hello again,
> >> I've been working diligently to understand as to why I
> receive "level
> >> is
> >> zero" error. I'd appreciate any code review and advice. The
> purpose is
> >> just to demonstrate basic xfem behavior in the compact specimen
> mesh
> >> (v4.gmsh.msh).
> >>
> >> Thank you,
> >> Andy
> >>
> >>
> >> /**@file compact.cc
> >> @brief compact specimen problem.
> >>
> >> */
> >>
> >> #include "getfem/getfem_model_solvers.h"
> >> #include "getfem/getfem_export.h"
> >> #include "gmm/gmm.h"
> >> #include "getfem/getfem_import.h"
> >> #include "getfem/getfem_assembling.h"
> >> #include "getfem/getfem_generic_assembly.h"
> >> #include "getfem/getfem_mesh_im_level_set.h"
> >> #include "getfem/getfem_mesh_fem_level_set.h"
> >> #include "getfem/getfem_mesh_fem_product.h"
> >> #include "getfem/getfem_mesh_fem_global_function.h"
> >> #include "getfem/getfem_mesh_fem_sum.h"
> >> #include <string>
> >> #include <cstring>
> >> #include <sstream>
> >> #include <iostream>
> >>
> >> using std::endl; using std::cout; using std::cerr;
> >> using std::ends; using std::cin;
> >>
> >> using bgeot::size_type;
> >> using bgeot::base_node;
> >> using bgeot::base_small_vector;
> >> typedef getfem::model_real_plain_vector plain_vector;
> >>
> >>
> >> using bgeot::scalar_type; /* = double */
> >>
> >>
> >>
> >> int main(void) {
> >>
> >>
> >> double E = 21E6; // Young Modulus (N/cm^2)
> >> double nu = 0.3; // Poisson ratio
> >> double clambda = E*nu/((1+nu)*(1-2*nu));
> >> double cmu = E/(2*(1+nu));
> >> double clambdastar = 2*clambda*cmu/(clambda+2*cmu);
> >>
> >>
> >> double residual = 1E-9;
> >>
> >>
> >> getfem::mesh mesh;
> >> getfem::import_mesh("gmsh:v4.gmsh.msh",mesh);
> >>
> >>
> >> getfem::mesh_fem mf(mesh);
> >>
> >>
> >> getfem::level_set ls(mesh);
> >> getfem::mesh_level_set mls(mesh);
> >> mls.add_level_set(ls);
> >>
> >>
> >> std::vector<getfem::pglobal_function> vfunc(4);
> >> for (unsigned j=0; j < 4; ++j) {
> >> getfem::crack_singular_xy_function *s =
> >> new getfem::crack_singular_xy_function(j);
> >> vfunc[j] = getfem::global_function_on_level_set(ls, *s);
> >> }
> >>
> >>
> >> getfem::mesh_fem_level_set mfls(mls, mf);
> >>
> >>
> >> getfem::mesh_fem_global_function mf_sing(mesh);
> >>
> >>
> >> mf_sing.set_functions(vfunc);
> >>
> >>
> >> getfem::mesh_fem_sum mfu(mesh);
> >>
> >>
> >> mfu.set_mesh_fems(mf_sing, mfls);
> >>
> >> getfem::mesh_im_level_set mim(mls,
> >> getfem::mesh_im_level_set::INTEGRATE_ALL,
> >> getfem::int_method_descriptor("IM_TETRAHEDRON(6)"),
> >>
> getfem::int_method_descriptor("IM_QUASI_POLAR(IM_TETRAHEDRON(8),
> 2)"));
> >>
> >>
> >> mls.adapt();
> >> mfls.adapt();
> >> mim.adapt();
> >>
> >>
> >> getfem::mesh_fem mfvm(mesh, 1);
> >>
> >> mfvm.set_classical_discontinuous_finite_element(1);
> >>
> >>
> >> getfem::model md;
> >> md.add_fem_variable("u", mfu);
> >>
> >>
> >> md.add_initialized_scalar_data("cmu", cmu);
> >> md.add_initialized_scalar_data("clambdastar", clambdastar);
> >>
> >>
> >> getfem::add_isotropic_linearized_elasticity_brick
> >> (md, mim, "u", "clambdastar", "cmu");
> >>
> >>
> >>
> >>
> getfem::add_normal_Dirichlet_condition_with_multipliers(md,mim,"u", 1,
> >> 109);
> >>
> >> getfem::add_source_term_brick(md,mim,"u","[0,1640,0]", 108);
> >>
> >>
> >> gmm::iteration iter(residual, 1, 50);
> >> getfem::standard_solve(md, iter,
> >> getfem::rselect_linear_solver(md,"superlu"));
> >>
> >>
> >>
> >> plain_vector U(mfu.nb_dof()); gmm::copy(md.real_variable("u"), U);
> >> plain_vector VM(mfvm.nb_dof());
> >> getfem::compute_isotropic_linearized_Von_Mises_or_Tresca
> >> (md, "u", "clamabdastar", "cmu", mfvm, VM, false);
> >>
> >>
> >> getfem::vtk_export exp2("d_w_vm.vtk", false);
> >> exp2.exporting(mfu);
> >> exp2.write_point_data(mfu, U, "displacement");
> >> exp2.write_point_data(mfvm, VM, "Von Mises stress");
> >>
> >>
> >> }
> >>
> >> On Mon, Jun 13, 2016 at 7:03 AM, Yves Renard
> <[email protected] <mailto:[email protected]>>
> >> wrote:
> >>
> >>> Dear Andrew,
> >>>
> >>> This message appear when the level_set function is identically
> zero on
> >>> an
> >>> element (the level set function have to be "close" to a signed
> >>> distance).
> >>> Are you sure you initialized your level-set function with a
> correct
> >>> value ?
> >>>
> >>> Best regards,
> >>>
> >>> Yves.
> >>>
> >>>
> >>> Le 12/06/2016 23:33, Andrew Roberts a écrit :
> >>>
> >>> Working to demo 3d XFEM crack propagation of a steel compact
> specimen
> >>> top-half (gmsh import).
> >>>
> >>> It compiles fine but the executable throws a "level is zero"
> error which
> >>> I'm uncertain of the source of this error. Code attached below.
> >>>
> >>> /**@file compact.cc
> >>>> @brief three-dimensional XFEM crack propagation.
> >>>>
> >>>> */
> >>>>
> >>>> #include "getfem/getfem_model_solvers.h"
> >>>> #include "getfem/getfem_export.h"
> >>>> #include "gmm/gmm.h"
> >>>> #include "getfem/getfem_import.h"
> >>>> #include "getfem/getfem_assembling.h"
> >>>> #include "getfem/getfem_generic_assembly.h"
> >>>> #include "getfem/getfem_mesh_im_level_set.h"
> >>>> #include "getfem/getfem_mesh_fem_level_set.h"
> >>>> #include "getfem/getfem_mesh_fem_product.h"
> >>>> #include "getfem/getfem_mesh_fem_global_function.h"
> >>>> #include "getfem/getfem_mesh_fem_sum.h"
> >>>> #include <string>
> >>>> #include <cstring>
> >>>> #include <sstream>
> >>>> #include <iostream>
> >>>>
> >>>> using std::endl; using std::cout; using std::cerr;
> >>>> using std::ends; using std::cin;
> >>>>
> >>>> using bgeot::size_type;
> >>>> using bgeot::base_node;
> >>>> using bgeot::base_small_vector;
> >>>> typedef getfem::model_real_plain_vector plain_vector;
> >>>>
> >>>>
> >>>> using bgeot::scalar_type; /* = double */
> >>>>
> >>>> int main(void) {
> >>>>
> >>>> double E = 21E6; // Young Modulus (N/cm^2)
> >>>> double nu = 0.3; // Poisson ratio
> >>>> double clambda = E*nu/((1+nu)*(1-2*nu));
> >>>> double cmu = E/(2*(1+nu));
> >>>> double clambdastar = 2*clambda*cmu/(clambda+2*cmu);
> >>>>
> >>>> double residual = 1E-9;
> >>>>
> >>>> getfem::mesh mesh;
> >>>> getfem::import_mesh("gmsh:v4.gmsh.msh",mesh);
> >>>>
> >>>>
> >>>> getfem::mesh_fem mf(mesh, 3);
> >>>>
> >>>> getfem::mesh_fem mfvm(mesh, 1);
> >>>>
> >>>> mf.set_finite_element(mesh.convex_index(),
> >>>> getfem::fem_descriptor("FEM_PK(3,2)"));
> >>>>
> >>>> mfvm.set_classical_discontinuous_finite_element(1);
> >>>>
> >>>> getfem::level_set ls(mesh, 1, true);
> >>>> getfem::mesh_level_set mls(mesh);
> >>>> mls.add_level_set(ls);
> >>>> mls.adapt();
> >>>>
> >>>> std::vector<getfem::pglobal_function> vfunc(6);
> >>>> for (unsigned i = 0; i < vfunc.size(); ++i){
> >>>> getfem::abstract_xy_function *s =
> >>>> new getfem::crack_singular_xy_function(i);
> >>>> getfem::abstract_xy_function *c =
> >>>> new getfem::cutoff_xy_function(0, .2,.01,.49);
> >>>> s = new getfem::product_of_xy_functions(*s, *c);
> >>>> vfunc[i] = getfem::global_function_on_level_set(ls, *s);
> >>>> }
> >>>>
> >>>> getfem::mesh_fem_level_set mfls(mls, mf);
> >>>>
> >>>> getfem::mesh_fem_global_function mf_sing(mesh,3);
> >>>>
> >>>> mf_sing.set_functions(vfunc);
> >>>>
> >>>> getfem::mesh_fem_product mf_asympt(mfls, mf_sing);
> >>>>
> >>>> getfem::mesh_fem_product mfu(mf_asympt);
> >>>>
> >>>> getfem::mesh_im_level_set mim(mls,
> >>>> getfem::mesh_im_level_set::INTEGRATE_ALL,
> >>>> getfem::int_method_descriptor("IM_TETRAHEDRON(6)"),
> >>>>
> getfem::int_method_descriptor("IM_QUASI_POLAR(IM_TETRAHEDRON(8),
> 2)"));
> >>>>
> >>>>
> >>>>
> >>>> getfem::model md;
> >>>> md.add_fem_variable("u", mfu);
> >>>>
> >>>>
> >>>> md.add_initialized_scalar_data("cmu", cmu);
> >>>> md.add_initialized_scalar_data("clambdastar", clambdastar);
> >>>>
> >>>> getfem::add_isotropic_linearized_elasticity_brick
> >>>> (md, mim, "u", "clambdastar", "cmu");
> >>>>
> >>>>
> >>>>
> getfem::add_normal_Dirichlet_condition_with_multipliers(md,mim,"u", 1,
> >>>> 109);
> >>>>
> >>>> getfem::add_source_term_brick(md,mim,"u","[0,1640,0]", 108);
> >>>>
> >>>> gmm::iteration iter(residual, 1, 50);
> >>>> getfem::standard_solve(md, iter,
> >>>> getfem::rselect_linear_solver(md,"superlu"));
> >>>>
> >>>> getfem::standard_solve(md, iter);
> >>>>
> >>>> plain_vector U(mfu.nb_dof());
> gmm::copy(md.real_variable("u"), U);
> >>>> plain_vector VM(mfvm.nb_dof());
> >>>> getfem::compute_isotropic_linearized_Von_Mises_or_Tresca
> >>>> (md, "u", "clamabdastar", "cmu", mfvm, VM, false);
> >>>>
> >>>>
> >>>> getfem::vtk_export exp2("d_w_vm.vtk", false);
> >>>> exp2.exporting(mfu);
> >>>> exp2.write_point_data(mfu, U, "displacement");
> >>>> exp2.write_point_data(mfvm, VM, "Von Mises stress");
> >>>>
> >>>>
> >>>> }
> >>>>
> >>> Thank you for any help in advance,
> >>>
> >>> Andy
> >>>
> >>>
> >>> _______________________________________________
> >>> Getfem-users mailing
> >>>
> [email protected]https://mail.gna.org/listinfo/getfem-users
> <http://mail.gna.org/listinfo/getfem-users>
> >>>
> >>>
> >>>
> >>> --
> >>>
> >>> Yves Renard ([email protected]
> <mailto:[email protected]>) tel : (33) 04.72.43.87.08
> >>> Pole de Mathematiques, INSA-Lyon fax : (33)
> 04.72.43.85.29
> >>> 20, rue Albert Einstein
> >>> 69621 Villeurbanne Cedex, FRANCE
> >>> http://math.univ-lyon1.fr/~renard
> <http://math.univ-lyon1.fr/%7Erenard>
> >>>
> >>> ---------
> >>>
> >>>
> >> -------------- next part --------------
> >> An HTML attachment was scrubbed...
> >> URL:
> </public/getfem-users/attachments/20160614/0acdbda0/attachment.html>
> >>
> >> ------------------------------
> >>
> >> Subject: Digest Footer
> >>
> >> _______________________________________________
> >> Getfem-users mailing list
> >> [email protected] <mailto:[email protected]>
> >> https://mail.gna.org/listinfo/getfem-users
> >>
> >>
> >> ------------------------------
> >>
> >> End of Getfem-users Digest, Vol 116, Issue 6
> >> ********************************************
> >>
> >
> >
> > _______________________________________________
> > Getfem-users mailing list
> > [email protected] <mailto:[email protected]>
> > https://mail.gna.org/listinfo/getfem-users
>
>
> --
>
> Yves Renard ([email protected]
> <mailto:[email protected]>) tel : (33) 04.72.43.87.08
> Pole de Mathematiques, INSA-Lyon fax : (33)
> 04.72.43.85.29
> 20, rue Albert Einstein
> 69621 Villeurbanne Cedex, FRANCE
> http://math.univ-lyon1.fr/~renard
> <http://math.univ-lyon1.fr/%7Erenard>
>
> ---------
>
>
--
Yves Renard ([email protected]) tel : (33) 04.72.43.87.08
Pole de Mathematiques, INSA-Lyon fax : (33) 04.72.43.85.29
20, rue Albert Einstein
69621 Villeurbanne Cedex, FRANCE
http://math.univ-lyon1.fr/~renard
---------
_______________________________________________
Getfem-users mailing list
[email protected]
https://mail.gna.org/listinfo/getfem-users