[pyfr] 59/88: Improve the performance of the intconu kernel.
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Wed Nov 16 12:05:30 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 15b8aed1c05c38d4da0296a29b2c9a36dd74a6d9
Author: Freddie Witherden <freddie at witherden.org>
Date: Sun Jul 3 17:30:55 2016 -0700
Improve the performance of the intconu kernel.
---
pyfr/backends/base/types.py | 4 ++--
pyfr/solvers/base/system.py | 3 ++-
pyfr/solvers/baseadvecdiff/elements.py | 3 +++
pyfr/solvers/baseadvecdiff/system.py | 2 ++
pyfr/solvers/navstokes/inters.py | 6 ++++++
pyfr/solvers/navstokes/kernels/intconu.mako | 4 ++--
6 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/pyfr/backends/base/types.py b/pyfr/backends/base/types.py
index d1f3735..e34fe19 100644
--- a/pyfr/backends/base/types.py
+++ b/pyfr/backends/base/types.py
@@ -139,9 +139,9 @@ class MatrixRSlice(object):
self.p, self.q = int(p), int(q)
self.nrow, self.ncol = self.q - self.p, mat.ncol
self.dtype, self.itemsize = mat.dtype, mat.itemsize
- self.leaddim = mat.leaddim
+ self.leaddim, self.pitch = mat.leaddim, mat.pitch
- self.pitch = self.leaddim*self.itemsize
+ self.nbytes = self.nrow*self.pitch
self.traits = (self.nrow, self.leaddim, self.dtype)
self.tags = mat.tags | {'slice'}
diff --git a/pyfr/solvers/base/system.py b/pyfr/solvers/base/system.py
index b7a9f03..819d279 100644
--- a/pyfr/solvers/base/system.py
+++ b/pyfr/solvers/base/system.py
@@ -164,7 +164,8 @@ class BaseSystem(object, metaclass=ABCMeta):
for pn, pobj in zip(provnames, provobjs):
for kn, kgetter in it.chain(*pobj.kernels.items()):
- kernels[pn, kn].append(kgetter())
+ if not kn.startswith('_'):
+ kernels[pn, kn].append(kgetter())
@abstractmethod
def rhs(self, t, uinbank, foutbank):
diff --git a/pyfr/solvers/baseadvecdiff/elements.py b/pyfr/solvers/baseadvecdiff/elements.py
index 0bd1318..0e5e66b 100644
--- a/pyfr/solvers/baseadvecdiff/elements.py
+++ b/pyfr/solvers/baseadvecdiff/elements.py
@@ -30,6 +30,9 @@ class BaseAdvectionDiffusionElements(BaseAdvectionElements):
'pyfr.solvers.baseadvecdiff.kernels.gradcoru'
)
+ self.kernels['_copy_fpts'] = lambda: backend.kernel(
+ 'copy', self._vect_fpts.rslice(0, self.nfpts), self._scal_fpts
+ )
self.kernels['tgradpcoru_upts'] = lambda: backend.kernel(
'mul', self.opmat('M4 - M6*M0'), self.scal_upts_inb,
out=self._vect_upts
diff --git a/pyfr/solvers/baseadvecdiff/system.py b/pyfr/solvers/baseadvecdiff/system.py
index 1133615..eff6eab 100644
--- a/pyfr/solvers/baseadvecdiff/system.py
+++ b/pyfr/solvers/baseadvecdiff/system.py
@@ -18,6 +18,8 @@ class BaseAdvectionDiffusionSystem(BaseAdvectionSystem):
if ('eles', 'copy_soln') in kernels:
q1 << kernels['eles', 'copy_soln']()
+ if ('iint', 'copy_fpts') in kernels:
+ q1 << kernels['iint', 'copy_fpts']()
q1 << kernels['iint', 'con_u']()
q1 << kernels['bcint', 'con_u'](t=t)
if ('eles', 'shocksensor') in kernels:
diff --git a/pyfr/solvers/navstokes/inters.py b/pyfr/solvers/navstokes/inters.py
index 96b8aae..801bd7e 100644
--- a/pyfr/solvers/navstokes/inters.py
+++ b/pyfr/solvers/navstokes/inters.py
@@ -2,6 +2,7 @@
import numpy as np
+from pyfr.backends.base.kernels import ComputeMetaKernel
from pyfr.solvers.baseadvecdiff import (BaseAdvectionDiffusionBCInters,
BaseAdvectionDiffusionIntInters,
BaseAdvectionDiffusionMPIInters)
@@ -22,6 +23,11 @@ class NavierStokesIntInters(BaseAdvectionDiffusionIntInters):
be.pointwise.register('pyfr.solvers.navstokes.kernels.intconu')
be.pointwise.register('pyfr.solvers.navstokes.kernels.intcflux')
+ if abs(self._tpl_c['ldg-beta']) == 0.5:
+ self.kernels['copy_fpts'] = lambda: ComputeMetaKernel(
+ [ele.kernels['_copy_fpts']() for ele in elemap.values()]
+ )
+
self.kernels['con_u'] = lambda: be.kernel(
'intconu', tplargs=tplargs, dims=[self.ninterfpts],
ulin=self._scal_lhs, urin=self._scal_rhs,
diff --git a/pyfr/solvers/navstokes/kernels/intconu.mako b/pyfr/solvers/navstokes/kernels/intconu.mako
index f097faa..8b90f1c 100644
--- a/pyfr/solvers/navstokes/kernels/intconu.mako
+++ b/pyfr/solvers/navstokes/kernels/intconu.mako
@@ -9,9 +9,9 @@
urout='out view fpdtype_t[${str(nvars)}]'>
% for i in range(nvars):
% if c['ldg-beta'] == -0.5:
- ulout[${i}] = urout[${i}] = ulin[${i}];
+ urout[${i}] = ulin[${i}];
% elif c['ldg-beta'] == 0.5:
- ulout[${i}] = urout[${i}] = urin[${i}];
+ ulout[${i}] = urin[${i}];
% else:
ulout[${i}] = urout[${i}] = urin[${i}]*${0.5 + c['ldg-beta']}
+ ulin[${i}]*${0.5 - c['ldg-beta']};
--
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