# LAPACK with more pure procedures

**URL:** <https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093>\
**Category:** Uncategorized\
**Created:** [September 9, 2026, 11:05am UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093 "2026-09-09T11:05:29Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Beliavsky](https://avatars.discourse-cdn.com/v4/letter/b/ba8739/32.png) [@Beliavsky](https://fortran-lang.discourse.group/u/Beliavsky)\
**Post date:** [September 9, 2026, 11:05am UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/1 "2026-09-09T11:05:29Z")

</div>

I [forked](https://github.com/beliavsky/fortran-lapack) fortran-lapack of @FedericoPerini to make more procedures pure, listed [here](https://github.com/Beliavsky/fortran-lapack/blob/main/PURE_PROCEDURE_DIFFERENCES.md), so that more of the procedures in my [translations of R packages](https://github.com/Beliavsky/Fortran-from-R-packages) could be designated pure. The purity analysis and refactoring was done by GPT-5.6 Sol.

---

<div class="post-metadata">

**Author:** ![certik](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/certik/32/4_2.png) [@certik](https://fortran-lang.discourse.group/u/certik)\
**Post date:** [September 9, 2026, 3:16pm UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/2 "2026-09-09T15:16:36Z")

</div>

What change did you make? Why not submitting a PR?

---

<div class="post-metadata">

**Author:** ![Beliavsky](https://avatars.discourse-cdn.com/v4/letter/b/ba8739/32.png) [@Beliavsky](https://fortran-lang.discourse.group/u/Beliavsky)\
**Post date:** [September 9, 2026, 5:02pm UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/3 "2026-09-09T17:02:06Z")

</div>

The changes are listed in a [link](https://github.com/Beliavsky/fortran-lapack/blob/main/PURE_PROCEDURE_DIFFERENCES.md) I provided. I thought there were so many that a PR was unlikely to be accepted as is.

---

<div class="post-metadata">

**Author:** ![certik](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/certik/32/4_2.png) [@certik](https://fortran-lang.discourse.group/u/certik)\
**Post date:** [September 9, 2026, 6:28pm UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/4 "2026-09-09T18:28:38Z")

</div>

Ask @FedericoPerini how to best integrate your work back.

---

<div class="post-metadata">

**Author:** ![RonShepard](https://avatars.discourse-cdn.com/v4/letter/r/a3d4f5/32.png) [@RonShepard](https://fortran-lang.discourse.group/u/RonShepard)\
**Post date:** [September 9, 2026, 9:37pm UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/5 "2026-09-09T21:37:23Z")

</div>

Except for the error routine, `xerbla()`, which prints some output, aren’t all of the BLAS and LAPACK routines effectively pure?

---

<div class="post-metadata">

**Author:** ![Beliavsky](https://avatars.discourse-cdn.com/v4/letter/b/ba8739/32.png) [@Beliavsky](https://fortran-lang.discourse.group/u/Beliavsky)\
**Post date:** [September 9, 2026, 10:40pm UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/6 "2026-09-09T22:40:50Z")

</div>

In my version of LAPACK, about 10% of procedures are not, listed [here](https://github.com/Beliavsky/fortran-lapack/blob/main/IMPURE_PROCEDURES.md).

---

<div class="post-metadata">

**Author:** ![septc](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/septc/32/77_2.png) [@septc](https://fortran-lang.discourse.group/u/septc)\
**Post date:** [September 10, 2026, 4:04am UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/7 "2026-09-10T04:04:47Z")

</div>

I don’t know the details of BLAS/LAPACK very much, but isn’t it potentially risky to set “pure” if some of LAPACK routines ultimately call external threaded BLAS routines…?

---

<div class="post-metadata">

**Author:** ![PierU](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/pieru/32/1848_2.png) [@PierU](https://fortran-lang.discourse.group/u/PierU)\
**Post date:** [September 10, 2026, 8:21am UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/8 "2026-09-10T08:21:17Z")

</div>

Looks like you turned some functions into subroutines, right?

---

<div class="post-metadata">

**Author:** ![Beliavsky](https://avatars.discourse-cdn.com/v4/letter/b/ba8739/32.png) [@Beliavsky](https://fortran-lang.discourse.group/u/Beliavsky)\
**Post date:** [September 10, 2026, 10:38am UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/9 "2026-09-10T10:38:28Z")

</div>

Existing impure functions have been retained for compatibility, but pure alternatives have been created, listed [here](https://github.com/Beliavsky/fortran-lapack/blob/main/PURE_API_ALTERNATIVES.md).

---

<div class="post-metadata">

**Author:** ![PierU](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/pieru/32/1848_2.png) [@PierU](https://fortran-lang.discourse.group/u/PierU)\
**Post date:** [September 10, 2026, 11:59am UTC](https://fortran-lang.discourse.group/t/lapack-with-more-pure-procedures/11093/10 "2026-09-10T11:59:43Z")

</div>

I saw that, but what I meant is that in some cases you had apparently to turn some functions into subroutines?
