Skip to content
Snippets Groups Projects
Commit ca39adc9 authored by Eric Dalissier's avatar Eric Dalissier
Browse files

correction of np.vectorize problem which use C storage

parent f1458a52
No related branches found
No related tags found
No related merge requests found
......@@ -218,6 +218,9 @@ class VectorField(object):
self.data[0], self.data[1], self.data[2] = v_formula(self.topology.mesh.coords[0],
self.topology.mesh.coords[1],
self.topology.mesh.coords[2])
self.data[0] = np.array(self.data[0], dtype=PARMES_REAL , order=ORDER)
self.data[1] = np.array(self.data[1], dtype=PARMES_REAL , order=ORDER)
self.data[2] = np.array(self.data[2], dtype=PARMES_REAL , order=ORDER)
elif self.dimension == 2:
self.data[0], self.data[1] = v_formula(self.topology.mesh.coords[0],
self.topology.mesh.coords[1])
......
......@@ -3,6 +3,7 @@ import time
import parmepy as pp
import numpy as np
from parmepy.tools.cpu_data_transfer import Synchronize
from parmepy.tools.printer import Printer
import mpi4py.MPI as MPI
from math import *
import unittest
......@@ -20,9 +21,13 @@ class test_Cpu_data_transfert(unittest.TestCase):
vz = z
return vx, vy, vz
"""
DiscreteVariable test class
"""
def analyticalDivProduct(self, x, y, z):
sx = np.cos(x)
sy = np.cos(y)
sz = np.cos(z)
return sx, sy, sz
def setUp(self):
nb = 32.
# Parameters
......@@ -35,6 +40,8 @@ class test_Cpu_data_transfert(unittest.TestCase):
self.nbPts = [nb, nb, nb]
self.timeStep = 0.02
self.comm = MPI.COMM_WORLD
self.outputFilePrefix0 = './parmepy/test/test_tools/INIT_'
self.outputFilePrefix = './parmepy/test/test_tools/Trans_'
## Domain
self.box = pp.Box(dimension=self.dim,
length=self.boxLength,
......@@ -49,15 +56,26 @@ class test_Cpu_data_transfert(unittest.TestCase):
## Solver creation (discretisation of objects is done in solver initialisation)
topo3D = pp.CartesianTopology(domain=self.box, resolution=self.nbPts, dim=self.dim, periods=[True,True,True] ,ghosts=[2.,2.,2.])
# self.anal=np.asarray(np.vectorize(self.analyticalDivProduct)(self.topo3D.mesh.coords[0], \
# self.topo3D.mesh.coords[1], \
# self.topo3D.mesh.coords[2]))
OpSynchronize = Synchronize(topo3D)
## Discretization
velo.discretize(topo3D)
velo.initialize()
t1 = time.time()
print 'velo :', velo.discreteField[0].data[0][:,0,0],velo.discreteField[0].data[0][:,1,1]
io = Printer(fields=[velo], frequency=1, outputPrefix=self.outputFilePrefix0+str(topo3D.rank))
io.step()
# print 'velo :', velo.discreteField[0].data[0][:,0,0],velo.discreteField[0].data[0][:,1,1]
OpSynchronize.apply(velo.discreteField[0])
io = Printer(fields=[velo], frequency=1, outputPrefix=self.outputFilePrefix+str(topo3D.rank))
io.step()
tf = time.time()
print 'velo :', velo.discreteField[0].data[0][:,0,0],velo.discreteField[0].data[0][:,1,1]
# print 'velo :', velo.discreteField[0].data[0][:,0,0],velo.discreteField[0].data[0][:,1,1]
print "\n"
print "Total time : ", tf - t0, "sec (CPU)"
......
......@@ -90,61 +90,49 @@ class Synchronize(object):
if( self.topo.rank < self.topo.tabSort[i,0]) :
print 'UP',self.topo.rank,'Send to',self.topo.tabSort[i,0]
self.UPsend(self.topo.tabSort[i,0], f)
print 'ok'
else :
print 'UP', self.topo.rank,'Recv from',self.topo.tabSort[i,0]
self.UPrecv(self.topo.tabSort[i,0], f)
print 'ok'
# if(self.topo.tabSort[i,1] == 'down'):
if(self.topo.tabSort[i,1] == 1):
if( self.topo.rank < self.topo.tabSort[i,0]) :
print 'DOWN',self.topo.rank,'Send to',self.topo.tabSort[i,0]
self.DOWNsend(self.topo.tabSort[i,0], f)
print 'ok'
else :
print 'DOWN', self.topo.rank,'Recv from',self.topo.tabSort[i,0]
self.DOWNrecv(self.topo.tabSort[i,0], f)
print 'ok'
# if(self.topo.tabSort[i,1] == 'east'):
if(self.topo.tabSort[i,1] == 2):
if( self.topo.rank < self.topo.tabSort[i,0]) :
print 'EST',self.topo.rank,'Send to',self.topo.tabSort[i,0]
self.EASTsend(self.topo.tabSort[i,0], f)
print 'ok'
else :
print 'EST', self.topo.rank,'Recv from',self.topo.tabSort[i,0]
self.EASTrecv(self.topo.tabSort[i,0], f)
print 'ok'
# if(self.topo.tabSort[i,1] == 'west'):
if(self.topo.tabSort[i,1] == 3):
if( self.topo.rank < self.topo.tabSort[i,0]) :
print 'WEST',self.topo.rank,'Send to',self.topo.tabSort[i,0]
self.WESTsend(self.topo.tabSort[i,0], f)
print 'ok'
else :
print 'WEST', self.topo.rank,'Recv from',self.topo.tabSort[i,0]
self.WESTrecv(self.topo.tabSort[i,0], f)
print 'ok'
# if(self.topo.tabSort[i,1] == 'north'):
if(self.topo.tabSort[i,1] == 4):
if( self.topo.rank < self.topo.tabSort[i,0]) :
print 'NORTH',self.topo.rank,'Send to',self.topo.tabSort[i,0]
self.NORTHsend(self.topo.tabSort[i,0], f)
print 'ok'
else :
print 'NORTH', self.topo.rank,'Recv from',self.topo.tabSort[i,0]
self.NORTHrecv(self.topo.tabSort[i,0], f)
print 'ok'
# if(self.topo.tabSort[i,1] == 'south'):
if(self.topo.tabSort[i,1] == 5):
if( self.topo.rank < self.topo.tabSort[i,0]) :
print 'SOUTH',self.topo.rank,'Send to',self.topo.tabSort[i,0]
self.SOUTHsend(self.topo.tabSort[i,0], f)
print 'ok'
else :
print 'SOUTH', self.topo.rank,'Recv from',self.topo.tabSort[i,0]
self.SOUTHrecv(self.topo.tabSort[i,0], f)
print 'ok'
self.compute_time = time.time() - self.compute_time
self.total_time += self.compute_time
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment