source: inundation/parallel/run_parallel_advection_prof.py @ 3085

Last change on this file since 3085 was 3041, checked in by jack, 19 years ago

Added a script to quickly view hotshot format profiles, and the test script
for a profiled advection scenario.

  • Property svn:executable set to *
File size: 3.1 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
82# rect = [0.0, 0.0, 1.0, 1.0]
83# domain.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
107import hotshot
108profiler = hotshot.Profile("hotshot." + str(numprocs) + "." + str(myid) + ".prof")
109s = '''for t in domain.evolve(yieldstep = 0.1, finaltime = 10):
110  if myid == 0:
111    domain.write_time()
112'''
113
114result = profiler.runctx(s, globals(), locals())
115profiler.close()
116
117# for t in domain.evolve(yieldstep = 0.1, finaltime = 3.0):
118#     if myid == 0:
119#         domain.write_time()
120
121# Output some computation statistics
122
123if myid == 0:
124    print 'That took %.2f seconds' %(time.time()-t0)
125    print 'Communication time %.2f seconds'\
126          %domain.communication_time
127    print 'Reduction Communication time %.2f seconds'\
128          %domain.communication_reduce_time
Note: See TracBrowser for help on using the repository browser.