Skip to content
Snippets Groups Projects
test_nestler_model.py 1.35 KiB
from collections import defaultdict

import numpy as np
import sympy as sp

from lbmpy.phasefield.nphase_nestler import create_model


def get_parameters(num_phases, sigma, alpha=1):
    res_a = {}
    res_eps = {}
    for i in range(num_phases):
        for j in range(i):
            res_a[(i, j)] = alpha / (72 * sigma[(j, i)])
            res_eps[(i, j)] = sp.sqrt(alpha * sigma[(j, i)])
    return res_a, res_eps


def test_main():
    num_phases = 3
    alpha = 2
    sigma = defaultdict(lambda: 0.001)
    sigma[(1, 0)] = 0.005 / 4
    sigma[(0, 1)] = 0.005 / 4
    sigma[(0, 2)] = 0.0083 / 4
    sigma[(2, 0)] = 0.0083 / 4
    sigma[(1, 2)] = 0.01 / 4
    sigma[(2, 1)] = 0.01 / 4

    a_dict, epsilon_dict = get_parameters(num_phases, sigma, alpha)
    dh, init, run = create_model([50, 50], num_phases, a_dict,
                                 epsilon_dict, 0.0005, alpha, penalty_factor=0.0,
                                 simplex_projection=True)

    c_arr = dh.cpu_arrays['c']
    nx, ny = dh.shape

    c_arr[:, :int(0.5 * nx), 0] = 1
    c_arr[:, int(0.5 * nx):, 1] = 1

    c_arr[int(0.3 * nx):int(0.7 * nx), int(0.3 * ny):int(0.7 * ny), 0] = 0
    c_arr[int(0.3 * nx):int(0.7 * nx), int(0.3 * ny):int(0.7 * ny), 1] = 0
    c_arr[int(0.3 * nx):int(0.7 * nx), int(0.3 * ny):int(0.7 * ny), 2] = 1

    init()

    res = run(100)
    assert np.isfinite(np.max(res))