- Timestamp:
- 06/07/17 10:50:54 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/branches/trunk-larour-NatGeoScience2016/src/py3/interp/averaging.py
r19895 r21759 1 import numpy as np y1 import numpy as np 2 2 from GetAreas import GetAreas 3 3 from scipy.sparse import csc_matrix … … 36 36 #initialization 37 37 if layer==0: 38 weights=np y.zeros(md.mesh.numberofvertices,)38 weights=np.zeros(md.mesh.numberofvertices,) 39 39 data=data.flatten(1) 40 40 else: 41 weights=np y.zeros(md.mesh.numberofvertices2d,)41 weights=np.zeros(md.mesh.numberofvertices2d,) 42 42 data=data[(layer-1)*md.mesh.numberofvertices2d+1:layer*md.mesh.numberofvertices2d,:] 43 43 … … 66 66 index=index-1 # since python indexes starting from zero 67 67 line=index.flatten(1) 68 areas=np y.vstack(areas).reshape(-1,)69 summation=1./rep*np y.ones(rep,)68 areas=np.vstack(areas).reshape(-1,) 69 summation=1./rep*np.ones(rep,) 70 70 linesize=rep*numberofelements 71 71 72 72 #update weights that holds the volume of all the element holding the node i 73 weights=csc_matrix( (np y.tile(areas,(rep,1)).reshape(-1,),(line,npy.zeros(linesize,))), shape=(numberofnodes,1))73 weights=csc_matrix( (np.tile(areas,(rep,1)).reshape(-1,),(line,np.zeros(linesize,))), shape=(numberofnodes,1)) 74 74 75 75 #initialization 76 76 if len(data)==numberofelements: 77 average_node=csc_matrix( (np y.tile(areas*data,(rep,1)).reshape(-1,),(line,npy.zeros(linesize,))), shape=(numberofnodes,1))77 average_node=csc_matrix( (np.tile(areas*data,(rep,1)).reshape(-1,),(line,np.zeros(linesize,))), shape=(numberofnodes,1)) 78 78 average_node=average_node/weights 79 79 average_node = csc_matrix(average_node) … … 82 82 83 83 #loop over iteration 84 for i in np y.arange(1,iterations+1):85 average_el=np y.asarray(npy.dot(average_node.todense()[index].reshape(numberofelements,rep),npy.vstack(summation))).reshape(-1,)86 average_node=csc_matrix( (np y.tile(areas*average_el.reshape(-1),(rep,1)).reshape(-1,),(line,npy.zeros(linesize,))), shape=(numberofnodes,1))84 for i in np.arange(1,iterations+1): 85 average_el=np.asarray(np.dot(average_node.todense()[index].reshape(numberofelements,rep),np.vstack(summation))).reshape(-1,) 86 average_node=csc_matrix( (np.tile(areas*average_el.reshape(-1),(rep,1)).reshape(-1,),(line,np.zeros(linesize,))), shape=(numberofnodes,1)) 87 87 average_node=average_node/weights 88 88 average_node=csc_matrix(average_node) 89 89 90 90 #return output as a full matrix (C code do not like sparse matrices) 91 average=np y.asarray(average_node.todense()).reshape(-1,)91 average=np.asarray(average_node.todense()).reshape(-1,) 92 92 93 93 return average
Note:
See TracChangeset
for help on using the changeset viewer.