# -*- coding: utf-8 -*-
#
# This file is subject to the terms and conditions defined in
# file 'LICENSE', which is part of this source code package.
#
from __future__ import division
import numpy as np
import numpy.testing as npt
[docs]def test_tetrahedron_volumic_fraction():
from OpenPisco.Structured.Geometry3D \
import tetrahedron_volumic_fraction
cases = (([ 0.0, 1.0, 1.0, 1.0], 0.0), \
([-2.0, 2.0, 2.0, 2.0], 0.125), \
([ 2.0, -2.0, -2.0, -2.0], 0.875), \
([ 1.0, -1.0, -1.0, 1.0], 0.5), \
([ 1.0, 1.0, -1.0, 2.0], 0.08333333))
for phis, expected in cases:
phis in np.array(phis)
for shift in range(0, 4):
rolled_phis = np.roll(phis, shift)
for step in (1, -1):
stepped_phis = rolled_phis[::step]
for f, e in zip((1, -1), (expected, 1.0 - expected)):
p = f * stepped_phis
actual = tetrahedron_volumic_fraction(p)
npt.assert_allclose(actual, e)
[docs]def test_tetrahedron_volumic_fraction_dominated():
from OpenPisco.Structured.Geometry3D \
import tetrahedron_volumic_fraction_dominated
cases = (( 0.0, [ 1.0, 1.0, 1.0], 0.0), \
(-2.0, [ 2.0, 2.0, 2.0], 0.125), \
( 2.0, [-2.0, -2.0, -2.0], 0.125))
for phi_dominated, phi_others, expected in cases:
actual = tetrahedron_volumic_fraction_dominated( \
np.array(phi_dominated), np.array(phi_others))
npt.assert_allclose(actual, expected)
[docs]def test_sort_by_sign():
from OpenPisco.Structured.Geometry3D import sort_by_sign
cases = (([ 1.0, -1.0, 1.0, 1.0], ([-1.0], [ 1.0, 1.0, 1.0])), \
([ 1.0, 0.0, -1.0, -1.0], ([ 0.0, -1.0, -1.0], [ 1.0])), \
([ 1.0, 2.0, -1.0, -1.0], ([-1.0, -1.0], [ 1.0, 2.0])), \
([ 1.0, 0.0, 0.0, -1.0], ([-1.0], [ 1.0, 0.0, 0.0])))
for phis, expected in cases:
actual = sort_by_sign(np.array(phis))
for a, e in zip(actual, expected):
npt.assert_allclose(a, np.array(e))
[docs]def test_cuboid_volumic_fraction():
from OpenPisco.Structured.Geometry3D import cuboid_volumic_fraction
cases = (([ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 0.0), \
([-1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0], 0.5), \
([ 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0], 0.5), \
([-1.0, -1.0, -1.0, -1.0, 3.0, 3.0, 3.0, 3.0], 0.25), \
([-1.0, 1.0, 3.0, 1.0, 1.0, 3.0, 5.0, 3.0], 0.020833333))
for phis, expected in cases:
actual = cuboid_volumic_fraction(np.array(phis))
npt.assert_allclose(actual, expected)
[docs]def test_cuboid_volumic_fractions():
from OpenPisco.Structured.Geometry3D import cuboid_volumic_fractions
phis = [[ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], \
[-1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0], \
[ 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0], \
[-1.0, -1.0, -1.0, -1.0, 3.0, 3.0, 3.0, 3.0], \
[-1.0, 1.0, 3.0, 1.0, 1.0, 3.0, 5.0, 3.0]]
expected = [0.0, 0.5, 0.5, 0.25, 0.020833333]
actual = cuboid_volumic_fractions(np.array(phis))
npt.assert_allclose(actual, expected)
[docs]def test_tetrahedron_volumic_fractions():
from OpenPisco.Structured.Geometry3D \
import tetrahedron_volumic_fractions
phis = [[ 0.0, 1.0, 1.0, 1.0], \
[-2.0, 2.0, 2.0, 2.0], \
[ 2.0, -2.0, -2.0, -2.0], \
[ 1.0, -1.0, -1.0, 1.0], \
[ 1.0, 1.0, -1.0, 2.0]]
expected = [0.0, 0.125, 0.875, 0.5, 0.08333333]
actual = tetrahedron_volumic_fractions(np.array(phis))
npt.assert_allclose(actual, expected)
[docs]def test_strict_signs():
from OpenPisco.Structured.Geometry3D import strict_signs
phis = np.array( \
[[[-2.0, 0.0, 3.0, 3.0], [ 3.0, 0.0, 0.0, 0.0]], \
[[-2.0, -2.0, -2.0, -2.0], [-2.0, 3.0, 0.0, 0.0]]])
expected = np.array( \
[[[-1.0, 1.0, 1.0, 1.0], [ 1.0, 1.0, 1.0, 1.0]], \
[[-1.0, -1.0, -1.0, -1.0], [-1.0, 1.0, -1.0, -1.0]]])
actual = strict_signs(phis)
npt.assert_allclose(actual, expected)
[docs]def test_tetrahedron_volumic_fractions_dominated():
from OpenPisco.Structured.Geometry3D \
import tetrahedron_volumic_fractions_dominated
phis_dominated = [0.0, -2.0, 2.0]
phis_dominant = \
[[ 1.0, 1.0, 1.0], \
[ 2.0, 2.0, 2.0], \
[-2.0, -2.0, -2.0]]
expected = [0.0, 0.125, 0.125]
actual = tetrahedron_volumic_fractions_dominated( \
np.array(phis_dominated), np.array(phis_dominant))
npt.assert_allclose(actual, expected)