def global_min(narray): "Returns the minimum value of an array of scalars/vectors/tensors among all process." m = min(narray).astype(numpy.float64) if vtkProcessModule.GetProcessModule().GetNumberOfLocalPartitions() > 1 : from mpi4py import MPI MPI.COMM_WORLD.Allreduce(None, [m, MPI.DOUBLE], MPI.MIN) return m
def global_mean (narray) : "Returns the mean value of an array of scalars/vectors/tensors among all process." # For some reason, Allreduce on MPI.INT does not return the correct value. # I have to convert it into a double array to get the correct results. dim = narray.shape[1] if len(narray.shape) == 3 : dim = narray.shape[1] * narray.shape[2] N = numpy.empty(dim).astype(numpy.float64) N.fill(narray.shape[0]) S = narray.sum(0).astype(numpy.float64) if len(S.shape) == 2 and S.shape[0] == 3 and S.shape[1] == 3: S = numpy.reshape(S, 9) elif len(S.shape) == 3 and S.shape[0] == 1 and S.shape[1] == 3 and S.shape[2] == 3: S = numpy.reshape(S, 9) if vtkProcessModule.GetProcessModule().GetNumberOfLocalPartitions() > 1 : from mpi4py import MPI comm = MPI.COMM_WORLD S_recv = numpy.array(S) N_recv = numpy.array(N) comm.Allreduce([S, MPI.DOUBLE], [S_recv, MPI.DOUBLE],MPI.SUM) comm.Allreduce([N, MPI.DOUBLE], [N_recv, MPI.DOUBLE],MPI.SUM) S = S_recv N = N_recv return S / N
def global_min(narray): "Returns the minimum value of an array of scalars/vectors/tensors among all process." if len(narray) > 0: m = min(narray).astype(numpy.float64) else: m = numpy.finfo(numpy.float64).max if vtkProcessModule.GetProcessModule().GetNumberOfLocalPartitions() > 1 : from mpi4py import MPI m_recv = numpy.array(m) MPI.COMM_WORLD.Allreduce([m, MPI.DOUBLE], [m_recv, MPI.DOUBLE], MPI.MIN) m = m_recv return m
def global_max(narray): "Returns the maximum value of an array of scalars/vectors/tensors among all process." if len(narray) > 0: M = max(narray).astype(numpy.float64) else: M = numpy.finfo(numpy.float64).min if vtkProcessModule.GetProcessModule().GetNumberOfLocalPartitions() > 1 : from mpi4py import MPI M_recv = numpy.array(M) MPI.COMM_WORLD.Allreduce([M, MPI.DOUBLE], [M_recv, MPI.DOUBLE], MPI.MAX) M = M_recv return M
# "Vendor: NVIDIA Corporation" # "Version: 4.5.0 NVIDIA 375.66" # "Renderer: Tesla P100-PCIE-16GB/PCIe/SSE2" view = GetRenderView() sphere = Sphere() sphere.ThetaResolution = 2048 sphere.PhiResolution = 2048 pidscal = ProcessIdScalars(sphere) rep = Show(pidscal) from vtkPVClientServerCoreCorePython import vtkProcessModule print("rank=", vtkProcessModule.GetProcessModule().GetPartitionId()) print("total=", vtkProcessModule.GetProcessModule().GetNumberOfLocalPartitions()) nbprocs = servermanager.ActiveConnection.GetNumberOfDataPartitions() drange = [0, nbprocs-1] lt = MakeBlueToRedLT(drange[0], drange[1]) lt.NumberOfTableValues = nbprocs rep.LookupTable = lt rep.ColorArrayName = ("POINT_DATA", "ProcessId") bar = CreateScalarBar(LookupTable=lt, Title="PID") bar.TitleColor = [0, 0, 0] bar.LabelColor = [0, 0, 0] # bar.NumberOfLabels = 6 view.Representations.append(bar)