Skip to main content

Posts

Ocean's beauties

from: www.fubiz.net/2011/04/06/underwater-experiments/

Why Thinking is important

This week I went to the dentist for a routine check-up. By inspecting his waiting room I should have guessed that my dentist was a Jeovah witness. The book questioning the existence of pardise should have warned me. After a while the dentist came in and I sat in the scary chair with pipes and syringes all over. I looked at my wisdom teeth that I should remove because there is no place left for them in my mouth. I mean really no place, one is pushing against my jaw and it make a terrible infection. The dentist began to explain me that I should open my mind, that I should make some work upon myself and give a place to those teeth, that they were here for a REASON. It was not a matter of surgery, just a matter of faith and self opening to the world. Seeing that I was more and more sceptical, he mistakingly took the example of homepathy to explain me that OTHER WAYS exist. "Yeah, I replied, I know that. It's the placebo effect. But it work only if you believe it". At that p...

We're not playing dices !

Software programming and design is an amazingly complex task. Specially when it concerns numerical applications, that generally require optimization to get results in a reasonable time. For that purpose the basic pattern is usually to write the code as simple as possible, debug it and when it works to begin the optimization process. This asks for some nerves, and patience, two things I usually don't have in real life , but for programming yes. This design pattern makes sense because we are doing things really sequentially. You first wrote some c++ class and then add some feature progressively, and when you come up with essentially different concept (I mean a concept that should be well separated from the first one), you write an other class and so on... Usually the class-writing process follows the solving process you have in mind. For instance you have to make some initialization on your model first, then you declare some variables for the computation, the computation then f...

My Desk is an Optimal Container

When you do informatics codes, sooner or later you are concerned with data containers and their associated complexities for inserting, getting, sorting or whatsoever. Some of them are lists, vectors, map, set etc... Sometimes you use a container for some stuff and you get unexpected low behavior. Then you go into your manager's office and ask for complexity of what you are doing. By the way, he convinces you that you are the last of the idiots of computer scientists (thing I take as an honor), and you just change your container. But the people who are working on containers (have you ever looked to the STL (standard template library) to see how containers are implemented ? Not sure those people are human...) should try to investigate how my desk is working. It is very messy, there is a lot of stuff on it (even food sometimes) but I always find my items in a constant time . Well, almost always. Notably when someone put it in order (presumably the housekeeper or some terribly i...

2+2 = 5

Bertrand Russel used humour to show that whatever is logical is not necessary true. He was saying the following Do you pretend that if 2+2=5, then Bertrand Russel is the pope ? Suppose that 2+2=5 Let's substract 2 from each side, then 2=3 By symmetry we have 3=2 If you substract 1 on both sides, 2=1 Now the pope and I are two distinct people, since 2=1 the Pope and Russel are one.

MultiThreading and Direct Solvers

The next step towards an efficient Hybrid Solver is to optimize the computation of the Schur complement on each subdomain. Actually this part of the algorithm is the slowest, and it can be very slow. First of all the reordering is special, since the degrees of freedom on the interior must be numbered first. I use the CAMD ordering by Tim Davis and al., that provide satisfaying enough orderings. After that, I am concentrating on the code that computes the Schur complement. There is much work to do here. At the begining I was thinking about using MUMPS for this, since it has a subroutine for Schur complement computation and it is multithreaded. By googling around I found there is may be a (slightly) better solution, that would be to implement a sparse Cholesky solver based on the Direct Acyclic Graph (DAG) of the tasks. The computational tasks and their dependencies are expressed as an acyclic graph which is used to organize the thread hierachy to compute the Cholesky decompositio...

Hybrid Solvers

For the moment, I am developing an Non-Overlapping Domain Decomposition Hybrid Solver for scalar PDE in 2D/3D domains. It decomposes the underlying mesh into regions, solves the Schur Complement System onto frontier nodes between regions and then solves the problem into each inner region nodes. This type of solver is said to be HYBRID because the Schur complement system is solved by a preconditioned iterative method whereas the inner problems are solved by a direct method. So it mixes the approach. However it requires less memory (and possibly time) than any direct solvers and in the same time suffer less of bad conditioning than iterative ones (the Schur complement system is well conditioned in that case). This technique allows to split computation easily since each regions are more or less independent during all the process. It has been used with success on computer clusters, and I wish to use it with shared memory paradigm in mind to solve huge systems on (relatively modes...