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):
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.
33 references['Entity_Node'] = nbNodes
34 references['Entity_Edge'] = nbEdges
35 references['Entity_Triangle'] = nbTriangles
37 mesures = aMesh.GetMeshInfo()
40 for key, value in mesures.iteritems():
42 for key in ('Entity_Triangle', 'Entity_Edge', 'Entity_Node'):
43 if (d[key] < (1.0 - tolerance)*references[key]) \
44 or (d[key] > (1.0 + tolerance)*references[key]):
46 print key, ": value: ", d[key], " reference: ", references[key]
47 raise ValueError("Bad number of nodes or elements")
49 # -------------------------------------
51 def controlSubMeshStats(aSubMesh, nbItems):
53 Compare number of nodes and elements with a reference,
54 with a precision of 5%.
55 Only for a subMesh, not for a mesh.
58 mesures = aSubMesh.GetMeshInfo()
60 if (nbItems < (1.0 - tolerance)*nbRef) \
61 or (nbItems > (1.0 + tolerance)*nbRef):
62 print aSubMesh.GetName()
63 print "value: ", nbRef, " reference: ", nbItems
64 raise ValueError("Bad number of nodes or elements")
66 # -------------------------------------
68 def controlStatZ(statz,refstatz):
70 Compare min, max, mean, standard deviation, percentile 5 and 95 of z of regions with a reference,
71 with a precision of 0.05m by default and 1.0m for min and max.
73 for nomreg, valsref in refstatz.iteritems():
77 tolerance = valsref[6]
78 if abs(vals[0] - valsref[0]) > 10*tolerance \
79 or abs(vals[1] - valsref[1]) > 10*tolerance \
80 or abs(vals[2] - valsref[2]) > tolerance \
81 or abs(vals[3] - valsref[3]) > tolerance \
82 or abs(vals[4] - valsref[4]) > 10*tolerance \
83 or abs(vals[5] - valsref[5]) > 10*tolerance :
86 print "reference: ", valsref, "tolerance for mean, std dev: ", tolerance, "and ", 10*tolerance, "for other values"
87 raise ValueError("z interpolation error")
91 print "reference: ", valsref, "tolerance for mean, std dev: ", tolerance, "and ", 10*tolerance, "for other values: OK"
95 from MEDLoader import MEDCouplingFieldDouble, ON_NODES, DataArrayDouble, MEDFileMesh
98 def controlTelemacResult(aMedFile, refs):
100 Check if the result med file exist and contains result fields
105 print 'waiting result...'
106 if os.path.exists(aMedFile):
110 MEDLoader.CheckFileForRead(aMedFile)
112 raise ValueError("problem while reading Telemac result med file")
113 names = MEDLoader.GetMeshNames(aMedFile)
114 infos = MEDLoader.GetUMeshGlobalInfo(aMedFile, names[0])
116 stats['nbTriangles'] = infos[0][0][0][1]
117 stats['nbNodes'] = infos[3]
118 stats['fieldNames'] = MEDLoader.GetNodeFieldNamesOnMesh(aMedFile, names[0])
119 stats['iterations'] = MEDLoader.GetNodeFieldIterations(aMedFile, names[0], 'SURFACE LIBRE')
120 for nomreg, valsref in refs.iteritems():
124 print "value: ", vals, " reference: ", valsref
125 raise ValueError("error in Telemac result")