def sequential_distribute_load_pickle_file(pickle_name, np=1, verbose = False): """ Open pickle files """ f = open(pickle_name, 'rb') import pickle kwargs, points, vertices, boundary, quantities, boundary_map, \ domain_name, domain_dir, domain_store, domain_store_centroids, \ domain_minimum_storable_height, domain_minimum_allowed_height, \ domain_flow_algorithm, domain_georef, \ domain_quantities_to_be_stored, domain_smooth, \ domain_low_froude = pickle.load(f) f.close() for k in quantities: quantities[k] = num.load(quantities[k]) points = num.load(points) vertices = num.load(vertices) #--------------------------------------------------------------------------- # Create domain (parallel if np>1) #--------------------------------------------------------------------------- if np>1: domain = Parallel_domain(points, vertices, boundary, **kwargs) else: domain = Domain(points, vertices, boundary, **kwargs) #------------------------------------------------------------------------ # Copy in quantity data #------------------------------------------------------------------------ for q in quantities: domain.set_quantity(q, quantities[q]) #------------------------------------------------------------------------ # Transfer boundary conditions to each subdomain #------------------------------------------------------------------------ boundary_map['ghost'] = None # Add binding to ghost boundary domain.set_boundary(boundary_map) #------------------------------------------------------------------------ # Transfer other attributes to each subdomain #------------------------------------------------------------------------ domain.set_name(domain_name) domain.set_datadir(domain_dir) domain.set_flow_algorithm(domain_flow_algorithm) domain.set_low_froude(domain_low_froude) domain.set_store(domain_store) domain.set_store_centroids(domain_store_centroids) domain.set_minimum_storable_height(domain_minimum_storable_height) domain.set_minimum_allowed_height(domain_minimum_allowed_height) domain.geo_reference = domain_georef domain.set_quantities_to_be_stored(domain_quantities_to_be_stored) domain.smooth = domain_smooth return domain
def distribute(domain, verbose=False, debug=False, parameters=None): """ Distribute the domain to all processes parameters allows user to change size of ghost layer """ if not pypar_available or numprocs == 1: return domain # Bypass if myid == 0: from sequential_distribute import Sequential_distribute partition = Sequential_distribute(domain, verbose, debug, parameters) partition.distribute(numprocs) kwargs, points, vertices, boundary, quantities, boundary_map, \ domain_name, domain_dir, domain_store, domain_store_centroids, \ domain_minimum_storable_height, domain_minimum_allowed_height, \ domain_flow_algorithm, domain_georef, \ domain_quantities_to_be_stored, domain_smooth \ = partition.extract_submesh(0) for p in range(1, numprocs): tostore = partition.extract_submesh(p) send(tostore, p) else: kwargs, points, vertices, boundary, quantities, boundary_map, \ domain_name, domain_dir, domain_store, domain_store_centroids, \ domain_minimum_storable_height, domain_minimum_allowed_height, \ domain_flow_algorithm, domain_georef, \ domain_quantities_to_be_stored, domain_smooth \ = receive(0) #--------------------------------------------------------------------------- # Now Create parallel domain #--------------------------------------------------------------------------- parallel_domain = Parallel_domain(points, vertices, boundary, **kwargs) #------------------------------------------------------------------------ # Copy in quantity data #------------------------------------------------------------------------ for q in quantities: try: parallel_domain.set_quantity(q, quantities[q]) except KeyError: #print 'Try to create quantity %s'% q from anuga import Quantity Q = Quantity(parallel_domain, name=q, register=True) parallel_domain.set_quantity(q, quantities[q]) #------------------------------------------------------------------------ # Transfer boundary conditions to each subdomain #------------------------------------------------------------------------ boundary_map['ghost'] = None # Add binding to ghost boundary parallel_domain.set_boundary(boundary_map) #------------------------------------------------------------------------ # Transfer other attributes to each subdomain #------------------------------------------------------------------------ parallel_domain.set_flow_algorithm(domain_flow_algorithm) parallel_domain.set_name(domain_name) parallel_domain.set_datadir(domain_dir) parallel_domain.set_store(domain_store) parallel_domain.set_store_centroids(domain_store_centroids) parallel_domain.set_minimum_storable_height(domain_minimum_storable_height) parallel_domain.set_minimum_allowed_height(domain_minimum_allowed_height) parallel_domain.geo_reference = domain_georef parallel_domain.set_quantities_to_be_stored(domain_quantities_to_be_stored) parallel_domain.smooth = domain_smooth return parallel_domain
def distribute(domain, verbose=False, debug=False, parameters = None): """ Distribute the domain to all processes parameters allows user to change size of ghost layer """ if not pypar_available or numprocs == 1 : return domain # Bypass if myid == 0: from sequential_distribute import Sequential_distribute partition = Sequential_distribute(domain, verbose, debug, parameters) partition.distribute(numprocs) kwargs, points, vertices, boundary, quantities, boundary_map, \ domain_name, domain_dir, domain_store, domain_store_centroids, \ domain_minimum_storable_height, domain_minimum_allowed_height, \ domain_flow_algorithm, domain_georef, \ domain_quantities_to_be_stored, domain_smooth \ = partition.extract_submesh(0) for p in range(1, numprocs): tostore = partition.extract_submesh(p) send(tostore,p) else: kwargs, points, vertices, boundary, quantities, boundary_map, \ domain_name, domain_dir, domain_store, domain_store_centroids, \ domain_minimum_storable_height, domain_minimum_allowed_height, \ domain_flow_algorithm, domain_georef, \ domain_quantities_to_be_stored, domain_smooth \ = receive(0) #--------------------------------------------------------------------------- # Now Create parallel domain #--------------------------------------------------------------------------- parallel_domain = Parallel_domain(points, vertices, boundary, **kwargs) #------------------------------------------------------------------------ # Copy in quantity data #------------------------------------------------------------------------ for q in quantities: try: parallel_domain.set_quantity(q, quantities[q]) except KeyError: #print 'Try to create quantity %s'% q from anuga import Quantity Q = Quantity(parallel_domain, name=q, register=True) parallel_domain.set_quantity(q, quantities[q]) #------------------------------------------------------------------------ # Transfer boundary conditions to each subdomain #------------------------------------------------------------------------ boundary_map['ghost'] = None # Add binding to ghost boundary parallel_domain.set_boundary(boundary_map) #------------------------------------------------------------------------ # Transfer other attributes to each subdomain #------------------------------------------------------------------------ parallel_domain.set_flow_algorithm(domain_flow_algorithm) parallel_domain.set_name(domain_name) parallel_domain.set_datadir(domain_dir) parallel_domain.set_store(domain_store) parallel_domain.set_store_centroids(domain_store_centroids) parallel_domain.set_minimum_storable_height(domain_minimum_storable_height) parallel_domain.set_minimum_allowed_height(domain_minimum_allowed_height) parallel_domain.geo_reference = domain_georef parallel_domain.set_quantities_to_be_stored(domain_quantities_to_be_stored) parallel_domain.smooth = domain_smooth return parallel_domain