[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