diff --git a/api/GenApi.py b/api/GenApi.py index 5c9b1cbbfb0d62fe835781f8a5e2fa3a4ed05902..d132778d5ccbf7a19edd78b924cd678a33c9c371 100644 --- a/api/GenApi.py +++ b/api/GenApi.py @@ -745,9 +745,12 @@ def isizefun(name): " global api_" + name + "_\n" + " api_" + name + "_ = api_" + name + "_type_(" + name + ")") a.python_arg = "api_" + name + "_" + a.julia_pre = ("api_" + name + "_ = @cfunction($" + name + + ", Cdouble, (Cint, Cint, Cdouble, Cdouble, Cdouble))") + a.julia_arg = "api_" + name + "_" + a.julia_ctype = "Ptr{Cvoid}" return a - class Module: def __init__(self, name, doc): self.name = name diff --git a/api/gen.py b/api/gen.py index 6457a98eabf48634041e53c150e82739bd9a11cc..d60a18c97b5df6421837b77a7789ff63dce16003 100644 --- a/api/gen.py +++ b/api/gen.py @@ -378,7 +378,7 @@ doc = '''Set mesh size constraints at the given parametric points `parametricCoo mesh.add('setSizeAtParametricPoints', doc, None, iint('dim'), iint('tag'), ivectordouble('parametricCoord'), ivectordouble('sizes')) doc = '''Set a global mesh size callback. The callback should take 5 arguments (`dim', `tag', `x', `y' and `z') and return the value of the mesh size at coordinates (`x', `y', `z').''' -mesh.add_special('setSizeCallback', doc, ['nojulia'], None, isizefun('callback')) +mesh.add('setSizeCallback', doc, None, isizefun('callback')) doc = '''Remove the global mesh size callback.''' mesh.add('removeSizeCallback', doc, None) diff --git a/api/gmsh.jl b/api/gmsh.jl index 7277bef96fd128fb6edf9a26d6c2e54454240710..5f97a3f59bb78bd1e783ec3dc2a3a9f343e43b0c 100644 --- a/api/gmsh.jl +++ b/api/gmsh.jl @@ -2197,6 +2197,23 @@ function setSizeAtParametricPoints(dim, tag, parametricCoord, sizes) return nothing end +""" + gmsh.model.mesh.setSizeCallback(callback) + +Set a global mesh size callback. The callback should take 5 arguments (`dim`, +`tag`, `x`, `y` and `z`) and return the value of the mesh size at coordinates +(`x`, `y`, `z`). +""" +function setSizeCallback(callback) + api_callback_ = @cfunction($callback, Cdouble, (Cint, Cint, Cdouble, Cdouble, Cdouble)) + ierr = Ref{Cint}() + ccall((:gmshModelMeshSetSizeCallback, gmsh.lib), Cvoid, + (Ptr{Cvoid}, Ptr{Cint}), + api_callback_, ierr) + ierr[] != 0 && error(gmsh.logger.getLastError()) + return nothing +end + """ gmsh.model.mesh.removeSizeCallback() diff --git a/doc/texinfo/api.texi b/doc/texinfo/api.texi index e4502e2c0f504d221ecda58c6e2bdc4dc3715938..2604c032c4e9dd8b6ae81f86745ebdd4362321fb 100644 --- a/doc/texinfo/api.texi +++ b/doc/texinfo/api.texi @@ -1786,7 +1786,7 @@ of the mesh size at coordinates (@code{x}, @code{y}, @code{z}). @item Return: - @item Examples: -C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L117,t10.cpp}), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L108,t10.py}) +C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L117,t10.cpp}), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L107,t10.py}) @end table @item gmsh/model/mesh/removeSizeCallback @@ -2247,7 +2247,7 @@ the field tag. @item Return: integer value @item Examples: -C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t7.cpp#L49,t7.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L51,t10.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t11.cpp#L38,t11.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t13.cpp#L68,t13.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t17.cpp#L41,t17.cpp}, ...), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t7.py#L44,t7.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L44,t10.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t13.py#L57,t13.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t17.py#L35,t17.py}, @url{@value{GITLAB-PREFIX}/demos/api/adapt_mesh.py#L113,adapt_mesh.py}) +C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t7.cpp#L49,t7.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L51,t10.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t11.cpp#L38,t11.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t13.cpp#L68,t13.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t17.cpp#L41,t17.cpp}, ...), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t7.py#L44,t7.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L43,t10.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t13.py#L57,t13.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t17.py#L35,t17.py}, @url{@value{GITLAB-PREFIX}/demos/api/adapt_mesh.py#L113,adapt_mesh.py}) @end table @item gmsh/model/mesh/field/remove @@ -2274,7 +2274,7 @@ Set the numerical option @code{option} to value @code{value} for field @item Return: - @item Examples: -C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L53,t10.cpp}, @url{@value{GITLAB-PREFIX}/demos/api/adapt_mesh.cpp#L271,adapt_mesh.cpp}), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L46,t10.py}, @url{@value{GITLAB-PREFIX}/demos/api/adapt_mesh.py#L114,adapt_mesh.py}) +C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L53,t10.cpp}, @url{@value{GITLAB-PREFIX}/demos/api/adapt_mesh.cpp#L271,adapt_mesh.cpp}), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L45,t10.py}, @url{@value{GITLAB-PREFIX}/demos/api/adapt_mesh.py#L114,adapt_mesh.py}) @end table @item gmsh/model/mesh/field/setString @@ -2288,7 +2288,7 @@ Set the string option @code{option} to value @code{value} for field @code{tag}. @item Return: - @item Examples: -C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L78,t10.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t11.cpp#L39,t11.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t13.cpp#L70,t13.cpp}), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L70,t10.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t13.py#L59,t13.py}) +C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L78,t10.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t11.cpp#L39,t11.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t13.cpp#L70,t13.cpp}), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L69,t10.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t13.py#L59,t13.py}) @end table @item gmsh/model/mesh/field/setNumbers @@ -2303,7 +2303,7 @@ Set the numerical list option @code{option} to value @code{value} for field @item Return: - @item Examples: -C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L52,t10.cpp}), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L45,t10.py}) +C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L52,t10.cpp}), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L44,t10.py}) @end table @item gmsh/model/mesh/field/setAsBackgroundMesh @@ -2317,7 +2317,7 @@ Set the field @code{tag} as the background mesh size field. @item Return: - @item Examples: -C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t7.cpp#L52,t7.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L113,t10.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t11.cpp#L41,t11.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t13.cpp#L73,t13.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t17.cpp#L42,t17.cpp}, ...), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t7.py#L47,t7.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L102,t10.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t13.py#L62,t13.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t17.py#L36,t17.py}, @url{@value{GITLAB-PREFIX}/demos/api/adapt_mesh.py#L115,adapt_mesh.py}) +C++ (@url{@value{GITLAB-PREFIX}/tutorial/c++/t7.cpp#L52,t7.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t10.cpp#L113,t10.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t11.cpp#L41,t11.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t13.cpp#L73,t13.cpp}, @url{@value{GITLAB-PREFIX}/tutorial/c++/t17.cpp#L42,t17.cpp}, ...), Python (@url{@value{GITLAB-PREFIX}/tutorial/python/t7.py#L47,t7.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t10.py#L101,t10.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t13.py#L62,t13.py}, @url{@value{GITLAB-PREFIX}/tutorial/python/t17.py#L36,t17.py}, @url{@value{GITLAB-PREFIX}/demos/api/adapt_mesh.py#L115,adapt_mesh.py}) @end table @item gmsh/model/mesh/field/setAsBoundaryLayer diff --git a/tutorial/julia/t10.jl b/tutorial/julia/t10.jl new file mode 100644 index 0000000000000000000000000000000000000000..ff938df81e02bcb608e87c8fc2d3ce0f2fc51253 --- /dev/null +++ b/tutorial/julia/t10.jl @@ -0,0 +1,74 @@ +# See the corresponding Python tutorial for detailed comments. + +import gmsh + +gmsh.initialize() +gmsh.option.setNumber("General.Terminal", 1) + +gmsh.model.add("t10") + +lc = .15 +gmsh.model.geo.addPoint(0.0, 0.0, 0, lc, 1) +gmsh.model.geo.addPoint(1, 0.0, 0, lc, 2) +gmsh.model.geo.addPoint(1, 1, 0, lc, 3) +gmsh.model.geo.addPoint(0, 1, 0, lc, 4) +gmsh.model.geo.addPoint(0.2, .5, 0, lc, 5) + +gmsh.model.geo.addLine(1, 2, 1) +gmsh.model.geo.addLine(2, 3, 2) +gmsh.model.geo.addLine(3, 4, 3) +gmsh.model.geo.addLine(4, 1, 4) + +gmsh.model.geo.addCurveLoop([1, 2, 3, 4], 5) +gmsh.model.geo.addPlaneSurface([5], 6) + +gmsh.model.geo.synchronize() + +gmsh.model.mesh.field.add("Distance", 1) +gmsh.model.mesh.field.setNumbers(1, "NodesList", [5]) +gmsh.model.mesh.field.setNumber(1, "NNodesByEdge", 100) +gmsh.model.mesh.field.setNumbers(1, "EdgesList", [2]) + +gmsh.model.mesh.field.add("Threshold", 2) +gmsh.model.mesh.field.setNumber(2, "IField", 1) +gmsh.model.mesh.field.setNumber(2, "LcMin", lc / 30) +gmsh.model.mesh.field.setNumber(2, "LcMax", lc) +gmsh.model.mesh.field.setNumber(2, "DistMin", 0.15) +gmsh.model.mesh.field.setNumber(2, "DistMax", 0.5) + +gmsh.model.mesh.field.add("MathEval", 3) +gmsh.model.mesh.field.setString(3, "F", + "Cos(4*3.14*x) * Sin(4*3.14*y) / 10 + 0.101") + +gmsh.model.mesh.field.add("Distance", 4) +gmsh.model.mesh.field.setNumbers(4, "NodesList", [1]) + +gmsh.model.mesh.field.add("MathEval", 5) +gmsh.model.mesh.field.setString(5, "F", "F4^3 + " * string(lc / 100)) + +gmsh.model.mesh.field.add("Box", 6) +gmsh.model.mesh.field.setNumber(6, "VIn", lc / 15) +gmsh.model.mesh.field.setNumber(6, "VOut", lc) +gmsh.model.mesh.field.setNumber(6, "XMin", 0.3) +gmsh.model.mesh.field.setNumber(6, "XMax", 0.6) +gmsh.model.mesh.field.setNumber(6, "YMin", 0.3) +gmsh.model.mesh.field.setNumber(6, "YMax", 0.6) + +gmsh.model.mesh.field.add("Min", 7) +gmsh.model.mesh.field.setNumbers(7, "FieldsList", [2, 3, 5, 6]) + +gmsh.model.mesh.field.setAsBackgroundMesh(7) + +function meshSizeCallback(dim, tag, x, y, z) + return 0.02 * x + 0.01 +end +gmsh.model.mesh.setSizeCallback(meshSizeCallback) + +gmsh.option.setNumber("Mesh.CharacteristicLengthExtendFromBoundary", 0) +gmsh.option.setNumber("Mesh.CharacteristicLengthFromPoints", 0) +gmsh.option.setNumber("Mesh.CharacteristicLengthFromCurvature", 0) + +gmsh.model.mesh.generate(2) +gmsh.write("t10.msh") + +gmsh.finalize() diff --git a/tutorial/python/t10.py b/tutorial/python/t10.py index df4eb4c3e3873a18ee1a6f4c629b62de901863af..b7d4270a8b183b99ff77cbaf103444327e06e449 100644 --- a/tutorial/python/t10.py +++ b/tutorial/python/t10.py @@ -11,7 +11,6 @@ # size "Fields". import gmsh -import math gmsh.initialize() gmsh.option.setNumber("General.Terminal", 1)