Sparse Poisson problem in eigen

OwlgenBack to scientific computing. Lately, I have been using the Eigen libraries for linear algebra. They were recommended by the CGAL project, and they indeed share a common philosophy. Thanks to the rather high C++ level they can accomplish this sort of magic:

  int n = 100;
  VectorXd x(n), b(n);
  SpMat A(n,n);



  // solve Ax = b
  Eigen::BiCGSTAB<SpMat> solver;
  //ConjugateGradient<SpMat> solver;


  x = solver.solveWithGuess(b,x0);

Notice that A is a sparse matrix! I am next describing how to use this in order to solve the 1D Poisson equation.

Continue reading

OpenFOAM cheatlist

A quick cheatsheet for OpenFOAM. In italics, things that are useful but not part of OpenFOAM proper. Interesting read: The OpenFOAM Technology Primer


Shortcuts to directories

(type “alias” to reveal these)

  • run (go to own’s running directory)
  • foam
  • foamfv
  • foam3rdParty (hit <tab> for these longish commands!)
  • tut
  • app
  • sol
  • util
  • lib
  • src

Environment variables

  • echo $FOAM_ <tab>  (directories)
  • echo $WM_ <tab>  (building, aka compiling, settings)


  • Generation
  • Import / export
    • foamMeshToFluent
    • fluentMeshToFoam, etc …
  • Operations
    • refineHexMesh
    • transformPoints
    • makeAxialMesh
    • collapseEdges
    • autoPatch
    • mirorMesh
  • Properties
    • checkMesh


  • setFields
  • topoSet
  • patchAverage
  • patchIntegrate
  • vorticity
  • yPlusRAS
  • yPlusLES
  • boxTurb
  • applyBoundaryLayer
  • R
  • wallShearStress


  • foamHelp (e.g. foamHelp boudary -field U)


  • sample
  • paraview
  • probeLocations


  • icoFoam
  • interFoam
  • many, many others


  • foamJob
  • decomposePar
  • reconstructPar
  • mpirun
  • nohup


  • foamNew source App …
  • doxygen doxyfile
  • gdb
  • valgrind
  • wmake
  • wclean
  • aliases for settings: wm32, wm64, wmSP, wmDP, wmSET, wmUNSET

Sorting eivenvectors in octave

A brief note. Doing ee= eig(m); produces a vector with all eigenvalues of matrix m. These are unsorted, so ee=sort(eig(m)); produces a vector with a sorted list of all eigenvalues of matrix m.

If we want the eigenvectors, [vv,eed]=eig(m); produces a diagonal matrix eed whose elements are the same as ee, and are unsorted. Who to produce a sorted vector with the eigenvalues, and re-order the eigenvectors accordingly? Thus:


[ee,perm] = sort(diag(eed));


Anime for grown-ups

I didn’t want to write “for adults”…

A list of very interesting anime movie for grown-ups, from classics to now. I’m staying off Ghibli here, which imho are a must see, all of them. Including, of course When Marnie was There, a gem.

Many are of these are from Madhouse, a studio that has produced many fine films and may become the best studio if Ghibli ceases to produce films.


  • Akira (1988)
  • Blood The Last Vampire (2000)
  • Patlabor 2 (1993)

Keiichi Hara

Hiroyuki Okiura

Mamoru Hosoda

  • The Girl Who Leapt Through Time
  • Summer Wars
  • Wolf Children
  • Bakemono no Ko

Cowboy Bebop saga

  • Cowboy Bebop, TV series (1998)
  • Cowboy Bebop The Movie  — Knockin’ On Heaven’s Door
  • Samurai Champloo TV Series, also by Shinichirō Watanabe

NGE saga

  • Neon Genesis Evangelion. Original TV series.
  • Evangelion movies…

Ghost in the Shell saga

  • Ghost In The Shell (1995). Original TV series.
  • Ghost in the Shell Stand Alone Complex TV Series

Makoto Shinkai… sunsets galore

  • Hoshi No Koe (The Voices Of A Distant Star)
  • Kumo no Mukou, Yakusoku no Basho (The Place Promised in Our Early Days)
  • The Garden of Words (2013)
  • 5 Centimeters Per Second
  • Children Who Chase Lost Voices From Deep Below (2011)

Satoshi Kon

  • Paprika
  • Tokyo godfathers
  • Paranoia Agent, TV series
  • Millennium Actress

Others (unsorted yet)

  • Piano Forest – Piano no Mori (2007)
  • Tekkon Kinkreet (2006)
  • Time Of Eve
  • Persona 3 the Movie-1-Spring of Birth
  • Hotarubi no Mori e
  • The animatrix

A selection for smaller children:

  • Friends. (2011)
  • Mai Mai Miracle (2009)
  • Patema Inverted
  • Welcome to the Space Show
  • Ronja (ok, this one’s Ghibli, but it’s not so well known)

from gnuplot to python

Part of my moving to python for science.

I have lately been using gnuplot to monitor the progress and end results of my simulations.  These are 2D hydrodynamic simulations, which involve 2D scalar and vector fields.

2D plots

With gnuplot, I used to run stuff like

plot ‘8000/points.dat’ u 1:2

for a 2D plot of a scalar field. On column 1 I have the x values of the coordinates and on column 2 the y values, so this just plots the coordinates. The “8000” is the directory for time step 8000, where the data file is saved.

OK, now running ipython –pylab I have to run

dt = pylab.loadtxt(‘8000/points.dat’)




2D scatter plot with colors


Important things to notice:

  • python starts numbering c-style: at 0! so, despite pylab having been designed in order to mimic matlab syntax, there is a clear departure here.
  • it’s easy to assign a color to the points, in this case column 12 (11 for python) is a density field. The default color scale looks ok (it goes from blue to red).
  • the size is set to 50 for a nice full-screen view.
  • New plots will appear on top of this one. If this is not desired, close the window, or run pylab.clf()

Vector plots

This is quite easy in gnuplot:

plot ‘8000/points.dat’ u 1:2:($5/10):($6/10) w vec

On columns 5 and 6 I store the x and y components of the velocity. In this example they are reduced ten-fold in order to hace a decent plot (and this has to set by hand…).

Now we may run:


which does the same. A bonus is that the vector length is automatically calculated from the average vector length. This may the right solution, if not the option “scale=xx” may be used. The higher xx is, the shorter the arrows (??). The fifth entry is a color code, which does not look to good at present because, I think, they are taken as RGB values, unlike with scatter.


Vector plot -- funny senseless colors

Vector plot — funny senseless colors

 3D plots

This one’s harder. To get a scatter 3D plot of three columns I used to run

splot ‘8000/points.dat’ u 1:2:12

Now, it’s more like

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()

ax = fig.add_subplot(111, projection=’3d’)


That produces a quite nice scatter plot with tick marks on the three axes.


3D scatter plot