def convert_from(cls, original_impeller, suc=None, find="speed", speed=None): """Convert performance map from an impeller. Parameters ---------- original_impeller : ccp.Impeller The original impeller. suc : ccp.State The new suction condition to which we want to convert to. find : str, optional The method in which the curves will be converted. For now only 'speed' is implemented, which means that, based on volume ratio, we calculate new values of speed for each curve and the respective discharge condition. speed : float, pint.Quantity, optional Desired speed. If find="speed", this should be None. Returns ------- converted_impeller : ccp.Impeller The new impeller with the converted performance map for the required suction condition. """ all_converted_points = [] for curve in original_impeller.curves: with multiprocessing.Pool() as pool: converter_args = [(p, suc, find) for p in curve] converted_points = pool.map(converter, converter_args) if speed is None: speed_mean = np.mean( [p.speed.magnitude for p in converted_points]) converted_points = [ Point.convert_from( p, suc=p.suc, find="volume_ratio", speed=speed_mean, ) for p in converted_points ] all_converted_points += converted_points return cls(all_converted_points)
def converter(x): """Helper function used to parallelize conversion of points.""" point, suc, find = x return Point.convert_from(point, suc=suc, find=find)