diff --git a/lbmpy/methods/creationfunctions.py b/lbmpy/methods/creationfunctions.py index b87a62bd3eb191fa63931a717641959c1e8be5a5..fd8901f1de865a1ef13dbc34a2a81943d0384e92 100644 --- a/lbmpy/methods/creationfunctions.py +++ b/lbmpy/methods/creationfunctions.py @@ -294,9 +294,7 @@ def create_central_moment(stencil, relaxation_rates, nested_moments=None, Args: stencil: instance of :class:`lbmpy.stencils.LBStenil` relaxation_rates: relaxation rates (inverse of the relaxation times) for each moment - nested_moments: a list of lists of modes, grouped by common relaxation times. This is usually used in - conjunction with `mrt_orthogonal_modes_literature`. If this argument is not provided, - Gram-Schmidt orthogonalization of the default modes is performed. + nested_moments: a list of lists of modes, grouped by common relaxation times. maxwellian_moments: determines if the discrete or continuous maxwellian equilibrium is used to compute the equilibrium moments. Returns: @@ -408,9 +406,9 @@ def create_mrt_orthogonal(stencil, relaxation_rates, maxwellian_moments=False, w maxwellian_moments: determines if the discrete or continuous maxwellian equilibrium is used to compute the equilibrium moments weighted: whether to use weighted or unweighted orthogonality - nested_moments: a list of lists of modes, grouped by common relaxation times. This is usually used in - conjunction with `mrt_orthogonal_modes_literature`. If this argument is not provided, - Gram-Schmidt orthogonalization of the default modes is performed. + nested_moments: a list of lists of modes, grouped by common relaxation times. If this argument is not provided, + Gram-Schmidt orthogonalization of the default modes is performed. The default modes equal the + raw moments except for the separation of the shear and bulk viscosity. """ if weighted: weights = get_weights(stencil, sp.Rational(1, 3)) diff --git a/lbmpy_tests/advanced_streaming/test_advanced_streaming_noslip.py b/lbmpy_tests/advanced_streaming/test_advanced_streaming_noslip.py index 834d30d3b6208183cf1437d040408e276718b2c0..62448e3c25259519cb8b811d614c7fb5f38803fe 100644 --- a/lbmpy_tests/advanced_streaming/test_advanced_streaming_noslip.py +++ b/lbmpy_tests/advanced_streaming/test_advanced_streaming_noslip.py @@ -1,24 +1,23 @@ +import pytest + import numpy as np -import sympy as sp +import pystencils as ps +from lbmpy.creationfunctions import LBMConfig from lbmpy.advanced_streaming import Timestep from lbmpy.boundaries import NoSlip from lbmpy.boundaries.boundaryhandling import create_lattice_boltzmann_boundary_kernel -from lbmpy.advanced_streaming.utility import even_accessors, odd_accessors, streaming_patterns, inverse_dir_index, AccessPdfValues +from lbmpy.advanced_streaming.utility import streaming_patterns, inverse_dir_index, AccessPdfValues from lbmpy.creationfunctions import create_lb_method -from lbmpy.stencils import get_stencil - -import pystencils as ps +from lbmpy.enums import Method, Stencil +from lbmpy.stencils import LBStencil from pystencils.boundaries.createindexlist import numpy_data_type_for_boundary_object from pystencils.data_types import TypedSymbol, create_type from pystencils.field import Field, FieldType -from itertools import product - -import pytest -@pytest.mark.parametrize("stencil", [ 'D2Q9', 'D3Q19', 'D3Q27']) +@pytest.mark.parametrize("stencil", [Stencil.D2Q9, Stencil.D3Q19, Stencil.D3Q27]) @pytest.mark.parametrize("streaming_pattern", streaming_patterns) @pytest.mark.parametrize("prev_timestep", [Timestep.EVEN, Timestep.ODD]) def test_advanced_streaming_noslip_single_cell(stencil, streaming_pattern, prev_timestep): @@ -26,9 +25,9 @@ def test_advanced_streaming_noslip_single_cell(stencil, streaming_pattern, prev_ Advanced Streaming NoSlip Test """ - stencil = get_stencil(stencil) - q = len(stencil) - dim = len(stencil[0]) + stencil = LBStencil(stencil) + q = stencil.Q + dim = stencil.D pdf_field = ps.fields(f'pdfs({q}): [{dim}D]') prev_pdf_access = AccessPdfValues(stencil, streaming_pattern, prev_timestep, 'out') @@ -39,24 +38,25 @@ def test_advanced_streaming_noslip_single_cell(stencil, streaming_pattern, prev_ for d in range(q): prev_pdf_access.write_pdf(pdfs, pos, d, d) - lb_method = create_lb_method(stencil=stencil, method='srt') + lbm_config = LBMConfig(stencil=stencil, method=Method.SRT) + lb_method = create_lb_method(lbm_config=lbm_config) noslip = NoSlip() index_struct_dtype = numpy_data_type_for_boundary_object(noslip, dim) index_field = Field('indexVector', FieldType.INDEXED, index_struct_dtype, layout=[0], - shape=(TypedSymbol("indexVectorSize", create_type(np.int64)), 1), strides=(1, 1)) - index_vector = np.array([ pos + (d,) for d in range(q) ], dtype=index_struct_dtype) + shape=(TypedSymbol("indexVectorSize", create_type(np.int64)), 1), strides=(1, 1)) + index_vector = np.array([pos + (d,) for d in range(q)], dtype=index_struct_dtype) - ast = create_lattice_boltzmann_boundary_kernel(pdf_field, - index_field, lb_method, noslip, - prev_timestep=prev_timestep, - streaming_pattern=streaming_pattern) + ast = create_lattice_boltzmann_boundary_kernel(pdf_field, + index_field, lb_method, noslip, + prev_timestep=prev_timestep, + streaming_pattern=streaming_pattern) flex_kernel = ast.compile() - + flex_kernel(pdfs=pdfs, indexVector=index_vector, indexVectorSize=len(index_vector)) - reflected_pdfs = [ next_pdf_access.read_pdf(pdfs, pos, d) for d in range(q)] - inverse_pdfs = [ inverse_dir_index(stencil, d) for d in range(q) ] - assert reflected_pdfs == inverse_pdfs \ No newline at end of file + reflected_pdfs = [next_pdf_access.read_pdf(pdfs, pos, d) for d in range(q)] + inverse_pdfs = [inverse_dir_index(stencil, d) for d in range(q)] + assert reflected_pdfs == inverse_pdfs