From 6c3512ee8d2f53c6ac471094ccebdad4468c8786 Mon Sep 17 00:00:00 2001 From: Keck Jean-Baptiste <jean-baptiste.keck@imag.fr> Date: Tue, 23 May 2017 22:36:19 +0200 Subject: [PATCH] testing --- hysop/backend/device/codegen/base/test.py | 33 ++++++++++ .../kernels/tests/test_directional_remesh.py | 66 +++++++++++-------- 2 files changed, 73 insertions(+), 26 deletions(-) diff --git a/hysop/backend/device/codegen/base/test.py b/hysop/backend/device/codegen/base/test.py index 8c012573c..7fa920128 100644 --- a/hysop/backend/device/codegen/base/test.py +++ b/hysop/backend/device/codegen/base/test.py @@ -60,3 +60,36 @@ def _test_mesh_info(name, typegen,dim,ghosts,resolution,**kargs): **kargs) return (np_mis, cg_mis) + +def make_slice_views(compute_grid_size, + lghosts=None, rghosts=None, step=None): + compute_grid_size = np.asarray(compute_grid_size) + dim = compute_grid_size.ndim + + if (lghosts is None): + lghosts = (0,)*dim + elif np.iscalar(lghosts): + lghosts = (lghosts,)*dim + lghosts = np.asarray(lghosts) + + if (rghosts is None): + rghosts = (0,)*dim + elif np.iscalar(rghosts): + rghosts = (rghosts,)*dim + rghosts = np.asarray(rghosts) + + if (step is None): + step = (1,)*dim + elif np.iscalar(step): + step = (step,)*dim + step = np.asarray(step) + + view = [slice(lg, gs+lg) for lg, gs in zip(lghosts, compute_grid_size)] + + grid_size = compute_grid_size + lghosts + rghosts + grid_shape = grid_size[::-1] + + return view, grid_size, grid_shape, lghosts, rghosts, step + + + diff --git a/hysop/backend/device/codegen/kernels/tests/test_directional_remesh.py b/hysop/backend/device/codegen/kernels/tests/test_directional_remesh.py index 868f96be7..51d151838 100644 --- a/hysop/backend/device/codegen/kernels/tests/test_directional_remesh.py +++ b/hysop/backend/device/codegen/kernels/tests/test_directional_remesh.py @@ -5,7 +5,7 @@ from hysop.deps import np, copy, math from hysop.backend.device.opencl import cl from hysop.tools.types import check_instance from hysop.constants import BoundaryCondition, Precision -from hysop.backend.device.codegen.base.test import _test_mesh_info , _test_typegen +from hysop.backend.device.codegen.base.test import _test_mesh_info , _test_typegen, make_slice_views from hysop.numerics.odesolvers.runge_kutta import ExplicitRungeKutta from hysop.backend.device.codegen.kernels.directional_remesh import DirectionalRemeshKernel from hysop.numerics.remesh.remesh import RemeshKernel @@ -28,58 +28,72 @@ class TestDirectionalRemesh(object): dtype = cl_env.precision eps = np.finfo(dtype).eps + # compute grid compute_grid_size = np.asarray([64,10,10]) (A,compute_mesh_info) = _test_mesh_info('base_mesh_info',typegen,3,0,compute_grid_size) dx = A['dx'][0][0] inv_dx = A['inv_dx'][0][0] + # velocity bounds umax = +10.0 umin = -10.0 uinf = max(abs(umax),abs(umin)) + # compute timestep + dt = cfl * dx/uinf + assert(umin<umax) + assert cfl>0 + assert dt>0 + + # scalar bounds S0_min=-1.0 S0_max=+1.0 S1_min=-10.0 S1_max=+10.0 - dt = cfl * dx/uinf - max_advec = int(np.floor(uinf*dt*inv_dx)) - assert(umin<umax) - assert cfl>0 - assert dt>0 - assert max_advec>=0 - + # compute max offsets due to advection and remeshing assert self.MAX_MOMENTS % 2 == 0 - MAX_P=(1+MAX_MOMENTS/2) - MAX_ADVEC = int(np.ceil(dt*uinf*inv_dx)) + MAX_P=(1+self.MAX_MOMENTS/2) + MAX_ADVEC = int(np.floor(dt*uinf*inv_dx)) + assert MAX_P > 0 + assert MAX_ADVEC >= 0 min_ghosts_in = MAX_ADVEC min_ghosts_out = MAX_ADVEC + MAX_P - S0_in_ghosts = min_ghosts_in + 0 - S1_in_ghosts = min_ghosts_in + 1 + # inject extra ghosts on scalars for testing + S0_in_ghosts = min_ghosts_in + 0 + S1_in_ghosts = min_ghosts_in + 1 S0_out_ghosts = min_ghosts_out + 0 S1_out_ghosts = min_ghosts_out + 2 - - S0_grid_ghosts = np.asarray([S0_ghosts_in]*3) - S0_grid_size = compute_grid_size + 2*S0_grid_ghosts + - S1_grid_ghosts = np.asarray([S1_ghosts]*3) - S1_grid_size = compute_grid_size + 2*S1_grid_ghosts - - (B, S0_mesh_info) = _test_mesh_info('S0_mesh_info', - typegen,3,S0_grid_ghosts,S0_grid_size) - (C, S1_mesh_info) = _test_mesh_info('S1_mesh_info', - typegen,3,S1_grid_ghosts,S1_grid_size) + # build 3D view, grid_size, grid_shape, ghosts, mesh_info, ... + # size is XYZ, shape is ZYX + S0_in_view, S0_in_grid_size, S0_in_grid_shape, S0_in_grid_ghosts, = \ + make_slice_views(compute_grid_size, S0_in_ghosts, S0_in_ghosts) + S0_out_view, S0_out_grid_size, S0_out_grid_shape, S0_out_grid_ghosts, = \ + make_slice_views(compute_grid_size, S0_out_ghosts, S0_out_ghosts) + (B, S0_mesh_info) = _test_mesh_info('S0_mesh_info_in', + typegen,3,S0_in_grid_ghosts,S0_in_grid_size) + (C, S0_mesh_info) = _test_mesh_info('S0_mesh_info_out', + typegen,3,S0_in_grid_ghosts,S0_in_grid_size) + + S1_in_view, S1_in_grid_size, S1_in_grid_shape, S1_in_grid_ghosts, = \ + make_slice_views(compute_grid_size, S1_in_ghosts, S1_in_ghosts) + S1_out_view, S1_out_grid_size, S1_out_grid_shape, S1_out_grid_ghosts, = \ + make_slice_views(compute_grid_size, S1_out_ghosts, S1_out_ghosts) + (D, S1_mesh_info) = _test_mesh_info('S1_mesh_info_in', + typegen,3,S1_in_grid_ghosts,S1_in_grid_size) + (E, S1_mesh_info) = _test_mesh_info('S1_mesh_info_out', + typegen,3,S1_in_grid_ghosts,S1_in_grid_size) - S0_grid_shape = S0_grid_size[::-1] - S1_grid_shape = S1_grid_size[::-1] - compute_grid_shape = compute_grid_size[::-1] - assert A['dx'][0] == B['dx'][0] assert A['dx'][0] == C['dx'][0] + assert A['dx'][0] == D['dx'][0] + assert A['dx'][0] == E['dx'][0] compute_grid_bytes = compute_grid_size.size * typegen.FLT_BYTES[typegen.fbtype] -- GitLab