Changeset 3013


Ignore:
Timestamp:
May 30, 2006, 11:27:54 AM (18 years ago)
Author:
duncan
Message:

fixing the black screen of death bug at the mesh generation end.

Location:
inundation
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • inundation/fit_interpolate/fit.py

    r3012 r3013  
    318318
    319319        self._build_coefficient_matrix_B(verbose)
    320         indexes = range(0,m)
    321320        loners = self.mesh.get_lone_vertices()
    322         #print "loners",loners
    323         loners.sort()
    324         loners.reverse()
    325         #print "loners",loners
    326         for lone_index in loners:
    327             indexes.pop(lone_index)
    328         #print "fit self.Atz",take(self.Atz,indexes)
     321        # FIXME  - finish this.
     322        #if len(loners)>0:
     323        #    msg = 'ERROR (least_squares): Too few data points\n'
     324        #    msg += 'There are only %d data points and alpha == 0. ' %n
     325        #    msg += 'Need at least %d\n' %m
     326        #    msg += 'Alternatively, set smoothing parameter alpha to a small '
     327        #    msg += 'positive value,\ne.g. 1.0e-3.'
     328        #    raise ToFewPointsError(msg)
     329       
    329330       
    330331        return conjugate_gradient(self.B, self.Atz, self.Atz,
  • inundation/pmesh/mesh.py

    r2778 r3013  
    13081308        triangle attribute list: [(T1att), (T2att), ...]
    13091309            (list of a list of strings)
     1310        lone point list:[point1, ...] (list of integers)
    13101311        """
    13111312        #Clear the current generated mesh values
     
    13751376                                                   ObjectNeighbor[2])
    13761377            index += 1
    1377 
     1378        genDict['lonepointlist'].sort()
     1379        genDict['lonepointlist'].reverse()       
     1380        for loner in genDict['lonepointlist']:
     1381            # Remove the loner vertex
     1382            #print "Removing the loner", loner
     1383            self.meshVertices.pop(loner)
    13781384
    13791385    def setMesh(self, genDict):
     
    19251931        load_mesh.loadASCII.export_mesh_file(ofile,dict)
    19261932
     1933    # FIXME(DSG-DSG):Break this into two functions.
     1934    #One for the outline points.
     1935    #One for the mesh points.
     1936    # Note: this function is not in the gui
    19271937    def exportPointsFile(self,ofile):
    19281938        """
  • inundation/pmesh/test_mesh.py

    r3003 r3013  
    231231
    232232
    233     def testisUserSegmentNew (self):
     233    def testisUserSegmentNewII (self):
    234234        mesh = Mesh()
    235235        a = mesh.addUserVertex(0.0, 0.0)
     
    943943        d = Vertex (1,2)
    944944        e = Vertex (3,1)
    945         f = Vertex (3,1)
     945        #f = Vertex (3,1)
    946946     
    947947        s1 = Segment(a,b, tag = 50)
     
    991991                        lFile[2] == "0.0,3.0" and
    992992                        lFile[3] == "3.0,3.0" and
    993                         lFile[4] == "1.0,2.0" and
    994                         lFile[5] == "3.0,1.0"
     993                        lFile[4] == "1.0,2.0"
    995994                        ,
    996995                        'exported Ascii xya file is wrong')
     
    19061905       
    19071906 
    1908     def not_ready_test_duplicat_verts_do_what(self):
     1907    def test_duplicat_verts_are_removed(self):
    19091908   
    19101909     
     
    19131912        c = Vertex (4.0,4.0)
    19141913        d = Vertex (4.0,0.0)
     1914        e = Vertex (4.0,0.0) # duplicate point
    19151915   
    19161916        s1 = Segment(a,b, tag = "50")
    19171917        s2 = Segment(b,c, tag = "40")
    19181918        s3 = Segment(c,d, tag = "30")
    1919         s4 = Segment(d,a, tag = "20")
    1920 
    1921         e = Vertex (4.0,0.0) # duplicate point
     1919        s4 = Segment(d,e, tag = "no where seg")
     1920        s5 = Segment(e,a, tag = "20")
     1921
    19221922       
    19231923        m = Mesh(userVertices=[a,b,c,d,e],
    1924                  userSegments=[s1,s2,s3,s4])
     1924                 userSegments=[s1,s2,s3,s4,s5])
    19251925
    19261926        seg = m.getUserSegments()
     
    19281928        holes = m.getHoles()
    19291929        regions = m.getRegions()
    1930         fileName = tempfile.mktemp(".tsh")
     1930        #fileName = tempfile.mktemp(".tsh")
    19311931        #fileName = "badmesh.tsh"
    1932         m.export_mesh_file(fileName)
     1932        #m.export_mesh_file(fileName)
    19331933        #print "***************************fileName", fileName
    19341934        #new_m = importMeshFromFile(fileName)
    1935         os.remove(fileName)
    1936        
    1937         m.generateMesh("Q", maxArea = 2.1 )
    1938 
    1939         m.export_mesh_file("from_test_mesh.tsh")
     1935        #os.remove(fileName)
     1936       
     1937        m.generateMesh("Q", maxArea = 2000.1 )
     1938
     1939        #m.export_mesh_file("from_test_mesh.tsh")
    19401940        seg = m.getMeshSegments()
    1941         #print "seg",seg
    1942         #print "seg[0].tag"
    1943         #print seg[0].tag
    1944         #print "seg[0].tag"
    1945        
    1946         self.failUnless(seg[0].tag == 5 and
    1947                         seg[1].tag == 7 and
    1948                         seg[2].tag == 9 and
    1949                         seg[3].tag == 7 and
    1950                         seg[4].tag == 9,
    1951                         'seg tags are wrong')
    1952            
    1953        
    1954         #print '**@@@@@******'
    1955         #print "new_m",new_m
    1956         #print '**@@@@@******'
    1957         #print "m",m
    1958         #print '**@@@@@******'
    1959        
    1960 
    1961         #self.failUnless( new_m == m,
    1962         #                 'loadASCIITestCase failed. test new 1')     
     1941        self.failUnless(4==len(seg),
     1942                        'FAILED!')
     1943
     1944        vert = m.getMeshVertices()
     1945        self.failUnless(4==len(vert),
     1946                        'FAILED!')
     1947 
     1948    def test_duplicat_verts_are_removedII(self):
     1949   
     1950     
     1951        a = Vertex ( 0.0 ,0.0)
     1952        b = Vertex (0.0, 4.0)
     1953        c = Vertex (4.0,4.0)
     1954        d = Vertex (4.0,0.0)
     1955        e = Vertex (4.0,0.0) # duplicate point
     1956        f = Vertex (49.0,0.0) # unused point
     1957   
     1958        s1 = Segment(a,b, tag = "50")
     1959        s2 = Segment(b,c, tag = "40")
     1960        s3 = Segment(c,d, tag = "30")
     1961        s4 = Segment(d,e, tag = "no where seg")
     1962        s5 = Segment(e,a, tag = "20")
     1963
     1964       
     1965        m = Mesh(userVertices=[a,b,c,d,e,f],
     1966                 userSegments=[s1,s2,s3,s4,s5])
     1967
     1968        seg = m.getUserSegments()
     1969        points = m.getUserVertices()
     1970        holes = m.getHoles()
     1971        regions = m.getRegions()
     1972        #fileName = tempfile.mktemp(".tsh")
     1973        #fileName = "badmesh.tsh"
     1974        #m.export_mesh_file(fileName)
     1975        #print "***************************fileName", fileName
     1976        #new_m = importMeshFromFile(fileName)
     1977        #os.remove(fileName)
     1978       
     1979        m.generateMesh("Q", maxArea = 2000.1 )
     1980
     1981        #m.export_mesh_file("from_test_mesh.tsh")
     1982        seg = m.getMeshSegments()
     1983        self.failUnless(4==len(seg),
     1984                        'FAILED!')
     1985
     1986        vert = m.getMeshVertices()
     1987        self.failUnless(4==len(vert),
     1988                        'FAILED!')
     1989       
    19631990def list_comp(A,B):
    19641991    yes = len(A)==len(B)
     
    19732000if __name__ == "__main__":
    19742001    suite = unittest.makeSuite(meshTestCase,'test')
    1975     #suite = unittest.makeSuite(meshTestCase,'not_ready_test_duplicat_verts_do_what')
     2002    #suite = unittest.makeSuite(meshTestCase,'test_duplicat_verts_do_what')
    19762003    runner = unittest.TextTestRunner() #verbosity=2)
    19772004    runner.run(suite)
  • inundation/pmesh/test_mesh_interface.py

    r2402 r3013  
    221221                        'FAILED!')
    222222
     223
     224    def test_create_mesh_from_regions_with_duplicate_verts(self):
     225
     226        # These are the absolute values
     227       
     228        polygon_absolute = [[0.0,0.0],
     229                            [0,4.0],
     230                            [4.0,4.0],
     231                            [4.0,0.0],
     232                            [4.0,0.0]]
     233       
     234        x_p = -10
     235        y_p = -40
     236        zone = 808
     237        geo_ref_poly = Geo_reference(zone, x_p, y_p)
     238        polygon = geo_ref_poly.change_points_geo_ref(polygon_absolute)
     239
     240        boundary_tags = {'50':[0],
     241                         '40':[1],
     242                         '30':[2],
     243                         'no where seg':[3],
     244                         '20':[4]
     245                         }
     246       
     247        m = create_mesh_from_regions(polygon,
     248                                     boundary_tags,
     249                                     10000000,
     250                                     poly_geo_reference=geo_ref_poly)
     251       
     252
     253        fileName = "badmesh.tsh"
     254        #m.export_mesh_file(fileName)
     255       
    223256#-------------------------------------------------------------
    224257if __name__ == "__main__":
  • inundation/triangle/test_triangmodule.py

    r2141 r3013  
    298298                        'triangleattributelist is wrong!')
    299299       
    300        
     300     
     301    def test_lone_verts(self):
     302
     303        points = []
     304        seglist = []
     305        holelist = []
     306        regionlist = []
     307
     308        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0),(0.0,10.0)]
     309        pointattlist = [[],[],[],[],[]]
     310        regionlist.append( (1.2,1.2,5.0) )
     311        seglist = [(0,4),(4,1),(1,3),(3,2),(2,0)]
     312        segattlist = [0,0,0,0,0]
     313        trilist = []
     314        mode = "Qzp"
     315        data = triang.genMesh(points,seglist,holelist,regionlist,
     316                              pointattlist,segattlist,trilist, mode)
     317        #print "data['generatedtrianglelist']", data['generatedtrianglelist']
     318        self.failUnless(data['generatedtrianglelist'] ==[(4, 0, 2), (2, 3, 4)],
     319                        'trianglelist is wrong!')
     320        self.failUnless(data['generatedsegmentlist'] ==[(0, 4), (4, 3),
     321                                                        (3, 2), (2, 0)],
     322                        'segmentlist is wrong!')
     323        self.failUnless(data['generatedpointlist'] ==[(0.0, 0.0), (0.0, 10.0),
     324                                                      (3.0, 0.0), (3.0, 10.0),
     325                                                      (0.0,10.0)],
     326                        ' is wrong!')
     327        self.failUnless(data['lonepointlist'] ==[1],
     328                        'lonepointlist is wrong!')
     329        #print "", data['lonepointlist']
     330   
     331    def test_lone_vertsII(self):
     332
     333        points = []
     334        seglist = []
     335        holelist = []
     336        regionlist = []
     337
     338        points = [(0.0,0.0),(0.0,0.0),(0.0,10.0),(0.0,10.0),(10.0,10.0),
     339                  (10.0,10.0),(0.0,10.0),(10.0,0.0)]
     340       
     341        pointattlist = []
     342        for point in points:
     343            pointattlist.append([])
     344        seglist = [(0,1),(1,2),(2,3),(3,4),(4,5),(5,7),(7,0)]       
     345        segattlist = []
     346        for seg in seglist:
     347            segattlist.append(0)
     348        trilist = []
     349        mode = "Qzp"
     350        data = triang.genMesh(points,seglist,holelist,regionlist,
     351                              pointattlist,segattlist,trilist, mode)
     352        #print "data['generatedtrianglelist']", data['generatedtrianglelist']
     353        self.failUnless(data['generatedtrianglelist'] ==[(6, 1, 7), (7, 5, 6)],
     354                        'trianglelist is wrong!')
     355        self.failUnless(data['generatedsegmentlist'] ==[(1, 6), (6, 5),
     356                                                        (5, 7), (7, 1)],
     357                        'segmentlist is wrong!')
     358        self.failUnless(data['generatedpointlist'] ==[(0.0,0.0),(0.0,0.0),
     359                                                      (0.0,10.0),(0.0,10.0),
     360                                                      (10.0,10.0),
     361                                                      (10.0,10.0),(0.0,10.0),
     362                                                      (10.0,0.0)],
     363                        ' is wrong!')
     364        self.failUnless(data['lonepointlist'] ==[0,2,3,4],
     365                        'lonepointlist is wrong!')
     366
    301367if __name__ == "__main__":
    302368
  • inundation/triangle/triang.c

    r2526 r3013  
    7676  PyObject *Attrlist;
    7777  REAL Attr;
    78   int i, j, iatt, n;
     78  int i, j, iatt, n, write_here;
    7979  int a,b,c;
    8080  int marker;
     
    9090  int listsize,attsize ;
    9191  PyObject  *ii;
    92      
     92 
     93  int *points_connected;
     94       
    9395  if(!PyArg_ParseTuple(args,(char *)"OOOOOOOO",&hull,&seglist,&holelist,&regionlist,&pointattributelist,&segmarkerlist,&trianglelist,&mode)){
    9496    return NULL;
     
    369371  out.regionlist = (REAL *)NULL;
    370372   
     373 
    371374  /*printf("\n\nTriangulate input args: %s \n\n", mod); */
    372375  triangulate(mod, &in, &out, (struct triangulateio *)NULL );
     
    379382  holder = PyDict_New();
    380383     
     384  /* list of int's, used to keep track of which verts are connected to
     385     triangles. */
     386  points_connected = (int *)malloc(out.numberofpoints*sizeof(int));
     387 
    381388  /* Add pointlist */
    382389  listsize = out.numberofpoints;
     
    387394                                    out.pointlist[i*2  ], out.pointlist[i*2+1]); 
    388395    PyList_SetItem(holderlist,i, mlist);
     396    points_connected[i] = 0;
    389397  } 
    390398  ii=PyString_FromString("generatedpointlist");
     
    419427  ii=PyString_FromString("generatedpointattributelist");
    420428  PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii); Py_DECREF(holderlist); 
     429 
    421430 
    422431  /* Add triangle list */
     
    427436                                    out.trianglelist[i*3  ], out.trianglelist [i*3+1], out.trianglelist [i*3+2]);   
    428437    PyList_SetItem(holderlist,i, mlist);
     438    /* printf(" A vert index %i\n",out.trianglelist[i*3] );
     439    printf(" A vert index %i\n",out.trianglelist[i*3+1] );
     440    printf(" A vert index %i\n",out.trianglelist[i*3+2] ); */
     441    points_connected[out.trianglelist[i*3]] = 1;
     442    points_connected[out.trianglelist[i*3+1]] = 1;
     443    points_connected[out.trianglelist[i*3+2]] = 1;
    429444  }   
    430445  ii=PyString_FromString("generatedtrianglelist");
    431446  PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii); Py_DECREF(holderlist);
    432      
     447 
     448  /* convert the points_connected vector from a true(1) false(0) vector, where
     449     index is the vert, to a vector of the lone verts, at the beggining
     450     of the vector. */
     451  write_here = 0;   
     452  for(i=0; i<out.numberofpoints;i++){
     453    if (0 == points_connected[i]) {
     454      points_connected[write_here] = i;
     455      write_here ++;
     456    }
     457  }   
     458  /* printf(" ******************** \n" );
     459  for(i=0; i<write_here;i++){
     460    printf(" A vert index %i\n",points_connected[i] );
     461    } */
     462 
     463  listsize = write_here;
     464  holderlist = PyList_New(listsize);
     465  for(i=0; i<listsize;i++){
     466   PyObject *mlist = Py_BuildValue((char *)"i", points_connected[i]);   
     467    PyList_SetItem(holderlist,i, mlist);
     468  }
     469  ii=PyString_FromString("lonepointlist");
     470  PyDict_SetItem(holder, ii, holderlist); Py_DECREF(ii); Py_DECREF(holderlist); 
    433471     
    434472  /* Add triangle attribute list */
     
    531569    free(out.regionlist); out.regionlist=NULL;
    532570  }
    533    
     571  if(!points_connected ){
     572    free(points_connected ); points_connected =NULL;
     573  }
     574   
     575 
     576 
    534577  /*  IN */
    535578 
Note: See TracChangeset for help on using the changeset viewer.