#!/usr/bin/env python

__author__ = "Anders Logg (logg@simula.no)"
__date__ = "2010-05-03"
__copyright__ = "Copyright (C) 2010 " + __author__
__license__  = "GNU LGPL Version 2.1"

import commands

print "Assembly/solve speedup running on 4 processors"

# Parameters for benchmark
SIZE = 64
NUM_PROCS = 4

# Function for extracting time from benchmark
def get_time(output):
    lines = [line for line in output.split("\n") if "TIME:" in line]
    if not len(lines) == 1:
        print output
        raise RuntimeError, "Not exactly one timing in benchmark."
    return float(lines[0].split("TIME:")[1])

# Serial assembly
output = commands.getoutput("./assemble-poisson %d" % SIZE)
assembly_t1 = get_time(output)
print "Serial assembly:", assembly_t1

# Parallel assembly
output = commands.getoutput("mpirun -n %d ./assemble-poisson %d" % (NUM_PROCS, SIZE))
assembly_t2 = get_time(output)
print "Parallel assembly:", assembly_t2

# Serial solve
output = commands.getoutput("./solve-poisson %d" % SIZE)
solve_t1 = get_time(output)
print "Serial solve:", solve_t1

# Parallel solve
output = commands.getoutput("mpirun -n %d ./solve-poisson %d" % (NUM_PROCS, SIZE))
solve_t2 = get_time(output)
print "Parallel solve:", solve_t2

# Report results
print "BENCH assembly", assembly_t1 / assembly_t2
print "BENCH solve", solve_t1 / solve_t2
