{"id":32607646,"url":"https://github.com/romeric/postmesh","last_synced_at":"2025-10-30T11:34:59.609Z","repository":{"id":57454295,"uuid":"48782174","full_name":"romeric/PostMesh","owner":"romeric","description":"A curvilinear mesh generator for high order finite element analysis","archived":false,"fork":false,"pushed_at":"2018-06-13T02:40:48.000Z","size":2746,"stargazers_count":71,"open_issues_count":2,"forks_count":22,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-25T18:44:42.066Z","etag":null,"topics":["curves","finite-elements","mesh-generation","surfaces","volumes"],"latest_commit_sha":null,"homepage":"https://github.com/romeric/PostMesh","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/romeric.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-12-30T04:42:10.000Z","updated_at":"2025-08-29T13:31:21.000Z","dependencies_parsed_at":"2022-09-04T18:22:19.807Z","dependency_job_id":null,"html_url":"https://github.com/romeric/PostMesh","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/romeric/PostMesh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romeric%2FPostMesh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romeric%2FPostMesh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romeric%2FPostMesh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romeric%2FPostMesh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/romeric","download_url":"https://codeload.github.com/romeric/PostMesh/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romeric%2FPostMesh/sbom","scorecard":{"id":783928,"data":{"date":"2025-08-11","repo":{"name":"github.com/romeric/PostMesh","commit":"d68f44707166d6556042ed79b336c996d8ae52c5"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 7 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T05:35:33.590Z","repository_id":57454295,"created_at":"2025-08-23T05:35:33.590Z","updated_at":"2025-08-23T05:35:33.590Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281796724,"owners_count":26563207,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-30T02:00:06.501Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["curves","finite-elements","mesh-generation","surfaces","volumes"],"created_at":"2025-10-30T11:34:57.331Z","updated_at":"2025-10-30T11:34:59.603Z","avatar_url":"https://github.com/romeric.png","language":"C++","readme":"# PostMesh\n\n\u003c!--![almond](doc/almond.png)--\u003e\n\u003c!--![mech](doc/mech2d.png)--\u003e\n\u003cdiv\u003e\n\u003cimg src=\"docs/almond.png\" width=\"45%\" height=\"45%\"\u003e\n\u003cimg src=\"docs/mech2d.png\" width=\"45%\" height=\"45%\"\u003e\n\u003cimg src=\"docs/wing2d.png\" width=\"45%\" height=\"45%\"\u003e\n\u003cimg src=\"docs/torus.png\"  width=\"45%\" height=\"45%\"\u003e\n\u003cimg src=\"docs/F6Iso_2.png\" width=\"95%\" height=\"95%\"\u003e\n\u003cimg src=\"docs/f6BL_58.png\" width=\"95%\" height=\"95%\"\u003e\n\u003cimg src=\"docs/Car_23s.png\" width=\"95%\" height=\"95%\"\u003e\n\u003c/div\u003e\n\n**PostMesh** is a solid mechanics based a posteriori high order curvilinear mesh generator based on OpenCascade with C++, Cython and Python APIs. Its main goal is to serve as a bridge between CAD models and high order finite element schemes. Hence, it can be used as a plugin with various compiled and interpreted code-bases.\n\n## Philosophy\nPostMesh is an a posteriori curvilinear mesh generator, in that it requires a linear mesh in advance. Higher order nodes are then placed on the linear mesh and the projection of these nodes to the exact boundary is computed with the CAD library and subsequently fed as the Dirichlet boundary condition to either a linear, a linearised or a non-linear solid mechanics problem.\n\n## Build Requirements\nPostMesh depends on the following third party libraries:\n\n- **[GNU make]**                     - build process\n- **C++11 compatible compiler**      - Rvalue references, variadic templates, lambdas etc\n- **[OpenCascade]**                  - CAD processing\n- **[Eigen]**                        - Matrix operations and SIMD vectorisation\n- **[Cython]**                       - Cython bindings\n- **[NumPy]**                        - Python interface\n\n\n[GNU make]:     http://www.gnu.org/software/make\n[OpenCascade]:  http://www.opencascade.com\n[Eigen]:        http://eigen.tuxfamily.org\n[Cython]:       http://www.cython.org\n[NumPy]:        http://www.numpy.org\n\nInstalling these dependencies on unix based systems is straight-forward. For building OpenCascade on Debian based systems, do `apt-get install liboce-*`and on macOS `brew install oce`. Note that, the default location for `Eigen` and `OpenCascade` headers and libraries (under Linux and macOS) are `/usr/local/include/eigen/`, `/usr/local/include/oce/` and `/usr/local/lib`, respectively.\n\n## Installation\nBoth C++ and Python bindings are distributed through this repository. The Python module is available through PyPi\n\n    pip install PostMeshPy\n\n\nTo build PostMesh shared library for C++ API, you typically do\n\n    git clone https://github.com/romeric/PostMesh\n    cd PostMesh\n    make\n    [sudo] make install\n\nTo further build the C++ examples, (after building and installing PostMesh shared library) do\n\n    cd examples\n    make\n\n\nTo build Cython/Python bindings manually (make sure you are in PostMesh directory)\n\n    [sudo] python setup.py install\n\nOr using pip\n\n    python setup.py build_ext\n    python setup.py bdist_wheel\n    cd ../ \u0026\u0026 pip install PostMesh/dist/*.whl\n\n\n### Usage\nPostMesh provides a very intuitive objected oriented API. The interfaces are designed such that C++ and Python codes look and feel the same. Have a look at the examples directory for getting started with PostMesh. For conveninece, here are two complete examples.\n\n#### A complete C++ example: [3D] surface projections for high order tetrahedral elements\n````c++\n    // MAKE AN INSTANCE OF PostMeshSurface\n    auto curvilinear_mesh = PostMeshSurface();\n    // PASS MESH DATA TO PostMesh - PostMesh TAKES RAW POINTERS AS INPUT ARGUMENTS\n    curvilinear_mesh.SetMeshElements(elements, elements_rows, elements_cols);\n    curvilinear_mesh.SetMeshPoints(points,points_rows, points_cols);\n    curvilinear_mesh.SetMeshEdges(edges, edges_rows, edges_cols);\n    curvilinear_mesh.SetMeshFaces(faces,  faces_rows,  faces_cols);\n    curvilinear_mesh.SetScale(scale);\n    curvilinear_mesh.SetCondition(condition);\n    curvilinear_mesh.SetProjectionPrecision(precision);\n    curvilinear_mesh.ComputeProjectionCriteria();\n    curvilinear_mesh.ScaleMesh();\n    curvilinear_mesh.InferInterpolationPolynomialDegree();\n    curvilinear_mesh.SetNodalSpacing(nodal_spacing, nodal_spacing_rows, nodal_spacing_cols);\n    // READ THE GEOMETRY FROM THE IGES FILE\n    curvilinear_mesh.ReadIGES(iges_filename);\n    // EXTRACT GEOMETRY INFORMATION FROM THE IGES FILE\n    curvilinear_mesh.GetGeomVertices();\n    // EXTRACT TRUE BOUNDARY FACES FROM CAD FILE\n    curvilinear_mesh.GetGeomFaces();\n    curvilinear_mesh.GetGeomPointsOnCorrespondingFaces();\n    // FIRST IDENTIFY WHICH SURFACES CONTAIN WHICH FACES\n    curvilinear_mesh.IdentifySurfacesContainingFaces();\n    // PROJECT ALL BOUNDARY POINTS FROM THE MESH TO THE SURFACE\n    curvilinear_mesh.ProjectMeshOnSurface();\n    // PERFORM POINT INVERSION FOR THE INTERIOR POINTS (ORTHOGONAL POINT PROJECTION)\n    // THE INPUT ARGUMENTS SPECIFY PROJECTION ON CURVE INTERSECTIONS\n    // AND MODIFICATION OF THE LINEAR MESH IF NECESSARY\n    curvilinear_mesh.MeshPointInversionSurface(1,1);\n    // OBTAIN MODIFIED MESH POINTS - THIS IS NECESSARY TO ENSURE LINEAR MESH IS ALSO CORRECT\n    curvilinear_mesh.ReturnModifiedMeshPoints(points);\n    // OBTAIN DIRICHLET DATA - (THE DISPLACMENT OF BOUNDARY NODES)\n    DirichletData Dirichlet_data = curvilinear_mesh.GetDirichletData();\n\n````\n\n#### A complete Python example: [2D] curve projections for high order triangular elements\nAlthough all C++ methods are also available in Python, there are some convenience functions defined at Python level that can help shorten the script\n````python\n    # MAKE AN INSTANCE OF PostMeshCurve\n    curvilinear_mesh = PostMeshCurve(\"tri\",2)\n    curvilinear_mesh.SetScale(scale)\n    curvilinear_mesh.SetCondition(condition)\n    # SET MESH\n    curvilinear_mesh.SetMesh(elements=elements, points=points, edges=edges,\n        faces=np.zeros((1,4),dtype=np.uint64),spacing=nodal_spacing,scale_mesh=True)\n    curvilinear_mesh.SetProjectionPrecision(1.0e-04)\n    curvilinear_mesh.ComputeProjectionCriteria()\n    curvilinear_mesh.GetBoundaryPointsOrder()\n    # SET CAD GEOMETRY\n    curvilinear_mesh.SetGeometry(cad_filename)\n    # PERFORM POINT PROJECTION AND POINT INVERSION\n    curvilinear_mesh.PerformPointProjectionInversionCurve(projection_type=\"arc_length\")\n    # OBTAIN MODIFIED MESH POINTS - THIS IS NECESSARY TO ENSURE LINEAR MESH IS ALSO CORRECT\n    curvilinear_mesh.ReturnModifiedMeshPoints(points)\n    # OBTAIN DIRICHLET DATA - (THE DISPLACMENT OF BOUNDARY NODES)\n    Dirichlet_nodes, Dirichlet_values = curvilinear_mesh.GetDirichletData()\n````\n\n## Reference/Citation\nPostMesh can be cited as\n````latex\n@Article{Poya2016,\n    author=\"Poya, Roman and Sevilla, Ruben and Gil, Antonio J.\",\n    title=\"A unified approach for a posteriori high-order curved mesh generation using solid mechanics\",\n    journal=\"Computational Mechanics\",\n    year=\"2016\",\n    volume=\"58\",\n    number=\"3\",\n    pages=\"457--490\",\n    doi={10.1007/s00466-016-1302-2},\n    url={https://link.springer.com/article/10.1007/s00466-016-1302-2}\n}\n````\n\n## Disclaimer\nPostMesh does not directly produce curved volume meshes, but only curved surface meshes. As mentioned before, the former step can be achieved by relying on a solid mechanics solver.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromeric%2Fpostmesh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fromeric%2Fpostmesh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromeric%2Fpostmesh/lists"}