Skip to content
Snippets Groups Projects
Commit 1cf3fdf1 authored by Jean-Matthieu Etancelin's avatar Jean-Matthieu Etancelin
Browse files

Fix analytic. start mpi testing

parent 4fea5a66
No related branches found
No related tags found
No related merge requests found
import parmepy as pp
import parmepy.tools.numpywrappers as npw
from parmepy.fields.continuous import Field
from parmepy.mpi.main_var import main_size, main_rank
from parmepy.mpi.topology import Cartesian
from parmepy.operator.analytic import Analytic
from parmepy.operator.redistribute import Redistribute
assert main_size == 4, 'Use 4 process for this test'
def func(res, x, y, z, t=0.):
res[0] = x
res[1] = y ** 2
res[2] = x + y
return res
b = pp.Box()
f = Field(domain=b, name="Test_Vec", isVector=True, formula=func)
nb_elem = [17, ] * 3
topo_q = Cartesian.withResolutionFixed(
b,
shape=npw.integerarray([2, 1, 2]),
globalMeshResolution=npw.integerarray(nb_elem),
)
topo_p = Cartesian.withResolutionFixed(
b,
shape=npw.integerarray([1, 4, 1]),
globalMeshResolution=npw.integerarray(nb_elem),
)
topo_q.setUp()
topo_p.setUp()
op_p = Analytic([f], {f: nb_elem}, topo=topo_p)
op_q = Analytic([f], {f: nb_elem}, topo=topo_q)
op_p.discretize()
op_q.discretize()
op_p.setUp()
op_q.setUp()
op_p2q = Redistribute([f], op_p, op_q)
op_p2q.discretize()
op_p2q.setUp()
# print main_rank, 'topo_p', repr(topo_p)
# print main_rank, 'topo_q', repr(topo_q)
# print main_rank, 'topo_q', f.discreteFields.keys()
print main_rank, 'topo_p', topo_p
print main_rank, 'topo_q', topo_q
f.setTopoInit(topo_p)
f.initialize()
op_p2q.apply()
op_p2q.wait()
print main_rank, 'norm, topo_p', f.norm(topo_p)
print main_rank, 'norm, topo_q', f.norm(topo_q)
print main_rank, 'norm, topo_p - topo_q', f.norm(topo_p) - f.norm(topo_q)
...@@ -45,7 +45,7 @@ class Analytic(Operator): ...@@ -45,7 +45,7 @@ class Analytic(Operator):
## Dict of resolutions (one per variable) ## Dict of resolutions (one per variable)
self.resolutions = resolutions self.resolutions = resolutions
self.output = self.variables self.output = self.variables
self._requirement = [] self.requirements = []
def discretize(self): def discretize(self):
if self._predefinedTopo is not None: if self._predefinedTopo is not None:
...@@ -67,6 +67,13 @@ class Analytic(Operator): ...@@ -67,6 +67,13 @@ class Analytic(Operator):
def setUp(self): def setUp(self):
self._isUpToDate = True self._isUpToDate = True
def addRedistributeRequirement(self, red):
self.requirements.append(red)
def getRedistributeRequirement(self):
return self.requirements
@debug @debug
def apply(self, simulation=None): def apply(self, simulation=None):
assert simulation is not None, \ assert simulation is not None, \
......
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