Creating a mesh in FEniCS

I may end up doing a large project using FEniCS which is a collection of tools for automated, efficient solution of differential equations using the finite element method. While playing with implementing a simple solver for fluid flow in a tank by use of FEniCS to solve the Laplace equation I needed to create my own mesh in code.

FEniCS is quite well documented, but I had to look at the source code for some of the mesh conversion routines to find out how to build a mesh from scratch. So, for posterity, here is a reimplementation of dolfin.RectangleMesh in a much more cumbersome (and flexible) way:

import numpy
import dolfin as df

def create_mesh(length, height, nx, ny, show=False):
    """
    Make a square mesh manually

    Should give exactly the same results as using the built in dolfin.RectangleMesh() class
    """
    # The number of mesh entities
    nvert = nx*ny
    ncell = 2*(nx-1)*(ny-1)

    # Positions of the vertices
    xpos = numpy.linspace(0, length, nx)
    ypos = numpy.linspace(0, height, ny)

    # Create the mesh and open for editing
    mesh = df.Mesh()
    editor = df.MeshEditor()
    editor.open(mesh, 2, 2)

    # Add the vertices (nodes)
    editor.init_vertices(nvert)
    i_vert = 0
    for x in xpos:
        for y in ypos:
            editor.add_vertex(i_vert, x, y)
            i_vert += 1

    # Add the cells (triangular elements)
    # Loop over the vertices and build two cells for each square
    # where the selected vertex is in the lower left corner
    editor.init_cells(ncell)
    i_cell = 0
    for ix in xrange(nx-1):
        for iy in xrange(ny-1):
            # Upper left triangle in this square
            i_vert0 = ix*ny + iy
            i_vert1 = ix*ny + iy+1
            i_vert2 = (ix+1)*ny + iy + 1
            editor.add_cell(i_cell, i_vert0, i_vert1, i_vert2)
            i_cell += 1

            # Lower right triangle in this square
            i_vert0 = ix*ny + iy
            i_vert1 = (ix+1)*ny + iy+1
            i_vert2 = (ix+1)*ny + iy
            editor.add_cell(i_cell, i_vert0, i_vert1, i_vert2)
            i_cell += 1

    # Close the mesh for editing
    editor.close()
    print 'Created mesh with %d vertices and %d cells' % (nvert, ncell)

    if show:
        df.plot(mesh)
        df.interactive()

    return mesh

If anyone finds this by searching the web for how to build a mesh programmatically in FEniCS/dolfin, then I hope the above was understandable. The documentation is quite good when you know that you need to search for the MeshEditor class ...

Tagged as: Code FEniCS English

Sorting images

Once upon a time, back when I was using Windows at home, I had a useful small program that helped me sort through new pictures from my camera. I have forgotten the name of the program, but basically it allowed me to sort the good pictures from the bad in a fast and efficient manner so that the really bad ones could be deleted and the good ones could be separated, maybe for sharing with others.

I have just been on a trip where I took quite some pictures. I could have gone over the pictures and manually copied the good ones into a separate folder for sharing with friends. This would have been a bit boring, but it would only have taken about five minutes. As a programmer I of course selected to optimize this task and spent some hours recreating the program I had once used. After a thousand trips or so I will come out ahead in terms of time spent!

The program looks like this:

Picster GUI

I named it Picster, short for Picture Sorter. There is, of course, at least one other programs with that name already, but I cannot be bothered to find something better at the moment, It's just a script, after all. It is meant to be used from the keyboard, but there are also buttons for all possible actions (moving between images, categorizing images, and sorting images on disk based on category information).

All of the GUI coding I do at work is scientific visualization, mostly using Python 2 and the wx library in some way. To try something slightly different I went with Python 3 and Qt for this program. I cannot really call myself an expert in Qt after only a couple of hours and the Picster code is probably not how a Qt expert would have written it, but it seems to work OK.

From this brief encounter, Python Qt code seems to be a bit more verbose and tedious compared to wxPython. For example Qt/PySide is missing the nice init arguments, so all properties on an object must be set after creation through method calls. The API is not very pythonic with no use of Python properties as far as I understood. I am also missing docstring help on class and method name completion in Eclipse PyDev :-(

Also missing as far as I understood is the wxPython ability to bind to any event from anywhere. To listen for keystrokes or window size change for example you must override virtual methods. For now I am happy with using wx at work. The Qt documentation that was rumored to be fabulous seems quite on the same level of the wx documentation as well.

What I really liked about Qt was the Layouts which work almost exactly like Sizers in wx, except that they come with a sensible default spacing of widgets. This is a sore spot in laying out wx interfaces and always needs manual intervention to look good.

Enough mostly unqualified statements about Qt vs. wx, here's the code for anyone interested in a picture sorting program. The code requires Python (probably works in versions 2 and 3, tested in 3.2) and PySide for Python bindings to Qt.

Tagged as: Code Images English

En beretning om blindhet - José Saramago

En beretning om blindhet er en flott fortalt historie om et samfunn som faller fra hverandre. Dette er enda en "hva hvis" fortelling slik som Dødens uteblivelse. Denne gangen er det en epidemi av blindhet som sprer seg og setter verden på hodet for innbyggerne i et uspesifisert land. Ingen unnslipper utenom kona til øyenlegen som undersøker den første smittede blinde. Historien utspiller seg på et asyl for smittede der forholdene gradvis forverrer seg for de som holdes der av myndighetene. Den seende kona gjør så godt hun kan, men barbarismen sprer seg raskt når det blir lenge nok siden forrige varme måltid.

I motsetning til Dødens uteblivelse er samfunnets og enkeltmenneskenes reaksjoner bedre beskrevet og mer troverdige i denne fortellingen. En del er kanskje satt på spissen, men fortvilelsen, volden, frykten og maktløsheten er til å ta og føle på og jeg blir revet med av enkeltpersonenes skjebner og personligheter.

Jeg er fremdeles ikke noen stor fan av Saramagos uendelig lange og snirklete setninger. Det er heldigvis mer enn dem som skiller dette fra en ti på dusinet spenningsbok, så jeg ser ikke helt poenget i å tvære ut språket og trekke ned tempoet så mye som Saramago gjør. Boka hadde blitt høyere anbefalt av meg hvis den kunne leses på en fornuftig mengde tid og i litt lengre strekk. Slik den er nå må jeg ha pauser og mister fort litt av interessen. Sett bort fra det tunge språket er En beretning om blindhet en fin fortelling.

Sertig, Davos

Sertig, Davos

Tagged as: Bøker José Saramago

The Gardens of the Moon - Steven Erikson

Steven Eriksons bokserie Malazan Book of the Fallen er en av de store milepælene innen moderne episk fantasy såvidt jeg har forstått. Gardens of the Moon er den første boka i serien, som fremdeles ikke er helt ferdig, men som allerede består av ni bøker av ti totalt.

Det er mye jeg liker med denne boka. Erikson er flink til å lage gode hovedpersoner, det er et intrikat plott og handlingen og motivene er ikke svart/hvit. Dette er alle veldig gode egenskaper ved en episk fantasybok. Likevel vet jeg ikke helt om jeg kommer til å lese mer av denne serien. Hele settingen er veldig mørk. Det foregår en endeløs, stor krig. Det hele virker håpløst og døden er alltid like rundt hjørnet. Jeg er ikke helt sikker på at jeg greier å tro på en slik historie og menneskene som velger å fortsette i samme spor når de har mulighet til å komme seg unna og gjøre noe annet. Det hele blir litt for håpløst for meg til tider.

Estenstadmarka

Fra Estenstadmarka

Tagged as: Bøker Steven Erikson

Papercut

Apropos døden og som en påminnelse om at noen mennesker er hakket mer kreative enn andre

Looking back av Peter Callesen

Bilde av fancy papirkunst
Tagged as: Døden Kunst