print('importo0') import numpy as np #import petsc4py print('importo1') import math import time #from mpi4py import MPI from tools.postprocessK.kperm.computeFlows import * print('importo2') print('importo4') from tools.postprocessK.flow import getKeff import sys def PetscP(datadir,ref,k,saveres,Rtol,comm): from petsc4py import PETSc #petsc4py.init('-ksp_max_it 9999999999') print('importo3') if comm==0: pcomm=PETSc.COMM_SELF rank=0 pn=1 else: pcomm=PETSc.COMM_WORLD rank=pcomm.rank pn=pcomm.size t0=time.time() if pn==1: if not isinstance(k,np.ndarray): k = np.load(datadir+'k.npy') if k.shape[2]==1: refz=1 else: refz=ref nz, ny, nx=k.shape[0]*ref,k.shape[1]*ref,k.shape[2]*refz n=nx*ny*nz K = PETSc.Mat().create(comm=pcomm) K.setType('seqaij') K.setSizes(((n,None),(n,None))) # Aca igual que lo que usas arriba K.setPreallocationNNZ(nnz=(7,4)) # Idem anterior K.setUp() R = PETSc.Vec().createSeq((n,None),comm=pcomm) #PETSc.COMM_WORLD R.setUp() k2, Nz, nnz2=getKref(k,1,2,ref) k, Nz, nnz=getKref(k,0,2,ref) pbc=float(Nz) K,R = firstL(K,R,k,pbc) r=(k.shape[1]-2)*(k.shape[2]-2)*nnz2 #start row K,R =lastL(K,R,k2,r) k2=0 else: if not isinstance(k,np.ndarray): k = np.load(datadir+'k.npy') k, Nz, nnz=getKref(k,rank,pn,ref) pbc=float(Nz) nz, ny, nx=(k.shape[0]-2),(k.shape[1]-2),(k.shape[2]-2) n=nx*ny*nz K = PETSc.Mat().createAIJ(((n,None),(n,None)), nnz=(7,4), comm=pcomm) K.setUp() R = PETSc.Vec().createMPI((n,None),comm=pcomm) R.setUp() r=nx*ny*nnz*rank #start row if rank==0: K,R = firstL(K,R,k,pbc) if (rank>0) and (rank