15

If you're doing celestial mechanics over long time scales, using a classical Runge-Kutta integrator will not preserve energy. In that case, using a symplectic integrator would probably be better. Boost.odeint also implements a 4th-order symplectic Runge-Kutta scheme that would work better for long time intervals. GSL does not implement any symplectic methods,...


11

Boost Graph Library and LEMON As Daniel mentions in his comprehensive answer, the most full-featured general C++ library is the Boost Graph Library. There is a new distributed-memory extension capable of doing some basic algorithms such as breadth-first and depth-first search, minimum spanning trees, and connected components search, but I am not very ...


11

OPT++ is used internally by Dakota (Sandia), which is much more than an optimization library and is released under the LGPL. You should also take a look at TAO (ANL), released under a BSD-like license. An introduction to both OPT++ and TAO can be found here. Other alternatives are MOOCHO, NOMAD, and HOPSPACK, which are, as far as I know, also LGPL licensed. ...


9

Whatever site is better will depend on your own appreciation of it. Although it might be tempting to promote whatever system I prefer personally, I believe that the correct choice has more to do with your personal preferences and style of working... How many developers work on your project? How often will you be updating it? How likely is it that somebody ...


9

FTensor is a lightweight, header only, fully templated library that includes ergonomic summation notation. It has been tested extensively in 2, 3, and 4 dimensions, but should work fine for any number of dimensions.


8

deal.II uses the Threading Building Blocks throughout the library and by and large we're reasonably happy with it. We've looked at a few alternatives, in particular OpenMP since everyone seems to be using that for simpler codes, but found them lacking. In particular, OpenMP has the huge disadvantage that its task model does not allow you to get a handle for ...


8

Both GNU Scientific Library (GSL) (C) and Boost Odeint (C++) feature 8th order Runge-Kutta methods. Both are opensource, and under linux and mac they should be directly available from the package manager. Under windows, it will probably be easier for you to use Boost rather than GSL. GSL is published under the GPL license, and Boost Odeint under the ...


7

I would suggest to exactly duplicate the Lapack interface to the function that you need, most probably you just need dgesv. That way people that have Lapack installed can simply link to it and it will just work. For people that don't have Lapack installed, you provide your own simple implementation of this function, or possibly implement it using Eigen or ...


7

Prior answers to this question have covered most of the salient points, but I want to add one comment with respect to this: does MKL have the upper hand for some tasks? The MKL team is in a unique position to know about future Intel instruction sets and their implementations in specific processors. Furthermore, they have access to proprietary processor ...


7

While there are some books on the implementation of finite element methods (e.g., Mark Gockenbach's Understanding and Implementing the Finite Element Method and Yair Shapiro's Solving PDEs in C++: Numerical Methods in a Unified Object-Oriented Approach), I think it would indeed be most useful to look at (and compare!) actual large-scale libraries: There are ...


7

Almost everything you can build and install in your own space. With GNU autotools, you can do something like ./configure --prefix=/path/to/your/work/space ... and then follow the usual compilation instructions. Things based on CMake and Scons have similar facilities.


6

Go for Github. The publication model of Github is the future. Github's model of forking, pull requests, and merging is very close to the model of scientific publishing. Many scientific communities are using Github to host data and code of their research projects. There are open access journals that use Github as their sole means of submission and ...


6

When I was in the same position as you, I was very happy to find Knuth's Stanford Graphbase (SGB). He supplies not only a library for working with graphs, but also some data sets to play with. My favorite one was the 5-letter English words dataset. You can use your programming language of choice to generate an undirected graph where two words are neighbors ...


6

You can configure with separate libraries (--with-single-library=0) and link only the ones you need (e.g., -lpetscmat -lpetscvec -lpetscsys), but this is generally a waste of effort. If you use static libraries, then only the parts you reference go into the binary (if you're trying to squeeze the last megabyte out of a memory-constrained environment). PETSc ...


6

For what its worth, Eigen does have a Tensor class as an unsupported module. http://eigen.tuxfamily.org/dox-devel/unsupported/group_CXX11_Tensor__Module.html I haven't used it myself so can't say more about it. The Armadillo class library has a 3rd-order tensor class. http://arma.sourceforge.net/ I haven't used the tensor capabilities of Armadillo ...


6

I think this new taco lib is really good too. The Tensor Algebra Compiler (taco) is a C++ library that computes tensor algebra expressions on sparse and dense tensors. It uses novel compiler techniques to get performance competitive with hand-optimized kernels in widely used libraries for both sparse tensor algebra and sparse linear algebra. You can use ...


6

XTensor is a modern approach and is getting more and more popular. https://github.com/QuantStack/xtensor


6

Of course it makes sense to use the GSL (or another library for that matter) for several reasons: Don't reinvent the wheel. The work has been done, you can spend your time on more useful things. If you do decide to implement these basic things yourself, the risk that your code will probably contain some bugs and will be slower, less memory efficient etc ...


6

I would like to hear comments from users that have some practical models (e.g. black-box hyperparameter optimization) which are still needed to be solved acceptably - whether this method works or not for their models, possibly with the description of the model. Looks like you want somebody to invest what may be considerable time and energy in trying out ...


6

Optim.jl from Julia will work with the number types that you give it, so if you make it use BigFloats then it'll do that. Local derivative based, derivative-free, global, and integrates with automatic differentiation. From Julia, it's just: using Optim rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2 result = optimize(rosenbrock, big.(zeros(2)), ...


5

I'd also like to mention STINGER, a dynamic graph data structure designed for parallelism. According to the website, it is designed for the following objectives: Portability: Algorithms written for STINGER can easily be translated/ported between multiple languages and frameworks Productivity: STINGER should provide a common abstract data structure such that ...


5

Perhaps, the Boost Graph Library is what you are looking for. It has a parser to read graphs specified in GraphViz's DOT format. While i don't really know about memory overhead, it does provide a variant for parallelization. Another graph library is LEMON but i don't really know it and if it has support for parallelization, it's not advertised. It's ...


5

Google code is another option as they offer svn/git/hg and almost everyone has a Google ID. Whatever site you choose I would recommend putting a tarball somewhere right at the top (some sites already do this) as most people are not familiar with revision control and departmental servers across universities often run a 5 year old OS which if one is lucky may ...


5

A very early mistake that many people make when getting started in scientific computing is assuming that you need to write all of your code in the same language. I think this is due largely to historical reasons, when it wasn't clear how to make compiled programs communicate with each other across even versions of the same compiler. That said, in this case,...


5

OpenFOAM. It's really easy to implement models there, even if you do not know how to program in C++, everything is set up, and you can just follow the pattern. If you do know something about similar class interfaces/dynamic polymorphism using virtual functions, then it is exceptionally easy. Model, explicit, or implicit, will involve manipulations on ...


5

The library NLopt meets your requirements. I have used it in the past and I am satisfied with its interface and results.


5

Two months after posting my question I realized that I still want to try working with deal.II, and implemented the tet->hex converter to work with complex geometry. So if someone is interested, welcome to tethex wiki page.


5

I recommend looking at different library docs: http://fenicsproject.org/book/ http://www.dealii.org/developer/


5

Some thoughts from someone who has worked a fair amount in compiled languages, and has done a tiny bit of FVM: Typically, if you have experience programming in C, you sketch out a high-level description (pseudocode) of what you would like to do. Then you look for libraries that might implement the data structures and capabilities you need for your high-...


5

Ask your remote host to install what you need. We do this all the time for folks where I work. Typically they can help you out. Also, it's OK to do some of your development on your machine and then port your results to the remote machine.


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