Changeset 17725


Ignore:
Timestamp:
04/14/14 15:19:58 (11 years ago)
Author:
cborstad
Message:

NEW: project2d and DepthAverage functions in python

Location:
issm/trunk-jpl/src/m/extrusion
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/extrusion/DepthAverage.m

    r17687 r17725  
    11function  vector_average=DepthAverage(md,vector)
    2 %DEPTHAVERAGE - computes depth average of 3d vector, and return value on 2d mesh.
     2%DEPTHAVERAGE - computes depth average of 3d vector using the trapezoidal rule, and returns the value on 2d mesh.
    33%
    44%   Usage:
  • issm/trunk-jpl/src/m/extrusion/project3d.py

    r17686 r17725  
    11import numpy
    22from pairoptions import pairoptions
    3 import MatlabFuncs as m
    43
    54def project3d(md,*args):
     
    1615              'layer' a layer number where vector should keep its values. If not specified, all layers adopt the
    1716                     value of the 2d vector.
    18               'padding': default to 0 (value adopted by other 3d layers not being projected0
     17              'padding': default to 0 (value adopted by other 3d layers not being projected
    1918
    20            Egs:
    21               extruded_vector=project3d(md,'vector',vector2d,'type','node','layer',1,'padding',NaN);
    22               extruded_vector=project3d(md,'vector',vector2d,'type','element','padding',0);
    23               extruded_vector=project3d(md,'vector',vector2d,'type','node');
     19           Examples:
     20              extruded_vector=project3d(md,'vector',vector2d,'type','node','layer',1,'padding',NaN)
     21              extruded_vector=project3d(md,'vector',vector2d,'type','element','padding',0)
     22              extruded_vector=project3d(md,'vector',vector2d,'type','node')
    2423        """
    2524
     
    2726        if not md:
    2827                raise TypeError("bad usage")
    29         if not m.strcmp(md.mesh.elementtype(),'Penta'):
     28        if md.mesh.domaintype().lower() != '3d':
    3029                raise TypeError("input model is not 3d")
    3130
     
    3332        options      = pairoptions(*args)
    3433        vector2d     = options.getfieldvalue('vector')       #mandatory
    35         type         = options.getfieldvalue('type')         #mandatory
     34        vectype      = options.getfieldvalue('type')         #mandatory
    3635        layer        = options.getfieldvalue('layer',0)      #optional (do all layers otherwise)
    3736        paddingvalue = options.getfieldvalue('padding',0)    #0 by default
     
    4039        if isinstance(vector2d,numpy.ndarray) and numpy.ndim(vector2d)==1:
    4140                vector1d=True
    42                 vector2d=vector2d.reshape(numpy.size(vector2d),1)
     41                vector2d=vector2d.reshape(-1,1)
    4342
    44         if   isinstance(vector2d,(bool,int,long,float)) or numpy.size(vector2d)==1:
     43        if isinstance(vector2d,(bool,int,long,float)) or numpy.size(vector2d)==1:
    4544                projected_vector=vector2d
    4645
    47         elif m.strcmpi(type,'node'):
     46        elif vectype.lower()=='node':
    4847
    4948                #Initialize 3d vector
    50                 if   numpy.size(vector2d,axis=0)==md.mesh.numberofvertices2d:
     49                if vector2d.shape[0]==md.mesh.numberofvertices2d:
    5150                        projected_vector=(paddingvalue*numpy.ones((md.mesh.numberofvertices,  numpy.size(vector2d,axis=1)))).astype(vector2d.dtype)
    52                 elif numpy.size(vector2d,axis=0)==md.mesh.numberofvertices2d+1:
     51                elif vector2d.shape[0]==md.mesh.numberofvertices2d+1:
    5352                        projected_vector=(paddingvalue*numpy.ones((md.mesh.numberofvertices+1,numpy.size(vector2d,axis=1)))).astype(vector2d.dtype)
    5453                        projected_vector[-1,:]=vector2d[-1,:]
     
    6463                        projected_vector[((layer-1)*md.mesh.numberofvertices2d):(layer*md.mesh.numberofvertices2d),:]=vector2d
    6564
    66         elif m.strcmpi(type,'element'):
     65        elif vectype.lower()=='element':
    6766
    6867                #Initialize 3d vector
    69                 if   numpy.size(vector2d,axis=0)==md.mesh.numberofelements2d:
     68                if vector2d.shape[0]==md.mesh.numberofelements2d:
    7069                        projected_vector=(paddingvalue*numpy.ones((md.mesh.numberofelements,  numpy.size(vector2d,axis=1)))).astype(vector2d.dtype)
    71                 elif numpy.size(vector2d,axis=0)==md.mesh.numberofelements2d+1:
     70                elif vector2d.shape[0]==md.mesh.numberofelements2d+1:
    7271                        projected_vector=(paddingvalue*numpy.ones((md.mesh.numberofelements+1,numpy.size(vector2d,axis=1)))).astype(vector2d.dtype)
    7372                        projected_vector[-1,:]=vector2d[-1,:]
     
    8786
    8887        if vector1d:
    89                 projected_vector=projected_vector.reshape((numpy.size(projected_vector)))
     88                projected_vector=projected_vector.reshape(-1,)
    9089
    9190        return projected_vector
    92 
Note: See TracChangeset for help on using the changeset viewer.