Skip to content

Decoupling FF #4

@matthewfeickert

Description

@matthewfeickert

FF seems to be a problem in terms of actually packaging things in a way that makes sense when it comes to conda-forge.

The source for FF is distributed on https://www.nikhef.nl/~form/maindir/others/ff/ff.html, but as I have very little faith that unmaintained websites will work forever I'm also attaching a version of it here: ff.tar.gz

FF has some problems:

  • FF is unversioned (the FF manual talks about a version 1.0 but there's no version information elsewhere beyond the README with a final entry of 1998-10-01, so maybe FF should be treated as CalVer?)
  • FF has no license (I would suggest putting it under MIT given the rest of this issue)
  • FF doesn't build as is. With the existing source and the following dependencies from conda-forge
[dependencies]
fortran-compiler = ">=1.8.0,<2"
make = ">=4.4.1,<5"

running

$ curl -sLO https://www.nikhef.nl/~form/maindir/others/ff/ff.tar.gz
$ tar -xzf ff.tar.gz
$ cd ff
$ make

results in lots of warnings and then fails with

...
$CONDA_PREFIX/bin/x86_64-conda-linux-gnu-gfortran   -c -o ffxd0p.o ffxd0p.f
ffxd0p.f:463:31:

  463 |                    call ffcxra(cs4(169),ipi12(25),xqi,qiDqj,sdel2,3,ier)
      |                                             1
Error: Actual argument contains too few elements for dummy argument 'ipi12' (2/3) at (1)
ffxd0p.f:466:31:

  466 |                    call ffxtra(cs4(169),ipi12(25),xqi,qiDqj,sdel2,3,ier)
      |                                             1
Error: Actual argument contains too few elements for dummy argument 'ipi12' (2/3) at (1)
make: *** [<builtin>: ffxd0p.o] Error 1

However, it gets more complicated as it seems that almost every theory tool vendors their own different version of FF.

For example, LoopTools (also currently without immutable distributions, so LoopTools-2.16.tar.gz) vendors a version of FF that seems to be arranged quite differently in source file content from what the original FF source has

$ curl -sLO https://feynarts.de/looptools/LoopTools-2.16.tar.gz
$ tar -xzf LoopTools-2.16.tar.gz
$ tree -L 1 LoopTools-2.16/src/
LoopTools-2.16/src/
├── A
├── B
├── C
├── D
├── E
├── frontend
├── include
├── makefile
├── tools
└── util

9 directories, 1 file

and (LoopTools author) Thomas Hahn (@t-hahn) mentions in email:

LoopTools embeds the old FF package of Geert Jan van Oldenborgh, and I make no secret out of this in the manual (Appendix A).

Geert Jan actually once deleted his copy of the source and asked me for a backup copy, so in that sense the FF version inside LoopTools may have become the "original" then.

The FF sources are still available here: https://www.nikhef.nl/~form/maindir/others/ff/ff.html but you cannot easily remove the FF code from LoopTools and plug the NIKHEF version, there have been subtle and not-so-subtle changes plus of course the integration into the LoopTools build.

It is worth noting that LoopTools has a license of GNU GPL v3.

Similarly, the Fortran version of QCDLoop (QCDLoop-1.98.tar.gz) also vendors a version of FF (with an entry in the README from 2003-09-08) though the QCDLoop README notes

The directory ff is taken from http://www.xs4all.nl/~gjvo/FF.html. The file ffinit_mine.f replaces the original file ff_init.f. One has to adjust here the path (twice) and set it to the location of the the ff library. The makefile in ff has been modified accordingly.

This does build, but it builds a statically linked library. QCDLoop is also unlicensed software.

So it seems that to move forward we need a version of FF that:

  • Builds with modern gfortran
  • Is hosted in a standalone repository
  • Builds a dynamically linked library
  • Can be used in LoopTools and the Fortran QCDLoop

I'm tempted to try to take the version of FF in QCDLoop, put it in a GitHub repository (under MIT), get it up on conda-forge and try to go from there until I realize that I've messed something up.

Thoughts in general @chrisburr @henryiii?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions