Salome HOME
ajout cas interpolation Z digue et corrections cas précédents
[modules/hydro.git] / src / HYDROTools / controls.py
1 # -*- coding: utf-8 -*-
2
3 # -------------------------------------
4
5 def controlGeomProps(geompy, geomShape, refLength, refArea):
6   """
7   compare area and length of a geometric face with a reference,
8   with relative precision of 1.E-7 
9   """
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") 
22
23 # -------------------------------------
24
25 def controlMeshStats(aMesh, nbNodes, nbEdges, nbTriangles):
26   """
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.
30   """
31   tolerance = 0.05
32   references = {}
33   references['Entity_Node'] = nbNodes
34   references['Entity_Edge'] = nbEdges
35   references['Entity_Triangle'] = nbTriangles
36   
37   mesures = aMesh.GetMeshInfo()
38   #print mesures
39   d= {}
40   for key, value in mesures.iteritems():
41     d[str(key)] = value
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]):
45       print aMesh.GetName()
46       print key, ": value: ", d[key], " reference: ", references[key]
47       raise ValueError("Bad number of nodes or elements") 
48   
49 # -------------------------------------
50
51 def controlSubMeshStats(aSubMesh, nbItems):
52   """
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.
56   """
57   tolerance = 0.05
58   mesures = aSubMesh.GetMeshInfo()
59   nbRef = sum(mesures)
60   if (nbItems < (1.0 - tolerance)*nbRef) \
61   or (nbItems > (1.0 + tolerance)*nbRef):
62     print aSubMesh.GetName()
63     print "value: ", nbItems, " reference: ", nbRef
64     raise ValueError("Bad number of nodes or elements") 
65   
66 # -------------------------------------
67
68 def controlStatZ(statz,refstatz):
69   """
70   Compare min and max of z of regions with a reference,
71   with a precision of 0.05m.
72   """
73   tolerance = 0.05 # metres
74   for nomreg, valsref in refstatz.iteritems():
75     vals = statz[nomreg]
76     if abs(vals[0] - valsref[0]) > tolerance \
77     or abs(vals[1] - valsref[1]) > tolerance:
78       print nomreg
79       print "value: ", vals, " reference: ", valsref
80       raise ValueError("z interpolation error")