[pyfr] 71/88: Allow for multiple system instances to coexist.
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Wed Nov 16 12:05:31 UTC 2016
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to branch master
in repository pyfr.
commit 3cb04291be858393d36fa52c842cae85f9896666
Author: Freddie Witherden <freddie at witherden.org>
Date: Fri Aug 26 13:27:45 2016 -0700
Allow for multiple system instances to coexist.
---
pyfr/solvers/base/elements.py | 4 ++--
pyfr/solvers/base/system.py | 12 +++++++++---
pyfr/solvers/baseadvec/elements.py | 4 ++--
pyfr/solvers/baseadvecdiff/elements.py | 10 +++++-----
pyfr/solvers/euler/elements.py | 4 ++--
pyfr/solvers/navstokes/elements.py | 4 ++--
6 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/pyfr/solvers/base/elements.py b/pyfr/solvers/base/elements.py
index 46e840a..f3b10c6 100644
--- a/pyfr/solvers/base/elements.py
+++ b/pyfr/solvers/base/elements.py
@@ -134,7 +134,7 @@ class BaseElements(object, metaclass=ABCMeta):
return any(re.search(r'\bu\b', ex) for ex in self._src_exprs)
@abstractmethod
- def set_backend(self, backend, nscal_upts):
+ def set_backend(self, backend, nscal_upts, nonce):
self._be = backend
# Sizes
@@ -144,7 +144,7 @@ class BaseElements(object, metaclass=ABCMeta):
# Convenience functions for scalar/vector allocation
alloc = lambda ex, n: abufs.append(
- backend.matrix(n, extent=ex, tags={'align'})
+ backend.matrix(n, extent=nonce + ex, tags={'align'})
) or abufs[-1]
salloc = lambda ex, n: alloc(ex, (n, nvars, neles))
valloc = lambda ex, n: alloc(ex, (ndims, n, nvars, neles))
diff --git a/pyfr/solvers/base/system.py b/pyfr/solvers/base/system.py
index 819d279..1aa3ee7 100644
--- a/pyfr/solvers/base/system.py
+++ b/pyfr/solvers/base/system.py
@@ -19,13 +19,19 @@ class BaseSystem(object, metaclass=ABCMeta):
# Number of queues to allocate
_nqueues = None
+ # Nonce sequence
+ _nonce_seq = it.count()
+
def __init__(self, backend, rallocs, mesh, initsoln, nreg, cfg):
self.backend = backend
self.mesh = mesh
self.cfg = cfg
+ # Obtain a nonce to uniquely identify this system
+ nonce = str(next(self._nonce_seq))
+
# Load the elements
- eles, elemap = self._load_eles(rallocs, mesh, initsoln, nreg)
+ eles, elemap = self._load_eles(rallocs, mesh, initsoln, nreg, nonce)
backend.commit()
# Retain the element map; this may be deleted by clients
@@ -59,7 +65,7 @@ class BaseSystem(object, metaclass=ABCMeta):
self._gen_kernels(eles, int_inters, mpi_inters, bc_inters)
backend.commit()
- def _load_eles(self, rallocs, mesh, initsoln, nreg):
+ def _load_eles(self, rallocs, mesh, initsoln, nreg, nonce):
basismap = {b.name: b for b in subclasses(BaseShape, just_leaf=True)}
# Look for and load each element type from the mesh
@@ -98,7 +104,7 @@ class BaseSystem(object, metaclass=ABCMeta):
eles.set_ics_from_cfg()
# Allocate these elements on the backend
- eles.set_backend(self.backend, nreg)
+ eles.set_backend(self.backend, nreg, nonce)
return eles, elemap
diff --git a/pyfr/solvers/baseadvec/elements.py b/pyfr/solvers/baseadvec/elements.py
index 468e41d..d897779 100644
--- a/pyfr/solvers/baseadvec/elements.py
+++ b/pyfr/solvers/baseadvec/elements.py
@@ -22,8 +22,8 @@ class BaseAdvectionElements(BaseElements):
return bufs
- def set_backend(self, backend, nscal_upts):
- super().set_backend(backend, nscal_upts)
+ def set_backend(self, backend, nscal_upts, nonce):
+ super().set_backend(backend, nscal_upts, nonce)
# Register pointwise kernels with the backend
backend.pointwise.register(
diff --git a/pyfr/solvers/baseadvecdiff/elements.py b/pyfr/solvers/baseadvecdiff/elements.py
index a77fc3e..16e8f86 100644
--- a/pyfr/solvers/baseadvecdiff/elements.py
+++ b/pyfr/solvers/baseadvecdiff/elements.py
@@ -22,8 +22,8 @@ class BaseAdvectionDiffusionElements(BaseAdvectionElements):
return bufs
- def set_backend(self, backend, nscal_upts):
- super().set_backend(backend, nscal_upts)
+ def set_backend(self, backend, nscal_upts, nonce):
+ super().set_backend(backend, nscal_upts, nonce)
# Register pointwise kernels
backend.pointwise.register(
@@ -97,9 +97,9 @@ class BaseAdvectionDiffusionElements(BaseAdvectionElements):
invvdm=self.basis.ubasis.invvdm.T
)
- # Allocate space for the artificial viscosity
- self.artvisc = backend.matrix((1, self.neles), extent='artvisc',
- tags=tags)
+ # Allocate space for the artificial viscosity vector
+ self.artvisc = backend.matrix((1, self.neles),
+ extent=nonce + 'artvisc', tags=tags)
# Apply the sensor to estimate the required artificial viscosity
self.kernels['shocksensor'] = lambda: backend.kernel(
diff --git a/pyfr/solvers/euler/elements.py b/pyfr/solvers/euler/elements.py
index 151f27e..19fad51 100644
--- a/pyfr/solvers/euler/elements.py
+++ b/pyfr/solvers/euler/elements.py
@@ -51,8 +51,8 @@ class BaseFluidElements(object):
class EulerElements(BaseFluidElements, BaseAdvectionElements):
- def set_backend(self, backend, nscalupts):
- super().set_backend(backend, nscalupts)
+ def set_backend(self, backend, nscalupts, nonce):
+ super().set_backend(backend, nscalupts, nonce)
# Register our flux kernel
backend.pointwise.register('pyfr.solvers.euler.kernels.tflux')
diff --git a/pyfr/solvers/navstokes/elements.py b/pyfr/solvers/navstokes/elements.py
index a887434..4b7fdf5 100644
--- a/pyfr/solvers/navstokes/elements.py
+++ b/pyfr/solvers/navstokes/elements.py
@@ -8,8 +8,8 @@ class NavierStokesElements(BaseFluidElements, BaseAdvectionDiffusionElements):
# Use the density field for shock sensing
shockvar = 'rho'
- def set_backend(self, backend, nscalupts):
- super().set_backend(backend, nscalupts)
+ def set_backend(self, backend, nscalupts, nonce):
+ super().set_backend(backend, nscalupts, nonce)
backend.pointwise.register('pyfr.solvers.navstokes.kernels.tflux')
shock_capturing = self.cfg.get('solver', 'shock-capturing')
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/pyfr.git
More information about the debian-science-commits
mailing list