FEM: unit tests, split common module into a new module for result tests
This commit is contained in:
committed by
Yorik van Havre
parent
8d88af3803
commit
a3ea67ceae
@@ -119,6 +119,7 @@ SET(FemTests_SRCS
|
||||
femtest/testcommon.py
|
||||
femtest/testmesh.py
|
||||
femtest/testobject.py
|
||||
femtest/testresult.py
|
||||
femtest/testsolverframework.py
|
||||
femtest/testtools.py
|
||||
)
|
||||
|
||||
@@ -32,6 +32,7 @@ from femtest.testobject import TestObjectCreate
|
||||
from femtest.testobject import TestObjectType
|
||||
from femtest.testmesh import TestMeshCommon
|
||||
from femtest.testmesh import TestMeshEleTetra10
|
||||
from femtest.testresult import TestResult
|
||||
from femtest.testccxtools import TestCcxTools
|
||||
from femtest.testsolverframework import TestSolverFrameWork
|
||||
|
||||
@@ -74,6 +75,7 @@ unittest.TextTestRunner().run(mytest)
|
||||
./bin/FreeCAD --run-test "femtest.testcommon"
|
||||
./bin/FreeCAD --run-test "femtest.testmesh"
|
||||
./bin/FreeCAD --run-test "femtest.testobject"
|
||||
./bin/FreeCAD --run-test "femtest.testresult"
|
||||
./bin/FreeCAD --run-test "femtest.testsolverframework"
|
||||
./bin/FreeCAD --run-test "femtest.testtools"
|
||||
|
||||
|
||||
@@ -43,186 +43,6 @@ class TestFemCommon(unittest.TestCase):
|
||||
FreeCAD.setActiveDocument(self.doc_name)
|
||||
self.active_doc = FreeCAD.ActiveDocument
|
||||
|
||||
def test_read_frd_massflow_networkpressure(self):
|
||||
# read data from frd file
|
||||
frd_file = testtools.get_fem_test_home_dir() + 'ccx/Flow1D_thermomech.frd'
|
||||
import feminout.importCcxFrdResults as importCcxFrdResults
|
||||
frd_content = importCcxFrdResults.readResult(frd_file)
|
||||
|
||||
# do something with the read data
|
||||
frd_content_len = []
|
||||
for key in sorted(frd_content.keys()):
|
||||
frd_content_len.append(len(frd_content[key]))
|
||||
print('read data')
|
||||
print(frd_content_len)
|
||||
print(sorted(frd_content.keys()))
|
||||
# print(frd_content)
|
||||
read_mflow = frd_content['Results'][12]['mflow']
|
||||
read_npressure = frd_content['Results'][12]['npressure']
|
||||
res_len = [
|
||||
len(read_mflow),
|
||||
len(read_npressure)
|
||||
]
|
||||
print(res_len)
|
||||
print(read_mflow)
|
||||
print(read_npressure)
|
||||
|
||||
# create the expected data
|
||||
print('\nexpected data')
|
||||
efc = {} # expected frd content
|
||||
efc['Nodes'] = {
|
||||
2: FreeCAD.Vector(0.0, 0.0, -50.0),
|
||||
3: FreeCAD.Vector(0.0, 0.0, -4300.0),
|
||||
4: FreeCAD.Vector(4950.0, 0.0, -4300.0),
|
||||
5: FreeCAD.Vector(5000.0, 0.0, -4300.0),
|
||||
6: FreeCAD.Vector(8535.53, 0.0, -7835.53),
|
||||
7: FreeCAD.Vector(8569.88, 0.0, -7870.88),
|
||||
8: FreeCAD.Vector(12105.4, 0.0, -11406.4),
|
||||
9: FreeCAD.Vector(12140.8, 0.0, -11441.8),
|
||||
10: FreeCAD.Vector(13908.5, 0.0, -13209.5),
|
||||
11: FreeCAD.Vector(13943.9, 0.0, -13244.9),
|
||||
12: FreeCAD.Vector(15047.0, 0.0, -14348.0),
|
||||
13: FreeCAD.Vector(15047.0, 0.0, -7947.97),
|
||||
15: FreeCAD.Vector(0.0, 0.0, 0.0),
|
||||
16: FreeCAD.Vector(0.0, 0.0, -2175.0),
|
||||
17: FreeCAD.Vector(2475.0, 0.0, -4300.0),
|
||||
18: FreeCAD.Vector(4975.0, 0.0, -4300.0),
|
||||
19: FreeCAD.Vector(6767.77, 0.0, -6067.77),
|
||||
20: FreeCAD.Vector(8552.71, 0.0, -7853.21),
|
||||
21: FreeCAD.Vector(10337.6, 0.0, -9638.64),
|
||||
22: FreeCAD.Vector(12123.1, 0.0, -11424.1),
|
||||
23: FreeCAD.Vector(13024.6, 0.0, -12325.6),
|
||||
24: FreeCAD.Vector(13926.2, 0.0, -13227.2),
|
||||
25: FreeCAD.Vector(14495.4, 0.0, -13796.4),
|
||||
26: FreeCAD.Vector(15047.0, 0.0, -11148.0),
|
||||
27: FreeCAD.Vector(15047.0, 0.0, -7897.97)
|
||||
}
|
||||
efc['Seg2Elem'] = {
|
||||
1: (15, 2),
|
||||
13: (13, 27)
|
||||
}
|
||||
efc['Seg3Elem'] = {}
|
||||
''' deleted during reading because of the inout file
|
||||
efc['Seg3Elem'] = {
|
||||
2: (2, 16, 3),
|
||||
3: (3, 17, 4),
|
||||
4: (4, 18, 5),
|
||||
5: (5, 19, 6),
|
||||
6: (6, 20, 7),
|
||||
7: (7, 21, 8),
|
||||
8: (8, 22, 9),
|
||||
9: (9, 23, 10),
|
||||
10: (10, 24, 11),
|
||||
11: (11, 25, 12),
|
||||
12: (12, 26, 13)
|
||||
}
|
||||
'''
|
||||
efc['Tria3Elem'] = efc['Tria6Elem'] = efc['Quad4Elem'] = efc['Quad8Elem'] = {} # faces
|
||||
efc['Tetra4Elem'] = efc['Tetra10Elem'] = efc['Hexa8Elem'] = efc['Hexa20Elem'] = efc['Penta6Elem'] = efc['Penta15Elem'] = {} # volumes
|
||||
efc['Results'] = [
|
||||
{'time': 0.00390625},
|
||||
{'time': 0.0078125},
|
||||
{'time': 0.0136719},
|
||||
{'time': 0.0224609},
|
||||
{'time': 0.0356445},
|
||||
{'time': 0.0554199},
|
||||
{'time': 0.085083},
|
||||
{'time': 0.129578},
|
||||
{'time': 0.19632},
|
||||
{'time': 0.296432},
|
||||
{'time': 0.446602},
|
||||
{'time': 0.671856},
|
||||
{
|
||||
'number': 0,
|
||||
'time': 1.0,
|
||||
'mflow': {
|
||||
1: 78.3918, # added during reading because of the inout file
|
||||
2: 78.3918,
|
||||
3: 78.3918,
|
||||
4: 78.3918,
|
||||
5: 78.3918,
|
||||
6: 78.3918,
|
||||
7: 78.3918,
|
||||
8: 78.3918,
|
||||
9: 78.3918,
|
||||
10: 78.3918,
|
||||
11: 78.3918,
|
||||
12: 78.3918,
|
||||
13: 78.3918,
|
||||
15: 78.3918,
|
||||
16: 78.3918,
|
||||
17: 78.3918,
|
||||
18: 78.3918,
|
||||
19: 78.3918,
|
||||
20: 78.3918,
|
||||
21: 78.3918,
|
||||
22: 78.3918,
|
||||
23: 78.3918,
|
||||
24: 78.3918,
|
||||
25: 78.3918,
|
||||
26: 78.3918,
|
||||
27: 78.3918,
|
||||
28: 78.3918 # added during reading because of the inout file
|
||||
},
|
||||
'npressure': {
|
||||
1: 0.1, # added during reading because of the inout file
|
||||
2: 0.1,
|
||||
3: 0.134840,
|
||||
4: 0.128261,
|
||||
5: 0.127949,
|
||||
6: 0.155918,
|
||||
7: 0.157797,
|
||||
8: 0.191647,
|
||||
9: 0.178953,
|
||||
10: 0.180849,
|
||||
11: 0.161476,
|
||||
12: 0.162658,
|
||||
13: 0.1,
|
||||
15: 0.1,
|
||||
16: 0.117420,
|
||||
17: 0.131551,
|
||||
18: 0.128105,
|
||||
19: 0.141934,
|
||||
20: 0.156857,
|
||||
21: 0.174722,
|
||||
22: 0.185300,
|
||||
23: 0.179901,
|
||||
24: 0.171162,
|
||||
25: 0.162067,
|
||||
26: 0.131329,
|
||||
27: 0.1,
|
||||
28: 0.1 # added during reading because of the inout file
|
||||
}
|
||||
}
|
||||
]
|
||||
expected_frd_content = efc
|
||||
|
||||
# do something with the expected data
|
||||
expected_frd_content_len = []
|
||||
for key in sorted(expected_frd_content.keys()):
|
||||
expected_frd_content_len.append(len(expected_frd_content[key]))
|
||||
print(expected_frd_content_len)
|
||||
print(sorted(expected_frd_content.keys()))
|
||||
# expected results
|
||||
expected_mflow = expected_frd_content['Results'][12]['mflow']
|
||||
expected_npressure = expected_frd_content['Results'][12]['npressure']
|
||||
expected_res_len = [
|
||||
len(expected_mflow),
|
||||
len(expected_npressure)
|
||||
]
|
||||
print(expected_res_len)
|
||||
print(expected_mflow)
|
||||
print(expected_npressure)
|
||||
|
||||
# tests
|
||||
self.assertEqual(frd_content_len, expected_frd_content_len, "Length's of read frd data values are unexpected")
|
||||
self.assertEqual(frd_content['Nodes'], expected_frd_content['Nodes'], "Values of read node data are unexpected")
|
||||
self.assertEqual(frd_content['Seg2Elem'], expected_frd_content['Seg2Elem'], "Values of read Seg2 data are unexpected")
|
||||
self.assertEqual(frd_content['Seg3Elem'], expected_frd_content['Seg3Elem'], "Values of read Seg3 data are unexpected")
|
||||
self.assertEqual(res_len, expected_res_len, "Length's of read result data values are unexpected")
|
||||
self.assertEqual(read_mflow, expected_mflow, "Values of read mflow result data are unexpected")
|
||||
self.assertEqual(read_npressure, expected_npressure, "Values of read npressure result data are unexpected")
|
||||
|
||||
def test_adding_refshaps(self):
|
||||
doc = self.active_doc
|
||||
slab = doc.addObject("Part::Plane", "Face")
|
||||
|
||||
227
src/Mod/Fem/femtest/testresult.py
Normal file
227
src/Mod/Fem/femtest/testresult.py
Normal file
@@ -0,0 +1,227 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2018 - FreeCAD Developers *
|
||||
# * Author: Bernd Hahnebach <bernd@bimstatik.org> *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * FreeCAD is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with FreeCAD; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************/
|
||||
|
||||
|
||||
import FreeCAD
|
||||
import unittest
|
||||
from . import testtools
|
||||
from .testtools import fcc_print
|
||||
|
||||
|
||||
class TestResult(unittest.TestCase):
|
||||
fcc_print('import TestResult')
|
||||
|
||||
def setUp(self):
|
||||
self.doc_name = "TestResult"
|
||||
try:
|
||||
FreeCAD.setActiveDocument(self.doc_name)
|
||||
except:
|
||||
FreeCAD.newDocument(self.doc_name)
|
||||
finally:
|
||||
FreeCAD.setActiveDocument(self.doc_name)
|
||||
self.active_doc = FreeCAD.ActiveDocument
|
||||
|
||||
def test_read_frd_massflow_networkpressure(self):
|
||||
# read data from frd file
|
||||
frd_file = testtools.get_fem_test_home_dir() + 'ccx/Flow1D_thermomech.frd'
|
||||
import feminout.importCcxFrdResults as importCcxFrdResults
|
||||
frd_content = importCcxFrdResults.readResult(frd_file)
|
||||
|
||||
# do something with the read data
|
||||
frd_content_len = []
|
||||
for key in sorted(frd_content.keys()):
|
||||
frd_content_len.append(len(frd_content[key]))
|
||||
print('read data')
|
||||
print(frd_content_len)
|
||||
print(sorted(frd_content.keys()))
|
||||
# print(frd_content)
|
||||
read_mflow = frd_content['Results'][12]['mflow']
|
||||
read_npressure = frd_content['Results'][12]['npressure']
|
||||
res_len = [
|
||||
len(read_mflow),
|
||||
len(read_npressure)
|
||||
]
|
||||
print(res_len)
|
||||
print(read_mflow)
|
||||
print(read_npressure)
|
||||
|
||||
# create the expected data
|
||||
print('\nexpected data')
|
||||
efc = {} # expected frd content
|
||||
efc['Nodes'] = {
|
||||
2: FreeCAD.Vector(0.0, 0.0, -50.0),
|
||||
3: FreeCAD.Vector(0.0, 0.0, -4300.0),
|
||||
4: FreeCAD.Vector(4950.0, 0.0, -4300.0),
|
||||
5: FreeCAD.Vector(5000.0, 0.0, -4300.0),
|
||||
6: FreeCAD.Vector(8535.53, 0.0, -7835.53),
|
||||
7: FreeCAD.Vector(8569.88, 0.0, -7870.88),
|
||||
8: FreeCAD.Vector(12105.4, 0.0, -11406.4),
|
||||
9: FreeCAD.Vector(12140.8, 0.0, -11441.8),
|
||||
10: FreeCAD.Vector(13908.5, 0.0, -13209.5),
|
||||
11: FreeCAD.Vector(13943.9, 0.0, -13244.9),
|
||||
12: FreeCAD.Vector(15047.0, 0.0, -14348.0),
|
||||
13: FreeCAD.Vector(15047.0, 0.0, -7947.97),
|
||||
15: FreeCAD.Vector(0.0, 0.0, 0.0),
|
||||
16: FreeCAD.Vector(0.0, 0.0, -2175.0),
|
||||
17: FreeCAD.Vector(2475.0, 0.0, -4300.0),
|
||||
18: FreeCAD.Vector(4975.0, 0.0, -4300.0),
|
||||
19: FreeCAD.Vector(6767.77, 0.0, -6067.77),
|
||||
20: FreeCAD.Vector(8552.71, 0.0, -7853.21),
|
||||
21: FreeCAD.Vector(10337.6, 0.0, -9638.64),
|
||||
22: FreeCAD.Vector(12123.1, 0.0, -11424.1),
|
||||
23: FreeCAD.Vector(13024.6, 0.0, -12325.6),
|
||||
24: FreeCAD.Vector(13926.2, 0.0, -13227.2),
|
||||
25: FreeCAD.Vector(14495.4, 0.0, -13796.4),
|
||||
26: FreeCAD.Vector(15047.0, 0.0, -11148.0),
|
||||
27: FreeCAD.Vector(15047.0, 0.0, -7897.97)
|
||||
}
|
||||
efc['Seg2Elem'] = {
|
||||
1: (15, 2),
|
||||
13: (13, 27)
|
||||
}
|
||||
efc['Seg3Elem'] = {}
|
||||
''' deleted during reading because of the inout file
|
||||
efc['Seg3Elem'] = {
|
||||
2: (2, 16, 3),
|
||||
3: (3, 17, 4),
|
||||
4: (4, 18, 5),
|
||||
5: (5, 19, 6),
|
||||
6: (6, 20, 7),
|
||||
7: (7, 21, 8),
|
||||
8: (8, 22, 9),
|
||||
9: (9, 23, 10),
|
||||
10: (10, 24, 11),
|
||||
11: (11, 25, 12),
|
||||
12: (12, 26, 13)
|
||||
}
|
||||
'''
|
||||
efc['Tria3Elem'] = efc['Tria6Elem'] = efc['Quad4Elem'] = efc['Quad8Elem'] = {} # faces
|
||||
efc['Tetra4Elem'] = efc['Tetra10Elem'] = efc['Hexa8Elem'] = efc['Hexa20Elem'] = efc['Penta6Elem'] = efc['Penta15Elem'] = {} # volumes
|
||||
efc['Results'] = [
|
||||
{'time': 0.00390625},
|
||||
{'time': 0.0078125},
|
||||
{'time': 0.0136719},
|
||||
{'time': 0.0224609},
|
||||
{'time': 0.0356445},
|
||||
{'time': 0.0554199},
|
||||
{'time': 0.085083},
|
||||
{'time': 0.129578},
|
||||
{'time': 0.19632},
|
||||
{'time': 0.296432},
|
||||
{'time': 0.446602},
|
||||
{'time': 0.671856},
|
||||
{
|
||||
'number': 0,
|
||||
'time': 1.0,
|
||||
'mflow': {
|
||||
1: 78.3918, # added during reading because of the inout file
|
||||
2: 78.3918,
|
||||
3: 78.3918,
|
||||
4: 78.3918,
|
||||
5: 78.3918,
|
||||
6: 78.3918,
|
||||
7: 78.3918,
|
||||
8: 78.3918,
|
||||
9: 78.3918,
|
||||
10: 78.3918,
|
||||
11: 78.3918,
|
||||
12: 78.3918,
|
||||
13: 78.3918,
|
||||
15: 78.3918,
|
||||
16: 78.3918,
|
||||
17: 78.3918,
|
||||
18: 78.3918,
|
||||
19: 78.3918,
|
||||
20: 78.3918,
|
||||
21: 78.3918,
|
||||
22: 78.3918,
|
||||
23: 78.3918,
|
||||
24: 78.3918,
|
||||
25: 78.3918,
|
||||
26: 78.3918,
|
||||
27: 78.3918,
|
||||
28: 78.3918 # added during reading because of the inout file
|
||||
},
|
||||
'npressure': {
|
||||
1: 0.1, # added during reading because of the inout file
|
||||
2: 0.1,
|
||||
3: 0.134840,
|
||||
4: 0.128261,
|
||||
5: 0.127949,
|
||||
6: 0.155918,
|
||||
7: 0.157797,
|
||||
8: 0.191647,
|
||||
9: 0.178953,
|
||||
10: 0.180849,
|
||||
11: 0.161476,
|
||||
12: 0.162658,
|
||||
13: 0.1,
|
||||
15: 0.1,
|
||||
16: 0.117420,
|
||||
17: 0.131551,
|
||||
18: 0.128105,
|
||||
19: 0.141934,
|
||||
20: 0.156857,
|
||||
21: 0.174722,
|
||||
22: 0.185300,
|
||||
23: 0.179901,
|
||||
24: 0.171162,
|
||||
25: 0.162067,
|
||||
26: 0.131329,
|
||||
27: 0.1,
|
||||
28: 0.1 # added during reading because of the inout file
|
||||
}
|
||||
}
|
||||
]
|
||||
expected_frd_content = efc
|
||||
|
||||
# do something with the expected data
|
||||
expected_frd_content_len = []
|
||||
for key in sorted(expected_frd_content.keys()):
|
||||
expected_frd_content_len.append(len(expected_frd_content[key]))
|
||||
print(expected_frd_content_len)
|
||||
print(sorted(expected_frd_content.keys()))
|
||||
# expected results
|
||||
expected_mflow = expected_frd_content['Results'][12]['mflow']
|
||||
expected_npressure = expected_frd_content['Results'][12]['npressure']
|
||||
expected_res_len = [
|
||||
len(expected_mflow),
|
||||
len(expected_npressure)
|
||||
]
|
||||
print(expected_res_len)
|
||||
print(expected_mflow)
|
||||
print(expected_npressure)
|
||||
|
||||
# tests
|
||||
self.assertEqual(frd_content_len, expected_frd_content_len, "Length's of read frd data values are unexpected")
|
||||
self.assertEqual(frd_content['Nodes'], expected_frd_content['Nodes'], "Values of read node data are unexpected")
|
||||
self.assertEqual(frd_content['Seg2Elem'], expected_frd_content['Seg2Elem'], "Values of read Seg2 data are unexpected")
|
||||
self.assertEqual(frd_content['Seg3Elem'], expected_frd_content['Seg3Elem'], "Values of read Seg3 data are unexpected")
|
||||
self.assertEqual(res_len, expected_res_len, "Length's of read result data values are unexpected")
|
||||
self.assertEqual(read_mflow, expected_mflow, "Values of read mflow result data are unexpected")
|
||||
self.assertEqual(read_npressure, expected_npressure, "Values of read npressure result data are unexpected")
|
||||
|
||||
def tearDown(self):
|
||||
FreeCAD.closeDocument(self.doc_name)
|
||||
pass
|
||||
Reference in New Issue
Block a user