Last updated, 2008.04.18

Parallelized POM, Ver.1.0

Miyazawa, Yasumasa (FRCGC-JAMSTEC)

I have modified the POM08 codes provided by G.L.Mellor. The POM08 describes an wave-ocean coupling model (Mellor et al., 2008). I re-orgnized POM08 to clearly distingish common parts describing basic dynamics and local settings for specific problem. I used inter-processors communication tools using MPI subroutines developed by NEC engineers (Miyazawa et al., 2001). The present version includes only parallelization using MPI. Next version will include nesting subroutines using MPI, which allow on-line connection between coarse and fine grid models. Also, I will update this text to include detalied descriptions of MPI subroutines etc.

The parallelized POM is composed of the following files:

Users modify only 'settings.wave_seamount.f' in most cases.

Following include files are necessary for compilation of the parallelized pom.

A main program (pom08_main.F) of the parallelized POM is orgnized as folows:

  1. call init_proc    ; initilize MPI processes

  2. Changing working directories for each process (PE-00, PE-01, PE-02,...)

  3. call pom_init     ; initilize POM variables

  4. call init_model   ; create model grids, topography, and other settings 
                       ; for specific simulation problem  

  5. call pom_mainloop ; invoke the main loop of POM

  6. call fin_proc     ; finalize MPI procsses

I performed test runs on SGI/Altix4700(Intel Itanium2) for 1, 2, 4 MPI processes.

Example of Makefile for 4 MPI processes:

#  Makefile for POM08 parallelized by MPI
#

DEFS    = -D_NPROCS=4 -DSTANDALONE
.....

Preliminary results of performance check:

#define _POM_IM 42		/* # of grids for longitude */
#define _POM_JM 24		/* # of grids for latitude  */
#define _POM_KB 21      	/* # of sigma levels */
> time mpirun -np 2 pom08.seamount.x < /dev/null &
> 426.596u 156.168s 4:54.52 197.8% 0+0k 0+0io 0pf+0w
> time pom08.seamount.x &
> 390.184u 178.648s 9:29.04 99.9% 0+0k 0+0io 1pf+0w

#define _POM_IM 42		/* # of grids for longitude */
#define _POM_JM 26		/* # of grids for latitude  */
#define _POM_KB 21      	/* # of sigma levels */
> time mpirun -np 4 pom08.seamount.x < /dev/null &
>589.168u 183.648s 3:18.01 390.2%        0+0k 0+0io 8pf+0w
> time pom08.seamount.x &
> 428.052u 199.652s 10:29.79 99.6%        0+0k 0+0io 0pf+0w

#define _POM_IM 82              /* # of grids for longitude */
#define _POM_JM 82              /* # of grids for latitude  */
#define _POM_KB 21              /* # of sigma levels */
> time mpirun -np 4 pom08.seamount.x < /dev/null &
> 3944.388u 1433.040s 22:46.46 393.5%     0+0k 0+0io 23pf+0w
> time pom08.seamount.x &
> 4413.612u 1342.088s 1:35:55.95 99.9%    0+0k 0+0io 8pf+0w

You can download A ZIP file of Ver.1.0 [3.4MB]

After you modify compile/link options described in Makefile for your comilers supporting MPI on your operating systems, you should make all objects.

Reports of bugs found or performance measured on your computers are very welcome.

References