X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROTools%2Fcontrols.py;h=72246bc44133406dfb07011d1b3a2f3f71608033;hb=d3b5be21469d84b315ac0428753244ddb6c995a3;hp=a69e6ec4104e331dbebcf9ea75ab3dcc9115276d;hpb=79b7f30fd1aa53e12b20ad04db237ade543b47ca;p=modules%2Fhydro.git diff --git a/src/HYDROTools/controls.py b/src/HYDROTools/controls.py index a69e6ec4..72246bc4 100644 --- a/src/HYDROTools/controls.py +++ b/src/HYDROTools/controls.py @@ -5,7 +5,7 @@ def controlGeomProps(geompy, geomShape, refLength, refArea): """ compare area and length of a geometric face with a reference, - with relative precision of 1.E-7 + with relative precision of 1.E-3 """ props = geompy.BasicProperties(geomShape) print " Wires length: ", props[0] @@ -18,7 +18,7 @@ def controlGeomProps(geompy, geomShape, refLength, refArea): print " Wires length: ", refLength print " Surface area: ", refArea print " Volume : ", 0. - raise ValueError("Bad length or area") + raise ValueError("Bad length or area") # ------------------------------------- @@ -33,7 +33,7 @@ def controlMeshStats(aMesh, nbNodes, nbEdges, nbTriangles): references['Entity_Node'] = nbNodes references['Entity_Edge'] = nbEdges references['Entity_Triangle'] = nbTriangles - + mesures = aMesh.GetMeshInfo() #print mesures d= {} @@ -44,8 +44,8 @@ def controlMeshStats(aMesh, nbNodes, nbEdges, nbTriangles): or (d[key] > (1.0 + tolerance)*references[key]): print aMesh.GetName() print key, ": value: ", d[key], " reference: ", references[key] - raise ValueError("Bad number of nodes or elements") - + raise ValueError("Bad number of nodes or elements") + # ------------------------------------- def controlSubMeshStats(aSubMesh, nbItems): @@ -60,21 +60,67 @@ def controlSubMeshStats(aSubMesh, nbItems): if (nbItems < (1.0 - tolerance)*nbRef) \ or (nbItems > (1.0 + tolerance)*nbRef): print aSubMesh.GetName() - print "value: ", nbItems, " reference: ", nbRef - raise ValueError("Bad number of nodes or elements") - + print "value: ", nbRef, " reference: ", nbItems + raise ValueError("Bad number of nodes or elements") + # ------------------------------------- def controlStatZ(statz,refstatz): """ - Compare min and max of z of regions with a reference, - with a precision of 0.05m. + Compare min, max, mean, standard deviation, percentile 5 and 95 of z of regions with a reference, + with a precision of 0.05m by default and 1.0m for min and max. """ - tolerance = 0.05 # metres for nomreg, valsref in refstatz.iteritems(): vals = statz[nomreg] - if abs(vals[0] - valsref[0]) > tolerance \ - or abs(vals[1] - valsref[1]) > tolerance: + tolerance =0.1 + if len(valsref) > 6: + tolerance = valsref[6] + if abs(vals[0] - valsref[0]) > 10*tolerance \ + or abs(vals[1] - valsref[1]) > 10*tolerance \ + or abs(vals[2] - valsref[2]) > tolerance \ + or abs(vals[3] - valsref[3]) > tolerance \ + or abs(vals[4] - valsref[4]) > 10*tolerance \ + or abs(vals[5] - valsref[5]) > 10*tolerance : + print nomreg + print "value: ", vals + print "reference: ", valsref, "tolerance for mean, std dev: ", tolerance, "and ", 10*tolerance, "for other values" + raise ValueError("z interpolation error") + else: + print nomreg + print "value: ", vals + print "reference: ", valsref, "tolerance for mean, std dev: ", tolerance, "and ", 10*tolerance, "for other values: OK" + + +import MEDLoader +from MEDLoader import MEDCouplingFieldDouble, ON_NODES, DataArrayDouble, MEDFileMesh +import os, time + +def controlTelemacResult(aMedFile, refs): + """ + Check if the result med file exist and contains result fields + """ + print aMedFile + for i in range(10): + time.sleep(3) + print 'waiting result...' + if os.path.exists(aMedFile): + break + time.sleep(3) + try: + MEDLoader.CheckFileForRead(aMedFile) + except: + raise ValueError("problem while reading Telemac result med file") + names = MEDLoader.GetMeshNames(aMedFile) + infos = MEDLoader.GetUMeshGlobalInfo(aMedFile, names[0]) + stats = {} + stats['nbTriangles'] = infos[0][0][0][1] + stats['nbNodes'] = infos[3] + stats['fieldNames'] = MEDLoader.GetNodeFieldNamesOnMesh(aMedFile, names[0]) + stats['iterations'] = MEDLoader.GetNodeFieldIterations(aMedFile, names[0], 'SURFACE LIBRE') + for nomreg, valsref in refs.iteritems(): + vals = stats[nomreg] + if vals != valsref: print nomreg print "value: ", vals, " reference: ", valsref - raise ValueError("z interpolation error") + raise ValueError("error in Telemac result") +