146

I've gathered the following from online research so far: I've used Armadillo a little bit, and found the interface to be intuitive enough, and it was easy to locate binary packages for Ubuntu (and I'm assuming other Linux distros). I haven't compiled it from source, but my hope is that it wouldn't be too difficult. It meets most of my design criteria, and ...


48

Python (as of 2.6 and 3.0) now searches in the ~/.local directory for local installs, which do not require administrative privileges to install, so you just need to point your installer to that directory. If you have already downloaded the package foo and would like to install it manually, type: cd path/to/foo python setup.py install --user If you are ...


45

I think that documentation for scientific software can be divided into three categories, all of which are necessary for full understanding. The easiest and most common is individual method documentation. There are many systems for this. You mention doxygen, Python has pydoc, and in PETSc we have our own package sowing which generates the following. However, ...


32

Pick your poison. I recommend using Homebrew. I have tried all of these methods except for "Fink" and "Other Methods". Originally, I preferred MacPorts when I wrote this answer. In the two years since, Homebrew has grown a lot as a project and has proved more maintainable than MacPorts, which can require a lot of PATH hacking. Installing a version that ...


25

The best solution that I know of is to program the symbolic expressions in Mathematica, Maple, or SymPy; all of the links go directly to the code generation documentation. All of the programs above can generate code in C or Fortran. None of the programs above mentions accuracy in IEEE 754 arithmetic; in general, it would be difficult to anticipate all ...


24

This document was written in March 2009 to help in the choice of a linear algebra library for a scientific library. It evaluates portability, high-level interface and licensing for several libraries, among them Eigen, GSL, Lapack++ MTL, PETSc, Trilinos and uBlas. It seems to be particularly fond of Flens and Seldon. (One of the requirements was that C++ ...


24

Disclaimer: I sometimes get annoyed when somebody tries to tell me what they think I ought to do rather than answering the question I asked. But I'm going to take a risk and suggest an alternative to you. I would suggest looking at Python's scientific computing packages: numpy, matplotlib, and scipy. Together, they provide you most of the core ...


20

What you are asking for is the Elsivier grand challenge of the "Executable Paper". While many approaches have been tried, none are as compelling as the authors might suggest. Here are a few examples of techniques used. Madagascar Project takes your approach, inside the make script have the simulations run that produce the figures and paper simultaneously. ...


19

In-code documentation The most important thing is to use the documentation facilities in your chosen development environment, so that means pydoc for python, javadoc in java or xml comments in C#. These make it easy to write the documentation at the same time as writing the code. If you rely on coming back and documenting things later, you may not get ...


19

There are huge differences in culture, coding style, and capabilities. Probably the fundamental difference is Trilinos tries to provide an environment for solving FEM problems and PETSc provides an environment for solving sparse linear algebra problems. Why is that significant? Trilinos will provide a large number of packages concerned with separate ...


18

Can anyone give some recommendations/experiences on which license to pick for software? Which license you chose will depend on how free you want your code to be, but free means different things to different people. For proponents of permissive licenses, free means allowing people now to use the software however they want to right now, not worrying about ...


17

There are basically two major, commercial choices out there: DDT from Allinea (which is what we use at TACC) and Totalview (as mentioned in the other comment). They have comparable features, are both actively developed, and are direct competitors. Eclipse has their Parallel Tools Platform, which should include MPI and OpenMP programming support and a ...


17

Of all the projects listed above, there are really only two heavy-weights that are extremely widely used (and for good reasons): PETSc and Trilinos. Both are professionally developed and have a large developer base. All the others are rather small projects compared to these two, and I would recommend going with them because (i) they will be supported for a ...


17

GNU Octave is "mostly compatible with Matlab", certain subtleties means not all scripts are portable from MATLAB to Octave. It is worth reading the documentation for the language and/or compatibility notes in the FAQs or on wikibooks. There are also porting notes. Packages similar to MATLAB toolboxes exist, but you will need to check them out to work out ...


17

In rough order of importance. Source Code Make the code that implements the key aspects of your algorithm available. Even if the user can't build or run it, they can read exactly what is done. I have several times noticed simple decisions that weren't documented in a paper, but which a couple minutes with the source code answered conclusively. Make it ...


16

I must give the curmudgeon answer. My productivity has never been improved by any of the suggestions above. They are slow and expensive compared to my preferred option in parallel: one gdb session per process. Each gdb can connect to an MPI process and sit in an xterm (this happens automatically in PETSc using -start_in_debugger). I have used this for 15 ...


15

I will take objection with almost every point Faheem makes. Specifically: 1/ "I think that it is unrealistic to expect scientific developers to spend a great deal of time documenting their software". This is a prescription for a failed project that soon nobody will be able to use who does not have access to the primary developers. It is for good reason that ...


15

In the vast majority of cases, improvements in algorithms make a bigger difference than improvement in optimization. Algorithms are also more portable than low-level optimizations. My advice is to follow general best practices with respect to memory layout for cache reuse, avoiding excessive copies or communication, treating the file system in a sane way, ...


15

As far as I know, Lapack is the only publicly available implementation of a number of algorithms (nonsymmetric dense eigensolver, pseudo-quadratic time symmetric eigensolver, fast Jacobi SVD). Most libraries that don't rely on BLAS+Lapack tend to support very primitive operations like matrix multiplication, LU factorization, and QR decomposition. Lapack ...


14

If you want an idea of just how far we are away from such a software package, please look at the 2001 LAPACK working note on computing Givens rotations reliably and efficiently. I would expect most non-specialists (and many specialists!) in numerical analysis to be surprised at just how much analysis went into solving such an ostensibly simple problem: ...


14

As some comments have suggested, this approach has long been developed in the R community by building on Sweave and more recently, knitr. Obviously this approach has the disadvantage of being language-specific at the moment, but the advantage that its regularly used in academic papers. Use of Sweave in real publications The Journal of Biostatistics ...


13

@Geoff gives a good answer, but I think it's worth providing an alternative perspective. I do everything on Macs -- in OS X, not a Linux VM -- including lots of scientific code development. I mostly work in Fortran and Python. For me, the convenience of being able to do all my work in one OS and almost never deal with hardware failures or driver issues ...


13

I don't think that the definition of "reproducible research" requires that the author provide for free all of the tools that are needed to reproduce the results obtained. If some of it is proprietary, then it is incumbent on the future user, not the author, to make the arrangements to acquire the needed software. (You wouldn't expect to have to build the ...


13

You look at how deal.II (http://www.dealii.org/) does it -- there, dimension independence lies at the very heart of the library, and is modeled as a template argument to most data types. See, for example, the dimension-agnostic Laplace solver in the step-4 tutorial program: http://www.dealii.org/developer/doxygen/deal.II/step_4.html See also https://...


13

I have not had a lot of success in using other people's solutions to this problem. I usually just want something simple that works for me and gets the job done. To this end, I generally try to write one python script which is in charge of running all the results, parsing the output, as well as building the figures/tables. I write my codes to generate ...


13

If you want something open-source, you probably want to try COIN's CBC code (they also have a couple other MILP solvers, like a branch-and-price framework, or SYMPHONY). Gurobi and CPLEX will be considerably faster, and as of the 2011 or 2012 INFORMS meeting, Gurobi was faster than CPLEX (though the performance metrics are of course problem dependent). On ...


12

PETSc uses this license, which is a less restrictive form of BSD. The crucial difference from GPL, is that the software can be used commercially. Many people have a principled objection to closed software, however in my experience no business will go near your code if it has a GPL license. Moreover, PETSc's industrial users have been incredibly valuable. ...


12

I can't comment on the server side of things. On the client side, at the one computational science meeting I go to every year, the proportion of Mac users seems to have increased. I switched to a Mac because I got tired of dealing with my school-supplied Dell laptop failing at the drop of a hat. I switched to Macs for the hardware, primarily, since ...


12

Yes you can learn MATLAB via Octave. But Octave syntax is less restrictive and more in line with modern scripting languages. MATLAB seems behind in this respect. See this wiki link MATLAB Programming/Differences between Octave and MATLAB Another major difference to me were the availability of certain libraries for MATLAB but not for Octave.


12

For logging that allows full reproducibility, I highly recommend the Sumatra python package. It nicely links the version control commit number, machine state, and output files to each program run and has a django web interface to interact with the database of run info. The python API makes it very easy to include logging in my scripts.


Only top voted, non community-wiki answers of a minimum length are eligible