I’ve spent a great 4 days at Pacific Northwest National Laboratory (http://www.pnl.gov/ ) where we’ve been doing a number of things – including OREChem (which I’ll blog later). It’s been great to talke with the people who have developed and are continuing to develop NWChem (www.nwchem-sw.org/ ) – their flagship computational chemistry package (which does both atomistic and plane wave calculations). It’s very large and I’ll be finding out more during the plane journey back.
But the key first thing is that it’s Open Source.
The normal practice in computational chemistry is to develop a business model where costs can be recovered. Sometimes this is free-to-academics-pay-by-industry. Sometimes it’s pay-by-everybody.
I have no moral principles against charging for software. But there is a utilitarian downside. It fragments the society (there are probably 10 other codes which do much-the-same as NWChem). It leads to closed algorithms – “you can’t see our code because you might steal it”) . And it is difficult to develop a modern model where there are community contributions.
The result is that many codes have an architecture and community that creaks.
NWChem has broken the mould. (I should mention that there are plane wave codes which have also done this, Quantume Espresso and ABINIT – and I work with them as well).
So I and other Quixotans are working with Open Source codes to add semantics. That will take them from FORTRAN-like tools with serious impedance in input/output top potentially semi-intelligent information engines. It means that the language of compchem will not have 20 separate languages, but languages which truly reflect the physics and chemistry.
What’s the plane journey got to do with it?
I’m writing a declarative parser for NWChem. Here’s a chunk of current log output:
lattice vectors in a.u. (scale by 1.000000000 to convert to a.u.)
a1=< 5.920 0.000 0.000 >
a2=< 0.000 10.255 0.000 >
a3=< 0.000 0.000 9.653 >
a= 5.920 b= 10.255 c= 9.653
alpha= 90.000 beta= 90.000 gamma= 90.000
reciprocal lattice vectors in a.u.
b1=< 1.061 0.000 0.000 >
b2=< 0.000 0.613 0.000 >
b3=< 0.000 0.000 0.651 >
Now CML understands this – it has lattice vectors (real and reciprocal). But what’s “omega”? I’m a crystallographer and I’ve never heard of omega. There’s a clue later in that the volume is also given as 586.0. So I am guessing that omega is the symbol for volume in some community of practice.
So we are creating a vocabulary that the whole NWChem community can contribute to. I even hope that someone will comment on this post, but even if not the communal process will soon resolve this problem.
Once and for all.
So by an open community process we make rapid progress. Which will soon mean that the Open codes will have a major semantic advantage over the closed codes.
At that stage scientists will start to wonder whether “free as in beer” and “free as in speech” is actually a very valuable concept and one worth throwing their effort behind.
I look forward to much continued collaboration with the NWChem group and the Quixotans.
And an exciting plane journey.