Changeset 9181


Ignore:
Timestamp:
08/04/11 14:19:23 (14 years ago)
Author:
Mathieu Morlighem
Message:

Fixed extrusion for special vectors

Location:
issm/trunk/src/m/model
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/model/parameterization/parameterize.m

    r8577 r9181  
    7373%Name and notes
    7474if isempty(md.name),
    75         [a,root,c,d]=fileparts(parametername);
     75        [path,root,ext]=fileparts(parametername);
    7676        md.name=root;
    7777end
  • issm/trunk/src/m/model/project3d.m

    r9002 r9181  
    1 function projected_vector=project3d(md3d,varargin);
     1function projected_vector=project3d(md,varargin);
    22%PROJECT3D - vertically project a vector from 2d mesh
    33%
    44%   vertically project a vector from 2d mesh (split in noncoll and coll areas) into a 3d mesh.
    5 %   This vector can be a node vector of size (md3d.numberofnodes2d,N/A) or an
    6 %   element vector of size (md3d.numberofelements2d,N/A).
     5%   This vector can be a node vector of size (md.numberofnodes2d,N/A) or an
     6%   element vector of size (md.numberofelements2d,N/A).
    77%   arguments:
    88%      'vector': 2d vector
     
    1414%
    1515%   Egs:
    16 %      extruded_vector=project3d(md3d,'vector',vector2d,'type','node','layer',1,'padding',NaN);
    17 %      extruded_vector=project3d(md3d,'vector',vector2d,'type','element','padding',0);
    18 %      extruded_vector=project3d(md3d,'vector',vector2d,'type','node');
     16%      extruded_vector=project3d(md,'vector',vector2d,'type','node','layer',1,'padding',NaN);
     17%      extruded_vector=project3d(md,'vector',vector2d,'type','element','padding',0);
     18%      extruded_vector=project3d(md,'vector',vector2d,'type','node');
    1919
    20 
     20%some regular checks
    2121if nargin==0,
    22         Project3dUsage;
    23         error();
     22        help project3d
     23        error('bad usage');
     24end
     25if md.dim~=3
     26        error('input model is not 3d');
    2427end
    2528
    26 options=pairoptions(varargin{:});
    27 
    2829%retrieve parameters from options.
    29 vector2d=getfieldvalue(options,'vector'); %mandatory
    30 type=getfieldvalue(options,'type'); %mandatory
    31 layer=getfieldvalue(options,'layer',0); %optional (do all layers otherwise)
    32 paddingvalue=getfieldvalue(options,'padding',0); %0 by default
     30options      = pairoptions(varargin{:});
     31vector2d     = getfieldvalue(options,'vector');     %mandatory
     32type         = getfieldvalue(options,'type');       %mandatory
     33layer        = getfieldvalue(options,'layer',0);    %optional (do all layers otherwise)
     34paddingvalue = getfieldvalue(options,'padding',0);  %0 by default
    3335
    3436if strcmpi(type,'node'),
    3537
    36         projected_vector=paddingvalue*ones(md3d.numberofnodes,size(vector2d,2));
    37        
     38        %Initialize 3d vector
     39        if size(vector2d,1)==md.numberofnodes2d
     40                projected_vector=paddingvalue*ones(md.numberofnodes,  size(vector2d,2));
     41        elseif size(vector2d,1)==md.numberofnodes2d+1
     42                projected_vector=paddingvalue*ones(md.numberofnodes+1,size(vector2d,2));
     43                projected_vector(end,:)=vector2d(end,:);
     44                vector2d=vector2d(1:end-1,:);
     45        else
     46                error('vector length not supported')
     47        end
     48
     49        %Fill in
    3850        if layer==0,
    39                 for i=1:md3d.numlayers,
    40                         projected_vector(((i-1)*md3d.numberofnodes2d+1):(i*md3d.numberofnodes2d),:)=vector2d;
     51                for i=1:md.numlayers,
     52                        projected_vector(((i-1)*md.numberofnodes2d+1):(i*md.numberofnodes2d),:)=vector2d;
    4153                end
    4254        else
    43                 projected_vector(((layer-1)*md3d.numberofnodes2d+1):(layer*md3d.numberofnodes2d),:)=vector2d;
     55                projected_vector(((layer-1)*md.numberofnodes2d+1):(layer*md.numberofnodes2d),:)=vector2d;
    4456        end
    4557elseif strcmpi(type,'element'),
    4658
    47         projected_vector=paddingvalue*ones(md3d.numberofelements,size(vector2d,2));
     59        %Initialize 3d vector
     60        if size(vector2d,1)==md.numberofelements2d
     61                projected_vector=paddingvalue*ones(md.numberofelements,  size(vector2d,2));
     62        elseif size(vector2d,1)==md.numberofelements2d+1
     63                projected_vector=paddingvalue*ones(md.numberofelements+1,size(vector2d,2));
     64                projected_vector(end,:)=vector2d(end,:);
     65                vector2d=vector2d(1:end-1,:);
     66        else
     67                error('vector length not supported')
     68        end
    4869
    4970        if layer==0,
    50                 for i=1:(md3d.numlayers-1),
    51                         projected_vector( ((i-1)*md3d.numberofelements2d+1):(i*md3d.numberofelements2d),:)=vector2d;
     71                for i=1:(md.numlayers-1),
     72                        projected_vector( ((i-1)*md.numberofelements2d+1):(i*md.numberofelements2d),:)=vector2d;
    5273                end
    5374
    5475        else
    55                 projected_vector( ((layer-1)*md3d.numberofelements2d+1):(layer*md3d.numberofelements2d),:)=vector2d;
     76                projected_vector( ((layer-1)*md.numberofelements2d+1):(layer*md.numberofelements2d),:)=vector2d;
    5677        end
    5778else
    5879        error('project3d error message: unknown projection type');
    5980end
    60 
    61 function Project3dUsage;
    62 
    63 disp('function projected_vector=project3d(md3d,varargin);');
    64 disp('PROJECT3D - vertically project a vector from 2d mesh...');
    65 disp('');
    66 disp('   vertically project a vector from 2d mesh (split in noncoll and coll areas) into a 3d mesh.');
    67 disp('   This vector can be a node vector of size (md3d.numberofnodes2d,N/A) or an ');
    68 disp('   element vector of size (md3d.numberofelements2d,N/A). ');
    69 disp('   arguments: ');
    70 disp('      ''vector'': 2d vector');
    71 disp('      ''type'': ''element'' or ''node''. ');
    72 disp('   options: ');
    73 disp('      ''layer'' a layer number where vector should keep its values. If not specified, all layers adopt the ');
    74 disp('             value of the 2d vector.');
    75 disp('      ''padding'': default to 0 (value adopted by other 3d layers not being projected0');
    76 disp('');
    77 disp('   Egs:');
    78 disp('      extruded_vector=project3d(md3d,''vector'',vector2d,''type'',''node'',''layer'',1,''padding'',NaN);');
    79 disp('      extruded_vector=project3d(md3d,''vector'',vector2d,''type'',''element'',''padding'',0);');
    80 disp('      extruded_vector=project3d(md3d,''vector'',vector2d,''type'',''node'');');
Note: See TracChangeset for help on using the changeset viewer.