source: inundation/parallel/documentation/code/RunParallelAdvection.py @ 2950

Last change on this file since 2950 was 2909, checked in by linda, 19 years ago

The parallel listed in the documentation is stored in the documentation/code directory

  • Property svn:executable set to *
File size: 2.8 KB
Line 
1#!/usr/bin/env python
2###
3#########################################################
4#
5#  Main file for parallel mesh testing. Runs an advection
6# flow simulation using a rectangular mesh
7#
8#
9#  Authors: Steve Roberts June 2005
10#  Modified by Linda Stals April 2006
11#
12#
13#########################################################
14
15
16import sys
17from os import sep
18sys.path.append('..'+sep+'pyvolution')
19sys.path.append('..'+sep+'parallel')
20
21# Parallel communication routines
22
23import pypar
24
25#  Mesh partition routines
26
27from parallel_meshes import parallel_rectangle
28
29# Parallel Domain
30 
31from parallel_advection import Parallel_Domain
32from parallel_advection import Transmissive_boundary
33
34############################
35# Set the initial conditions
36############################
37class Set_Stage:
38    """Set an initial condition with constant water height, for x<x0
39    """
40
41    def __init__(self, x0=0.25, x1=0.5, h=1.0):
42        self.x0 = x0
43        self.x1 = x1
44        self.= h
45
46    def __call__(self, x, y):
47        return self.h*((x>self.x0)&(x<self.x1))
48
49###############################
50# Read in processor information
51###############################
52
53numprocs = pypar.size()
54myid = pypar.rank()
55processor_name = pypar.Get_processor_name()
56
57N = 20
58M = 20
59
60#######################
61# Partition the mesh
62#######################
63
64# Build a unit mesh, subdivide it over numproces processors with each
65# submesh containing M*N nodes
66
67points, vertices, boundary, full_send_dict, ghost_recv_dict =  \
68    parallel_rectangle(N, M, len1_g=1.0)
69
70###########################################
71# Start the computations on each subpartion
72###########################################
73
74# Create advection domain with direction (1,-1)
75# Initial condition is zero by default
76
77domain = Parallel_Domain(points, vertices, boundary,
78                         full_send_dict, ghost_recv_dict, velocity=[1.0, 0.0])
79
80# Turn on the visualisation
81
82rect = [0.0, 0.0, 1.0, 1.0]
83domain.initialise_visualiser(rect=rect)
84
85# Boundaries
86
87T = Transmissive_boundary(domain)
88domain.default_order = 2
89domain.set_boundary( {'left': T, 'right': T, 'bottom': T, 'top': T, \
90                      'ghost': None} )
91
92# Ensure that the domain definitions make sense
93
94domain.check_integrity()
95
96# Set the inititial conditions
97
98domain.set_quantity('stage', Set_Stage(0.2,0.4,1.0))
99
100# Let processor 0 output some timing information
101
102if myid == 0:
103    import time
104    t0 = time.time()
105
106# Start the evolve computions
107
108for t in domain.evolve(yieldstep = 0.1, finaltime = 3.0):
109    if myid == 0:
110        domain.write_time()
111
112# Output some computation statistics
113
114if myid == 0:
115    print 'That took %.2f seconds' %(time.time()-t0)
116    print 'Communication time %.2f seconds'\
117          %domain.communication_time
118    print 'Reduction Communication time %.2f seconds'\
119          %domain.communication_reduce_time
Note: See TracBrowser for help on using the repository browser.