Changeset 8545
- Timestamp:
- Aug 30, 2012, 8:05:57 PM (13 years ago)
- 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 65 65 # Find the new ordering of the triangles 66 66 67 for i in range(N):67 for i in xrange(N): 68 68 bin = tri_index[i][0] 69 69 bin_off_set = tri_index[i][1] … … 133 133 134 134 proc_sum = [] 135 for i in range(n_procs):135 for i in xrange(n_procs): 136 136 tri_list.append([]) 137 137 triangles_per_proc.append(0) … … 168 168 169 169 triangles = [] 170 for i in range(n_tri):170 for i in xrange(n_tri): 171 171 triangles_per_proc[epart[i]] = triangles_per_proc[epart[i]] + 1 172 172 tri_list[epart[i]].append(domain.triangles[i]) … … 178 178 # i+1 179 179 180 for i in range(n_procs):180 for i in xrange(n_procs): 181 181 for t in tri_list[i]: 182 182 triangles.append(t) … … 186 186 187 187 proc_sum[0] = 0 188 for i in range(n_procs - 1):188 for i in xrange(n_procs - 1): 189 189 proc_sum[i+1]=proc_sum[i]+triangles_per_proc[i] 190 190 … … 219 219 220 220 ttriangles = num.zeros((len(triangles), 3), num.int) 221 for i in range(len(triangles)):221 for i in xrange(len(triangles)): 222 222 ttriangles[i] = triangles[i] 223 223 … … 290 290 # Loop over processors 291 291 292 for p in range(nproc):292 for p in xrange(nproc): 293 293 294 294 # Find triangles on processor p … … 375 375 376 376 n = mesh.neighbours[t, 0] 377 378 377 if n >= 0: 379 378 if n < tlower or n >= tupper: 380 379 trianglemap[n] = 1 380 381 381 n = mesh.neighbours[t, 1] 382 382 if n >= 0: 383 383 if n < tlower or n >= tupper: 384 384 trianglemap[n] = 1 385 385 386 n = mesh.neighbours[t, 2] 386 387 if n >= 0: … … 394 395 for t in range(len(trianglemap)): 395 396 if trianglemap[t]==i+1: 397 396 398 n = mesh.neighbours[t, 0] 397 399 if n >= 0: 398 400 if (n < tlower or n >= tupper) and trianglemap[n] == 0: 399 401 trianglemap[n] = i+2 402 400 403 n = mesh.neighbours[t, 1] 401 404 if n >= 0: 402 405 if (n < tlower or n >= tupper) and trianglemap[n] == 0: 403 406 trianglemap[n] = i+2 407 404 408 n = mesh.neighbours[t, 2] 405 409 if n >= 0: … … 410 414 411 415 412 413 414 415 416 nodemap = num.zeros(ncoord, 'i') 416 417 fullnodes = submesh["full_nodes"][p] 417 418 418 419 subtriangles = [] 419 for i in range(len(trianglemap)):420 for i in xrange(len(trianglemap)): 420 421 if trianglemap[i] != 0: 421 422 t = list(mesh.triangles[i]) … … 547 548 ghost_commun = num.zeros((len(subtri), 2), num.int) 548 549 549 for i in range(len(subtri)):550 for i in xrange(len(subtri)): 550 551 global_no = subtri[i][0] 551 552 … … 555 556 neigh = nproc-1 556 557 sum = 0 557 for q in range(nproc-1):558 for q in xrange(nproc-1): 558 559 if (global_no < sum+tri_per_proc[q]): 559 560 neigh = q … … 598 599 # Loop over the processor 599 600 600 for p in range(nproc):601 for p in xrange(nproc): 601 602 602 603 # Loop over the full triangles in the current processor … … 605 606 fcommun = {} 606 607 tupper = tri_per_proc[p]+tlower 607 for i in range(tlower, tupper):608 for i in xrange(tlower, tupper): 608 609 fcommun[i] = [] 609 610 full_commun.append(fcommun) … … 612 613 # Loop over the processor again 613 614 614 for p in range(nproc):615 for p in xrange(nproc): 615 616 616 617 # Loop over the ghost triangles in the current processor, … … 664 665 # Loop over the processors 665 666 666 for p in range(nproc):667 for p in xrange(nproc): 667 668 668 669 # Find the full triangles in this processor … … 746 747 # Loop trough the subdomains 747 748 748 for p in range(nproc):749 for p in xrange(nproc): 749 750 upper = lower+triangles_per_proc[p] 750 751 … … 753 754 global_id = [] 754 755 M = len(submesh["ghost_triangles"][p]) 755 for j in range(M):756 for j in xrange(M): 756 757 global_id.append(submesh["ghost_triangles"][p][j][0]) 757 758 … … 862 863 863 864 NGlobal = 0 864 for i in range(Nnodes):865 for i in xrange(Nnodes): 865 866 if nodes[i][0] > NGlobal: 866 867 NGlobal = nodes[i][0] … … 923 924 ghostc = num.sort(ghostc, 0) 924 925 925 for c in range(nproc):926 for c in xrange(nproc): 926 927 s = ghostc[:,0] 927 928 d = num.compress(num.equal(ghostc[:,1],c), s) … … 937 938 tmp_send = {} 938 939 for global_id in fullc: 939 for i in range(len(fullc[global_id])):940 for i in xrange(len(fullc[global_id])): 940 941 neigh = fullc[global_id][i] 941 942 if not tmp_send.has_key(neigh): … … 999 1000 1000 1001 NGlobal = upper_t 1001 for i in range(len(submesh["ghost_triangles"])):1002 for i in xrange(len(submesh["ghost_triangles"])): 1002 1003 id = submesh["ghost_triangles"][i][0] 1003 1004 if id > NGlobal: … … 1006 1007 tri_map = -1*num.ones(int(NGlobal)+1, num.int) 1007 1008 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"])): 1009 1010 tri_map[submesh["ghost_triangles"][i][0]] = i+upper_t-lower_t 1010 1011 … … 1096 1097 1097 1098 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 1106 1100 pypar.send(tagmap, p) 1107 1101 1108 1102 # send the quantities key information 1109 1110 # FIXME SR: Creates cPickle dump1111 print 'full_quant keys', submesh["full_quan"].keys()1112 protocol(submesh["full_quan"].keys())1113 1103 pypar.send(submesh["full_quan"].keys(), p) 1114 1104 … … 1133 1123 setup_array[8] = len(submesh["full_quan"]) 1134 1124 1135 i=01136 1137 1125 x = num.array(setup_array, num.int) 1138 1126 pypar.send(x, p, bypass=True) … … 1238 1226 1239 1227 # receive the quantities key information 1240 1241 1228 qkeys = pypar.receive(p) 1242 1229 1243 1244 1230 # recieve information about the array sizes 1245 1246 1231 x = num.zeros((9,),num.int) 1247 1232 pypar.receive(p, buffer=x, bypass=True) … … 1258 1243 no_quantities = setup_array[8] 1259 1244 1260 1261 1262 print 'setup_array', setup_array1263 1245 1264 1246 # ghost layer width -
trunk/anuga_core/source/anuga_parallel/parallel_api.py
r8544 r8545 136 136 137 137 # 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 138 151 for p in range(1, numprocs): 152 139 153 # 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.shape148 149 s2p_map_values_flat = num.array(s2p_map.values(),num.int)150 print s2p_map_values_flat.shape151 152 s2p_map_flat = num.concatenate( (s2p_map_keys_flat, s2p_map_values_flat), axis=1 )153 #print s2p_map_keys_flat154 #print s2p_map_values_flat155 #print s2p_map_flat156 157 154 send(s2p_map_flat, p) 158 155 # FIXME SR: Creates cPickle dump 159 156 #print p2s_map 160 send(p2s_map , p)157 send(p2s_map_flat, p) 161 158 162 159 if verbose: print 'Communication done' … … 182 179 s2p_map = dict.fromkeys(s2p_map_flat[:,0], s2p_map_flat[:,1:2]) 183 180 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]) 186 185 187 186 #------------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.