'-fopenmp' , '-lmpi', '-ldl', '-lhwloc', '-O3', '-ffast-math' ] install_requires = [ 'numpy==1.8.2', 'cython>=0.20.0', 'mpi4py==1.3.1' ] include_dirs = env_or_default( 'MPI_INCLUDES', '/usr/lib/openmpi/include;/usr/lib/openmpi/include/openmpi' ).split(';') + [ numpy.get_include(), mpi4py.get_include() ] _extra_link_args = [ '-fopenmp', '-lmpi' ] print(include_dirs) extensions = [ Extension('segments', sources = ['./src/segments.pyx'],
def main(): from time import time from itertools import count from numpy import pi from numpy.random import random from modules.growth import spawn_curl from modules.utils import get_exporter from modules.helpers import env_or_default from modules.helpers import print_stats from differentialLine import DifferentialLine comm = MPI.COMM_WORLD nodes = comm.Get_size() rank = comm.Get_rank() if rank == 0: size = env_or_default('SIZE', SIZE) nmax = env_or_default('NMAX', NMAX) one = 1.0/size export_itt = env_or_default('EXPORT_ITT', EXPORT_ITT) stat_itt = env_or_default('STAT_ITT', STAT_ITT) data = { 'size': size, 'nmax': nmax, 'vmax': env_or_default('VMAX', NMAX), 'procs': env_or_default('PROCS', PROCS), 'nodes': nodes, 'prefix': env_or_default('PREFIX', PREFIX), 'ninit': env_or_default('NINIT', NINIT), 'rad': env_or_default('RAD', RAD), 'one': one, 'stp': env_or_default('STP', STP)*one, 'nearl': env_or_default('NEARL', NEARL)*one, 'farl': env_or_default('FARL', FARL)*one } else: data = None data = comm.bcast(data, root=0) DF = DifferentialLine( data['nmax'], zonewidth = data['farl'], nearl = data['nearl'], farl = data['farl'], procs = data['procs'], nodes = data['nodes'] ) if rank == 0: angles = sorted(random(data['ninit'])*pi*2) DF.init_circle_segment(0.5, 0.5, data['rad'], angles) t_start = time() do_export = get_exporter(nmax, t_start) for i in count(): DF.optimize_position(data['stp']) if DF.get_vnum()>data['vmax']: if rank == 0: do_export(DF, data, i, final=True) return if rank == 0: spawn_curl(DF,data['nearl']) if i % stat_itt == 0: print_stats(i,time()-t_start,DF) if i % export_itt == 0: do_export(DF, data, i)