#!/usr/bin/env python ### # Same as run_parallel_sw_merimbula.py, but uses pmesh_divide_metis # to partition the mesh. ######################################################### # # Main file for parallel mesh testing. # # This is a modification of the run_parallel_advection.py # file. # # *) The test files currently avaliable are of the form # test*.out, eg test_5l_4c.out. The term infront of the l # corresponds to the number of levels of refinement # required to build the grid, i.e. a higher number # corresponds to a finer grid. The term infront of the c # corresponds to the number of processors. # # *) The (new) files that have been added to manage the # grid partitioning are # +) pmesh_divide.py: subdivide a pmesh # +) build_submesh.py: build the submeshes on the host # processor. # +) build_local.py: build the GA mesh datastructure # on each processor. # +) build_commun.py: handle the communication between # the host and processors # # *) Things still to do: # +) Overlap the communication and computation: The # communication routines in build_commun.py should be # interdispersed in the build_submesh.py and build_local.py # files. This will overlap the communication and # computation and will be far more efficient. This should # be done after more testing and there more confidence in # the subpartioning. # +) Much more testing especially with large numbers of # processors. # Authors: Linda Stals, Steve Roberts and Matthew Hardy, # June 2005 # # # ######################################################### import sys import pypar # The Python-MPI interface import time from os import sep sys.path.append('..'+sep+'pyvolution') from Numeric import array # pmesh #from shallow_water import Domain from shallow_water import Domain from parallel_shallow_water import Parallel_Domain # mesh partition routines from pmesh_divide import pmesh_divide_metis from build_submesh import * from build_local import * from build_commun import * from pmesh2domain import pmesh_to_domain_instance # read in the processor information numprocs = pypar.size() myid = pypar.rank() processor_name = pypar.Get_processor_name() #------- # Domain rect = zeros( 4, Float) # Buffer for results class Set_Stage: """Set an initial condition with constant water height, for xself.x0)&(x