{"id":40514832,"url":"https://github.com/easifem/base","last_synced_at":"2026-01-20T20:34:36.283Z","repository":{"id":181220631,"uuid":"305813119","full_name":"easifem/base","owner":"easifem","description":"Expandable And Scalable Infrastructure for Finite Element Methods, EASIFEM, is [Modern Fortran](https://fortran-lang.org) framework for solving partial differential equations (PDEs) using finite element methods. EASIFEM \"eases\" the efforts to develop scientific programs in Fortran. ","archived":false,"fork":false,"pushed_at":"2025-12-24T10:40:30.000Z","size":24669,"stargazers_count":10,"open_issues_count":63,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-25T20:27:56.612Z","etag":null,"topics":["fem","finite-element-analysis","finite-element-methods","fortran","fortran2018","geomechanics","linear-algebra","multi-phase-flow","simulation","soil-science"],"latest_commit_sha":null,"homepage":"https://www.easifem.com","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/easifem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-10-20T19:29:09.000Z","updated_at":"2025-12-24T07:16:10.000Z","dependencies_parsed_at":"2023-07-14T14:52:07.395Z","dependency_job_id":"208e1aef-dfd1-4d60-8f58-75598249aab9","html_url":"https://github.com/easifem/base","commit_stats":{"total_commits":2006,"total_committers":2,"mean_commits":1003.0,"dds":"0.34546360917248253","last_synced_commit":"60002a6b0aa4d1df8ad1170baaf39e3ab122a5f8"},"previous_names":["vickysharma0812/easifem-base","easifem-fortran/base","easifem/base"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/easifem/base","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easifem%2Fbase","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easifem%2Fbase/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easifem%2Fbase/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easifem%2Fbase/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/easifem","download_url":"https://codeload.github.com/easifem/base/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easifem%2Fbase/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28613026,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T18:56:40.769Z","status":"ssl_error","status_checked_at":"2026-01-20T18:54:26.653Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["fem","finite-element-analysis","finite-element-methods","fortran","fortran2018","geomechanics","linear-algebra","multi-phase-flow","simulation","soil-science"],"created_at":"2026-01-20T20:34:36.227Z","updated_at":"2026-01-20T20:34:36.274Z","avatar_url":"https://github.com/easifem.png","language":"Fortran","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 𑗕 easifemBase\n\n\n![](./figures/what-is-easifem.svg)\n\n![](./figures/banner.jpeg)\n\neasifemBase (or, Base) library is the low level component in easifem. It contains routines and derived types which are helpful for implementing numerical methods for solving differential equation.|\n\nIn Base library, we do not use object-oriented programming concepts and mainly use [multiple dispatch approach](https://en.wikipedia.org/wiki/Multiple_dispatch). This approach improves the flexibility and speed of easifemBase. All user-defined datatypes are declared in the `BaseType` module, and all methods are exposed through `BaseMethods` modules. In the Base library `string_class` is the only exception, wherein Object-oriented paradigm has been used. Currently, easifemBase has interface with BLAS95, Lapack95, Sparsekit, Metis, PlPlot, SuperLU, ARPACK, etc.\n\n## Usage\n\n### Use association\n\n```fortran\nUSE easifemBase\n```\n\nor\n\n```fortran\nUSE BaseType\nUSE BaseMethods\n```\n\n## System requirements\n\nEASIFEM requires following software packages to be installed on the system.\n\n| Component | Version | Latest tested version | Comment |\n|:--- | :---: | :---: | :--- |\n| **Gfortran**| \u003e=9.0 | 12.0  | GNU Fortran compiler |\n| **GCC**| \u003e=9.0 | 12.0 | GNU-compiler collection|\n| **OpenMP**| \u003e= 4.5 |  | Multithread shared memory parallelisation|\n| **Curl**| \u003e=7.87 | 7.87 | A command-line utility for transferring data from or to a remote server|\n| **Git**| \u003e=2.34 | 2.34.1 | A version control system and command-line utility for downloading packages from GitHub |\n| **Cmake** | \u003e=3.19 | 3.22.4 | Cross-platform family of tools designed to build, test and package software |\n| **Ninja-build** | \u003e=1.10 | 1.11.0 | Build system |\n| **Python3** | \u003e=3.7 | 3.11.0 | Scripting language |\n| **Pip** | \u003e=20 | 23.1.0 | Command line tool for downloading python packages |\n| **LAPACK** | \u003e=3.11.0 | 3.11.0 | Linear algebra package |\n| **OpenBlas** | \u003e= 0.3.20| 0.3.30 | Optimize BLAS library |\n| **HDF5** | \u003e=1.10  | 1.10.7 | High-performance data software-library and file-format |\n| **PlPlot** | \u003e=5.15.0 | 5.15.0 | Cross-platform, scientific graphics plotting library |\n| **Boost** | | | |\n| **Gnuplot** | \u003e=5.0 | 5.4 | Portable command-line driven graphing utility |\n| **Doxygen** | \u003e=1.9.1 | 1.9.1 | documentation generation |\n| **GTK-4** |  | | n |\n\n\n## External packages\n\nEASIFEM depends upon the following external packages (extpkgs) that are not shipped with the source-code.\n\n| extpkg| description | command  |\n|:--- | :--- | :--- |\n| [OpenBlas](https://www.openblas.net/) | Highly optimized BLAS | easifem install openblas |\n| [SuperLU](https://github.com/xiaoyeli/superlu.git) |  Direct solution of large, sparse, nonsymmetric systems of linear equations  | easifem install superlu |\n| [LIS](https://github.com/anishida/lis.git) | Linear interative solver | easifem install lis|\n| [METIS](https://github.com/KarypisLab/METIS) | Mesh partitioning library | easifem install metis |\n| [SCOTCH](https://gitlab.inria.fr/scotch/scotch) | Mesh partitioning library | easifem install scotch |\n| [ARPACK](https://github.com/opencollab/arpack-ng) | Eigensolver for sparse matrices | easifem install arpack |\n| [FFTW](https://www.fftw.org/) | Fast Fourier Transform| easifem install fftw |\n| [GTK-Fortran](https://github.com/vmagnin/gtk-fortran) | Fortran bindings for GTK-4 library  | easifem install gtk-fortran |\n| [LAPACK95](https://github.com/vickysharma0812/LAPACK95.git) | Fortran 95 interface for Lapack library | easifem install lapack95 |\n| [Sparsekit](https://github.com/vickysharma0812/Sparsekit.git) | Fortran library for sparse matrices | easifem install sparsekit |\n| [Gmsh](https://gmsh.info/) | Finite element mesh generator| easifem install gmsh |\n\n\n## Installation\n\nYou can use following instructions to install easifemBase depending upon your system.\n\n- [Linux](./pages/Install_Linux.md)\n- [MacOSX](./pages/Install_MacOSX.md)\n- [Windows](./pages/Install_Windows.md)\n\n## Structure\n\nThe Base library consists two components:\n\n1. BaseType `BaseType.F90`, which contains the user-defined data-type. You can see the list of user-defined data type [here](./pages/BaseType.md)\n2. BaseMethods `BaseMethods.F90`, contains the modules (each module defines the routines for data-types defined in `BaseType.F90`.) The list of modules defined in BaseMethods can be found [here](./pages/BaseMethods.md)\n\nThe source directory is shown in figure given below. The source directory has two directories\n\n1. 📁 `modules`\n2. 📁 `submodules`\n\nThe `modules` directory mainly contains header and interface of methods. The implementation is given in submodules directory.\n\n:::info\nBoth `BaseType.F90` and `BaseMethods.F90` are included in `modules` directory.\n:::\n\nLet us understand the structure of the Base library by an example of `CSRSparsity_` data type.\n\n1. First, we define `CSRSparsity_` in `BaseType.F90` as\n\n\n```fortran\nTYPE :: CSRSparsity_\n  INTEGER(I4B) :: nnz = 0\n  INTEGER(I4B) :: ncol = 0\n  INTEGER(I4B) :: nrow = 0\n  LOGICAL(LGT) :: isSorted = .FALSE.\n  LOGICAL(LGT) :: isInitiated = .FALSE.\n  LOGICAL(LGT) :: isSparsityLock = .FALSE.\n  LOGICAL(LGT) :: isDiagStored = .FALSE.\n  INTEGER(I4B), ALLOCATABLE :: IA(:)\n  INTEGER(I4B), ALLOCATABLE :: JA(:)\n  INTEGER(I4B), ALLOCATABLE :: idiag(:)\n  TYPE(IntVector_), ALLOCATABLE :: row(:)\n  TYPE(DOF_) :: idof\n  !! DOF for row\n  TYPE(DOF_) :: jdof\n  !! DOF for columns\nEND TYPE CSRSparsity_\n```\n\n\n2. Then we create a directory called `CSRSparsity` in both `modules` and `submodules` directory.\n3. In `modules/CSRSparsity` we create `CSRSparsity_Method.F90` file.\n4. In `modules/CSRSparsity/CSRSparsity_Method.F90` we define a module `CSRSparsity_Method` (same name as file).\n5. In `CSRSparsity_Method` module, we only define interface of methods. In this way, this file can be considered as header file. See, the example given below:\n6. In `submodules/CSRSparsity`, we create `CSRSparsity_Method@ConstructorMethods.F90`, which contains the contruction related routines.\n7. Also, we create `CSRSparsity_Method@IOMethods.F90`, which include methods related to input and output.\n\n\n```fortran\nMODULE CSRSparsity_Method\nUSE GlobalData\nUSE BaseType\nIMPLICIT NONE\nPRIVATE\n\nINTERFACE Initiate\n  MODULE SUBROUTINE csr_initiate1(obj, ncol, nrow, idof, jdof)\n    TYPE(CSRSparsity_), INTENT(INOUT) :: obj\n    INTEGER(I4B), INTENT(IN) :: ncol, nrow\n    TYPE(DOF_), OPTIONAL, INTENT(IN) :: idof\n    !! DOF for row\n    TYPE(DOF_), OPTIONAL, INTENT(IN) :: jdof\n    !! DOF for column\n  END SUBROUTINE csr_initiate1\nEND INTERFACE Initiate\n\nINTERFACE Display\n  MODULE SUBROUTINE csr_Display(obj, Msg, UnitNo)\n    TYPE(CSRSparsity_), INTENT(IN) :: obj\n    CHARACTER(*), INTENT(IN) :: Msg\n    INTEGER(I4B), OPTIONAL, INTENT(IN) :: UnitNo\n  END SUBROUTINE csr_Display\nEND INTERFACE Display\n\nEND MODULE CSRSparsity_Method\n```\n\nCSRSparsity_Method@ConstructorMethods.F90\n\n```fortran\nSUBMODULE(CSRSparsity_Method) ConstructorMethods\nUSE BaseMethod\nIMPLICIT NONE\nCONTAINS\n\nMODULE PROCEDURE csr_initiate1\nobj%nnz = 0\nobj%ncol = ncol\nobj%nrow = nrow\nEND PROCEDURE csr_initiate1\n\nEND SUBMODULE ConstructorMethods\n```\n\nCSRSparsity_Method@IOMethods.F90\n\n```fortran\nSUBMODULE(CSRSparsity_Method) IOMethods\nUSE BaseMethod\nIMPLICIT NONE\nCONTAINS\n\nMODULE PROCEDURE csr_Display\nCALL Display(Msg, unitNo=unitNo)\nCALL Display(obj%nnz, \"# NNZ : \", unitNo=unitNo)\nEND PROCEDURE csr_Display\n\nEND SUBMODULE IOMethods\n```\n\n![](./figures/figure-2.svg)\n\n## Run on Cloud\n\nComing soon.\n\n## Contributing\n\n## Credits\n\n## License\n\n[License](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasifem%2Fbase","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feasifem%2Fbase","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasifem%2Fbase/lists"}