Changeset 26636


Ignore:
Timestamp:
11/18/21 02:03:26 (3 years ago)
Author:
bdef
Message:

BUG: fixing extrusion for poly type vectors

File:
1 edited

Legend:

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

    r26557 r26636  
    11import numpy as np
    2 
    32from pairoptions import pairoptions
    43
     
    87    PROJECT3D - vertically project a vector from 2d mesh
    98
    10         vertically project a vector from 2d mesh (split in noncoll and coll 
     9        vertically project a vector from 2d mesh (split in noncoll and coll
    1110        areas) into a 3d mesh.
    12         This vector can be a node vector of size (md.mesh.numberofvertices2d, 
     11        This vector can be a node vector of size (md.mesh.numberofvertices2d,
    1312        N/A) or an element vector of size (md.mesh.numberofelements2d, N/A).
    1413
     
    1817
    1918        options:
    20             'layer'     a layer number where vector should keep its values. If 
    21                         not specified, all layers adopt the value of the 2d 
     19            'layer'     a layer number where vector should keep its values. If
     20                        not specified, all layers adopt the value of the 2d
    2221                        vector.
    23             'padding':  default to 0 (value adopted by other 3d layers not 
     22            'padding':  default to 0 (value adopted by other 3d layers not
    2423                        being projected.
    2524            'degree':   degree of polynomials when extrude from bottom to the top
     
    120119        #Initialize 3d vector
    121120        if np.ndim(vector2d) == 1:
    122             if vector2d.shape[0] == md.mesh.numberofelements2d:
    123                 projected_vector = (paddingvalue * np.ones((md.mesh.numberofelements))).astype(vector2d.dtype)
    124             elif vector2d.shape[0] == md.mesh.numberofelements2d + 1:
    125                 projected_vector = (paddingvalue * np.ones((md.mesh.numberofelements + 1))).astype(vector2d.dtype)
     121            if vector2d.shape[0] == md.mesh.numberofvertices2d:
     122                projected_vector = (paddingvalue * np.ones((md.mesh.numberofvertices))).astype(vector2d.dtype)
     123            elif vector2d.shape[0] == md.mesh.numberofvertices2d + 1:
     124                projected_vector = (paddingvalue * np.ones((md.mesh.numberofvertices + 1))).astype(vector2d.dtype)
    126125                projected_vector[-1] = vector2d[-1]
    127126                vector2d = vector2d[:-1]
     
    131130            if layer == 0:
    132131                for i in range(md.mesh.numberoflayers - 1):
    133                     projected_vector[(i * md.mesh.numberofelements2d):((i + 1) * md.mesh.numberofelements2d)] = vector2d*(1.0-(1.0-i/(md.mesh.numberoflayers - 1.0))**polyexponent)
     132                    projected_vector[(i * md.mesh.numberofvertices2d):((i + 1) * md.mesh.numberofvertices2d)] = vector2d * (1.0 - (1.0 - i / (md.mesh.numberoflayers - 1.0))**polyexponent)
    134133            else:
    135                 projected_vector[((layer - 1) * md.mesh.numberofelements2d):(layer * md.mesh.numberofelements2d)] = vector2d*(1.0-(1.0-layer/(md.mesh.numberoflayers - 1.0))**polyexponent)
     134                projected_vector[((layer - 1) * md.mesh.numberofvertices2d):(layer * md.mesh.numberofvertices2d)] = vector2d * (1.0 - (1.0 - layer / (md.mesh.numberoflayers - 1.0))**polyexponent)
    136135        else:
    137             if vector2d.shape[0] == md.mesh.numberofelements2d:
    138                 projected_vector = (paddingvalue * np.ones((md.mesh.numberofelements, np.size(vector2d, axis=1)))).astype(vector2d.dtype)
    139             elif vector2d.shape[0] == md.mesh.numberofelements2d + 1:
    140                 projected_vector = (paddingvalue * np.ones((md.mesh.numberofelements + 1, np.size(vector2d, axis=1)))).astype(vector2d.dtype)
     136            if vector2d.shape[0] == md.mesh.numberofvertices2d:
     137                projected_vector = (paddingvalue * np.ones((md.mesh.numberofvertices, np.size(vector2d, axis=1)))).astype(vector2d.dtype)
     138            elif vector2d.shape[0] == md.mesh.numberofvertices2d + 1:
     139                projected_vector = (paddingvalue * np.ones((md.mesh.numberofvertices + 1, np.size(vector2d, axis=1)))).astype(vector2d.dtype)
    141140                projected_vector[-1, :] = vector2d[-1, :]
    142141                vector2d = vector2d[:-1, :]
     
    146145            if layer == 0:
    147146                for i in range(md.mesh.numberoflayers - 1):
    148                     projected_vector[(i * md.mesh.numberofelements2d):((i + 1) * md.mesh.numberofelements2d), :] = vector2d*(1.0-(1.0-i/(md.mesh.numberoflayers - 1.0))**polyexponent)
     147                    projected_vector[(i * md.mesh.numberofvertices2d):((i + 1) * md.mesh.numberofvertices2d), :] = vector2d * (1.0 - (1.0 - i / (md.mesh.numberoflayers - 1.0))**polyexponent)
    149148            else:
    150                 projected_vector[((layer - 1) * md.mesh.numberofelements2d):(layer * md.mesh.numberofelements2d), :] = vector2d*(1.0-(1.0-layer/(md.mesh.numberoflayers - 1.0))**polyexponent)
     149                projected_vector[((layer - 1) * md.mesh.numberofvertices2d):(layer * md.mesh.numberofvertices2d), :] = vector2d * (1.0 - (1.0 - layer / (md.mesh.numberoflayers - 1.0))**polyexponent)
    151150    else:
    152151        raise TypeError("project3d error message: unknown projection type")
Note: See TracChangeset for help on using the changeset viewer.