{"id":18847739,"url":"https://github.com/jacobwilliams/nlesolver-fortran","last_synced_at":"2026-02-08T19:40:30.664Z","repository":{"id":42202502,"uuid":"427505708","full_name":"jacobwilliams/nlesolver-fortran","owner":"jacobwilliams","description":"Nonlinear Equation Solver with Modern Fortran","archived":false,"fork":false,"pushed_at":"2025-05-04T15:17:27.000Z","size":869,"stargazers_count":45,"open_issues_count":7,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-20T20:41:04.805Z","etag":null,"topics":["broyden-method","differential-correction-algorithm","fortran","fortran-package-manager","lsmr","lsqr","lusol","minimum-norm","newton-raphson","nonlinear-equation-solver","nonlinear-equations","quasi-newton"],"latest_commit_sha":null,"homepage":"","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jacobwilliams.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}},"created_at":"2021-11-12T21:54:09.000Z","updated_at":"2025-06-09T14:02:09.000Z","dependencies_parsed_at":"2024-01-27T05:20:34.742Z","dependency_job_id":"f19d434c-42e5-4d90-9a7a-19066b0ab08a","html_url":"https://github.com/jacobwilliams/nlesolver-fortran","commit_stats":{"total_commits":61,"total_committers":1,"mean_commits":61.0,"dds":0.0,"last_synced_commit":"6398e4965fbaf113e4a94c59dd7fb5d6c391117c"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/jacobwilliams/nlesolver-fortran","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobwilliams%2Fnlesolver-fortran","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobwilliams%2Fnlesolver-fortran/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobwilliams%2Fnlesolver-fortran/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobwilliams%2Fnlesolver-fortran/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jacobwilliams","download_url":"https://codeload.github.com/jacobwilliams/nlesolver-fortran/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobwilliams%2Fnlesolver-fortran/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29240752,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T19:36:48.828Z","status":"ssl_error","status_checked_at":"2026-02-08T19:27:12.336Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["broyden-method","differential-correction-algorithm","fortran","fortran-package-manager","lsmr","lsqr","lusol","minimum-norm","newton-raphson","nonlinear-equation-solver","nonlinear-equations","quasi-newton"],"created_at":"2024-11-08T03:09:28.686Z","updated_at":"2026-02-08T19:40:30.647Z","avatar_url":"https://github.com/jacobwilliams.png","language":"Fortran","funding_links":[],"categories":[],"sub_categories":[],"readme":"![nlesolver-fortran](media/logo.png)\n\nNonlinear Equation Solver with Modern Fortran.\n============\n\nA basic Newton-Raphson type nonlinear equation solver for sparse or dense systems with `m` functions of `n` input variables.\n\n### Status\n\n[![GitHub Badge](https://img.shields.io/badge/GitHub-181717?logo=github\u0026logoColor=fff\u0026style=plastic)](https://github.com/jacobwilliams/nlesolver-fortran)\n[![Language](https://img.shields.io/badge/-Fortran-734f96?logo=fortran\u0026logoColor=white)](https://github.com/topics/fortran)\n[![CI Status](https://github.com/jacobwilliams/nlesolver-fortran/actions/workflows/CI.yml/badge.svg)](https://github.com/jacobwilliams/nlesolver-fortran/actions)\n[![GitHub release](https://img.shields.io/github/release/jacobwilliams/nlesolver-fortran.svg)](https://github.com/jacobwilliams/nlesolver-fortran/releases/latest)\n[![codecov](https://codecov.io/gh/jacobwilliams/nlesolver-fortran/branch/master/graph/badge.svg)](https://codecov.io/gh/jacobwilliams/nlesolver-fortran)\n[![last-commit](https://img.shields.io/github/last-commit/jacobwilliams/nlesolver-fortran)](https://github.com/jacobwilliams/nlesolver-fortran/commits/master)\n\n### Features\n\n  * Is object-oriented.\n  * Works with square, under-determined, or over-determined systems.\n  * Can use different methods to solve the linear system:\n    1. [LAPACK](https://www.netlib.org/lapack/) routines (`dgesv` or `dgels`) for dense systems: If `n=m`, uses `dgesv` (LU decomposition). If `n/=m`, uses `dgels` (if `m\u003en` uses QR factorization, if `m\u003cn` uses LQ factorization).\n    2. [lsqr](https://github.com/jacobwilliams/LSQR) -- a conjugate-gradient type method for solving sparse linear equations and sparse least-squares problems.\n    3. [lusol](https://github.com/jacobwilliams/lusol) -- A sparse LU factorization for square and rectangular matrices, with Bartels-Golub-Reid updates for column replacement and other rank-1 modifications.\n    4. [lsmr](https://github.com/jacobwilliams/LSMR) -- a conjugate-gradient type method for solving sparse linear equations and sparse least-squares problems\n    5. The user can also provide a custom linear solver.\n  * Has a Broyden update option (sparse and dense versions).\n  * Has various line search options.\n     * use a specified constant step size (0,1]\n     * backtracking linesearch method\n     * exact linesearch method using [fmin](https://github.com/jacobwilliams/fmin) minimizer\n     * evaluate function at specified fixed points\n  * Has four options for variable bounds (`xlow\u003c=x\u003c=xupp`):\n     * Ignore bounds\n     * Scalar mode: The Newton search direction is changed by checking each `x` component individually. If a component is on a bound, its value is set to the bound. The result is the new line search direction.\n     * Vector mode: The Newton search direction is not changed, but, the magnitude is walked back so that no variable violates their bounds.\n     * \"Wall\" mode: Similar to scalar mode, except after modifying the search direction vector, each line search step keeps any values constant that were put on the bounds.\n  * Has three options for computing the function vector norm:\n     * 2-norm (`norm2(fvec)`)\n     * Infinity-norm (`maxval(abs(fvec))`)\n     * 1-norm (`sum(abs(fvec))`)\n\n### Compiling\n\n* A [Fortran Package Manager](https://github.com/fortran-lang/fpm) file is also included, so that the library and tests cases can be compiled with FPM. For example:\n\n```\nfpm build --profile release\nfpm test --profile release\n```\n\nBy default, the library is built with double precision (`real64`) real values. Explicitly specifying the real kind can be done using the following preprocessor flags:\n\nPreprocessor flag | Kind  | Number of bytes\n----------------- | ----- | ---------------\n`REAL32`  | `real(kind=real32)`  | 4\n`REAL64`  | `real(kind=real64)`  | 8\n`REAL128` | `real(kind=real128)` | 16\n\nFor example, to build a single precision version of the library, use:\n\n```\nfpm build --profile release --flag \"-DREAL32\"\n```\n\nTo use `nlesolver` within your fpm project, add the following to your `fpm.toml` file:\n```toml\n[dependencies]\nnlesolver-fortran = { git=\"https://github.com/jacobwilliams/nlesolver-fortran.git\" }\n```\n\nOr to use a specific version:\n\n```toml\n[dependencies]\nnlesolver-fortran = { git=\"https://github.com/jacobwilliams/nlesolver-fortran.git\", tag=\"1.1.0\" }\n```\n\nNote that LAPACK is required to build. The [fmin](https://github.com/jacobwilliams/fmin), [lsqr](https://github.com/jacobwilliams/LSQR), [lusol](https://github.com/jacobwilliams/lusol), and [lsmr](https://github.com/jacobwilliams/LSMR) libraries are also dependencies (which will be automatically downloaded by fpm).\n\n### Documentation\n\n * The API documentation for the current ```master``` branch can be found [here](https://jacobwilliams.github.io/nlesolver-fortran/).  This is generated by processing the source files with [FORD](https://github.com/Fortran-FOSS-Programmers/ford).\n\n### License\n\n * The NLESolver-Fortran source code and related files and documentation are distributed under a permissive free software [license](https://github.com/jacobwilliams/nlesolver-fortran/blob/master/LICENSE) (BSD-3).\n\n### References\n\n  * C. G. Broyden, \"[A Class of Methods for Solving Nonlinear Simultaneous Equations](https://www.ams.org/journals/mcom/1965-19-092/S0025-5718-1965-0198670-6/S0025-5718-1965-0198670-6.pdf)\", Math. Comp. 19 (1965), 577-593\n  * L. K. Schubert, \"[Modification of a Quasi-Newton Method for Nonlinear Equations with a Sparse Jacobian](https://www.ams.org/journals/mcom/1970-24-109/S0025-5718-1970-0258276-9/S0025-5718-1970-0258276-9.pdf)\", Mathematics of Computation, Vol. 24, No. 109 (Jan., 1970), pp. 27-30.\n\n### See also\n\n  * [MINPACK](https://github.com/fortran-lang/minpack) -- Modernized Minpack: for solving nonlinear equations and nonlinear least squares problems\n  * [LUSOL](https://web.stanford.edu/group/SOL/software/lusol/) Stanford University Systems Optimization Laboratory\n  * [qr_mumps](https://gitlab.com/qr_mumps/qr_mumps) -- a software package for the solution of sparse, linear\n  systems on multicore computers.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacobwilliams%2Fnlesolver-fortran","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjacobwilliams%2Fnlesolver-fortran","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacobwilliams%2Fnlesolver-fortran/lists"}