-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add QUADPACK to fpm
registry
#43
Comments
QUADPACK was included in SLATEC and is thereby in public domain (at least in the USA). See this comment from the Scipy repository. The website from Leuven University also mentions QUADPACK is included in Octave and that C translations are available in GSL. So open source usage seems to be permitted. The version of QUADPACK included in SciPy has some fixes, like replacing calls to linpack routines with their respective lapack equivalents. Personally, I would prefer to use the Scipy version over those of Burkardt. The Intel Fortran compiler could be used to automatically generate the missing interfaces, and leave the source as F77 code. The automatically generated interfaces could then be manually compared to the documentation and published listings to get the Concerning build tools, the idea of the fpm registry is to collect fpm compatible packages. The best approach is to allow fpm to do the building, no make or cmake is required. One hurdle will be how to provide both single and double precision versions. Edit: probably the single precision versions should be downloaded from netlib and prepended with Currently, |
We could consider using the quadpack from SciPy. That way we are fine with the license, we'll have the fixes and it can also be useful from the point of view of SciPy and other such libraries to eventually use the quadpack fpm package. Also, I would recommend to maintain this under the fortran-lang github organization. Many of the issues facing here are identical to fftpack: #40, see the discussion there. Let's figure out a good approach to these things. |
RE: SciPy source, the files in https://github.com/scipy/scipy/tree/v1.6.3/scipy/integrate/quadpack are all Fortran 77. The merits of the Burkardt code is that it is in Fortan 90, making it accessible to a wider set of compilers (e.g. |
Good point. The only reason I suggested SciPy is that I know they maintain it and fix bugs and the code should be correct and working. If we use some older unmaintained version, it might have bugs. Aren't there tools to convert fixed form to free form? We could start with the SciPy version, convert to free form, add to modules, etc. P.S. LFortran will eventually have a parser for fixed form also (https://gitlab.com/lfortran/lfortran/-/issues/82). |
I added a couple of formatters to the package index a while ago. I made good experience with findent, which is primary targeted to parse legacy Fortran and handle dozens of non-standard extensions (packaged on conda-forge here). Camfort and fortran-src also have legacy Fortran parsers and there is fpt from the last monthly call. So plenty of tools for the job out there, but most important is to have tests to verify the converted code against the original one. |
Not sure if we can call it maintenance. The code has been untouched for the last 3 years and there are some open bug tickets however, only one seems to be an actual numerical issue, the rest look like compiler and build setup issues. The SciPy version of QUADPACK would also benefit from some refactoring (see scipy/scipy#4455, great issue title!). The QUADPACK routines make use of the following three machine constants:
which are currently retrieved using the
Interestingly, the SciPy C implementation
|
Note that Carlos @brocolis already has an fpm package for the original quadpack here which also includes an f90 interface module. |
That's exactly what I had in mind! @brocolis would you be interested in moving the package under fortran-lang so that we can maintain it as a community? |
Yes. Someone with appropriate permissions could move it to fortran-lang. |
My original plan was to write an higher level function |
The But I would suggest we do it jointly under the fortran-lang repository. |
I think if you follow the instructions on transferring repositories you could transfer to @milancurcic, and he could put it under the fortran-lang organization. The other option would be to simply clone the repository, and push it into a new fortran-lang repository (not forking it). |
Repository transfers (and creation) can currently only be handled by @certik, @milancurcic and @LKedward, either by temporarily raising member privileges or by a two step transfer. I don't think we have yet established a workflow for this process. |
@LKedward, @milancurcic I would be interested in your feedback on maintaining this under fortran-lang. |
I have no fundamental objections to moving this and other legacy packages to fortran-lang as long as we have one or more persons identified to spearhead the initial modernisation and maintenance required to bring the packages up to standard. (Which it looks like we do here!) In particular, we should strive to maintain a high quality of packages maintained under fortran-lang which I will clarify by quoting from our extra 'recommend criteria' in the package index guidance:
|
Do we know of any users of QUADPACK, who are interested in devendoring their version in favor of a @fortran-lang one? Is anyone involved in this thread using QUADPACK in a production code and willing to offer their code base for testing? I'm also wondering about the QUADPACK license, is it public domain since it is part of SLATEC? How would we handle and license contributions to this project? |
I am not a user of QUADPACK, but I have experimented with it. In the
various versions I have (one from Netlib and one by John Burkhardt) I see
no regular test programs, like you find with LAPACK, but it might be a nice
community project to set up a comprehensive set of such programs. Within
the framework of fpm we can make them available. And perhaps en passant
provide modern interfaces.
Op do 27 mei 2021 om 15:41 schreef Sebastian Ehlert <
***@***.***>:
… Do we know of any users of QUADPACK, who are interested in devendoring
their version in favor of a @fortran-lang
<https://github.com/fortran-lang> one? Is anyone involved in this thread
using QUADPACK in a production code and willing to offer their code base
for testing?
I'm also wondering about the QUADPACK license, is it public domain since
it is part of SLATEC? How would we handle and license contributions to this
project?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#43 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAN6YR5BQVL3LCLOZZSJDKLTPZDX3ANCNFSM446N37RQ>
.
|
Well there are the possibly thousands of users using it via SciPy and Octave. Also the NAG quadrature routines are based upon QUADPACK. Also the IMSL library seems to be based off QUADPACK. Several papers discussing QUADPACK (with some tests) can also be found in
SciPy has a set of tests for QUADPACK that can be adapted: test_quadpack.py. The QUADPACK book (https://link.springer.com/book/10.1007%2F978-3-642-61786-7) contains error plots of 17 test integrals. There are also 10 demonstration programs. I would suggest to add these as the original tests. |
SciPy is the most obvious one. Yes, some of the SciPy maintainers are open to the idea of using fortran-lang's version, but of course it would depend on the details. I have not seen any objections like "absolutely not". So that means we should do our best, and if we do, there is a good chance of SciPy using it, one way or another. |
I must say the book by Keast en Fairweather is a bit expensive (200 euros
for the e-book version). The other one a bit less so.
By looking at the WIkipedia page I found an update of two of the automatic
integrators in QUADPACK, namely QAG and QAGS, as well as an integrator for
multidimensional functions (TOMS algorithms 691 and 824).
Should there be interest, I also have the implementaton of quadrature
(cubature) formulae by Stroud - a vast collection of routines.
Op do 27 mei 2021 om 17:32 schreef Ivan Pribec ***@***.***>:
… Is anyone involved in this thread using QUADPACK in a production code and
willing to offer their code base for testing?
Well there are the possibly thousands of users using it via SciPy and
Octave. Also the NAG quadrature
<https://www.nag.com/numeric/cl/nagdoc_latest/html/d01/d01conts.html>
routines are based upon QUADPACK. Also the IMSL library
<http://envi.geoscene.cn/help/Subsystems/idl/Content/Reference%20Material/Functional%20List%20of%20IDL%20Routines/IMSLRoutinesQuadrature.htm>
seems to be based off QUADPACK. Several papers discussing QUADPACK (with
some tests) can also be found in
Keast, P., & Fairweather, G. (Eds.). (1987). Numerical integration: recent
developments, software and applications.
https://doi.org/10.1007/978-94-009-3889-2
SciPy has a set of tests for QUADPACK that can be adapted:
test_quadpack.py
<https://github.com/scipy/scipy/blob/4ec4ab8d6ccc1cdb34b84fdcb66fde2cc0210dbf/scipy/integrate/tests/test_quadpack.py>
.
The QUADPACK book (
https://link.springer.com/book/10.1007%2F978-3-642-61786-7) contains
error plots of 17 test integrals. There are also 10 demonstration programs.
I would suggest to add these as the original tests.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#43 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAN6YR7WH6HGC54LW3UI5Q3TPZQYHANCNFSM446N37RQ>
.
|
So the next step, as @LKedward said, is to find a person who would be willing to take the lead on this. @dhermes and @brocolis, would you have time for that? The aim should be to maintaining this as a community, under fortran-lang. But it's good if at least initially there is one or two people who push the community to get it done, i.e., takes the lead on this. One possible path forward is:
What should be the long term goal? Should we include integration routines that we develop, such as by @arjenmarkus as indicated above? I would suggest to define what the long term objective is. I feel we should probably just "maintain it", i.e. ensure it compiles without warnings with all Fortran compilers, fix any bugs if they are discovered, and maintain modern Fortran and C API to it. But other than that, I think new algorithms should go into a new/separate fpm package. What do you think? |
I would highly recommend not moving F77 code to fortran-lang. Or wrapping F77 with a modern interface. I think that is a bad idea. We need to modernize the code to show what can be done with modern Fortran. There is a lot of room for improvement in quadpack. We don't want to be stuck with the old F77 code like some sort of new netlib. Convert it to free-form and then go from there. EDIT: For example, here's some modernized SLATEC integration code: https://github.com/jacobwilliams/quadrature-fortran |
I think we should discuss this at the next Fortran call. @jacobwilliams I think we all agree that we want modern Fortran implementations of these basic algorithms, whether as standalone packages and/or part of stdlib. Many of such packages could be maintained under fortran-lang also. The main problem that we are trying to solve in this thread is that codes depend on these old packages (fftpack, odepack, minpack, quadpack, ...) so having a maintained version helps. Also to compare against the "modern" packages, to ensure that they are actually better, or at least as good, i.e., did not regress on speed, accuracy or "simple API" (subjective). The question is whether the modernized version should be part of the same package, replacing the old code (I think that is what you are suggesting?), or a separate package. I think as long as performance and the API can be kept exactly the same, it is fine to be part of the same package. If the API changes, then I think it should probably be a separate package. As another example, I took Things to keep in mind when modernizing:
I have benchmarked my new "modern Fortran" fft implementation, and on the one benchmark I used (about million element 1D fft), it was about the same. But later I realized that for smaller fft, such as 128 (which is used for 3D 128^3, very common in electronic structure calculations), it might be slower. Based on my experience, I think it is actually really hard to ensure the new code is as fast. For all these reasons, I think it would be valuable to "conserve" or "preserve" these old libraries, and only do changes that keep performance, accuracy and API. Moving from fixed to free form is fine I think. Keeping the performance is tough, for that we need good benchmarks, or not change the code significantly. Keeping the API is simple (we just need tests), but that does not allow to modernize the API. |
For the time-being, I have access to digital versions of both books through a university subscription. I am happy to extract the tests from the books. One problem with modifying the API is that old codes that already use QUADPACK will require refactoring to use our "maintained" version. I think this is not constructive. Any older codes should continue to work, with the minor exception that we ask programmers to add a My personal goals for the modernization would include:
Performing step 3 after adding tests, helps guarantee accuracy and performance are preserved. The results and timings of the tests, should be preserved as build artefacts. Only after these steps are complete would I be in favor of adding new routines with simplified API's (through use of optional arguments, or derived types). |
@ivan Pribec ***@***.***> I agree with your list of goals. And
to prevent lots of work on old code, we might provide an old-style
interface to the modern version of QUADPACK or any other venerable package.
Op do 27 mei 2021 om 23:59 schreef Ivan Pribec ***@***.***>:
… I must say the book by Keast en Fairweather is a bit expensive (200 euros
for the e-book version). The other one a bit less so.
For the time-being, I have access to digital versions of both books
through a university subscription. I am happy to extract the tests from the
books.
One problem with modifying the API is that old codes that already use
QUADPACK will require refactoring to use our "maintained" version. I think
this is not constructive. Any older codes should continue to work, with the
minor exception that we ask programmers to add a use quadpack, only: ...
statement.
My personal goals for the modernization would include:
1. Provide an interface module (already done by @brocolis
<https://github.com/brocolis>)
2. Provide the missing tests, build tools, and online documentation
3. Refactor the original sources to free form, removing any
obsolescent language constructs, and following any modern
computational/software practices.
Performing step 3 after adding tests, helps guarantee accuracy and
performance are preserved. The results and timings of the tests, should be
preserved as build artefacts.
Only after these steps are complete would I be in favor of adding new
routines with simplified API's (through use of optional arguments, or
derived types).
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#43 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAN6YRZLGHWNU7DTFS2HSPLTP26CJANCNFSM446N37RQ>
.
|
We need to modernize the API. We can't hold up something that requires you to stuff your problem data into |
@jacobwilliams, we all agree that we want to use modern API to these legacy libraries. That is not a question. The question is how to get there. You said not to move the "F77 code to fortran-lang." You also suggested to rather work on a modern Fortran replacement, a "modernized version", and it is my understanding that you do not want to use the legacy code at all, but rewrite from scratch? I think from a practical perspective, I want to have these legacy libraries maintained, because people use them. And I would like to be able to use them at least for performance and accuracy comparison against a "modernized version" that you propose. To conclude, are you against the plan here: #43 (comment) ? That plan still allows to have a separate library, written from scratch, in modern Fortran. |
If the association of @fortran-lang with the legacy QUADPACK is a blocking issue here, than I might have a suggestion to move this forward. https://github.com/quadpack is currently free, I suggest we claim the @quadpack namespace by creating a new open-source organization and move the legacy version there. This allows to cooperatively develop the QUADPACK under a neutral namespace and once we have reached a point were we want to associate our quadpack-ng with @fortran-lang we can move it here. I personally use this strategy a lot for my projects, once they mature I tend to move them into separate organization (see @toml-f or @dftd4), since it allows me to separate the stable version from my development branches in a fork and also gives a nice namespace to include additional example packages as well. |
I absolutely support using the legacy code. There's no need to rewrite it from scratch. All I was warning against was being locked into the old api or coding style forever just to make sure that it could be used by somebody who refuses to make even the smallest modifications to their code to use it. Consider how I made a modernized version of some these spline interpolation routines: https://github.com/jacobwilliams/bspline-fortran At its core, are routines from CMLIB and SLATEC. I didn't have to rewrite them from scratch, but they have been changed. I had to change them in order to make the interfaces more modern, allow them to be reentrant, add features that weren't present in the original code, etc. At no point did I worry about keeping the old interface. Note that there are even two interfaces, an object oriented one (that I use), but also a subroutine one that is closer (but not identical) to the old interfaces. So like all these sorts of codes my advice is:
Then you can start expanding beyond what the old codes had (maybe adding new algorithms, maybe an object-oriented interface if it makes sense, etc.) |
@jacobwilliams perfect! I think the actual plan you just wrote is identical to #43 (comment), isn't it? The only technical issue left is "put them in a module or modules", which I would very much prefer, but I don't know if this can cause issues in existing codes like SciPy. But we can help them move over to modules. @jacobwilliams would you be against moving quadpack under fortran-lang, and we would do this work there? What @awvwgk suggested above ( |
I'm all for it! As long as the goal is to modernize, and not keep them frozen in amber like they are in netlib. :) Definitely think getting SciPy used to modern fortran should also be a major goal! It is inevitable that they are going to get rid of all that Fortran 77 code that nobody wants to work on. The only question is can we offer up modern alternatives, or are they going to replace it with C/C++. I hope it will be the former. I would also suggest avoiding the term "legacy"... Is the intent to have a namespace to work on projects that are big libraries that are outside of stdlib? I guess I'm not sure where to draw the line of separate libs vs adding them to stdlib. |
Good point. I would like to "rejuvenate" these libraries, so they are no more "legacy". Thus fortran-lang. Regarding stdlib or not --- these libraries are well established, so should live outside. As we modernize them or even do a rewrite as a separate library, we can also think how it should be included in stdlib. I don't know yet if stdlib has to be strictly without dependencies, or if it can have dependencies (in which case just depending on these libraries might be a way). |
I think as |
How about using a name like "fortran-lang-numerics" for these libraries (at
least I recognise that as a common theme)? We should indeed avoid "legacy",
as that seems synonymous to "old", "ancient", "deprecated",
"to-be-avoided-at-all-cost-but-the-cost-is-currently-too-high-to-indeed-do-so".
Op ma 31 mei 2021 om 22:20 schreef Jacob Williams ***@***.***
…:
I think as fpm becomes ubiquitous, it won't even matter so much where a
library comes from, it will "just work"!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#43 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAN6YR7EZQSVVEMULBSQ3ELTQPVSRANCNFSM446N37RQ>
.
|
So we discussed this at the last Fortran call (https://fortran-lang.discourse.group/t/fortran-monthly-call-june-2021/1334) and it seems there were no objections to start to maintain these packages under fortran-lang. We also agreed to keep the original API, but add optional modern Fortran API as appropriate, and that we will figure out some of the other details as we go. @milancurcic, @LKedward you were not at the call, are you both ok with doing that also? |
Thanks @certik that sounds good to me |
I apologize for dragging this further, but I'd like to review the discussion in the call recording and get back to you later today. Overall the plan sounds good to me, but I will have a few questions. |
For the concrete case of QUADPACK I have a couple of questions.
|
Let's wait for @milancurcic to approve, then we can choose either @dhermes or @brocolis (or both) to lead the effort and resolve the questions that @awvwgk posted. |
I just noticed @nshaffer (member of fortran-lang) has also previously started an effort to provide a modern QUADPACK package: https://github.com/nshaffer/modern_quadpack @nshaffer, would you be able to give your thoughts on this thread? I also just found two re-implementations of the QUADPACK algorithms in C and C++: |
I agree, let's do it. My questions and comments are:
|
I currently can't commit many hours to this project. However if we move in small steps, I think it is doable long-term. |
Thanks for the ping @ivan-pi. I just finished reviewing the call. I think my general opinion on maintaining old, important packages under fortran-lang is very similar to @certik's. But to be explicit, and raise a few points that I think have not come up yet: I would first like to see the f77 source maintained with minimal modifications. The initial commit can be the source as it is on netlib or in scipy, or whatever. From there, we can fix bugs (including standards-conformance issues), improve documentation, supply proper tests, and restructure to be packaged with fpm. This is the top priority if these packages are to remain useful for another 40-50 years. People will forget them and/or lose confidence in them if they just sit as tarballs on netlib. This repository should contain no API changes unless a bug is found that makes an existing API unsalvageable. The "legacy" repository should also provide a nice f90 module interface to the library. The purpose is not to change the API at all, but rather to have an explicit interface for compilers to check. I think it would also be appropriate to define flags and return codes as module parameters with sensible names. In this f90 module, we should also provide C bindings wherever possible. If we can provide explicit f90 interfaces and "official" C bindings for these libraries, that will already be a big success and a service to scientific computing, in my opinion. With that as the groundwork, I think it is also appropriate to have fortran-lang develop modernized packages. These can either be pretty wrappers around the f77 code (using the fortran-lang module as an entry point) or total rewrites using the f77 code as a reference. The point is this is a separate repo. I was initially inclined not to have these be under fortran-lang, to instead let users write their own. But this is basically what we have already: many people have their own little wrappers around whatever subset of LAPACK they use most. Sometimes they have tests, sometimes they don't. If those efforts are pooled together under fortran-lang, the result will be a more visible, more credible, and ultimately more useful package. |
On Mon, Jun 21, 2021 at 9:16 PM Nathaniel Shaffer ***@***.***> wrote:
The "legacy" repository should also provide a nice f90 module interface to
the library. The purpose is not to change the API at all, but rather to
have an explicit interface for compilers to check. I think it would also be
appropriate to define flags and return codes as module parameters with
sensible names. In this f90 module, we should also provide C bindings
wherever possible. If we can provide explicit f90 interfaces and "official"
C bindings for these libraries, that will already be a big success and a
service to scientific computing, in my opinion.
With that as the groundwork, I think it is also appropriate to have
fortran-lang develop modernized packages.
As I mentioned to Ondrej recently, I hope to live to see the day when
Fortran 90 is no longer considered modern. Fortran 90 is probably older
than some of the people commenting in this thread! It has become so common
to write Fortran with "90" appended to it that one could be forgiven for
thinking it is a permanent part of the language name. Giving external
procedures explicit interfaces is a great step in the right direction that
often can be accomplished trivially with not much more than a module
wrapping a series of include statements. I recommend stepping a couple of
decades closer to the present by taking advantage of Fortran 2008 to write
interface bodies in modules and move procedure definitions to submodules.
Separating the interface from the implementation can make it much less
laborious for a user to understand an API. The user need not read through
the entire implementation just to understand how to use the procedures
involved.
Damian
|
I think we are all in agreement Damian. :) When I wrote Fortran 90, I did not mean in on purpose, it's just a habit. After you pointed that out, I try to just say "modern Fortran" instead. However, I have a request for you Damian also. We should not be using the |
Fair points, Damian. Indeed the Fortran 90 standard is a little older than I am (but only by a little). It's a bad habit of mine to use "f77" and "f90" as shorthand for "legacy" and "modern". The idea of using submodules is interesting. So the gist would be to declare the interfaces in a module, then either copy-paste or |
You can of course do either, but some editing is necessary as of old the
end of a subroutine was characterised by the keyword END and that is
incompatible with the end of a submodule.
Op di 22 jun. 2021 om 16:06 schreef Nathaniel Shaffer <
***@***.***>:
… Fair points, Damian. Indeed the Fortran 90 standard is a little older than
I am (but only by a little). It's a bad habit of mine to use "f77" and
"f90" as shorthand for "legacy" and "modern".
The idea of using submodules is interesting. So the gist would be to
declare the interfaces in a module, then either copy-paste or include the
fixed-form sources in a (fixed-form?) submodule file?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#43 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAN6YR3MCAHHJSLP34Y56DDTUCKIDANCNFSM446N37RQ>
.
|
On Tue, Jun 22, 2021 at 6:54 AM Ondřej Čertík ***@***.***> wrote:
I think we are all in agreement Damian. :) When I wrote Fortran 90, I did
not mean in on purpose, it's just a habit. After you pointed that out, I
try to just say "modern Fortran" instead. However, I have a request for you
Damian also. We should not be using the .f90 extension for the same
reason you just pointed out, but rather just the .f extension, see
fortran-lang/fpm#363 <fortran-lang/fpm#363>. I
noted your opposition there, but I think you should reconsider. The
extension might be even more important for the "optics" than mentioning
"Fortran 90" in issue comments, because the file extension is seen all the
time, everywhere, by every Fortran user.
Ondřej, thanks for prompting me to reconsider. Now that I'm moving to fpm
for every project to which I'm actively contributing, I'll be glad to make
the switch to .f. I've always been a minimalist so I like the conciseness
of it. :)
I still have a slight preference for choosing something new rather than
overloading an extension that is already widely used, but I agree that to
be consistent with my earlier comments, .f is preferable to .f90.
Damian
… |
On Tue, Jun 22, 2021 at 7:06 AM Nathaniel Shaffer ***@***.***> wrote:
The idea of using submodules is interesting. So the gist would be to
declare the interfaces in a module, then either copy-paste or include the
fixed-form sources in a (fixed-form?) submodule file?
Yes, my personal preference is to avoid repeating the interface information
in the procedure definition, but I'm in the minority in this opinion.
Here's an example:
* module:
https://github.com/sourceryinstitute/sourcery/blob/main/src/array_functions_interface.f90
* submodule:
https://github.com/sourceryinstitute/sourcery/blob/main/src/array_functions_implementation.f90
Note: the "module" keyword in the interface bodies is required and the
"implicit none" in each interface bodies is strongly recommended.
In addition to separating interfaces from implementations, this style
avoids unnecessary compilation cascades, in which a change to the procedure
definition causes a domino effect of recompiling any code that depends on
the procedure even if the relevant procedure's interface is unchanged.
I hope this helps.
Damian
|
Well, I guess I had forgotten about this thread. I went ahead and modernized quadpack. See: https://github.com/jacobwilliams/quadpack This is a full modernization & cleanup of the code (converted to free-form, removed obsolescent features, cleaned up the doc strings, etc.) It's now all in one module. The API is the same though! At least it is for the double precision version. I removed the single-precision routines and make it so you can create a single or even quad precision module using some preprocessing trickery. I used the My intent is to use this as an FPM dependency in my quadrature-fortran library, so I can use it for 1D-6D integration. |
I actually would be willing to do all of the work here but am not sure where to start.
AFAICT the original source has been converted to Fortran 90 by John Burkardt (single and double precision). The big concerns then are (A) LICENSE, this is the biggest (B) build tooling e.g. Make or CMake, not sure what
fpm
prefers (C) documentation.The text was updated successfully, but these errors were encountered: