Skip to content
Jacob Fields edited this page Aug 18, 2020 · 6 revisions

The two-dimensional Object-Oriented PDE Solver (OOPS-2D) is an extension of the OOPS project. OOPS is an easy, flexible framework for writing and solving partial differential equations. It was originally conceived as a tool for rapid prototyping and helping teach the fundamentals of scientific computing. It has since grown, however, and gradually aims to become a full-featured software library for solving hyperbolic differential equations.

Why should I use OOPS-2D?

  • It's easy. The simple, object-oriented framework makes solving a PDE just a matter of defining a right-hand side, some initial conditions, and some boundary conditions. This makes OOPS especially well-suited for educational purposes and quick prototypes. Some larger, more complex projects may also benefit from the extra organization provided by the OOP design.
  • It's completely parallel. OOPS-2D is 100% parallelized using MPI and can be run on anything from a small laptop to a massive supercomputer.
  • You like clean code. While I won't claim that OOPS-2D is perfect, it's a far cry from the ugly, horrendous code written by twelve generations of graduate students and their advisors who learned to program on punch cards. OOPS-2D has always been written with the mindset that all code components should be written in a consistent style that makes them all work together seamlessly; the documentation, consequently, is a list of instructions on how to use the code, not a list of instructions on how to keep from breaking the code.

Why should I use another code over OOPS-2D?

  • You need the latest and greatest features. OOPS-2D is very much a work in progress, and it lacks some of the features you might expect in a production-ready scientific code, such as adaptive mesh refinement or complex data analysis tools.
  • Your problem isn't set up well for OOPS-2D. Although it aims to be flexible and easy-to-use, OOPS-2D is really intended for hyperbolic and parabolic PDEs discretized via finite-difference methods and the method of lines. Fully elliptic problems are not technically impossible, but they require a considerable amount of extra work and may not be completely compatible with the MPI implementation.
  • You can't waste a single ounce of speed on extra overhead. Object-oriented code is, unfortunately, harder for compilers to optimize, so while OOPS-2D is no slouch, it does sacrifice some speed in the pursuit of clean, easy code. While I'm always looking for ways to improve the code's performance, the unfortunate reality is that a purpose-built, well-designed C or Fortran code written in a procedural style will always be faster.
  • You're a masochist.

Clone this wiki locally