1 # -*- coding: utf-8 -*-
3 # -------------------------------------
5 def controlGeomProps(geompy, geomShape, refLength, refArea):
7 compare area and length of a geometric face with a reference,
8 with relative precision of 1.E-3
10 props = geompy.BasicProperties(geomShape)
11 print(" Wires length: ", props[0])
12 print(" Surface area: ", props[1])
13 print(" Volume : ", props[2])
14 deltaLength = 2.0*abs((props[0] - refLength)/(props[0] + refLength))
15 deltaArea = 2.0*abs((props[1] - refArea)/(props[1] + refArea))
16 if deltaLength > 1e-3 or deltaArea > 1e-3 or props[2] != 0:
17 print("While must be:")
18 print(" Wires length: ", refLength)
19 print(" Surface area: ", refArea)
20 print(" Volume : ", 0.)
21 raise ValueError("Bad length or area")
23 # -------------------------------------
25 def controlMeshStats(aMesh, nbNodes, nbEdges, nbTriangles, tolerance=0.05):
27 Compare number of nodes and elements with a reference,
28 with a precision of 5%.
29 Only for a mesh, not for a subMesh.
32 references['Entity_Node'] = nbNodes
33 references['Entity_Edge'] = nbEdges
34 references['Entity_Triangle'] = nbTriangles
36 mesures = aMesh.GetMeshInfo()
39 for key, value in mesures.items():
41 for key in ('Entity_Triangle', 'Entity_Edge', 'Entity_Node'):
42 if (d[key] < (1.0 - tolerance)*references[key]) \
43 or (d[key] > (1.0 + tolerance)*references[key]):
44 print(aMesh.GetName())
45 print(key, ": value: ", d[key], " reference: ", references[key])
46 raise ValueError("Bad number of nodes or elements")
48 # -------------------------------------
50 def controlSubMeshStats(aSubMesh, nbItems, tolerance=0.05):
52 Compare number of nodes and elements with a reference,
53 with a precision of 5%.
54 Only for a subMesh, not for a mesh.
56 mesures = aSubMesh.GetMeshInfo()
58 if (nbItems < (1.0 - tolerance)*nbRef) \
59 or (nbItems > (1.0 + tolerance)*nbRef):
60 print(aSubMesh.GetName())
61 print("value: ", nbRef, " reference: ", nbItems)
62 raise ValueError("Bad number of nodes or elements")
64 # -------------------------------------
66 def controlStatZ(statz,refstatz):
68 Compare min, max, mean, standard deviation, percentile 5 and 95 of z of regions with a reference,
69 with a precision of 0.05m by default and 1.0m for min and max.
71 for nomreg, valsref in refstatz.items():
75 tolerance = valsref[6]
76 if abs(vals[0] - valsref[0]) > 10*tolerance \
77 or abs(vals[1] - valsref[1]) > 10*tolerance \
78 or abs(vals[2] - valsref[2]) > tolerance \
79 or abs(vals[3] - valsref[3]) > tolerance \
80 or abs(vals[4] - valsref[4]) > 10*tolerance \
81 or abs(vals[5] - valsref[5]) > 10*tolerance :
83 print("value: ", vals)
84 print("reference: ", valsref, "tolerance for mean, std dev: ", tolerance, "and ", 10*tolerance, "for other values")
85 raise ValueError("z interpolation error")
88 print("value: ", vals)
89 print("reference: ", valsref, "tolerance for mean, std dev: ", tolerance, "and ", 10*tolerance, "for other values (0, 1, 4, 5): OK")
91 def controlValues(vals, refs, tol = 0.1):
93 control a list of values against a list of references, with an absolute tolerance
95 print("values: ", vals)
96 print("references: ", refs)
97 print("tolerance: ", tol)
98 for v,r in zip(vals, refs):
101 print("reference: ", r)
102 print("tolerance: ", tol)
103 raise ValueError("value error")
106 from MEDLoader import MEDCouplingFieldDouble, ON_NODES, DataArrayDouble, MEDFileMesh
109 def controlTelemacResult(aMedFile, refs):
111 Check if the result med file exist and contains result fields
116 print('waiting result...')
117 if os.path.exists(aMedFile):
121 MEDLoader.CheckFileForRead(aMedFile)
123 raise ValueError("problem while reading Telemac result med file")
124 names = MEDLoader.GetMeshNames(aMedFile)
125 infos = MEDLoader.GetUMeshGlobalInfo(aMedFile, names[0])
127 stats['nbTriangles'] = infos[0][0][0][1]
128 stats['nbNodes'] = infos[3]
129 stats['fieldNames'] = MEDLoader.GetNodeFieldNamesOnMesh(aMedFile, names[0])
130 stats['iterations'] = MEDLoader.GetNodeFieldIterations(aMedFile, names[0], stats['fieldNames'][0])
131 for nomreg, valsref in refs.items():
135 print("value: ", vals, " reference: ", valsref)
136 raise ValueError("error in Telemac result")