Changeset 8545


Ignore:
Timestamp:
Aug 30, 2012, 8:05:57 PM (13 years ago)
Author:
steve
Message:

Changed vanilla communication to array communication

Location:
trunk/anuga_core/source/anuga_parallel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/anuga_core/source/anuga_parallel/distribute_mesh.py

    r8544 r8545  
    6565    # Find the new ordering of the triangles
    6666
    67     for i in range(N):
     67    for i in xrange(N):
    6868        bin = tri_index[i][0]
    6969        bin_off_set = tri_index[i][1]
     
    133133   
    134134    proc_sum = []
    135     for i in range(n_procs):
     135    for i in xrange(n_procs):
    136136        tri_list.append([])
    137137        triangles_per_proc.append(0)
     
    168168       
    169169        triangles = []       
    170         for i in range(n_tri):
     170        for i in xrange(n_tri):
    171171            triangles_per_proc[epart[i]] = triangles_per_proc[epart[i]] + 1
    172172            tri_list[epart[i]].append(domain.triangles[i])
     
    178178        # i+1
    179179
    180         for i in range(n_procs):
     180        for i in xrange(n_procs):
    181181            for t in tri_list[i]:
    182182                triangles.append(t)
     
    186186
    187187        proc_sum[0] = 0
    188         for i in range(n_procs - 1):
     188        for i in xrange(n_procs - 1):
    189189            proc_sum[i+1]=proc_sum[i]+triangles_per_proc[i]
    190190
     
    219219
    220220    ttriangles = num.zeros((len(triangles), 3), num.int)
    221     for i in range(len(triangles)):
     221    for i in xrange(len(triangles)):
    222222        ttriangles[i] = triangles[i]
    223223
     
    290290    # Loop over processors
    291291
    292     for p in range(nproc):
     292    for p in xrange(nproc):
    293293
    294294        # Find triangles on processor p
     
    375375       
    376376        n = mesh.neighbours[t, 0]
    377 
    378377        if n >= 0:
    379378            if n < tlower or n >= tupper:
    380379                trianglemap[n] = 1
     380
    381381        n = mesh.neighbours[t, 1]
    382382        if n >= 0:
    383383            if n < tlower or n >= tupper:
    384384                trianglemap[n] = 1
     385
    385386        n = mesh.neighbours[t, 2]
    386387        if n >= 0:
     
    394395        for t in range(len(trianglemap)):
    395396            if trianglemap[t]==i+1:
     397
    396398                n = mesh.neighbours[t, 0]
    397399                if n >= 0:
    398400                    if (n < tlower or n >= tupper) and trianglemap[n] == 0:
    399401                        trianglemap[n] = i+2
     402
    400403                n = mesh.neighbours[t, 1]
    401404                if n >= 0:
    402405                    if (n < tlower or n >= tupper) and trianglemap[n] == 0:
    403406                        trianglemap[n] = i+2
     407
    404408                n = mesh.neighbours[t, 2]
    405409                if n >= 0:
     
    410414
    411415
    412 
    413 
    414 
    415416    nodemap = num.zeros(ncoord, 'i')
    416417    fullnodes = submesh["full_nodes"][p]
    417418
    418419    subtriangles = []
    419     for i in range(len(trianglemap)):
     420    for i in xrange(len(trianglemap)):
    420421        if trianglemap[i] != 0:
    421422            t = list(mesh.triangles[i])
     
    547548    ghost_commun = num.zeros((len(subtri), 2), num.int)
    548549
    549     for i in range(len(subtri)):
     550    for i in xrange(len(subtri)):
    550551        global_no = subtri[i][0]
    551552
     
    555556        neigh = nproc-1
    556557        sum = 0
    557         for q in range(nproc-1):
     558        for q in xrange(nproc-1):
    558559            if (global_no < sum+tri_per_proc[q]):
    559560                neigh = q
     
    598599    # Loop over the processor
    599600
    600     for p in range(nproc):
     601    for p in xrange(nproc):
    601602
    602603        # Loop over the full triangles in the current processor
     
    605606        fcommun = {}
    606607        tupper = tri_per_proc[p]+tlower
    607         for i in range(tlower, tupper):
     608        for i in xrange(tlower, tupper):
    608609            fcommun[i] = []
    609610        full_commun.append(fcommun)
     
    612613    # Loop over the processor again
    613614
    614     for p in range(nproc):
     615    for p in xrange(nproc):
    615616
    616617        # Loop over the ghost triangles in the current processor,
     
    664665    # Loop over the processors
    665666
    666     for p in range(nproc):
     667    for p in xrange(nproc):
    667668
    668669        # Find the full triangles in this processor
     
    746747    # Loop trough the subdomains
    747748
    748     for p in range(nproc):
     749    for p in xrange(nproc):
    749750        upper =   lower+triangles_per_proc[p]
    750751
     
    753754        global_id = []
    754755        M = len(submesh["ghost_triangles"][p])
    755         for j in range(M):
     756        for j in xrange(M):
    756757            global_id.append(submesh["ghost_triangles"][p][j][0])
    757758
     
    862863
    863864    NGlobal = 0
    864     for i in range(Nnodes):
     865    for i in xrange(Nnodes):
    865866        if nodes[i][0] > NGlobal:
    866867            NGlobal = nodes[i][0]
     
    923924    ghostc = num.sort(ghostc, 0)
    924925   
    925     for c in range(nproc):
     926    for c in xrange(nproc):
    926927        s = ghostc[:,0]
    927928        d = num.compress(num.equal(ghostc[:,1],c), s)
     
    937938    tmp_send = {}
    938939    for global_id in fullc:
    939         for i in range(len(fullc[global_id])):
     940        for i in xrange(len(fullc[global_id])):
    940941            neigh = fullc[global_id][i]
    941942            if not tmp_send.has_key(neigh):
     
    9991000
    10001001    NGlobal = upper_t
    1001     for i in range(len(submesh["ghost_triangles"])):
     1002    for i in xrange(len(submesh["ghost_triangles"])):
    10021003        id = submesh["ghost_triangles"][i][0]
    10031004        if id > NGlobal:
     
    10061007    tri_map = -1*num.ones(int(NGlobal)+1, num.int)
    10071008    tri_map[lower_t:upper_t]=num.arange(upper_t-lower_t)
    1008     for i in range(len(submesh["ghost_triangles"])):
     1009    for i in xrange(len(submesh["ghost_triangles"])):
    10091010        tri_map[submesh["ghost_triangles"][i][0]] = i+upper_t-lower_t
    10101011   
     
    10961097
    10971098
    1098     def protocol(x):
    1099         vanilla=False
    1100         control_info, x = pypar.create_control_info(x, vanilla, return_object=True)
    1101         print 'protocol', control_info[0]
    1102 
    1103     # FIXME SR: Creates cPickle dump
    1104     print 'tagmap', tagmap
    1105     protocol(tagmap)
     1099    # send boundary tags
    11061100    pypar.send(tagmap, p)
    11071101
    11081102    # send the quantities key information
    1109 
    1110     # FIXME SR: Creates cPickle dump
    1111     print 'full_quant keys', submesh["full_quan"].keys()
    1112     protocol(submesh["full_quan"].keys())
    11131103    pypar.send(submesh["full_quan"].keys(), p)
    11141104
     
    11331123    setup_array[8] = len(submesh["full_quan"])
    11341124
    1135     i=0
    1136 
    11371125    x = num.array(setup_array, num.int)
    11381126    pypar.send(x, p, bypass=True)
     
    12381226
    12391227    # receive the quantities key information
    1240 
    12411228    qkeys = pypar.receive(p)
    12421229
    1243 
    12441230    # recieve information about the array sizes
    1245 
    12461231    x = num.zeros((9,),num.int)
    12471232    pypar.receive(p, buffer=x,  bypass=True)
     
    12581243    no_quantities      = setup_array[8]
    12591244
    1260 
    1261 
    1262     print 'setup_array', setup_array
    12631245   
    12641246    # ghost layer width
  • trunk/anuga_core/source/anuga_parallel/parallel_api.py

    r8544 r8545  
    136136           
    137137        # Send serial to parallel (s2p) and parallel to serial (p2s) triangle mapping to proc 1 .. numprocs
     138
     139
     140
     141        n = len(s2p_map)
     142        s2p_map_keys_flat = num.reshape(num.array(s2p_map.keys(),num.int), (n,1) )
     143        s2p_map_values_flat = num.array(s2p_map.values(),num.int)
     144        s2p_map_flat = num.concatenate( (s2p_map_keys_flat, s2p_map_values_flat), axis=1 )
     145
     146        n = len(p2s_map)
     147        p2s_map_keys_flat = num.reshape(num.array(p2s_map.keys(),num.int), (n,2) )
     148        p2s_map_values_flat = num.reshape(num.array(p2s_map.values(),num.int) , (n,1))
     149        p2s_map_flat = num.concatenate( (p2s_map_keys_flat, p2s_map_values_flat), axis=1 )
     150       
    138151        for p in range(1, numprocs):
     152
    139153            # FIXME SR: Creates cPickle dump
    140 
    141             print '*** s2p'
    142             protocol(s2p_map)
    143 
    144             n = len(s2p_map)
    145             s2p_map_keys_flat = num.reshape(num.array(s2p_map.keys(),num.int), (n,1) )
    146 
    147             print s2p_map_keys_flat.shape
    148 
    149             s2p_map_values_flat = num.array(s2p_map.values(),num.int)
    150             print s2p_map_values_flat.shape
    151            
    152             s2p_map_flat = num.concatenate( (s2p_map_keys_flat, s2p_map_values_flat), axis=1 )
    153             #print s2p_map_keys_flat
    154             #print s2p_map_values_flat
    155             #print s2p_map_flat
    156 
    157154            send(s2p_map_flat, p)
    158155            # FIXME SR: Creates cPickle dump
    159156            #print p2s_map
    160             send(p2s_map, p)
     157            send(p2s_map_flat, p)
    161158
    162159        if verbose: print 'Communication done'
     
    182179        s2p_map = dict.fromkeys(s2p_map_flat[:,0], s2p_map_flat[:,1:2])
    183180
    184         p2s_map = receive(0)
    185 
     181        p2s_map_flat = receive(0)
     182        p2s_map_keys = [tuple(x) for x in p2s_map_flat[:,0:1]]
     183
     184        p2s_map = dict.fromkeys(p2s_map_keys, p2s_map_flat[:,2])
    186185
    187186    #------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.