Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CO] Rework MeshSolution Tutorial #623

Merged
merged 33 commits into from
Jan 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
20fcaff
[CO] Rework MeshSolution Tutorial
BonneelP May 15, 2023
138a2bd
Merge branch 'master' of https://github.com/Eomys/pyleecan into Mesh
CedMrnl Oct 30, 2023
cee70e5
[RN] Rename cell into element
CedMrnl Oct 30, 2023
2f8e125
[CO] Optimize mesh methods
CedMrnl Oct 31, 2023
6ec8912
[CC] Rename method get_node -> get_node_coordinate and add it to pare…
CedMrnl Oct 31, 2023
3235a3d
[RN] Propagate Mesh.get_node_coordinate method renaming
CedMrnl Oct 31, 2023
9c1631d
[CO] Improve NodeMat methods
CedMrnl Oct 31, 2023
3506561
[CC] Add typing ElementMat methods
CedMrnl Oct 31, 2023
6a5b8b5
[NF] Edit MeshMat methods to target element by their name
CedMrnl Oct 31, 2023
b9155d5
[CC] Black
CedMrnl Oct 31, 2023
f80c4b0
[BC] Force element and node index between 0 and nb-1
CedMrnl Oct 31, 2023
65dcccc
[NF] Add MeshMat conversion to MeshVTK
CedMrnl Oct 31, 2023
f81490b
Change Segment reference element to be (0,0) -- (1,0)
CedMrnl Nov 17, 2023
b77c22d
Change RefSegmentP1 to match Gauss Legendre interpolation points.
CedMrnl Nov 23, 2023
229ea04
[WP] Remove Interpolation object and add reference element, gauss leg…
CedMrnl Nov 24, 2023
179ca8b
[RN] Move MeshMat.get_vertice -> MeshMat.get_element_coordinate
CedMrnl Nov 24, 2023
7f02bc8
[RN] Change MeshMat.get_vertice to get_element_coordinate in methods …
CedMrnl Nov 24, 2023
6669f83
[RN] Rename vertice to element_coordinate
CedMrnl Nov 24, 2023
bedca8d
[RN] Rename vertice to element_coordinate
CedMrnl Nov 24, 2023
7877bf3
[RN] Change vertice to element_coordinate
CedMrnl Nov 24, 2023
daec2e3
Merge branch 'master' of https://github.com/Eomys/pyleecan into Mesh
CedMrnl Nov 24, 2023
ea5a6a9
[BC] Enable to project 3D point in reference element RefSegmentP1
CedMrnl Nov 27, 2023
7d0f516
[RN] Rename MeshMat.element to MeshMat.element_dict
CedMrnl Nov 27, 2023
0441d79
[CC] Adding print
BonneelP Nov 30, 2023
cfea335
Merge branch 'master' of https://github.com/Eomys/pyleecan into MeshSol
BonneelP Nov 30, 2023
7b6c499
Merge branch 'MeshSol' of https://github.com/Eomys/pyleecan into Mesh
CedMrnl Nov 30, 2023
8a0f3b8
[CC] Add typing
CedMrnl Dec 1, 2023
fdb7dc3
[CC] Cleaning code
AdrienLeduqueEomys Jan 2, 2024
e86fa2a
[CC] Black
AdrienLeduqueEomys Jan 3, 2024
c52d253
[NF] Update pyvista version
CedMrnl Jan 4, 2024
7a48c2c
[CC] Refactoring code for PR
CedMrnl Jan 4, 2024
25ac864
[CC] Cleaning code
AdrienLeduqueEomys Jan 5, 2024
c104b0f
Merge pull request #665 from EOMYS-Public/Mesh
AdrienLeduqueEomys Jan 5, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 24 additions & 25 deletions Tests/Methods/Mesh/Interpolation/test_interpolation.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
# -*- coding: utf-8 -*-

import pytest
import numpy as np
from unittest import TestCase

from pyleecan.Classes.CellMat import CellMat
import numpy as np
import pytest

from pyleecan.Classes.ElementMat import ElementMat
from pyleecan.Classes.FPGNSeg import FPGNSeg
from pyleecan.Classes.MeshMat import MeshMat
from pyleecan.Classes.MeshSolution import MeshSolution
from pyleecan.Classes.NodeMat import NodeMat
from pyleecan.Classes.MeshMat import MeshMat
from pyleecan.Classes.ScalarProductL2 import ScalarProductL2
from pyleecan.Classes.Interpolation import Interpolation
from pyleecan.Classes.RefSegmentP1 import RefSegmentP1
from pyleecan.Classes.FPGNSeg import FPGNSeg


@pytest.mark.MeshSol
Expand All @@ -22,67 +21,67 @@ def test_line(self):
DELTA = 1e-10

mesh = MeshMat()
mesh.cell["line"] = CellMat(nb_node_per_cell=2)
mesh.element_dict["line"] = ElementMat(
nb_node_per_element=2, ref_element=RefSegmentP1(), gauss_point=FPGNSeg()
)
mesh.node = NodeMat()
mesh.node.add_node(np.array([0, 0]))
mesh.node.add_node(np.array([1, 0]))
mesh.node.add_node(np.array([0, 1]))
mesh.node.add_node(np.array([2, 3]))
mesh.node.add_node(np.array([3, 3]))

mesh.add_cell(np.array([0, 1]), "line")
mesh.add_cell(np.array([0, 2]), "line")
mesh.add_cell(np.array([1, 2]), "line")

c_line = mesh.cell["line"]
mesh.add_element(np.array([0, 1]), "line")
mesh.add_element(np.array([0, 2]), "line")
mesh.add_element(np.array([1, 2]), "line")

c_line.interpolation = Interpolation()
c_line.interpolation.ref_cell = RefSegmentP1()
c_line.interpolation.scalar_product = ScalarProductL2()
c_line.interpolation.gauss_point = FPGNSeg()
c_line = mesh.element_dict["line"]

meshsol = MeshSolution()
meshsol.mesh = [mesh]

vert = mesh.get_vertice(0)["line"]
# Constant field
vert = mesh.get_element_coordinate(0)["line"]
test_pt = np.array([0.7, 0])
test_field = np.array([1, 1])
sol = [1]
func = c_line.interpolation.ref_cell.interpolation(test_pt, vert, test_field)
func = c_line.interpolate(test_pt, vert, test_field)
testA = np.sum(abs(func - sol))
msg = "Wrong result: returned " + str(func) + ", expected: " + str(test_field)
self.assertAlmostEqual(testA, 0, msg=msg, delta=DELTA)

vert = mesh.get_vertice(0)["line"]
# Constant field with multiple time steps
vert = mesh.get_element_coordinate(0)["line"]
test_pt = np.array([0.7, 0])
test_field = np.ones(
(2, 120, 3)
) # Simulate a 3D vector field for 120 time step
func = c_line.interpolation.ref_cell.interpolation(test_pt, vert, test_field)
func = c_line.interpolate(test_pt, vert, test_field)
sol = np.ones((120, 3))
testA = np.sum(abs(func - sol))
msg = "Wrong result: returned " + str(func) + ", expected: " + str(sol)
self.assertAlmostEqual(testA, 0, msg=msg, delta=DELTA)

vert = mesh.get_vertice(2)["line"]
# Not constant
vert = mesh.get_element_coordinate(2)["line"]
test_pt = np.array([0.6, 0.4])
test_field = np.zeros((2, 120, 3))
test_field[0, :] = np.ones(
(1, 120, 3)
) # Simulate a 3D vector field for 120 time step
func = c_line.interpolation.ref_cell.interpolation(test_pt, vert, test_field)
func = c_line.interpolate(test_pt, vert, test_field)
sol = 0.6 * np.ones((120, 3))
testA = np.sum(abs(sol - func))
msg = "Wrong result: returned " + str(func) + ", expected: " + str(sol)
self.assertAlmostEqual(testA, 0, msg=msg, delta=DELTA)

vert = mesh.get_vertice(1)["line"]
vert = mesh.get_element_coordinate(1)["line"]
test_pt = np.array([0, 0.4])
test_field = np.zeros((2, 120, 3))
test_field[1, :] = np.ones(
(1, 120, 3)
) # Simulate a 3D vector field for 120 time step
func = c_line.interpolation.ref_cell.interpolation(test_pt, vert, test_field)
func = c_line.interpolate(test_pt, vert, test_field)
sol = 0.4 * np.ones((120, 3))
testA = np.sum(abs(sol - func))
msg = "Wrong result: returned " + str(func) + ", expected: " + str(sol)
Expand Down
51 changes: 23 additions & 28 deletions Tests/Methods/Mesh/Interpolation/test_real_points.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
# -*- coding: utf-8 -*-

import pytest
import numpy as np
from unittest import TestCase

from pyleecan.Classes.CellMat import CellMat
import numpy as np
import pytest

from pyleecan.Classes.ElementMat import ElementMat
from pyleecan.Classes.FPGNSeg import FPGNSeg
from pyleecan.Classes.MeshMat import MeshMat
from pyleecan.Classes.MeshSolution import MeshSolution
from pyleecan.Classes.NodeMat import NodeMat
from pyleecan.Classes.MeshMat import MeshMat

from pyleecan.Classes.ScalarProductL2 import ScalarProductL2
from pyleecan.Classes.Interpolation import Interpolation
from pyleecan.Classes.RefSegmentP1 import RefSegmentP1
from pyleecan.Classes.FPGNSeg import FPGNSeg


@pytest.mark.MeshSol
Expand All @@ -23,72 +21,69 @@ def test_line(self):
DELTA = 1e-10

mesh = MeshMat()
mesh.cell["line"] = CellMat(nb_node_per_cell=2)
mesh.element_dict["line"] = ElementMat(
nb_node_per_element=2, ref_element=RefSegmentP1(), gauss_point=FPGNSeg()
)
mesh.node = NodeMat()
mesh.node.add_node(np.array([0, 0]))
mesh.node.add_node(np.array([1, 0]))
mesh.node.add_node(np.array([0, 1]))
mesh.node.add_node(np.array([2, 3]))
mesh.node.add_node(np.array([3, 3]))

mesh.add_cell(np.array([0, 1]), "line")
mesh.add_cell(np.array([0, 2]), "line")
mesh.add_cell(np.array([1, 2]), "line")

c_line = mesh.cell["line"]
mesh.add_element(np.array([0, 1]), "line")
mesh.add_element(np.array([0, 2]), "line")
mesh.add_element(np.array([1, 2]), "line")

c_line.interpolation = Interpolation()
c_line.interpolation.ref_cell = RefSegmentP1()
c_line.interpolation.scalar_product = ScalarProductL2()
c_line.interpolation.gauss_point = FPGNSeg()
c_line = mesh.element_dict["line"]

meshsol = MeshSolution()
meshsol.mesh = [mesh]

vert = mesh.get_vertice(0)["line"]
vert = mesh.get_element_coordinate(0)["line"]
test = np.array([0, 0])
solution = np.array([0.5, 0])
ref_nodes = c_line.interpolation.ref_cell.get_real_point(vert, test)
ref_nodes = c_line.ref_element.get_real_point(vert, test)
testA = np.sum(abs(solution - ref_nodes))
msg = (
"Wrong result: returned " + str(ref_nodes) + ", expected: " + str(solution)
)
self.assertAlmostEqual(testA, 0, msg=msg, delta=DELTA)

vert = mesh.get_vertice(1)["line"]
vert = mesh.get_element_coordinate(1)["line"]
test = np.array([0, 0])
solution = np.array([0, 0.5])
ref_nodes = c_line.interpolation.ref_cell.get_real_point(vert, test)
ref_nodes = c_line.ref_element.get_real_point(vert, test)
testA = np.sum(abs(solution - ref_nodes))
msg = (
"Wrong result: returned " + str(ref_nodes) + ", expected: " + str(solution)
)
self.assertAlmostEqual(testA, 0, msg=msg, delta=DELTA)

vert = mesh.get_vertice(2)["line"]
vert = mesh.get_element_coordinate(2)["line"]
test = np.array([0, 0])
solution = np.array([0.5, 0.5])
ref_nodes = c_line.interpolation.ref_cell.get_real_point(vert, test)
ref_nodes = c_line.ref_element.get_real_point(vert, test)
testA = np.sum(abs(solution - ref_nodes))
msg = (
"Wrong result: returned " + str(ref_nodes) + ", expected: " + str(solution)
)
self.assertAlmostEqual(testA, 0, msg=msg, delta=DELTA)

vert = mesh.get_vertice(2)["line"]
vert = mesh.get_element_coordinate(2)["line"]
test = np.array([-1, 0])
solution = np.array([1, 0])
ref_nodes = c_line.interpolation.ref_cell.get_real_point(vert, test)
ref_nodes = c_line.ref_element.get_real_point(vert, test)
testA = np.sum(abs(solution - ref_nodes))
msg = (
"Wrong result: returned " + str(ref_nodes) + ", expected: " + str(solution)
)
self.assertAlmostEqual(testA, 0, msg=msg, delta=DELTA)

vert = mesh.get_vertice(2)["line"]
vert = mesh.get_element_coordinate(2)["line"]
test = np.array([-0.2, 0])
solution = np.array([0.6, 0.4])
ref_nodes = c_line.interpolation.ref_cell.get_real_point(vert, test)
ref_nodes = c_line.ref_element.get_real_point(vert, test)
testA = np.sum(abs(solution - ref_nodes))
msg = (
"Wrong result: returned " + str(ref_nodes) + ", expected: " + str(solution)
Expand Down
Loading