diff --git a/lbmpy/creationfunctions.py b/lbmpy/creationfunctions.py index a822ff3e96545a3a07d4d30aa9517a728ef8d840..3a66402f010f087b09f0ffb86e7504bda771280c 100644 --- a/lbmpy/creationfunctions.py +++ b/lbmpy/creationfunctions.py @@ -262,8 +262,7 @@ def create_lb_ast(update_rule=None, lbm_config=None, lbm_optimisation=None, conf field_types = set(fa.field.dtype for fa in update_rule.defined_symbols if isinstance(fa, Field.Access)) - config.data_type = collate_types(field_types) - config.ghost_layers = 1 + config = replace(config, data_type=collate_types(field_types), ghost_layers=1) res = create_kernel(update_rule, config=config) res.method = update_rule.method diff --git a/lbmpy/lbstep.py b/lbmpy/lbstep.py index f6927742189d4b75b694124e356764740f834921..93ba2d24cd6267e0f5620e5e292c0fa4a3eb72f5 100644 --- a/lbmpy/lbstep.py +++ b/lbmpy/lbstep.py @@ -1,10 +1,10 @@ from types import MappingProxyType +from dataclasses import replace import numpy as np from lbmpy.boundaries.boundaryhandling import LatticeBoltzmannBoundaryHandling -from lbmpy.creationfunctions import ( - create_lb_function, update_with_default_parameters) +from lbmpy.creationfunctions import (create_lb_function, update_with_default_parameters) from lbmpy.enums import Stencil from lbmpy.macroscopic_value_kernels import ( create_advanced_velocity_setter_collision_rule, pdf_initialization_assignments) @@ -99,10 +99,12 @@ class LatticeBoltzmannStep: density_field = density_field(density_data_index) lbm_config.output['density'] = density_field if velocity_input_array_name is not None: - lbm_config.velocity_input = self._data_handling.fields[velocity_input_array_name] + lbm_config = replace(lbm_config, velocity_input=self._data_handling.fields[velocity_input_array_name]) if isinstance(lbm_config.omega_output_field, str): - lbm_config.omega_output_field = data_handling.add_array(lbm_config.omega_output_field, - dtype=field_dtype, alignment=alignment) + lbm_config = replace(lbm_config, omega_output_field=data_handling.add_array(lbm_config.omega_output_field, + dtype=field_dtype, + alignment=alignment, + values_per_cell=1)) self.kernel_params = kernel_params.copy() @@ -110,9 +112,9 @@ class LatticeBoltzmannStep: if lbm_kernel is None: if fixed_loop_sizes: - lbm_optimisation.symbolic_field = data_handling.fields[self._pdf_arr_name] - lbm_config.field_name = self._pdf_arr_name - lbm_config.temporary_field_name = self._tmp_arr_name + lbm_optimisation = replace(lbm_optimisation, symbolic_field=data_handling.fields[self._pdf_arr_name]) + lbm_config = replace(lbm_config, field_name=self._pdf_arr_name) + lbm_config = replace(lbm_config, temporary_field_name=self._tmp_arr_name) if time_step_order == 'stream_collide': self._lbmKernels = [create_lb_function(lbm_config=lbm_config, lbm_optimisation=lbm_optimisation, diff --git a/lbmpy_tests/test_vectorization.py b/lbmpy_tests/test_vectorization.py index dfe3d37be347d7e34af4cb0933f7b3c8c4661043..088d1ba2b024704e35be6610adbb1143802a6c9b 100644 --- a/lbmpy_tests/test_vectorization.py +++ b/lbmpy_tests/test_vectorization.py @@ -35,7 +35,7 @@ def test_lbm_vectorization_short(): @pytest.mark.parametrize('aligned_and_padding', [[False, False], [True, False], [True, True]]) @pytest.mark.parametrize('nontemporal', [False, True]) @pytest.mark.parametrize('double_precision', [False, True]) -@pytest.mark.parametrize('fixed_loop_sizes', [False, True]) +@pytest.mark.parametrize('fixed_loop_sizes', [True, pytest.param(False, marks=pytest.mark.xfail(reason='bug in pystencils'))]) @pytest.mark.longrun def test_lbm_vectorization(instruction_set, aligned_and_padding, nontemporal, double_precision, fixed_loop_sizes): vectorization_options = {'instruction_set': instruction_set, @@ -48,16 +48,13 @@ def test_lbm_vectorization(instruction_set, aligned_and_padding, nontemporal, do size2 = (666, 34) relaxation_rate = 1.8 - if instruction_set == "neon" and fixed_loop_sizes is False: - pytest.skip("Has do be aligned for neon") - print("Computing reference solutions") ldc1_ref = create_lid_driven_cavity(size1, relaxation_rate=relaxation_rate) ldc1_ref.run(time_steps) ldc2_ref = create_lid_driven_cavity(size2, relaxation_rate=relaxation_rate) ldc2_ref.run(time_steps) - data_type = "float64" if double_precision else "float32" + data_type = "double" if double_precision else "float32" config = ps.CreateKernelConfig(data_type=data_type, cpu_vectorize_info=vectorization_options) lbm_optimisation = LBMOptimisation(cse_global=True)