Changeset 23463


Ignore:
Timestamp:
11/09/18 18:03:34 (6 years ago)
Author:
schlegel
Message:

BUG: Fuction now debugged, and add copy model for 3d

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/partition/AreaAverageOntoPartition.py

    r23270 r23463  
    11import numpy as np
     2import copy
    23
    34def AreaAverageOntoPartition(md,vector,layer=None):
     
    1112'''
    1213        #some checks
    13         if len(np.shape(md.mesh)) == 3:
     14        if(md.mesh.dimension()==3):
    1415                if layer == None:
    1516                        raise RuntimeError('AreaAverageOntoPartition: layer should be provided onto which Area Averaging occurs')
    16                
     17
    1718                #save 3D model
    18                 md3d = md
     19                md3d = copy.deepcopy(md)
    1920
    2021                md.mesh.elements = md.mesh.elements2d
     
    3536
    3637        #ok, first check that part is Matlab indexed
    37         #part = md.qmu.partition
     38        part = (md.qmu.partition).copy()
     39        part = part.flatten() + 1
    3840
    3941        #some check:
    40         if md.qmu.numberofpartitions != max(md.qmu.partition):
     42        if md.qmu.numberofpartitions != max(part):
    4143                raise RuntimeError('AreaAverageOntoPartition error message: ''npart'' should be equal to max(md.qmu.partition)')
    4244
    4345
    4446        #initialize output
    45         partvector = np.zeros((max(md.qmu.partition),))
     47        partvector = np.zeros((max(part)))
    4648
    4749        #start weight average
    4850        weightedvector = vector*md.qmu.vertex_weight
    49         for i in range(max(md.qmu.partition)):
    50                 pos=np.where(md.qmu.partition==i)
     51        for i in range(max(part)):
     52                pos=np.where((part-1)==i)
    5153                partvector[i]=sum(weightedvector[pos])/sum(md.qmu.vertex_weight[pos])
    5254
    5355
    5456        #in 3D, restore 3D model:
    55         if len(np.shape(md.mesh)) == 3:
    56                 md = md3d
     57        if(md.mesh.dimension()==3):
     58                md = copy.deepcopy(md3d)
     59
    5760
    5861        return partvector
Note: See TracChangeset for help on using the changeset viewer.