Hi Daniel, That's very nice! However, one suggestion for this implementation: why not just run each image as a separate siesta calculation in parallel, one image after the other, over the processors that have been allocated? For example, suppose you do a NEB with 8 images, each of which with 150 atoms which could deserve, say, a run in 8 processors (meaning: scaling would be good for each image on 8 processors). Then, you could run image 1 on 8 processors, then image 2 on eight processors after image 1 is done, image 3 after image 2 and so on, then start the next NEB step.
This would avoid the following awkward situation that could arise when you parallelize images over processors: each image will take a certain number of SCF steps to converge, and there is no reason to suppose that all of them will take the same number. On the contrary, I would guess that the images closer to the transition state could be harder to converge than the ones close to the initial and final states. Therefore, in the extreme case in which, say, image number 5 takes 20 times the number of steps it takes to converge image 1 in a given NEB step, you will have processors idle for the time it takes image 5 to converge. If you run images one after the other, as individual siesta calculations in parallel, you avoid having idle processors - which WILL happen in this case, only likely to be not as extreme as I have exemplified. Cheers, Marcos On Wed, Nov 4, 2009 at 3:56 PM, Backlund, Daniel <[email protected]> wrote: > > Hello SIESTA community, > > I am in the process of writing an implementation of the > Nudged Elastic Band method for SIESTA (2.0.2). I have a pretty good > idea of how I am going to program the modules and and merge > it with the current version, but I have no MPI programming > experience. I am not too worried about this as I am able to > view existing code and adjust pretty well for what I want to > do. I am just one issue, I do not know exactly how to distribute > the images to the nodes (processors). > > A quick intro to the Nudged Elastic Band (NEB). The NEB is used > to find the transition state between an initial and final > configuration. A NEB job would consist of a set of N interpolated > "image" geometric configurations between an initial and final > configuration. Each of the images are linked to each of their two > neighbors by a virtual spring force. The job would be run in > parallel with each processor handling a number of images. > > My plan is to prepare each of the images before running the job > in sequential directories (i.e. NEB00, NEB01, ... , NEB0N) which > are located in a working directory from which SIESTA will be called. > So when SIESTA is run, it will read the number of images from the > FDF file and will go into each directory and distribute each image > to a processor. This is where I run into problems. > > In my fortran source file, I am creating a module which contains the > necessary subroutines to initalise this chain of images linked with > springs as well as routines to calculate forces and tangents between > images. I have the appropriate "#ifdef MPI" lines, but I need some > help using SIESTA's implemented MPI structure. I assume I need to > use the mpi_siesta and m_mpi_utils modules, but I help broadcasting > the images to the nodes. Like I said, I do not know how to program > with MPI and if anybody could offer some advice I would very much > appreciate it. When I complete my implementation of the NEB, I will > gladly share it with this community. > > Thanks, > > Daniel J. Backlund > Texas Tech University - Physics > [email protected]
