Changeset 8298
- Timestamp:
- 05/16/11 15:01:42 (14 years ago)
- Location:
- issm/trunk/src/m
- Files:
-
- 108 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/classes/@modellist/get.m
r2912 r8298 8 8 case 'numberofelements' 9 9 val = a.numberofelements; 10 case 'numberof grids'11 val = a.numberof grids;10 case 'numberofnodes' 11 val = a.numberofnodes; 12 12 case 'elements' 13 13 val = a.elements; -
issm/trunk/src/m/classes/model.m
r8229 r8298 27 27 dim=0; 28 28 numberofelements=0; 29 numberof grids=0;29 numberofnodes=0; 30 30 elements=NaN; 31 31 elements_type=NaN; … … 47 47 %Initial 2d mesh 48 48 numberofelements2d=0; 49 numberof grids2d=0;49 numberofnodes2d=0; 50 50 elements2d=NaN; 51 51 elements_type2d=NaN; … … 72 72 73 73 %Nodes 74 gridonhutter=NaN;75 gridonmacayeal=NaN;76 gridonpattyn=NaN;77 gridonstokes=NaN;74 nodeonhutter=NaN; 75 nodeonmacayeal=NaN; 76 nodeonpattyn=NaN; 77 nodeonstokes=NaN; 78 78 borderstokes=NaN; 79 79 … … 95 95 96 96 %Projections 97 upper grids=NaN;97 uppernodes=NaN; 98 98 upperelements=NaN; 99 99 lowerelements=NaN; 100 lower grids=NaN;100 lowernodes=NaN; 101 101 102 102 %Extrusion … … 105 105 elementonbed=NaN; 106 106 elementonsurface=NaN; 107 gridonbed=NaN;108 gridonsurface=NaN;107 nodeonbed=NaN; 108 nodeonsurface=NaN; 109 109 minh=0; 110 110 firn_layer=NaN; 111 111 112 112 %Extraction 113 extracted grids=NaN;113 extractednodes=NaN; 114 114 extractedelements=NaN; 115 115 … … 146 146 elementonwater=NaN; 147 147 elementonnuna=NaN; 148 gridoniceshelf=NaN;149 gridonicesheet=NaN;150 gridonwater=NaN;151 gridonnuna=NaN;148 nodeoniceshelf=NaN; 149 nodeonicesheet=NaN; 150 nodeonwater=NaN; 151 nodeonnuna=NaN; 152 152 surface=NaN; 153 153 thickness=NaN; … … 158 158 159 159 %Boundary conditions 160 gridonboundary=NaN;160 nodeonboundary=NaN; 161 161 pressureload=NaN; 162 162 spcvelocity=NaN; -
issm/trunk/src/m/kml/README.txt
r7133 r8298 61 61 There are some other utilities that are used in the construction of topological tables for the kml writing. 62 62 63 nodeconnectivity.m - create a node connectivity table (n grids x mxepg+1)63 nodeconnectivity.m - create a node connectivity table (nnodes x mxepg+1) 64 64 edgeadjacency.m - create an edge adjacency array (elems x edges) 65 65 edgeperimeter.m - create an edge perimeter (edgeper x 2) and element perimeter (edgeper x 1) list -
issm/trunk/src/m/kml/kml_mesh_elem.m
r7652 r8298 76 76 if (numel(data)==md.numberofelements) 77 77 edata=data; 78 elseif (numel(data)==md.numberof grids)78 elseif (numel(data)==md.numberofnodes) 79 79 ndata=data; 80 80 display('Averaging nodal data to element data.'); … … 123 123 end 124 124 kfold.visibility=1; 125 kfold.descript =sprintf('Elements=%d, Grids=%d',...126 md.numberofelements,md.numberof grids);125 kfold.descript =sprintf('Elements=%d, Nodes=%d',... 126 md.numberofelements,md.numberofnodes); 127 127 % see matlab_oop, "initializing a handle object array" 128 128 %kfold.feature ={repmat(kml_placemark(),1,size(md.elements,1))}; -
issm/trunk/src/m/kml/kml_mesh_write.m
r7460 r8298 82 82 if (numel(data)==md.numberofelements) 83 83 edata=data; 84 elseif (numel(data)==md.numberof grids)84 elseif (numel(data)==md.numberofnodes) 85 85 ndata=data; 86 86 display('Averaging nodal data to element data.'); -
issm/trunk/src/m/kml/kml_part_edges.m
r7461 r8298 77 77 if (numel(data)==md.numberofelements) 78 78 edata=data; 79 elseif (numel(data)==md.numberof grids)79 elseif (numel(data)==md.numberofnodes) 80 80 ndata=data; 81 81 display('Averaging nodal data to element data.'); … … 123 123 kfold.visibility=1; 124 124 kfold.descript =sprintf('Partitions=%d, Nodes=%d',... 125 md.npart,md.numberof grids);125 md.npart,md.numberofnodes); 126 126 kfold.feature ={repmat(kml_placemark(),1,md.npart)}; 127 127 … … 150 150 elemp=md.elements(irow,:); 151 151 epartp=epart(irow,:); 152 nodeconp=nodeconnectivity(elemp,md.numberof grids);152 nodeconp=nodeconnectivity(elemp,md.numberofnodes); 153 153 [edgeadjp]=edgeadjacency(elemp,nodeconp); 154 154 [edgeper,elemper,iloop]=edgeperimeter(elemp,nodeconp,edgeadjp); -
issm/trunk/src/m/kml/kml_part_elems.m
r7461 r8298 77 77 if (numel(data)==md.numberofelements) 78 78 edata=data; 79 elseif (numel(data)==md.numberof grids)79 elseif (numel(data)==md.numberofnodes) 80 80 ndata=data; 81 81 display('Averaging nodal data to element data.'); … … 123 123 kfold.visibility=1; 124 124 kfold.descript =sprintf('Partitions=%d, Nodes=%d\n',... 125 md.npart,md.numberof grids);125 md.npart,md.numberofnodes); 126 126 kfold.feature ={repmat(kml_placemark(),1,md.npart)}; 127 127 -
issm/trunk/src/m/kml/kml_partitions.m
r7461 r8298 78 78 if (numel(data)==md.numberofelements) 79 79 edata=data; 80 elseif (numel(data)==md.numberof grids)80 elseif (numel(data)==md.numberofnodes) 81 81 ndata=data; 82 82 display('Averaging nodal data to element data.'); … … 124 124 kfold.visibility=1; 125 125 kfold.descript =sprintf('Partitions=%d, Nodes=%d',... 126 md.npart,md.numberof grids);126 md.npart,md.numberofnodes); 127 127 kfold.feature ={repmat(kml_placemark(),1,md.npart)}; 128 128 … … 151 151 elemp=md.elements(irow,:); 152 152 epartp=epart(irow,:); 153 nodeconp=nodeconnectivity(elemp,md.numberof grids);153 nodeconp=nodeconnectivity(elemp,md.numberofnodes); 154 154 [edgeadjp]=edgeadjacency(elemp,nodeconp); 155 155 [edgeper,elemper,iloop]=edgeperimeter(elemp,nodeconp,edgeadjp); -
issm/trunk/src/m/kml/nodeconnectivity.m
r6346 r8298 2 2 % create a node connectivity table for the elements in the model. 3 3 % 4 % [nodecon]=edgeadjacency(elem,n grids,mxepg)4 % [nodecon]=edgeadjacency(elem,nnodes,mxepg) 5 5 % 6 6 % where the required input is: … … 8 8 % 9 9 % and the required output is: 10 % nodecon (numeric, node connectivity array (n grids x mxepg+1))10 % nodecon (numeric, node connectivity array (nnodes x mxepg+1)) 11 11 % 12 12 % the optional input is: 13 % n grids (numeric, number of grids)14 % mxepg (numeric, max elements per grid)13 % nnodes (numeric, number of nodes) 14 % mxepg (numeric, max elements per node) 15 15 % 16 function [nodecon]=nodeconnectivity(elem,n grids,mxepg)16 function [nodecon]=nodeconnectivity(elem,nnodes,mxepg) 17 17 18 18 if ~nargin … … 21 21 end 22 22 23 if ~exist('n grids','var') || isempty(ngrids)24 n grids=max(max(elem));23 if ~exist('nnodes','var') || isempty(nnodes) 24 nnodes=max(max(elem)); 25 25 end 26 26 if ~exist('mxepg','var') || isempty(mxepg) … … 30 30 %% create the node connectivity array 31 31 32 nodecon=zeros(n grids,mxepg+1);32 nodecon=zeros(nnodes,mxepg+1); 33 33 34 34 % loop over the elements -
issm/trunk/src/m/model/BasinConstrain.m
r5024 r8298 14 14 % md=BasinConstrain(md,'~Iceshelves.exp'); 15 15 16 %now, flag grids and elements outside the domain outline.16 %now, flag nodes and elements outside the domain outline. 17 17 if ischar(domain), 18 18 if isempty(domain), 19 19 elementondomain=zeros(md.numberofelements,1); 20 gridondomain=zeros(md.numberofgrids,1);20 nodeondomain=zeros(md.numberofnodes,1); 21 21 invert=0; 22 22 elseif strcmpi(domain,'all') 23 23 elementondomain=ones(md.numberofelements,1); 24 gridondomain=ones(md.numberofgrids,1);24 nodeondomain=ones(md.numberofnodes,1); 25 25 invert=0; 26 26 else … … 33 33 end 34 34 %ok, flag elements and nodes 35 [ gridondomain elementondomain]=ContourToMesh(md.elements(:,1:3),md.x,md.y,domain,'element and node',2);35 [nodeondomain elementondomain]=ContourToMesh(md.elements(:,1:3),md.x,md.y,domain,'element and node',2); 36 36 end 37 37 if invert, 38 gridondomain=~gridondomain;38 nodeondomain=~nodeondomain; 39 39 elementondomain=~elementondomain; 40 40 end … … 44 44 45 45 %list of elements and nodes not on domain 46 gridnotondomain=find(~gridondomain);46 nodenotondomain=find(~nodeondomain); 47 47 elementnotondomain=find(~elementondomain); 48 48 49 %all elements outside the constraint domain are equivalent to water. all grids outside are spc'd.50 md.spcvelocity( gridnotondomain,1:2)=1;51 md.spcvelocity( gridnotondomain,4)=md.vx_obs(gridnotondomain);52 md.spcvelocity( gridnotondomain,5)=md.vy_obs(gridnotondomain);49 %all elements outside the constraint domain are equivalent to water. all nodes outside are spc'd. 50 md.spcvelocity(nodenotondomain,1:2)=1; 51 md.spcvelocity(nodenotondomain,4)=md.vx_obs(nodenotondomain); 52 md.spcvelocity(nodenotondomain,5)=md.vy_obs(nodenotondomain); 53 53 md.elementonwater(elementnotondomain)=1; 54 54 55 %now, make sure all elements on water have grids that are spc'd, otherwise, we'll get a singular problem.55 %now, make sure all elements on water have nodes that are spc'd, otherwise, we'll get a singular problem. 56 56 pos=find(~md.elementonwater); 57 57 numpos=unique(md.elements(pos,:)); 58 grids=setdiff(1:1:md.numberofgrids,numpos);59 md.spcvelocity( grids,1:2)=1;60 md.spcvelocity( grids,4)=md.vx_obs(grids);61 md.spcvelocity( grids,5)=md.vy_obs(grids);58 nodes=setdiff(1:1:md.numberofnodes,numpos); 59 md.spcvelocity(nodes,1:2)=1; 60 md.spcvelocity(nodes,4)=md.vx_obs(nodes); 61 md.spcvelocity(nodes,5)=md.vy_obs(nodes); 62 62 63 63 %make sure icefronts that are completely spc'd are taken out: -
issm/trunk/src/m/model/BasinConstrain2.m
r5024 r8298 14 14 % md=BasinConstrain(md,'~Iceshelves.exp'); 15 15 16 %now, flag grids and elements outside the domain outline.16 %now, flag nodes and elements outside the domain outline. 17 17 if ischar(domain), 18 18 if isempty(domain), 19 19 elementondomain=zeros(md.numberofelements,1); 20 gridondomain=zeros(md.numberofgrids,1);20 nodeondomain=zeros(md.numberofnodes,1); 21 21 invert=0; 22 22 elseif strcmpi(domain,'all') 23 23 elementondomain=ones(md.numberofelements,1); 24 gridondomain=ones(md.numberofgrids,1);24 nodeondomain=ones(md.numberofnodes,1); 25 25 invert=0; 26 26 else … … 33 33 end 34 34 %ok, flag elements and nodes 35 [ gridondomain elementondomain]=ContourToMesh(md.elements(:,1:3),md.x,md.y,domain,'element and node',2);35 [nodeondomain elementondomain]=ContourToMesh(md.elements(:,1:3),md.x,md.y,domain,'element and node',2); 36 36 end 37 37 if invert, 38 gridondomain=~gridondomain;38 nodeondomain=~nodeondomain; 39 39 elementondomain=~elementondomain; 40 40 end … … 44 44 45 45 %list of elements and nodes not on domain 46 gridnotondomain=find(~gridondomain);46 nodenotondomain=find(~nodeondomain); 47 47 elementnotondomain=find(~elementondomain); 48 48 49 %all elements outside the constraint domain are equivalent to water. all grids outside are spc'd.50 md.spcvelocity( gridnotondomain,1:2)=1;51 md.spcvelocity( gridnotondomain,4)=md.vx_obs(gridnotondomain);52 md.spcvelocity( gridnotondomain,5)=md.vy_obs(gridnotondomain);49 %all elements outside the constraint domain are equivalent to water. all nodes outside are spc'd. 50 md.spcvelocity(nodenotondomain,1:2)=1; 51 md.spcvelocity(nodenotondomain,4)=md.vx_obs(nodenotondomain); 52 md.spcvelocity(nodenotondomain,5)=md.vy_obs(nodenotondomain); 53 53 md.elementonwater(elementnotondomain)=1; 54 54 55 %now, make sure all elements on water have grids that are spc'd, otherwise, we'll get a singular problem.55 %now, make sure all elements on water have nodes that are spc'd, otherwise, we'll get a singular problem. 56 56 pos=find(~md.elementonwater); 57 57 numpos=unique(md.elements(pos,:)); 58 grids=setdiff(1:1:md.numberofgrids,numpos);59 md.spcvelocity( grids,1:2)=1;60 md.spcvelocity( grids,4)=md.vx_obs(grids);61 md.spcvelocity( grids,5)=md.vy_obs(grids);58 nodes=setdiff(1:1:md.numberofnodes,numpos); 59 md.spcvelocity(nodes,1:2)=1; 60 md.spcvelocity(nodes,4)=md.vx_obs(nodes); 61 md.spcvelocity(nodes,5)=md.vy_obs(nodes); 62 62 63 63 -
issm/trunk/src/m/model/BasinConstrainShelf.m
r5024 r8298 14 14 % md=BasinConstrain(md,'~Iceshelves.exp'); 15 15 16 %now, flag grids and elements outside the domain outline.16 %now, flag nodes and elements outside the domain outline. 17 17 if ischar(domain), 18 18 if isempty(domain), 19 19 elementondomain=zeros(md.numberofelements,1); 20 gridondomain=zeros(md.numberofgrids,1);20 nodeondomain=zeros(md.numberofnodes,1); 21 21 invert=0; 22 22 elseif strcmpi(domain,'all') 23 23 elementondomain=ones(md.numberofelements,1); 24 gridondomain=ones(md.numberofgrids,1);24 nodeondomain=ones(md.numberofnodes,1); 25 25 invert=0; 26 26 else … … 33 33 end 34 34 %ok, flag elements and nodes 35 [ gridondomain elementondomain]=ContourToMesh(md.elements(:,1:3),md.x,md.y,domain,'element and node',2);35 [nodeondomain elementondomain]=ContourToMesh(md.elements(:,1:3),md.x,md.y,domain,'element and node',2); 36 36 end 37 37 if invert, 38 gridondomain=~gridondomain;38 nodeondomain=~nodeondomain; 39 39 elementondomain=~elementondomain; 40 40 end … … 44 44 45 45 %list of elements and nodes not on domain 46 gridnotondomain=find(~gridondomain);46 nodenotondomain=find(~nodeondomain); 47 47 elementnotondomain=find(~elementondomain); 48 48 49 %all elements outside the constraint domain are equivalent to water. all grids outside are spc'd.50 md.spcvelocity( gridnotondomain,1:2)=1;51 md.spcvelocity( gridnotondomain,4)=md.vx_obs(gridnotondomain);52 md.spcvelocity( gridnotondomain,5)=md.vy_obs(gridnotondomain);49 %all elements outside the constraint domain are equivalent to water. all nodes outside are spc'd. 50 md.spcvelocity(nodenotondomain,1:2)=1; 51 md.spcvelocity(nodenotondomain,4)=md.vx_obs(nodenotondomain); 52 md.spcvelocity(nodenotondomain,5)=md.vy_obs(nodenotondomain); 53 53 md.elementonwater(elementnotondomain)=1; 54 54 55 %now, make sure all elements on water have grids that are spc'd, otherwise, we'll get a singular problem.55 %now, make sure all elements on water have nodes that are spc'd, otherwise, we'll get a singular problem. 56 56 pos=find(~md.elementonwater); 57 57 numpos=unique(md.elements(pos,:)); 58 grids=setdiff(1:1:md.numberofgrids,numpos);59 md.spcvelocity( grids,1:2)=1;60 md.spcvelocity( grids,4)=md.vx_obs(grids);61 md.spcvelocity( grids,5)=md.vy_obs(grids);58 nodes=setdiff(1:1:md.numberofnodes,numpos); 59 md.spcvelocity(nodes,1:2)=1; 60 md.spcvelocity(nodes,4)=md.vx_obs(nodes); 61 md.spcvelocity(nodes,5)=md.vy_obs(nodes); 62 62 63 63 64 %make sure any gridwith NaN velocity is spc'd:64 %make sure any node with NaN velocity is spc'd: 65 65 pos=find(isnan(md.vel_obs_raw)); 66 66 md.spcvelocity(pos,1:2)=1; … … 69 69 md.spcvelocity(pos,5)=md.vy_obs(pos); 70 70 71 %iceshelves: any gridon icesheet is spc'd72 pos=find(md. gridonicesheet);71 %iceshelves: any node on icesheet is spc'd 72 pos=find(md.nodeonicesheet); 73 73 md.spcvelocity(pos,1:2)=1; 74 74 md.spcvelocity(pos,4)=md.vx_obs(pos); -
issm/trunk/src/m/model/DepthAverage.m
r3994 r8298 14 14 15 15 %nods data 16 if (length(vector)==md.numberof grids),17 vector_average=zeros(md.numberof grids2d,1);16 if (length(vector)==md.numberofnodes), 17 vector_average=zeros(md.numberofnodes2d,1); 18 18 for i=1:md.numlayers-1, 19 19 vector_average=vector_average+(project2d(md,vector,i)+project2d(md,vector,i+1))/2.*(project2d(md,md.z,i+1)-project2d(md,md.z,i)); -
issm/trunk/src/m/model/MeltingGroundingLines.m
r2499 r8298 7 7 8 8 %get nodes on ice sheet and on ice shelf 9 pos_shelf=find(~md. gridonicesheet);9 pos_shelf=find(~md.nodeonicesheet); 10 10 pos_GL=intersect(unique(md.elements(find(md.elementonicesheet),:)),unique(md.elements(find(md.elementoniceshelf),:))); 11 11 … … 16 16 end 17 17 18 %search the gridon ice sheet the closest to i18 %search the node on ice sheet the closest to i 19 19 [d posd]=min(sqrt((md.x(pos_shelf(i))-md.x(pos_GL)).^2+(md.y(pos_shelf(i))-md.y(pos_GL)).^2)); 20 20 -
issm/trunk/src/m/model/SectionValues.m
r6759 r8298 72 72 Y(end+1)=y(nods); 73 73 74 %Number of grids:75 numberof grids=size(X,1);74 %Number of nodes: 75 numberofnodes=size(X,1); 76 76 77 77 %Compute Z 78 Z=zeros(numberof grids,1);78 Z=zeros(numberofnodes,1); 79 79 80 80 %New mesh and Data interpolation … … 86 86 87 87 %Compute index 88 index=[1:1:(numberof grids-1);2:1:numberofgrids]';88 index=[1:1:(numberofnodes-1);2:1:numberofnodes]'; 89 89 90 90 else … … 99 99 %Some useful parameters 100 100 layers=ceil(mean(md.thickness)/res_v); 101 gridsperlayer=numberofgrids;102 gridstot=gridsperlayer*layers;103 elementsperlayer= gridsperlayer-1;104 elementstot=( gridsperlayer-1)*(layers-1);101 nodesperlayer=numberofnodes; 102 nodestot=nodesperlayer*layers; 103 elementsperlayer=nodesperlayer-1; 104 elementstot=(nodesperlayer-1)*(layers-1); 105 105 106 106 %initialization 107 X3=zeros( gridsperlayer*layers,1); Y3=zeros(gridsperlayer*layers,1); Z3=zeros(gridsperlayer*layers,1); S3=zeros(gridsperlayer*layers,1); index3=zeros(elementstot,4);107 X3=zeros(nodesperlayer*layers,1); Y3=zeros(nodesperlayer*layers,1); Z3=zeros(nodesperlayer*layers,1); S3=zeros(nodesperlayer*layers,1); index3=zeros(elementstot,4); 108 108 109 109 %Get new coordinates in 3d … … 115 115 116 116 if i<layers %Build index3 with quads 117 index3((i-1)*elementsperlayer+1:i*elementsperlayer,:)=[i:layers: gridstot-layers; i+1:layers:gridstot-layers; i+layers+1:layers:gridstot; i+layers:layers:gridstot]';117 index3((i-1)*elementsperlayer+1:i*elementsperlayer,:)=[i:layers:nodestot-layers; i+1:layers:nodestot-layers; i+layers+1:layers:nodestot; i+layers:layers:nodestot]'; 118 118 end 119 119 end -
issm/trunk/src/m/model/ThicknessCorrection.m
r6904 r8298 23 23 24 24 %get nodes on ice sheet and on ice shelf 25 pos_shelf=find(~md. gridonicesheet);25 pos_shelf=find(~md.nodeonicesheet); 26 26 pos_GL=intersect(unique(md.elements(find(md.elementonicesheet),:)),unique(md.elements(find(md.elementoniceshelf),:))); 27 27 debug=(length(pos_shelf)>50000); … … 47 47 end 48 48 49 %search the gridon ice sheet the closest to i49 %search the node on ice sheet the closest to i 50 50 [d posd]=min(sqrt((md.x(pos_shelf(i))-md.x(pos_GL)).^2+(md.y(pos_shelf(i))-md.y(pos_GL)).^2)); 51 51 -
issm/trunk/src/m/model/averageconnectivity.m
r1 r8298 6 6 7 7 nnz=0; 8 for i=1:md.numberof grids,8 for i=1:md.numberofnodes, 9 9 nnz=nnz+length(find(md.elements==i)); 10 10 end 11 conn=nnz/md.numberof grids;11 conn=nnz/md.numberofnodes; -
issm/trunk/src/m/model/averaging.m
r3994 r8298 2 2 %AVERAGING - smooths the input over the mesh 3 3 % 4 % This routine takes a list over the elements or the grids in input5 % and return a list over the grids.4 % This routine takes a list over the elements or the nodes in input 5 % and return a list over the nodes. 6 6 % For each iterations it computes the average over each element (average 7 % of the vertices values) and then computes the average over each grid8 % by taking the average of the element around a gridweighted by the7 % of the vertices values) and then computes the average over each node 8 % by taking the average of the element around a node weighted by the 9 9 % elements volume 10 10 % … … 16 16 % pressure=averaging(md,md.pressure,0); 17 17 18 if length(data)~=md.numberofelements & length(data)~=md.numberof grids18 if length(data)~=md.numberofelements & length(data)~=md.numberofnodes 19 19 error('averaging error message: data not supported yet'); 20 20 end 21 21 22 22 %initialization 23 weights=zeros(md.numberof grids,1);23 weights=zeros(md.numberofnodes,1); 24 24 data=data(:); 25 25 26 26 %load some variables (it is much faster if the variab;es are loaded from md once for all) 27 27 index=md.elements; 28 numberof grids=md.numberofgrids;28 numberofnodes=md.numberofnodes; 29 29 numberofelements=md.numberofelements; 30 30 … … 41 41 linesize=rep*numberofelements; 42 42 43 %update weights that holds the volume of all the element holding the gridi44 weights=sparse(line,ones(linesize,1),repmat(areas,rep,1),numberof grids,1);43 %update weights that holds the volume of all the element holding the node i 44 weights=sparse(line,ones(linesize,1),repmat(areas,rep,1),numberofnodes,1); 45 45 46 46 %initialization 47 47 if length(data)==numberofelements 48 average_ grid=sparse(line,ones(linesize,1),repmat(areas.*data,rep,1),numberofgrids,1);49 average_ grid=average_grid./weights;48 average_node=sparse(line,ones(linesize,1),repmat(areas.*data,rep,1),numberofnodes,1); 49 average_node=average_node./weights; 50 50 else 51 average_ grid=data;51 average_node=data; 52 52 end 53 53 54 54 %loop over iteration 55 55 for i=1:iterations 56 average_el=average_ grid(index)*summation;57 average_ grid=sparse(line,ones(linesize,1),repmat(areas.*average_el,rep,1),numberofgrids,1);58 average_ grid=average_grid./weights;56 average_el=average_node(index)*summation; 57 average_node=sparse(line,ones(linesize,1),repmat(areas.*average_el,rep,1),numberofnodes,1); 58 average_node=average_node./weights; 59 59 end 60 60 61 61 %return output as a full matrix (C code do not like sparse matrices) 62 average=full(average_ grid);62 average=full(average_node); -
issm/trunk/src/m/model/bamg.m
r7095 r8298 25 25 % - maxnbv : maximum number of vertices used to allocate memory (default is 10^6) 26 26 % - maxsubdiv : maximum subdivision of exisiting elements (default is 10) 27 % - metric : matrix (numberof grids x 3) used as a metric27 % - metric : matrix (numberofnodes x 3) used as a metric 28 28 % - Metrictype : 1 -> absolute error c/(err coeff^2) * Abs(H) (default) 29 29 % 2 -> relative error c/(err coeff^2) * Abs(H)/max(s,cutoff*max(s)) … … 265 265 266 266 % Bamg Mesh parameters {{{1 267 if (~exist(options,'domain') & md.numberof grids~=0 & md.dim==2),267 if (~exist(options,'domain') & md.numberofnodes~=0 & md.dim==2), 268 268 269 269 if isstruct(md.bamg), 270 270 bamg_mesh=bamgmesh(md.bamg.mesh); 271 271 else 272 bamg_mesh.Vertices=[md.x md.y ones(md.numberof grids,1)];272 bamg_mesh.Vertices=[md.x md.y ones(md.numberofnodes,1)]; 273 273 bamg_mesh.Triangles=[md.elements ones(md.numberofelements,1)]; 274 274 end … … 327 327 md.dim=2; 328 328 md.numberofelements=size(md.elements,1); 329 md.numberof grids=length(md.x);330 md.z=zeros(md.numberof grids,1);331 md. gridonbed=ones(md.numberofgrids,1);332 md. gridonwater=zeros(md.numberofgrids,1);333 md. gridonsurface=ones(md.numberofgrids,1);329 md.numberofnodes=length(md.x); 330 md.z=zeros(md.numberofnodes,1); 331 md.nodeonbed=ones(md.numberofnodes,1); 332 md.nodeonwater=zeros(md.numberofnodes,1); 333 md.nodeonsurface=ones(md.numberofnodes,1); 334 334 md.elementonbed=ones(md.numberofelements,1); 335 335 md.elementonsurface=ones(md.numberofelements,1); 336 md. gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;336 md.nodeonboundary=zeros(md.numberofnodes,1); md.nodeonboundary(md.segments(:,1:2))=1; 337 337 md.counter=1; 338 338 md.elementconnectivity=md.bamg.mesh.ElementConnectivity; … … 340 340 341 341 %Check for orphan 342 if any(~ismember(1:md.numberof grids,sort(unique(md.elements(:)))))342 if any(~ismember(1:md.numberofnodes,sort(unique(md.elements(:))))) 343 343 error('Output mesh has orphans. Decrease MaxCornerAngle to prevent outside points (ex: 0.01)'); 344 344 end -
issm/trunk/src/m/model/bedslope.m
r7649 r8298 8 8 if (md.dim==2), 9 9 numberofelements=md.numberofelements; 10 numberof grids=md.numberofgrids;10 numberofnodes=md.numberofnodes; 11 11 index=md.elements; 12 12 x=md.x; y=md.y; z=md.z; 13 13 else 14 14 numberofelements=md.numberofelements2d; 15 numberof grids=md.numberofgrids2d;15 numberofnodes=md.numberofnodes2d; 16 16 index=md.elements2d; 17 17 x=md.x2d; y=md.y2d; z=md.z2d; -
issm/trunk/src/m/model/collapse.m
r6412 r8298 18 18 %Start with changing alle the fields from the 3d mesh 19 19 20 %drag is limited to grids that are on the bedrock.20 %drag is limited to nodes that are on the bedrock. 21 21 md.drag_coefficient=project2d(md,md.drag_coefficient,1); 22 22 … … 46 46 md.elementonbed=ones(md.numberofelements2d,1); 47 47 md.elementonsurface=ones(md.numberofelements2d,1); 48 md. gridonbed=ones(md.numberofgrids2d,1);49 md. gridonsurface=ones(md.numberofgrids2d,1);48 md.nodeonbed=ones(md.numberofnodes2d,1); 49 md.nodeonsurface=ones(md.numberofnodes2d,1); 50 50 51 51 %elementstype … … 55 55 md.elements_type=project2d(md,md.elements_type,1); 56 56 end 57 md. gridonhutter=project2d(md,md.gridonhutter,1);58 md. gridonmacayeal=project2d(md,md.gridonmacayeal,1);59 md. gridonpattyn=project2d(md,md.gridonpattyn,1);60 md. gridonstokes=project2d(md,md.gridonstokes,1);57 md.nodeonhutter=project2d(md,md.nodeonhutter,1); 58 md.nodeonmacayeal=project2d(md,md.nodeonmacayeal,1); 59 md.nodeonpattyn=project2d(md,md.nodeonpattyn,1); 60 md.nodeonstokes=project2d(md,md.nodeonstokes,1); 61 61 62 62 %boundary conditions … … 84 84 85 85 %Collapse the mesh 86 grids2d=md.numberofgrids2d;86 nodes2d=md.numberofnodes2d; 87 87 elements2d=md.numberofelements2d; 88 88 … … 91 91 md.thickness=project2d(md,md.thickness,1); 92 92 md.bed=project2d(md,md.bed,1); 93 md. gridonboundary=project2d(md,md.gridonboundary,1);93 md.nodeonboundary=project2d(md,md.nodeonboundary,1); 94 94 md.elementoniceshelf=project2d(md,md.elementoniceshelf,1); 95 md. gridoniceshelf=project2d(md,md.gridoniceshelf,1);95 md.nodeoniceshelf=project2d(md,md.nodeoniceshelf,1); 96 96 md.elementonicesheet=project2d(md,md.elementonicesheet,1); 97 md. gridonicesheet=project2d(md,md.gridonicesheet,1);97 md.nodeonicesheet=project2d(md,md.nodeonicesheet,1); 98 98 99 99 %Initialize with the 2d mesh … … 101 101 md.y=md.y2d; 102 102 md.z=md.z2d; 103 md.numberof grids=md.numberofgrids2d;103 md.numberofnodes=md.numberofnodes2d; 104 104 md.numberofelements=md.numberofelements2d; 105 105 md.elements=md.elements2d; 106 106 107 %Keep a trace of lower and upper grids108 md.lower grids=NaN;109 md.upper grids=NaN;107 %Keep a trace of lower and upper nodes 108 md.lowernodes=NaN; 109 md.uppernodes=NaN; 110 110 111 111 %Remove old mesh … … 116 116 md.elements_type2d=md.elements_type; 117 117 md.numberofelements2d=md.numberofelements; 118 md.numberof grids2d=md.numberofgrids;118 md.numberofnodes2d=md.numberofnodes; 119 119 md.numlayers=0; 120 120 -
issm/trunk/src/m/model/contourenvelope.m
r5602 r8298 23 23 %Now, build the connectivity tables for this mesh. 24 24 %Computing connectivity 25 if size(md.nodeconnectivity,1)~=md.numberof grids,26 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);25 if size(md.nodeconnectivity,1)~=md.numberofnodes, 26 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 27 27 end 28 28 if size(md.elementconnectivity,1)~=md.numberofelements, … … 68 68 ord2=find(nods1(2)==md.elements(el1,:)); 69 69 70 %swap segment grids if necessary70 %swap segment nodes if necessary 71 71 if ( (ord1==1 & ord2==2) | (ord1==2 & ord2==3) | (ord1==3 & ord2==1) ), 72 72 temp=segments(count,1); -
issm/trunk/src/m/model/contourmassbalance.m
r5024 r8298 10 10 error('contourmassbalance error message: bad usage'); 11 11 end 12 if ((length(md.vx)~=md.numberof grids)|(length(md.vy)~=md.numberofgrids))13 error(['thicknessevolution error message: vx and vy should have a length of ' num2str(md.numberof grids)])12 if ((length(md.vx)~=md.numberofnodes)|(length(md.vy)~=md.numberofnodes)) 13 error(['thicknessevolution error message: vx and vy should have a length of ' num2str(md.numberofnodes)]) 14 14 end 15 15 if ~exist(file), -
issm/trunk/src/m/model/display/displaybc.m
r5175 r8298 12 12 13 13 disp(sprintf('\n geography:')); 14 fielddisplay(md,' gridonboundary','gridon boundary flags list');14 fielddisplay(md,'nodeonboundary','node on boundary flags list'); 15 15 fielddisplay(md,'elementoniceshelf','element on ice shelf flags list'); 16 fielddisplay(md,' gridoniceshelf','gridon ice shelf flags list');16 fielddisplay(md,'nodeoniceshelf','node on ice shelf flags list'); 17 17 fielddisplay(md,'elementonicesheet','element on ice sheet flags list'); 18 fielddisplay(md,' gridonicesheet','gridon ice sheet flags list');18 fielddisplay(md,'nodeonicesheet','node on ice sheet flags list'); 19 19 20 20 disp(sprintf('\n diagnostic:')); -
issm/trunk/src/m/model/display/displaymesh.m
r4873 r8298 15 15 disp(sprintf('\n Elements and nodes of the original 2d mesh:')); 16 16 fielddisplay(md,'numberofelements2d','number of elements'); 17 fielddisplay(md,'numberof grids2d','number of nodes');18 fielddisplay(md,'elements2d','index into (x,y,z), coordinates of the grids');17 fielddisplay(md,'numberofnodes2d','number of nodes'); 18 fielddisplay(md,'elements2d','index into (x,y,z), coordinates of the nodes'); 19 19 fielddisplay(md,'elements_type2d','element types'); 20 20 fielddisplay(md,'x2d','nodes x coordinate'); … … 27 27 end 28 28 fielddisplay(md,'numberofelements','number of elements'); 29 fielddisplay(md,'numberof grids','number of nodes');30 fielddisplay(md,'elements','index into (x,y,z), coordinates of the grids');29 fielddisplay(md,'numberofnodes','number of nodes'); 30 fielddisplay(md,'elements','index into (x,y,z), coordinates of the nodes'); 31 31 fielddisplay(md,'elements_type','element types'); 32 32 fielddisplay(md,'x','nodes x coordinate'); … … 41 41 fielddisplay(md,'bamg','Geometry and 2d mesh properties (if generated by Bamg)'); 42 42 fielddisplay(md,'penalties','penalties list'); 43 fielddisplay(md,' gridonbed','lower nodes flags list');43 fielddisplay(md,'nodeonbed','lower nodes flags list'); 44 44 fielddisplay(md,'elementonbed','lower elements flags list'); 45 fielddisplay(md,' gridonsurface','upper nodes flags list');45 fielddisplay(md,'nodeonsurface','upper nodes flags list'); 46 46 fielddisplay(md,'elementonsurface','upper elements flags list'); -
issm/trunk/src/m/model/display/displayparameters.m
r5175 r8298 19 19 fielddisplay(md,'elementonbed','element on bed flags list'); 20 20 fielddisplay(md,'elementonsurface','element on surface flags list'); 21 fielddisplay(md,' gridonbed','gridon bed flags list');22 fielddisplay(md,' gridonsurface','gridon surface flags list');21 fielddisplay(md,'nodeonbed','node on bed flags list'); 22 fielddisplay(md,'nodeonsurface','node on surface flags list'); 23 23 24 24 disp(sprintf('\n physical parameters:')); -
issm/trunk/src/m/model/divergence.m
r7649 r8298 7 7 if (md.dim==2), 8 8 numberofelements=md.numberofelements; 9 numberof grids=md.numberofgrids;9 numberofnodes=md.numberofnodes; 10 10 index=md.elements; 11 11 x=md.x; y=md.y; z=md.z; 12 12 else 13 13 numberofelements=md.numberofelements2d; 14 numberof grids=md.numberofgrids2d;14 numberofnodes=md.numberofnodes2d; 15 15 index=md.elements2d; 16 16 x=md.x2d; y=md.y2d; z=md.z2d; -
issm/trunk/src/m/model/extrude.m
r8235 r8298 75 75 x3d=[]; 76 76 y3d=[]; 77 z3d=[]; %the lower gridis on the bed78 thickness3d=md.thickness; %thickness and bed for these grids77 z3d=[]; %the lower node is on the bed 78 thickness3d=md.thickness; %thickness and bed for these nodes 79 79 bed3d=md.bed; 80 80 … … 83 83 x3d=[x3d; md.x]; 84 84 y3d=[y3d; md.y]; 85 % grids are distributed between bed and surface accordingly to the given exponent85 %nodes are distributed between bed and surface accordingly to the given exponent 86 86 z3d=[z3d; bed3d+thickness3d*extrusionlist(i)]; 87 87 end 88 number_ grids3d=size(x3d,1); %number of 3d grids for the non extruded part of the mesh88 number_nodes3d=size(x3d,1); %number of 3d nodes for the non extruded part of the mesh 89 89 90 90 %Extrude elements 91 91 elements3d=[]; 92 92 for i=1:numlayers-1, 93 elements3d=[elements3d;[md.elements+(i-1)*md.numberof grids md.elements+i*md.numberofgrids]]; %Create the elements of the 3d mesh for the non extruded part94 end 95 number_el3d=size(elements3d,1); %number of 3d grids for the non extruded part of the mesh96 97 %Keep a trace of lower and upper grids98 lower grids=NaN*ones(number_grids3d,1);99 upper grids=NaN*ones(number_grids3d,1);100 lower grids(md.numberofgrids+1:end)=1:(numlayers-1)*md.numberofgrids;101 upper grids(1:(numlayers-1)*md.numberofgrids)=md.numberofgrids+1:number_grids3d;102 md.lower grids=lowergrids;103 md.upper grids=uppergrids;93 elements3d=[elements3d;[md.elements+(i-1)*md.numberofnodes md.elements+i*md.numberofnodes]]; %Create the elements of the 3d mesh for the non extruded part 94 end 95 number_el3d=size(elements3d,1); %number of 3d nodes for the non extruded part of the mesh 96 97 %Keep a trace of lower and upper nodes 98 lowernodes=NaN*ones(number_nodes3d,1); 99 uppernodes=NaN*ones(number_nodes3d,1); 100 lowernodes(md.numberofnodes+1:end)=1:(numlayers-1)*md.numberofnodes; 101 uppernodes(1:(numlayers-1)*md.numberofnodes)=md.numberofnodes+1:number_nodes3d; 102 md.lowernodes=lowernodes; 103 md.uppernodes=uppernodes; 104 104 105 105 %same for lower and upper elements … … 119 119 md.vertices_type2d=md.vertices_type; 120 120 md.numberofelements2d=md.numberofelements; 121 md.numberof grids2d=md.numberofgrids;121 md.numberofnodes2d=md.numberofnodes; 122 122 123 123 %Update mesh type … … 130 130 md.z=z3d; 131 131 md.numberofelements=number_el3d; 132 md.numberof grids=number_grids3d;132 md.numberofnodes=number_nodes3d; 133 133 md.numlayers=numlayers; 134 134 135 135 %Ok, now deal with the other fields from the 2d mesh: 136 136 137 %drag_coefficient is limited to grids that are on the bedrock.137 %drag_coefficient is limited to nodes that are on the bedrock. 138 138 md.drag_coefficient=project3d(md,md.drag_coefficient,'node',1); 139 139 … … 168 168 md.elementonbed=project3d(md,ones(md.numberofelements2d,1),'element',1); 169 169 md.elementonsurface=project3d(md,ones(md.numberofelements2d,1),'element',md.numlayers-1); 170 md. gridonbed=project3d(md,ones(md.numberofgrids2d,1),'node',1);171 md. gridonsurface=project3d(md,ones(md.numberofgrids2d,1),'node',md.numlayers);170 md.nodeonbed=project3d(md,ones(md.numberofnodes2d,1),'node',1); 171 md.nodeonsurface=project3d(md,ones(md.numberofnodes2d,1),'node',md.numlayers); 172 172 173 173 %elementstype … … 176 176 md.elements_type=zeros(number_el3d,1); 177 177 md.elements_type=project3d(md,oldelements_type,'element'); 178 md. gridonhutter=project3d(md,md.gridonhutter,'node');179 md. gridonmacayeal=project3d(md,md.gridonmacayeal,'node');180 md. gridonpattyn=project3d(md,md.gridonpattyn,'node');181 md. gridonstokes=project3d(md,md.gridonstokes,'node');178 md.nodeonhutter=project3d(md,md.nodeonhutter,'node'); 179 md.nodeonmacayeal=project3d(md,md.nodeonmacayeal,'node'); 180 md.nodeonpattyn=project3d(md,md.nodeonpattyn,'node'); 181 md.nodeonstokes=project3d(md,md.nodeonstokes,'node'); 182 182 end 183 183 … … 185 185 if ~isnan(md.vertices_type) 186 186 oldvertices_type=md.vertices_type2d; 187 md.vertices_type=zeros(number_ grids3d,1);187 md.vertices_type=zeros(number_nodes3d,1); 188 188 md.vertices_type=project3d(md,oldvertices_type,'node'); 189 189 end … … 195 195 md.diagnostic_ref=project3d(md,md.diagnostic_ref,'node'); 196 196 197 %in 3d, pressureload: [ grid1 grid2 grid3 grid4 element]198 pressureload_layer1=[md.pressureload(:,1:2) md.pressureload(:,2)+md.numberof grids2d md.pressureload(:,1)+md.numberofgrids2d md.pressureload(:,3:4)]; %Add two columns on the first layer197 %in 3d, pressureload: [node1 node2 node3 node4 element] 198 pressureload_layer1=[md.pressureload(:,1:2) md.pressureload(:,2)+md.numberofnodes2d md.pressureload(:,1)+md.numberofnodes2d md.pressureload(:,3:4)]; %Add two columns on the first layer 199 199 pressureload=[]; 200 200 for i=1:numlayers-1, 201 pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.numberof grids2d pressureload_layer1(:,5)+(i-1)*md.numberofelements2d pressureload_layer1(:,6)];201 pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.numberofnodes2d pressureload_layer1(:,5)+(i-1)*md.numberofelements2d pressureload_layer1(:,6)]; 202 202 end 203 203 md.pressureload=pressureload; … … 220 220 md.thickness=project3d(md,md.thickness,'node'); 221 221 md.bed=project3d(md,md.bed,'node'); 222 md. gridonboundary=project3d(md,md.gridonboundary,'node');222 md.nodeonboundary=project3d(md,md.nodeonboundary,'node'); 223 223 md.elementoniceshelf=project3d(md,md.elementoniceshelf,'element'); 224 md. gridoniceshelf=project3d(md,md.gridoniceshelf,'node');224 md.nodeoniceshelf=project3d(md,md.nodeoniceshelf,'node'); 225 225 md.elementonicesheet=project3d(md,md.elementonicesheet,'element'); 226 md. gridonicesheet=project3d(md,md.gridonicesheet,'node');226 md.nodeonicesheet=project3d(md,md.nodeonicesheet,'node'); 227 227 md.elementonwater=project3d(md,md.elementonwater,'element'); 228 md. gridonwater=project3d(md,md.gridonwater,'node');228 md.nodeonwater=project3d(md,md.nodeonwater,'node'); 229 229 if ~isnan(md.weights),md.weights=project3d(md,md.weights,'node');end; 230 230 -
issm/trunk/src/m/model/geography.m
r7328 r8298 2 2 %GEOGRAPHY - establish boundaries between grounded and floating ice. 3 3 % 4 % By default, ice is considered grounded. The contour iceshelfname defines grids5 % for which ice is floating. The contour icesheetname defines grids inside an iceshelf,4 % By default, ice is considered grounded. The contour iceshelfname defines nodes 5 % for which ice is floating. The contour icesheetname defines nodes inside an iceshelf, 6 6 % that are grounded (ie: ice rises, islands, etc ...) 7 7 % All input files are in the Argus format (extension .exp). … … 32 32 elements=md.elements; 33 33 34 %Assign elementoniceshelf, elementonicesheet, gridonicesheet and gridoniceshelf. Only change at your own peril! This is synchronized heavily with the GroundingLineMigration module. {{{134 %Assign elementoniceshelf, elementonicesheet, nodeonicesheet and nodeoniceshelf. Only change at your own peril! This is synchronized heavily with the GroundingLineMigration module. {{{1 35 35 elementoniceshelf=FlagElements(md,iceshelfname); 36 36 elementonicesheet=FlagElements(md,icesheetname); 37 37 38 %Because icesheet grids and elements can be included into an iceshelf, we need to update. Remember, all the previous38 %Because icesheet nodes and elements can be included into an iceshelf, we need to update. Remember, all the previous 39 39 %arrays come from domain outlines that can intersect one another: 40 40 elementoniceshelf=double((elementoniceshelf & ~elementonicesheet)); 41 41 elementonicesheet=double(~elementoniceshelf); 42 42 43 %the order here is important. we choose gridonicesheet as default on the grounding line.44 gridoniceshelf=zeros(md.numberofgrids,1);45 gridonicesheet=zeros(md.numberofgrids,1);46 gridonicesheet(md.elements(find(elementonicesheet),:))=1;47 gridoniceshelf(find(~gridonicesheet))=1;43 %the order here is important. we choose nodeonicesheet as default on the grounding line. 44 nodeoniceshelf=zeros(md.numberofnodes,1); 45 nodeonicesheet=zeros(md.numberofnodes,1); 46 nodeonicesheet(md.elements(find(elementonicesheet),:))=1; 47 nodeoniceshelf(find(~nodeonicesheet))=1; 48 48 %}}} 49 49 … … 52 52 53 53 md.elementoniceshelf=elementoniceshelf; 54 md. gridoniceshelf=gridoniceshelf;54 md.nodeoniceshelf=nodeoniceshelf; 55 55 56 56 md.elementonicesheet=elementonicesheet; 57 md. gridonicesheet=gridonicesheet;57 md.nodeonicesheet=nodeonicesheet; 58 58 59 md. gridonwater=zeros(md.numberofgrids,1);59 md.nodeonwater=zeros(md.numberofnodes,1); 60 60 md.elementonwater=zeros(md.numberofelements,1); 61 61 -
issm/trunk/src/m/model/geography2.m
r5024 r8298 13 13 elements=md.elements; 14 14 15 %recover elements and grids on land.15 %recover elements and nodes on land. 16 16 if ischar(landname), 17 [ gridonland,elementonland]=ContourToMesh(elements,x,y,landname,'element and node',2);17 [nodeonland,elementonland]=ContourToMesh(elements,x,y,landname,'element and node',2); 18 18 elseif isfloat(landname), 19 19 if size(landname,1)~=md.numberofelements, … … 21 21 end 22 22 elementonland=landname; 23 gridonland=zeros(md.numberofgrids,1);24 gridonland(md.elements(find(elementonland),:))=1;23 nodeonland=zeros(md.numberofnodes,1); 24 nodeonland(md.elements(find(elementonland),:))=1; 25 25 else 26 26 error('Invalid area option option'); … … 28 28 29 29 %Now, build the connectivity tables for this mesh. 30 if size(md.nodeconnectivity,1)~=md.numberof grids,31 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);30 if size(md.nodeconnectivity,1)~=md.numberofnodes, 31 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 32 32 end 33 33 if size(md.elementconnectivity,1)~=md.numberofelements, … … 35 35 end 36 36 37 %any element with 3 grids on land should be on land:37 %any element with 3 nodes on land should be on land: 38 38 elementsonwater=find(~elementonland); 39 wrongelements=elementsonwater(find(( gridonland(md.elements(elementsonwater,1)) + gridonland(md.elements(elementsonwater,2)) + gridonland(md.elements(elementsonwater,3)) ...39 wrongelements=elementsonwater(find(( nodeonland(md.elements(elementsonwater,1)) + nodeonland(md.elements(elementsonwater,2)) + nodeonland(md.elements(elementsonwater,3)) ... 40 40 )==3)); 41 41 elementonland(wrongelements)=1; … … 69 69 elementonland(landelements)=1; 70 70 71 %recover arrays of ice shelf grids and elements, and ice sheet grids and elements.71 %recover arrays of ice shelf nodes and elements, and ice sheet nodes and elements. 72 72 elementoniceshelf=FlagElements(md,iceshelfname); 73 73 elementonicesheet=FlagElements(md,icesheetname); 74 74 75 %Because icesheet grids and elements can be included into an iceshelf, we need to update. Remember, all the previous75 %Because icesheet nodes and elements can be included into an iceshelf, we need to update. Remember, all the previous 76 76 %arrays come from domain outlines that can intersect one another: 77 gridoniceshelf=zeros(md.numberofgrids,1);78 gridonicesheet=zeros(md.numberofgrids,1);77 nodeoniceshelf=zeros(md.numberofnodes,1); 78 nodeonicesheet=zeros(md.numberofnodes,1); 79 79 elementoniceshelf=double((elementoniceshelf & ~elementonicesheet)); 80 80 elementonicesheet=double(~elementoniceshelf); 81 gridoniceshelf(md.elements(find(elementoniceshelf),:))=1;82 gridonicesheet(md.elements(find(elementonicesheet),:))=1;81 nodeoniceshelf(md.elements(find(elementoniceshelf),:))=1; 82 nodeonicesheet(md.elements(find(elementonicesheet),:))=1; 83 83 84 84 %now correct, so that none of the iceshelf and icesheet elements and nodes are in the water. … … 87 87 elementonicesheet(pos)=0; 88 88 89 pos=find(~ gridonland);90 gridoniceshelf(pos)=0;91 gridonicesheet(pos)=0;89 pos=find(~nodeonland); 90 nodeoniceshelf(pos)=0; 91 nodeonicesheet(pos)=0; 92 92 93 %create gridonwater and elementonwater:94 gridonwater=double(~gridonland);93 %create nodeonwater and elementonwater: 94 nodeonwater=double(~nodeonland); 95 95 elementonwater=double(~elementonland); 96 96 97 97 %correct for islands: 98 gridoniceshelf=double(gridoniceshelf & ~gridonicesheet);98 nodeoniceshelf=double(nodeoniceshelf & ~nodeonicesheet); 99 99 elementoniceshelf=double(elementoniceshelf & ~elementonicesheet); 100 100 101 101 %now, icesheets are everything except iceshelves and water 102 gridonicesheet=double(~gridoniceshelf & ~gridonwater);102 nodeonicesheet=double(~nodeoniceshelf & ~nodeonwater); 103 103 elementonicesheet=double(~elementoniceshelf & ~elementonwater); 104 104 … … 123 123 124 124 %some final checks: 125 %check that no gridthinks it's on an ice shelf or ice sheet, and lies actually in the middle of the water.126 gridsgrounded=find(~gridonwater);125 %check that no node thinks it's on an ice shelf or ice sheet, and lies actually in the middle of the water. 126 nodesgrounded=find(~nodeonwater); 127 127 lengthconnectivity=size(md.nodeconnectivity,2); 128 groundedcounters=md.nodeconnectivity( gridsgrounded,lengthconnectivity);129 groundedconnectivity=md.nodeconnectivity( gridsgrounded,1:lengthconnectivity-1);128 groundedcounters=md.nodeconnectivity(nodesgrounded,lengthconnectivity); 129 groundedconnectivity=md.nodeconnectivity(nodesgrounded,1:lengthconnectivity-1); 130 130 pos=find(groundedconnectivity); 131 131 groundedconnectivity(pos)=elementonwater(groundedconnectivity(pos)); 132 132 groundedsum=sum(groundedconnectivity,2); 133 133 errorflags=find(groundedsum==groundedcounters); 134 error grids=gridsgrounded(errorflags);134 errornodes=nodesgrounded(errorflags); 135 135 136 gridonwater(errorgrids)=1;137 gridonicesheet(errorgrids)=0;138 gridoniceshelf(errorgrids)=0;136 nodeonwater(errornodes)=1; 137 nodeonicesheet(errornodes)=0; 138 nodeoniceshelf(errornodes)=0; 139 139 140 140 %Return: 141 md. gridoniceshelf=gridoniceshelf;141 md.nodeoniceshelf=nodeoniceshelf; 142 142 md.elementoniceshelf=elementoniceshelf; 143 143 144 md. gridonwater=gridonwater;144 md.nodeonwater=nodeonwater; 145 145 md.elementonwater=elementonwater; 146 146 147 md. gridonicesheet=gridonicesheet;147 md.nodeonicesheet=nodeonicesheet; 148 148 md.elementonicesheet=elementonicesheet; 149 149 -
issm/trunk/src/m/model/ismodelselfconsistent.m
r8287 r8298 42 42 checksize(md,fields,[md.numberofelements 6]); 43 43 end 44 if any(~ismember(1:md.numberof grids,sort(unique(md.elements(:)))));44 if any(~ismember(1:md.numberofnodes,sort(unique(md.elements(:))))); 45 45 error('orphan nodes have been found. Check the mesh'); 46 46 end … … 70 70 %}}} 71 71 %NO NAN {{{1 72 fields={'numberofelements','numberof grids','x','y','z','drag_coefficient','drag_type','drag_p','drag_q',...72 fields={'numberofelements','numberofnodes','x','y','z','drag_coefficient','drag_type','drag_p','drag_q',... 73 73 'rho_ice','rho_water','rheology_B','elementoniceshelf','surface','thickness','bed','g','lowmem','sparsity','nsteps','maxiter',... 74 'tolx','eps_res','max_nonlinear_iterations','rheology_n',' gridonbed','gridonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec','elementconnectivity'};74 'tolx','eps_res','max_nonlinear_iterations','rheology_n','nodeonbed','nodeonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec','elementconnectivity'}; 75 75 checknan(md,fields); 76 76 %}}}} 77 77 %FIELDS >= 0 {{{1 78 fields={'numberofelements','numberof grids','elements','drag_coefficient','drag_type','drag_p','drag_q',...78 fields={'numberofelements','numberofnodes','elements','drag_coefficient','drag_type','drag_p','drag_q',... 79 79 'rho_ice','rho_water','rheology_B','elementoniceshelf','thickness','g','eps_res','max_nonlinear_iterations','eps_rel','eps_abs','nsteps','maxiter','tolx',... 80 'sparsity','lowmem','rheology_n',' gridonbed','gridonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec'};80 'sparsity','lowmem','rheology_n','nodeonbed','nodeonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec'}; 81 81 checkgreater(md,fields,0); 82 82 %}}} 83 83 %FIELDS > 0 {{{1 84 fields={'numberofelements','numberof grids','elements','drag_type','drag_p',...84 fields={'numberofelements','numberofnodes','elements','drag_type','drag_p',... 85 85 'rho_ice','rho_water','rheology_B','thickness','g','max_nonlinear_iterations','eps_res','eps_rel','eps_abs','maxiter','tolx',... 86 86 'sparsity','deltaH','DeltaH','timeacc','timedec'}; … … 92 92 %}}} 93 93 %SIZE NUMBEROFGRIDS {{{1 94 fields={'x','y','z','rheology_B','drag_coefficient','melting_rate','accumulation_rate','surface','thickness','bed',' gridonbed','gridonsurface'};95 checksize(md,fields,[md.numberof grids 1]);94 fields={'x','y','z','rheology_B','drag_coefficient','melting_rate','accumulation_rate','surface','thickness','bed','nodeonbed','nodeonsurface'}; 95 checksize(md,fields,[md.numberofnodes 1]); 96 96 %}}} 97 97 %OTHER SIZES {{{1 98 98 fields={'spcvelocity','diagnostic_ref'}; 99 checksize(md,fields,[md.numberof grids 6]);99 checksize(md,fields,[md.numberofnodes 6]); 100 100 %}}} 101 101 %THICKNESS = SURFACE - BED {{{1 … … 188 188 checksize(md,fields,[md.nsteps num_controls]); 189 189 fields={'cm_min','cm_max'}; 190 checksize(md,fields,[md.numberof grids num_controls]);190 checksize(md,fields,[md.numberofnodes num_controls]); 191 191 192 192 %RESPONSES … … 195 195 %WEIGHTS 196 196 fields={'weights'}; 197 checksize(md,fields,[md.numberof grids 1]);197 checksize(md,fields,[md.numberofnodes 1]); 198 198 checkgreater(md,fields,0); 199 199 … … 201 201 if md.solution_type==BalancethicknessSolutionEnum 202 202 fields={'thickness_obs'}; 203 checksize(md,fields,[md.numberof grids 1]);203 checksize(md,fields,[md.numberofnodes 1]); 204 204 checknan(md,fields); 205 205 else 206 206 fields={'vx_obs','vy_obs'}; 207 checksize(md,fields,[md.numberof grids 1]);207 checksize(md,fields,[md.numberofnodes 1]); 208 208 checknan(md,fields); 209 209 end … … 213 213 pos=find(md.thickness<=0); 214 214 if any(find(md.spcthickness(pos,1)==0)), 215 error(['model not consistent: model ' md.name ' has some grids with 0 thickness']);215 error(['model not consistent: model ' md.name ' has some nodes with 0 thickness']); 216 216 end 217 217 end … … 228 228 end 229 229 if ~isempty(md.part), 230 if numel(md.part)~=md.numberof grids,231 error(['model not consistent: user supplied partition for qmu analysis should have size md.numberof grids x 1 ']);232 end 233 if find(md.part)>=md.numberof grids,230 if numel(md.part)~=md.numberofnodes, 231 error(['model not consistent: user supplied partition for qmu analysis should have size md.numberofnodes x 1 ']); 232 end 233 if find(md.part)>=md.numberofnodes, 234 234 error(['model not consistent: user supplied partition should be indexed from 0 (c-convention)']); 235 235 end … … 237 237 error(['model not consistent: partition vector not indexed from 0 on']); 238 238 end 239 if max(md.part)>=md.numberof grids,240 error(['model not consistent: partition vector cannot have maximum index larger than number of grids']);239 if max(md.part)>=md.numberofnodes, 240 error(['model not consistent: partition vector cannot have maximum index larger than number of nodes']); 241 241 end 242 242 if ~isempty(find(md.part<0)), … … 319 319 end 320 320 % probably going to need some checks on fm_flightreqs here 321 if (numel(md.fm_criterion) ~= md.numberof grids) && (numel(md.fm_criterion) ~= md.numberofelements)322 error(['model not consistent: fm_criterion vector must have number of nodes (' int2str(md.numberof grids) ') or elements (' int2str(md.numberofelements) ') values, not ' int2str(numel(md.fm_criterion)) ' values.']);321 if (numel(md.fm_criterion) ~= md.numberofnodes) && (numel(md.fm_criterion) ~= md.numberofelements) 322 error(['model not consistent: fm_criterion vector must have number of nodes (' int2str(md.numberofnodes) ') or elements (' int2str(md.numberofelements) ') values, not ' int2str(numel(md.fm_criterion)) ' values.']); 323 323 end 324 324 end … … 343 343 %SINGULAR 344 344 if ~any(sum(md.spcvelocity(:,1:2),2)==2), 345 error(['model not consistent: model ' md.name ' is not well posed (singular). You need at least one gridwith fixed velocity!'])345 error(['model not consistent: model ' md.name ' is not well posed (singular). You need at least one node with fixed velocity!']) 346 346 end 347 347 … … 350 350 pos=find(md.thickness<=0); 351 351 if any(find(md.spcthickness(pos,1)==0)), 352 error(['model not consistent: model ' md.name ' has some grids with 0 thickness']);352 error(['model not consistent: model ' md.name ' has some nodes with 0 thickness']); 353 353 end 354 354 end … … 369 369 end 370 370 %CHECK THAT ROTATION IS IN THE (X,Y) PLANE FOR 2D MODELS 371 if any(md. gridonmacayeal),372 pos=find(sum(isnan(md.diagnostic_ref),2)==0 & md. gridonmacayeal);371 if any(md.nodeonmacayeal), 372 pos=find(sum(isnan(md.diagnostic_ref),2)==0 & md.nodeonmacayeal); 373 373 if any(md.diagnostic_ref(pos,3:5)~=0); 374 error(['model not consistent: model ' md.name ' has problem with rotated spc. The rotation should be in the (x,y) plane for 2D diagnostic models ( gridonmacayeal)']);374 error(['model not consistent: model ' md.name ' has problem with rotated spc. The rotation should be in the (x,y) plane for 2D diagnostic models (nodeonmacayeal)']); 375 375 end 376 376 end … … 380 380 fields={'vx','vy'}; 381 381 checknan(md,fields); 382 checksize(md,fields,[md.numberof grids 1]);382 checksize(md,fields,[md.numberofnodes 1]); 383 383 end 384 384 … … 400 400 %Check the size of verticess_type 401 401 fields={'vertices_type'}; 402 checksize(md,fields,[md.numberof grids 1]);402 checksize(md,fields,[md.numberofnodes 1]); 403 403 %Check the values of vertices_type 404 404 checkvalues(md,{'vertices_type'},[MacAyealApproximationEnum() HutterApproximationEnum() PattynApproximationEnum()... … … 436 436 %INITIAL VELOCITIES 437 437 fields={'vx','vy'}; 438 checksize(md,fields,[md.numberof grids 1]);438 checksize(md,fields,[md.numberofnodes 1]); 439 439 checknan(md,fields); 440 440 … … 460 460 %VELOCITIES AND PRESSURE 461 461 fields={'vx','vy','vz','pressure','geothermalflux'}; 462 checksize(md,fields,[md.numberof grids 1]);462 checksize(md,fields,[md.numberofnodes 1]); 463 463 checknan(md,fields); 464 464 … … 472 472 %INITIAL TEMPERATURE, MELTING AND ACCUMULATION 473 473 fields={'temperature','accumulation_rate','melting_rate'}; 474 checksize(md,fields,[md.numberof grids 1]);474 checksize(md,fields,[md.numberofnodes 1]); 475 475 checknan(md,fields); 476 476 … … 488 488 %VELOCITIES MELTING AND ACCUMULATION 489 489 fields={'vx','vy','accumulation_rate','melting_rate','dhdt'}; 490 checksize(md,fields,[md.numberof grids 1]);490 checksize(md,fields,[md.numberofnodes 1]); 491 491 checknan(md,fields); 492 492 493 493 %SPC 494 494 % if ~md.prognostic_DG, 495 % if any(md.spcthickness(find(md. gridonboundary))~=1),495 % if any(md.spcthickness(find(md.nodeonboundary))~=1), 496 496 % error(['model not consistent: model ' md.name ' should have all the nodes on boundary constrained in field spcthickness']); 497 497 % end … … 507 507 %VELOCITIES MELTING AND ACCUMULATION 508 508 fields={'vx','vy','accumulation_rate','melting_rate'}; 509 checksize(md,fields,[md.numberof grids 1]);509 checksize(md,fields,[md.numberofnodes 1]); 510 510 checknan(md,fields); 511 511 512 512 %SPC 513 if any(md.spcvelocity(find(md. gridonboundary),[1:2])~=1),513 if any(md.spcvelocity(find(md.nodeonboundary),[1:2])~=1), 514 514 error(['model not consistent: model ' md.name ' should have all the nodes on boundary constrained in field spcvelocity']); 515 515 end … … 557 557 if strcmp(fields{i},'cm_min'), 558 558 disp('!!! '); 559 disp('!!! WARNING: cm_min must now be of size [md.numberof grids x 1]. Update your parameter file as follows:');559 disp('!!! WARNING: cm_min must now be of size [md.numberofnodes x 1]. Update your parameter file as follows:'); 560 560 disp('!!! '); 561 disp('!!! md.cm_min=md.cm_min*ones(md.numberof grids,1);');561 disp('!!! md.cm_min=md.cm_min*ones(md.numberofnodes,1);'); 562 562 disp('!!! '); 563 563 end … … 565 565 if strcmp(fields{i},'cm_max'), 566 566 disp('!!! '); 567 disp('!!! WARNING: cm_max must now be of size [md.numberof grids x 1]. Update your parameter file as follows:');567 disp('!!! WARNING: cm_max must now be of size [md.numberofnodes x 1]. Update your parameter file as follows:'); 568 568 disp('!!! '); 569 disp('!!! md.cm_max=md.cm_max*ones(md.numberof grids,1);');569 disp('!!! md.cm_max=md.cm_max*ones(md.numberofnodes,1);'); 570 570 disp('!!! '); 571 571 end -
issm/trunk/src/m/model/isresultconsistent.m
r7629 r8298 37 37 38 38 %check size 39 if ~testsize(md,fields1,md.numberof grids),39 if ~testsize(md,fields1,md.numberofnodes), 40 40 bool=0; return 41 41 end … … 66 66 67 67 %check size 68 if ~testsize(md,fields1,md.numberof grids),68 if ~testsize(md,fields1,md.numberofnodes), 69 69 bool=0; return 70 70 end … … 101 101 fields={'results.DiagnosticAnalysis.gradient'}; 102 102 %check size 103 if ~testsize(md,fields,md.numberof grids),103 if ~testsize(md,fields,md.numberofnodes), 104 104 bool=0; return 105 105 end … … 126 126 127 127 %check size 128 if ~testsize(md,fields1,md.numberof grids),129 bool=0; return 130 end 131 132 %no NAN 133 if ~testnan(md,fields1,md.numberof grids),134 bool=0; return 135 end 136 137 %check value is real 138 if ~testreal(md,fields1,md.numberof grids),128 if ~testsize(md,fields1,md.numberofnodes), 129 bool=0; return 130 end 131 132 %no NAN 133 if ~testnan(md,fields1,md.numberofnodes), 134 bool=0; return 135 end 136 137 %check value is real 138 if ~testreal(md,fields1,md.numberofnodes), 139 139 bool=0; return 140 140 end 141 141 142 142 %check value>=0 143 if ~testpositive(md,fields2,md.numberof grids),143 if ~testpositive(md,fields2,md.numberofnodes), 144 144 bool=0; return 145 145 end 146 146 147 147 %check melting (<=0 via penalties) 148 if any(abs(md.results.ThermalAnalysis(iter).melting(md.numberof grids2d+1:end))>tolerance)148 if any(abs(md.results.ThermalAnalysis(iter).melting(md.numberofnodes2d+1:end))>tolerance) 149 149 disp(['''thermal'' result not consistent: increase penalty_melting (negative melting)']); 150 150 bool=0; return; … … 175 175 176 176 %check size 177 if ~testsize(md,fields1,md.numberof grids),178 bool=0; return 179 end 180 181 %no NAN 182 if ~testnan(md,fields1,md.numberof grids),183 bool=0; return 184 end 185 186 %check value is real 187 if ~testreal(md,fields1,md.numberof grids),177 if ~testsize(md,fields1,md.numberofnodes), 178 bool=0; return 179 end 180 181 %no NAN 182 if ~testnan(md,fields1,md.numberofnodes), 183 bool=0; return 184 end 185 186 %check value is real 187 if ~testreal(md,fields1,md.numberofnodes), 188 188 bool=0; return 189 189 end 190 190 191 191 %check value>=0 192 if ~testpositive(md,fields2,md.numberof grids),192 if ~testpositive(md,fields2,md.numberofnodes), 193 193 bool=0; return 194 194 end … … 196 196 %check melting (<=0 via penalties) 197 197 if (md.dim==3), 198 if any(abs(md.results.TransientAnalysis(iter).melting(md.numberof grids2d+1:end))>tolerance)198 if any(abs(md.results.TransientAnalysis(iter).melting(md.numberofnodes2d+1:end))>tolerance) 199 199 disp(['''thermal'' result not consistent: increase penalty_melting (negative melting)']); 200 200 bool=0; return; … … 210 210 for i=1:length(fields), 211 211 if length(eval(['md.' fields{i}]))~=fieldsize 212 disp(['results not consistent: field ' fields{i} ' size should be ' num2str(md.numberof grids)]);212 disp(['results not consistent: field ' fields{i} ' size should be ' num2str(md.numberofnodes)]); 213 213 bool=0; return; 214 214 end -
issm/trunk/src/m/model/marshall.m
r8250 r8298 23 23 24 24 WriteData(fid,md.dim,'Integer','dim'); 25 WriteData(fid,md.numberof grids,'Integer','numberofgrids');25 WriteData(fid,md.numberofnodes,'Integer','numberofnodes'); 26 26 WriteData(fid,md.numberofelements,'Integer','numberofelements'); 27 27 WriteData(fid,md.x,'Mat','x'); … … 32 32 WriteData(fid,md.elements_type,'Mat','elements_type'); 33 33 WriteData(fid,md.vertices_type,'Mat','vertices_type'); 34 WriteData(fid,md. gridonhutter,'Mat','gridonhutter');35 WriteData(fid,md. gridonmacayeal,'Mat','gridonmacayeal');34 WriteData(fid,md.nodeonhutter,'Mat','nodeonhutter'); 35 WriteData(fid,md.nodeonmacayeal,'Mat','nodeonmacayeal'); 36 36 37 37 if md.dim==3, 38 38 WriteData(fid,md.numberofelements2d,'Integer','numberofelements2d'); 39 WriteData(fid,md.numberof grids2d,'Integer','numberofgrids2d');39 WriteData(fid,md.numberofnodes2d,'Integer','numberofnodes2d'); 40 40 WriteData(fid,md.elements2d,'Mat','elements2d'); 41 41 WriteData(fid,md.numlayers,'Integer','numlayers'); 42 WriteData(fid,md. gridonpattyn,'Mat','gridonpattyn');42 WriteData(fid,md.nodeonpattyn,'Mat','nodeonpattyn'); 43 43 end 44 44 WriteData(fid,md.upperelements,'Mat','upperelements'); … … 46 46 WriteData(fid,md.elementonbed,'Mat','elementonbed'); 47 47 WriteData(fid,md.elementonsurface,'Mat','elementonsurface'); 48 WriteData(fid,md. gridonbed,'Mat','gridonbed');49 WriteData(fid,md. gridonsurface,'Mat','gridonsurface');50 WriteData(fid,md. gridonstokes,'Mat','gridonstokes');48 WriteData(fid,md.nodeonbed,'Mat','nodeonbed'); 49 WriteData(fid,md.nodeonsurface,'Mat','nodeonsurface'); 50 WriteData(fid,md.nodeonstokes,'Mat','nodeonstokes'); 51 51 WriteData(fid,md.borderstokes,'Mat','borderstokes'); 52 52 … … 75 75 WriteData(fid,md.elementoniceshelf,'Mat','elementoniceshelf'); 76 76 WriteData(fid,md.elementonwater,'Mat','elementonwater'); 77 WriteData(fid,md. gridonicesheet,'Mat','gridonicesheet');78 WriteData(fid,md. gridoniceshelf,'Mat','gridoniceshelf');79 WriteData(fid,md. gridonwater,'Mat','gridonwater');77 WriteData(fid,md.nodeonicesheet,'Mat','nodeonicesheet'); 78 WriteData(fid,md.nodeoniceshelf,'Mat','nodeoniceshelf'); 79 WriteData(fid,md.nodeonwater,'Mat','nodeonwater'); 80 80 81 81 WriteData(fid,md.spcvelocity,'Mat','spcvelocity'); -
issm/trunk/src/m/model/mechanicalproperties.m
r6286 r8298 14 14 15 15 %some checks 16 if length(vx)~=md.numberof grids | length(vy)~=md.numberofgrids,17 error(['the input velocity should be of size ' num2str(md.numberof grids) '!'])16 if length(vx)~=md.numberofnodes | length(vy)~=md.numberofnodes, 17 error(['the input velocity should be of size ' num2str(md.numberofnodes) '!']) 18 18 end 19 19 if ~(md.dim==2) -
issm/trunk/src/m/model/mesh/findsegments.m
r3115 r8298 52 52 segments(count,:)=[nods1 el1]; 53 53 54 %swap segment grids if necessary54 %swap segment nodes if necessary 55 55 ord1=find(nods1(1)==md.elements(el1,:)); 56 56 ord2=find(nods1(2)==md.elements(el1,:)); … … 77 77 segments(count,:)=[nods el1]; 78 78 79 %swap segment grids if necessary79 %swap segment nodes if necessary 80 80 ord1=find(nods(1)==md.elements(el1,:)); 81 81 ord2=find(nods(2)==md.elements(el1,:)); -
issm/trunk/src/m/model/mesh/mesh.m
r3994 r8298 15 15 % md=mesh(md,'DomainOutline.exp','Rifts.exp',1500); 16 16 17 %Figure out a characteristic area. Resolution is a grid oriented concept (ex a 1000m resolution gridwould17 %Figure out a characteristic area. Resolution is a node oriented concept (ex a 1000m resolution node would 18 18 %be made of 1000*1000 area squares). 19 19 if (nargin==3), … … 43 43 [elements,x,y,segments,segmentmarkers]=TriMesh(domainname,riftname,area,'yes'); 44 44 45 %check that all the created grids belong to at least one element45 %check that all the created nodes belong to at least one element 46 46 orphan=find(~ismember([1:length(x)],sort(unique(elements(:))))); 47 47 for i=1:length(orphan), 48 %get rid of the orphan gridi48 %get rid of the orphan node i 49 49 %update x and y 50 50 x=[x(1:orphan(i)-(i-1)-1); x(orphan(i)-(i-1)+1:end)]; … … 70 70 %Fill in rest of fields: 71 71 md.numberofelements=length(md.elements); 72 md.numberof grids=length(md.x);73 md.z=zeros(md.numberof grids,1);74 md. gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;75 md. gridonbed=ones(md.numberofgrids,1);76 md. gridonsurface=ones(md.numberofgrids,1);72 md.numberofnodes=length(md.x); 73 md.z=zeros(md.numberofnodes,1); 74 md.nodeonboundary=zeros(md.numberofnodes,1); md.nodeonboundary(md.segments(:,1:2))=1; 75 md.nodeonbed=ones(md.numberofnodes,1); 76 md.nodeonsurface=ones(md.numberofnodes,1); 77 77 md.elementonbed=ones(md.numberofelements,1); 78 78 md.elementonsurface=ones(md.numberofelements,1); 79 79 80 80 %Now, build the connectivity tables for this mesh. 81 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);81 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 82 82 md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity); 83 83 -
issm/trunk/src/m/model/mesh/meshadaptation.m
r3994 r8298 17 17 error('meshadaptation error message: adaptation for 3d meshes not implemented yet') 18 18 end 19 if length(field)~=md.numberof grids20 error('meshadaptation error message: input field length shoud be numberof grids')19 if length(field)~=md.numberofnodes 20 error('meshadaptation error message: input field length shoud be numberofnodes') 21 21 end 22 22 … … 25 25 %initialization 26 26 index=md.elements; 27 numberof grids=md.numberofgrids;27 numberofnodes=md.numberofnodes; 28 28 numberofelements=md.numberofelements; 29 gradx=zeros(numberof grids,1);30 grady=zeros(numberof grids,1);29 gradx=zeros(numberofnodes,1); 30 grady=zeros(numberofnodes,1); 31 31 metric=zeros(numberofelements,1); 32 32 … … 48 48 grad_ely=sum(field(index).*beta,2); 49 49 50 %update weights that holds the volume of all the element holding the gridi51 weights=sparse(line,ones(linesize,1),repmat(areas,3,1),numberof grids,1);50 %update weights that holds the volume of all the element holding the node i 51 weights=sparse(line,ones(linesize,1),repmat(areas,3,1),numberofnodes,1); 52 52 53 %Compute gradient for each grid(average of the elements around)54 gradx=sparse(line,ones(linesize,1),repmat(areas.*grad_elx,3,1),numberof grids,1);55 grady=sparse(line,ones(linesize,1),repmat(areas.*grad_ely,3,1),numberof grids,1);53 %Compute gradient for each node (average of the elements around) 54 gradx=sparse(line,ones(linesize,1),repmat(areas.*grad_elx,3,1),numberofnodes,1); 55 grady=sparse(line,ones(linesize,1),repmat(areas.*grad_ely,3,1),numberofnodes,1); 56 56 gradx=gradx./weights; 57 57 grady=grady./weights; -
issm/trunk/src/m/model/mesh/meshbamg.m
r5088 r8298 76 76 %interpolate velocities onto mesh 77 77 disp(' interpolating velocities...'); 78 if strcmpi(NamesV.interp,' grid'),78 if strcmpi(NamesV.interp,'node'), 79 79 vx_obs=InterpFromGridToMesh(Vel.(NamesV.xname),Vel.(NamesV.yname),Vel.(NamesV.vxname),md.x,md.y,0); 80 80 vy_obs=InterpFromGridToMesh(Vel.(NamesV.xname),Vel.(NamesV.yname),Vel.(NamesV.vyname),md.x,md.y,0); … … 87 87 if thicknesspresent, 88 88 disp(' interpolating thickness...'); 89 if strcmpi(NamesH.interp,' grid'),89 if strcmpi(NamesH.interp,'node'), 90 90 h=InterpFromGridToMesh(Thi.(NamesH.xname),Thi.(NamesH.yname),Thi.(NamesH.dataname),md.x,md.y,0); 91 91 else … … 95 95 end 96 96 97 %set gridonwater field97 %set nodeonwater field 98 98 if ~strcmp(groundeddomain,'N/A'), 99 gridground=ContourToMesh(md.elements,md.x,md.y,groundeddomain,'node',2);100 md. gridonwater=ones(md.numberofgrids,1);101 md. gridonwater(find(gridground))=0;99 nodeground=ContourToMesh(md.elements,md.x,md.y,groundeddomain,'node',2); 100 md.nodeonwater=ones(md.numberofnodes,1); 101 md.nodeonwater(find(nodeground))=0; 102 102 else 103 md. gridonwater=zeros(md.numberofgrids,1);103 md.nodeonwater=zeros(md.numberofnodes,1); 104 104 end 105 105 -
issm/trunk/src/m/model/mesh/meshconvert.m
r5093 r8298 38 38 md.dim=2; 39 39 md.numberofelements=size(md.elements,1); 40 md.numberof grids=length(md.x);41 md.z=zeros(md.numberof grids,1);42 md. gridonbed=ones(md.numberofgrids,1);43 md. gridonwater=zeros(md.numberofgrids,1);44 md. gridonsurface=ones(md.numberofgrids,1);40 md.numberofnodes=length(md.x); 41 md.z=zeros(md.numberofnodes,1); 42 md.nodeonbed=ones(md.numberofnodes,1); 43 md.nodeonwater=zeros(md.numberofnodes,1); 44 md.nodeonsurface=ones(md.numberofnodes,1); 45 45 md.elementonbed=ones(md.numberofelements,1); 46 46 md.elementonsurface=ones(md.numberofelements,1); 47 md. gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;47 md.nodeonboundary=zeros(md.numberofnodes,1); md.nodeonboundary(md.segments(:,1:2))=1; 48 48 md.counter=1; -
issm/trunk/src/m/model/mesh/meshnodensity.m
r3994 r8298 29 29 [elements,x,y,segments,segmentmarkers]=TriMeshNoDensity(domainname,riftname); 30 30 31 %check that all the created grids belong to at least one element31 %check that all the created nodes belong to at least one element 32 32 orphan=find(~ismember([1:length(x)],sort(unique(elements(:))))); 33 33 for i=1:length(orphan), 34 %get rid of the orphan gridi34 %get rid of the orphan node i 35 35 %update x and y 36 36 x=[x(1:orphan(i)-(i-1)-1); x(orphan(i)-(i-1)+1:end)]; … … 56 56 %Fill in rest of fields: 57 57 md.numberofelements=length(md.elements); 58 md.numberof grids=length(md.x);59 md.z=zeros(md.numberof grids,1);60 md. gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;61 md. gridonbed=ones(md.numberofgrids,1);62 md. gridonsurface=ones(md.numberofgrids,1);58 md.numberofnodes=length(md.x); 59 md.z=zeros(md.numberofnodes,1); 60 md.nodeonboundary=zeros(md.numberofnodes,1); md.nodeonboundary(md.segments(:,1:2))=1; 61 md.nodeonbed=ones(md.numberofnodes,1); 62 md.nodeonsurface=ones(md.numberofnodes,1); 63 63 md.elementonbed=ones(md.numberofelements,1); 64 64 md.elementonsurface=ones(md.numberofelements,1); 65 65 66 66 %Now, build the connectivity tables for this mesh. 67 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);67 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 68 68 md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity); 69 69 -
issm/trunk/src/m/model/mesh/meshrefine.m
r3994 r8298 21 21 %Fill in rest of fields: 22 22 md.numberofelements=length(md.elements); 23 md.numberof grids=length(md.x);24 md.z=zeros(md.numberof grids,1);25 md. gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;26 md. gridonbed=ones(md.numberofgrids,1);27 md. gridonsurface=ones(md.numberofgrids,1);23 md.numberofnodes=length(md.x); 24 md.z=zeros(md.numberofnodes,1); 25 md.nodeonboundary=zeros(md.numberofnodes,1); md.nodeonboundary(md.segments(:,1:2))=1; 26 md.nodeonbed=ones(md.numberofnodes,1); 27 md.nodeonsurface=ones(md.numberofnodes,1); 28 28 md.elementonbed=ones(md.numberofelements,1); 29 29 md.elementonsurface=ones(md.numberofelements,1); 30 30 31 31 %Now, build the connectivity tables for this mesh. 32 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);32 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 33 33 md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity); 34 34 -
issm/trunk/src/m/model/mesh/meshyams.m
r5088 r8298 70 70 %interpolate velocities onto mesh 71 71 disp(' interpolating velocities...'); 72 if strcmpi(Names.interp,' grid'),72 if strcmpi(Names.interp,'node'), 73 73 vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0); 74 74 vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0); … … 79 79 field=sqrt(vx_obs.^2+vy_obs.^2); 80 80 81 %set gridonwater field81 %set nodeonwater field 82 82 if ~strcmp(groundeddomain,'N/A'), 83 gridground=ContourToMesh(md.elements,md.x,md.y,groundeddomain,'node',2);84 md. gridonwater=ones(md.numberofgrids,1);85 md. gridonwater(find(gridground))=0;83 nodeground=ContourToMesh(md.elements,md.x,md.y,groundeddomain,'node',2); 84 md.nodeonwater=ones(md.numberofnodes,1); 85 md.nodeonwater(find(nodeground))=0; 86 86 else 87 md. gridonwater=zeros(md.numberofgrids,1);87 md.nodeonwater=zeros(md.numberofnodes,1); 88 88 end 89 89 … … 95 95 %rifts, because the segments are used in YamsCall to freeze the rifts elements during refinement. 96 96 if md.numrifts, 97 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);97 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 98 98 md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity); 99 99 md.segments=findsegments(md); … … 106 106 107 107 %Now, build the connectivity tables for this mesh. 108 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);108 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 109 109 md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity); 110 110 111 111 %recreate segments 112 112 md.segments=findsegments(md); 113 md. gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;113 md.nodeonboundary=zeros(md.numberofnodes,1); md.nodeonboundary(md.segments(:,1:2))=1; 114 114 115 115 %Fill in rest of fields: 116 md.z=zeros(md.numberof grids,1);117 md. gridonbed=ones(md.numberofgrids,1);118 md. gridonsurface=ones(md.numberofgrids,1);116 md.z=zeros(md.numberofnodes,1); 117 md.nodeonbed=ones(md.numberofnodes,1); 118 md.nodeonsurface=ones(md.numberofnodes,1); 119 119 md.elementonbed=ones(md.numberofelements,1); 120 120 md.elementonsurface=ones(md.numberofelements,1); 121 121 if ~strcmp(groundeddomain,'N/A'), 122 gridground=ContourToMesh(md.elements,md.x,md.y,groundeddomain,'node',2);123 md. gridonwater=ones(md.numberofgrids,1);124 md. gridonwater(find(gridground))=0;122 nodeground=ContourToMesh(md.elements,md.x,md.y,groundeddomain,'node',2); 123 md.nodeonwater=ones(md.numberofnodes,1); 124 md.nodeonwater(find(nodeground))=0; 125 125 else 126 md. gridonwater=zeros(md.numberofgrids,1);126 md.nodeonwater=zeros(md.numberofnodes,1); 127 127 end 128 if strcmpi(Names.interp,' grid'),128 if strcmpi(Names.interp,'node'), 129 129 md.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0); 130 130 md.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0); -
issm/trunk/src/m/model/mesh/reorder.m
r3994 r8298 19 19 20 20 %reorder nodes 21 new grids=randperm(md.numberofgrids)';22 tnew grids=zeros(md.numberofgrids,1);tnewgrids(newgrids)=[1:md.numberofgrids]';21 newnodes=randperm(md.numberofnodes)'; 22 tnewnodes=zeros(md.numberofnodes,1);tnewnodes(newnodes)=[1:md.numberofnodes]'; 23 23 24 24 %update all fields 25 md.elements=tnew grids(md.elements(newelements,:));26 md.segments=[tnew grids(md.segments(:,1)) tnewgrids(md.segments(:,2)) tnewelements(md.segments(:,3))];27 md.x=md.x(new grids);28 md.y=md.y(new grids);29 md.z=md.z(new grids);30 md. gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;25 md.elements=tnewnodes(md.elements(newelements,:)); 26 md.segments=[tnewnodes(md.segments(:,1)) tnewnodes(md.segments(:,2)) tnewelements(md.segments(:,3))]; 27 md.x=md.x(newnodes); 28 md.y=md.y(newnodes); 29 md.z=md.z(newnodes); 30 md.nodeonboundary=zeros(md.numberofnodes,1); md.nodeonboundary(md.segments(:,1:2))=1; -
issm/trunk/src/m/model/mesh/rifts/meshaddrifts.m
r3994 r8298 56 56 57 57 %plug md2 mesh into md mesh: 58 [md.elements,md.x,md.y,md.z,md.numberofelements,md.numberof grids,elconv,nodeconv,elconv2,nodeconv2]=meshplug(md.elements,md.x,md.y,md.z,...59 md2.elements,md2.x,md2.y,md2.z,md2.extracted grids,md2.extractedelements,domain_index);58 [md.elements,md.x,md.y,md.z,md.numberofelements,md.numberofnodes,elconv,nodeconv,elconv2,nodeconv2]=meshplug(md.elements,md.x,md.y,md.z,... 59 md2.elements,md2.x,md2.y,md2.z,md2.extractednodes,md2.extractedelements,domain_index); 60 60 61 61 %update md2 rifts using elconv and nodeconv, and plug them into md: … … 80 80 81 81 %finish up "a la" mesh.h 82 md. gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;83 md. gridonbed=ones(md.numberofgrids,1);84 md. gridonsurface=ones(md.numberofgrids,1);82 md.nodeonboundary=zeros(md.numberofnodes,1); md.nodeonboundary(md.segments(:,1:2))=1; 83 md.nodeonbed=ones(md.numberofnodes,1); 84 md.nodeonsurface=ones(md.numberofnodes,1); 85 85 md.elementonbed=ones(md.numberofelements,1); 86 86 md.elementonsurface=ones(md.numberofelements,1); 87 87 88 88 %Now, build the connectivity tables for this mesh. 89 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);89 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 90 90 md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity); 91 91 -
issm/trunk/src/m/model/mesh/rifts/meshplug.m
r2737 r8298 1 function [elements,x,y,z,numberofelements,numberof grids,elconv,nodeconv,elconv2,nodeconv2]=meshplug(elements,x,y,z,elements2,x2,y2,z2,extractedgrids,extractedelements,domain);1 function [elements,x,y,z,numberofelements,numberofnodes,elconv,nodeconv,elconv2,nodeconv2]=meshplug(elements,x,y,z,elements2,x2,y2,z2,extractednodes,extractedelements,domain); 2 2 %MESHPLUG - embed mesh into another one 3 3 % See also meshaddrifts … … 22 22 nodeconv2=(size(x,1)+1):(size(x,1)+size(x2,1)); nodeconv2=nodeconv2'; 23 23 24 extracted grids_minusborder=extractedgrids;25 extracted grids_minusborder(domain)=[];24 extractednodes_minusborder=extractednodes; 25 extractednodes_minusborder(domain)=[]; 26 26 27 x(extracted grids_minusborder)=NaN;28 y(extracted grids_minusborder)=NaN;27 x(extractednodes_minusborder)=NaN; 28 y(extractednodes_minusborder)=NaN; 29 29 30 30 %now, plug md2 mesh: … … 33 33 elements2=elements2+length(x); 34 34 35 %NaN border grids in second mesh35 %NaN border nodes in second mesh 36 36 x2(1:length(domain))=NaN; 37 37 y2(1:length(domain))=NaN; 38 38 39 %redirect border grids in elements2 to elements39 %redirect border nodes in elements2 to elements 40 40 for i=1:length(domain), 41 41 pos=find(elements2==(i+length(x))); 42 elements2(pos)=extracted grids(domain(i));42 elements2(pos)=extractednodes(domain(i)); 43 43 end 44 44 45 45 %same deal for nodeconv2: 46 46 for i=1:length(domain), 47 nodeconv2(i)=extracted grids(domain(i));47 nodeconv2(i)=extractednodes(domain(i)); 48 48 end 49 49 … … 53 53 54 54 55 %now, increase number of grids55 %now, increase number of nodes 56 56 x=[x; x2]; 57 57 y=[y; y2]; … … 62 62 63 63 pos=find(isnan(x)); 64 grid=pos(1);64 node=pos(1); 65 65 66 %collapse grid67 x( grid)=[];68 y( grid)=[];69 z( grid)=[];66 %collapse node 67 x(node)=[]; 68 y(node)=[]; 69 z(node)=[]; 70 70 71 %renumber all grids > gridin elements72 pos=find(elements> grid);71 %renumber all nodes > node in elements 72 pos=find(elements>node); 73 73 elements(pos)=elements(pos)-1; 74 74 75 75 %same deal for nodeconv2: 76 pos=find(nodeconv2> grid);76 pos=find(nodeconv2>node); 77 77 nodeconv2(pos)=nodeconv2(pos)-1; 78 78 79 79 end 80 80 81 numberof grids=length(x);81 numberofnodes=length(x); 82 82 numberofelements=length(elements); 83 83 84 84 %finish nodeconv: 85 temp_nodeconv=nodeconv; temp_nodeconv(extracted grids_minusborder)=[];85 temp_nodeconv=nodeconv; temp_nodeconv(extractednodes_minusborder)=[]; 86 86 temp_nodeconvnum=1:length(temp_nodeconv); 87 87 nodeconv(temp_nodeconv)=temp_nodeconvnum; 88 nodeconv(extracted grids_minusborder)=NaN;88 nodeconv(extractednodes_minusborder)=NaN; 89 89 -
issm/trunk/src/m/model/mesh/rifts/meshprocessoutsiderifts.m
r5024 r8298 23 23 tip=outsidetips(j); 24 24 %find tip in the segments, take first segment (there should be 2) that holds tip, 25 %and grid_connected_to_tip is the other node on this segment:25 %and node_connected_to_tip is the other node on this segment: 26 26 tipindex=find(rift.segments(:,1)==tip); 27 27 if length(tipindex), 28 28 tipindex=tipindex(1); 29 grid_connected_to_tip=rift.segments(tipindex,2);29 node_connected_to_tip=rift.segments(tipindex,2); 30 30 else 31 31 tipindex=find(rift.segments(:,2)==tip); tipindex=tipindex(1); 32 grid_connected_to_tip=rift.segments(tipindex,1);32 node_connected_to_tip=rift.segments(tipindex,1); 33 33 end 34 34 … … 37 37 %side of the rift. 38 38 A=tip; 39 B= grid_connected_to_tip;39 B=node_connected_to_tip; 40 40 41 41 elements=[]; … … 58 58 md.x=[md.x;md.x(tip)]; 59 59 md.y=[md.y;md.y(tip)]; 60 md.numberof grids=num;60 md.numberofnodes=num; 61 61 62 62 %replace tip in elements … … 84 84 %Fill in rest of fields: 85 85 md.numberofelements=length(md.elements); 86 md.numberof grids=length(md.x);87 md.z=zeros(md.numberof grids,1);88 md. gridonboundary=zeros(length(md.x),1); md.gridonboundary(md.segments(:,1:2))=1;86 md.numberofnodes=length(md.x); 87 md.z=zeros(md.numberofnodes,1); 88 md.nodeonboundary=zeros(length(md.x),1); md.nodeonboundary(md.segments(:,1:2))=1; 89 89 md.numrifts=length(md.rifts); 90 90 md.elements_type=3*ones(md.numberofelements,1); 91 md. gridonbed=ones(md.numberofgrids,1);92 md. gridonsurface=ones(md.numberofgrids,1);91 md.nodeonbed=ones(md.numberofnodes,1); 92 md.nodeonsurface=ones(md.numberofnodes,1); 93 93 md.elementonbed=ones(md.numberofelements,1); 94 94 md.elementonsurface=ones(md.numberofelements,1); -
issm/trunk/src/m/model/mesh/rifts/meshprocessrifts.m
r5650 r8298 29 29 %Fill in rest of fields: 30 30 md.numberofelements=length(md.elements); 31 md.numberof grids=length(md.x);32 md.z=zeros(md.numberof grids,1);33 md. gridonboundary=zeros(length(md.x),1); md.gridonboundary(md.segments(:,1:2))=1;31 md.numberofnodes=length(md.x); 32 md.z=zeros(md.numberofnodes,1); 33 md.nodeonboundary=zeros(length(md.x),1); md.nodeonboundary(md.segments(:,1:2))=1; 34 34 md.numrifts=length(md.rifts); 35 35 md.elements_type=3*ones(md.numberofelements,1); 36 md. gridonbed=ones(md.numberofgrids,1);37 md. gridonsurface=ones(md.numberofgrids,1);36 md.nodeonbed=ones(md.numberofnodes,1); 37 md.nodeonsurface=ones(md.numberofnodes,1); 38 38 md.elementonbed=ones(md.numberofelements,1); 39 39 md.elementonsurface=ones(md.numberofelements,1); -
issm/trunk/src/m/model/mesh/rifts/rifttipsrefine.m
r2832 r8298 5 5 % md=rifttipsrefine(md,filename,resolution,circleradius); 6 6 7 numberof grids=50;7 numberofnodes=50; 8 8 9 9 %take rifts, and create refinement circles around tips … … 15 15 tip2=[rifts(i).x(end) rifts(i).y(end)]; 16 16 %create circle around tip 17 expcreatecircle('Circle1.exp',tip1(1),tip1(2),circleradius,numberof grids);18 expcreatecircle('Circle2.exp',tip2(1),tip2(2),circleradius,numberof grids);17 expcreatecircle('Circle1.exp',tip1(1),tip1(2),circleradius,numberofnodes); 18 expcreatecircle('Circle2.exp',tip2(1),tip2(2),circleradius,numberofnodes); 19 19 !cat Circles.exp Circle1.exp Circle2.exp > Circles2.exp 20 20 !mv Circles2.exp Circles.exp -
issm/trunk/src/m/model/modeldefault/defaultparams.m
r5961 r8298 47 47 %drag md.drag or stress 48 48 md.drag_type=2; %0 none 1 plastic 2 viscous 49 md.drag_coefficient=300*ones(md.numberof grids,1); %q=1.49 md.drag_coefficient=300*ones(md.numberofnodes,1); %q=1. 50 50 51 51 %zones of high md.drag … … 89 89 90 90 disp(' creating accumulation rates'); 91 md.accumulation_rate=ones(md.numberof grids,1); %1m/a91 md.accumulation_rate=ones(md.numberofnodes,1); %1m/a 92 92 93 93 %Deal with boundary conditions: 94 94 95 95 disp(' thermal model'); 96 md.melting_rate=zeros(md.numberof grids,1);96 md.melting_rate=zeros(md.numberofnodes,1); 97 97 md.observed_temperature=md.temperature; 98 98 -
issm/trunk/src/m/model/modelextract.m
r5492 r8298 38 38 %kick out all elements with 3 dirichlets 39 39 spc_elem=find(~flag_elem); 40 spc_ grid=sort(unique(md1.elements(spc_elem,:)));41 flag=ones(md1.numberof grids,1);42 flag(spc_ grid)=0;40 spc_node=sort(unique(md1.elements(spc_elem,:))); 41 flag=ones(md1.numberofnodes,1); 42 flag(spc_node)=0; 43 43 pos=find(sum(flag(md1.elements),2)==0); 44 44 flag_elem(pos)=0; … … 46 46 %extracted elements and nodes lists 47 47 pos_elem=find(flag_elem); 48 pos_ grid=sort(unique(md1.elements(pos_elem,:)));48 pos_node=sort(unique(md1.elements(pos_elem,:))); 49 49 50 50 %keep track of some fields 51 numberof grids1=md1.numberofgrids;51 numberofnodes1=md1.numberofnodes; 52 52 numberofelements1=md1.numberofelements; 53 numberof grids2=length(pos_grid);53 numberofnodes2=length(pos_node); 54 54 numberofelements2=length(pos_elem); 55 flag_ grid=zeros(numberofgrids1,1);56 flag_ grid(pos_grid)=1;57 58 %Create Pelem and P grid (transform old grids in new grids and same thing for the elements)55 flag_node=zeros(numberofnodes1,1); 56 flag_node(pos_node)=1; 57 58 %Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements) 59 59 Pelem=zeros(numberofelements1,1); 60 60 Pelem(pos_elem)=[1:numberofelements2]'; 61 P grid=zeros(numberofgrids1,1);62 P grid(pos_grid)=[1:numberofgrids2]';63 64 %renumber the elements (some gridwon't exist anymore)61 Pnode=zeros(numberofnodes1,1); 62 Pnode(pos_node)=[1:numberofnodes2]'; 63 64 %renumber the elements (some node won't exist anymore) 65 65 elements_1=md1.elements; 66 66 elements_2=elements_1(pos_elem,:); 67 elements_2(:,1)=P grid(elements_2(:,1));68 elements_2(:,2)=P grid(elements_2(:,2));69 elements_2(:,3)=P grid(elements_2(:,3));67 elements_2(:,1)=Pnode(elements_2(:,1)); 68 elements_2(:,2)=Pnode(elements_2(:,2)); 69 elements_2(:,3)=Pnode(elements_2(:,3)); 70 70 if md1.dim==3, 71 elements_2(:,4)=P grid(elements_2(:,4));72 elements_2(:,5)=P grid(elements_2(:,5));73 elements_2(:,6)=P grid(elements_2(:,6));71 elements_2(:,4)=Pnode(elements_2(:,4)); 72 elements_2(:,5)=Pnode(elements_2(:,5)); 73 elements_2(:,6)=Pnode(elements_2(:,6)); 74 74 end 75 75 … … 89 89 fieldsize=size(field); 90 90 91 %size = number of grids * n92 if fieldsize(1)==numberof grids193 md2.(model_fields(i))=field(pos_ grid,:);91 %size = number of nodes * n 92 if fieldsize(1)==numberofnodes1 93 md2.(model_fields(i))=field(pos_node,:); 94 94 95 95 %size = number of elements * n … … 103 103 %Mesh 104 104 md2.numberofelements=numberofelements2; 105 md2.numberof grids=numberofgrids2;105 md2.numberofnodes=numberofnodes2; 106 106 md2.elements=elements_2; 107 107 108 108 %uppernodes lowernodes 109 109 if md1.dim==3 110 md2.upper grids=md1.uppergrids(pos_grid);111 pos=find(~isnan(md2.upper grids));112 md2.upper grids(pos)=Pgrid(md2.uppergrids(pos));113 114 md2.lower grids=md1.lowergrids(pos_grid);115 pos=find(~isnan(md2.lower grids));116 md2.lower grids(pos)=Pgrid(md2.lowergrids(pos));110 md2.uppernodes=md1.uppernodes(pos_node); 111 pos=find(~isnan(md2.uppernodes)); 112 md2.uppernodes(pos)=Pnode(md2.uppernodes(pos)); 113 114 md2.lowernodes=md1.lowernodes(pos_node); 115 pos=find(~isnan(md2.lowernodes)); 116 md2.lowernodes(pos)=Pnode(md2.lowernodes(pos)); 117 117 118 118 md2.upperelements=md1.upperelements(pos_elem); … … 129 129 flag_elem_2d=flag_elem(1:md1.numberofelements2d); 130 130 pos_elem_2d=find(flag_elem_2d); 131 flag_ grid_2d=flag_grid(1:md1.numberofgrids2d);132 pos_ grid_2d=find(flag_grid_2d);131 flag_node_2d=flag_node(1:md1.numberofnodes2d); 132 pos_node_2d=find(flag_node_2d); 133 133 134 134 md2.numberofelements2d=length(pos_elem_2d); 135 md2.numberof grids2d=length(pos_grid_2d);135 md2.numberofnodes2d=length(pos_node_2d); 136 136 md2.elements2d=md1.elements2d(pos_elem_2d,:); 137 md2.elements2d(:,1)=P grid(md2.elements2d(:,1));138 md2.elements2d(:,2)=P grid(md2.elements2d(:,2));139 md2.elements2d(:,3)=P grid(md2.elements2d(:,3));137 md2.elements2d(:,1)=Pnode(md2.elements2d(:,1)); 138 md2.elements2d(:,2)=Pnode(md2.elements2d(:,2)); 139 md2.elements2d(:,3)=Pnode(md2.elements2d(:,3)); 140 140 141 141 if ~isnan(md2.elements_type2d), md2.elements_type2d=md1.elements_type2d(pos_elem_2d); end; 142 md2.x2d=md1.x(pos_ grid_2d);143 md2.y2d=md1.y(pos_ grid_2d);144 md2.z2d=md1.z(pos_ grid_2d);142 md2.x2d=md1.x(pos_node_2d); 143 md2.y2d=md1.y(pos_node_2d); 144 md2.z2d=md1.z(pos_node_2d); 145 145 end 146 146 … … 149 149 %renumber first two columns 150 150 pos=find(~isnan(md2.edges(:,4))); 151 md2.edges(: ,1)=P grid(md2.edges(:,1));152 md2.edges(: ,2)=P grid(md2.edges(:,2));151 md2.edges(: ,1)=Pnode(md2.edges(:,1)); 152 md2.edges(: ,2)=Pnode(md2.edges(:,2)); 153 153 md2.edges(: ,3)=Pelem(md2.edges(:,3)); 154 154 md2.edges(pos,4)=Pelem(md2.edges(pos,4)); … … 175 175 if ~isnan(md2.penalties), 176 176 for i=1:size(md1.penalties,1); 177 md2.penalties(i,:)=P grid(md1.penalties(i,:));177 md2.penalties(i,:)=Pnode(md1.penalties(i,:)); 178 178 end 179 179 md2.penalties=md2.penalties(find(md2.penalties(:,1)),:); … … 182 182 %recreate segments 183 183 if md1.dim==2 184 md2.nodeconnectivity=NodeConnectivity(md2.elements,md2.numberof grids);184 md2.nodeconnectivity=NodeConnectivity(md2.elements,md2.numberofnodes); 185 185 md2.elementconnectivity=ElementConnectivity(md2.elements,md2.nodeconnectivity); 186 186 md2.segments=contourenvelope(md2); 187 md2. gridonboundary=zeros(numberofgrids2,1); md2.gridonboundary(md2.segments(:,1:2))=1;187 md2.nodeonboundary=zeros(numberofnodes2,1); md2.nodeonboundary(md2.segments(:,1:2))=1; 188 188 end 189 189 … … 191 191 %Catch the elements that have not been extracted 192 192 orphans_elem=find(~flag_elem); 193 orphans_ grid=unique(md1.elements(orphans_elem,:))';194 %Figure out which gridare on the boundary between md2 and md1195 gridstoflag1=intersect(orphans_grid,pos_grid);196 gridstoflag2=Pgrid(gridstoflag1);193 orphans_node=unique(md1.elements(orphans_elem,:))'; 194 %Figure out which node are on the boundary between md2 and md1 195 nodestoflag1=intersect(orphans_node,pos_node); 196 nodestoflag2=Pnode(nodestoflag1); 197 197 if ~isnan(md1.spcvelocity), 198 md2.spcvelocity( gridstoflag2,1:3)=1;198 md2.spcvelocity(nodestoflag2,1:3)=1; 199 199 if ~isnan(md1.vx_obs) & ~isnan(md1.vy_obs) 200 md2.spcvelocity( gridstoflag2,4)=md2.vx_obs(gridstoflag2);201 md2.spcvelocity( gridstoflag2,5)=md2.vy_obs(gridstoflag2);200 md2.spcvelocity(nodestoflag2,4)=md2.vx_obs(nodestoflag2); 201 md2.spcvelocity(nodestoflag2,5)=md2.vy_obs(nodestoflag2); 202 202 else 203 md2.spcvelocity( gridstoflag2,4:5)=zeros(length(gridstoflag2),2);203 md2.spcvelocity(nodestoflag2,4:5)=zeros(length(nodestoflag2),2); 204 204 disp(' ') 205 205 disp('!! modelextract warning: spc values should be checked !!') … … 208 208 end 209 209 if ~isnan(md1.spctemperature), 210 md2.spctemperature( gridstoflag2,1)=1;210 md2.spctemperature(nodestoflag2,1)=1; 211 211 if ~isnan(md1.observed_temperature) 212 md2.spctemperature( gridstoflag2,2)=md2.observed_temperature(gridstoflag2);212 md2.spctemperature(nodestoflag2,2)=md2.observed_temperature(nodestoflag2); 213 213 else 214 md2.spctemperature( gridstoflag2,2)=zeros(length(gridstoflag2),2);214 md2.spctemperature(nodestoflag2,2)=zeros(length(nodestoflag2),2); 215 215 disp(' ') 216 216 disp('!! modelextract warning: spc values should be checked !!') … … 221 221 %Diagnostic 222 222 if ~isnan(md2.pressureload) 223 md2.pressureload(:,1)=P grid(md1.pressureload(:,1));224 md2.pressureload(:,2)=P grid(md1.pressureload(:,2));223 md2.pressureload(:,1)=Pnode(md1.pressureload(:,1)); 224 md2.pressureload(:,2)=Pnode(md1.pressureload(:,2)); 225 225 md2.pressureload(:,end-1)=Pelem(md1.pressureload(:,end-1)); 226 226 if md1.dim==3 227 md2.pressureload(:,3)=P grid(md1.pressureload(:,3));228 md2.pressureload(:,4)=P grid(md1.pressureload(:,4));227 md2.pressureload(:,3)=Pnode(md1.pressureload(:,3)); 228 md2.pressureload(:,4)=Pnode(md1.pressureload(:,4)); 229 229 end 230 230 md2.pressureload=md2.pressureload(find(md2.pressureload(:,1) & md2.pressureload(:,2) & md2.pressureload(:,end)),:); … … 240 240 for j=1:length(solutionsubfields), 241 241 field=md1.results.(solutionfields(i)).(solutionsubfields(j)); 242 if length(field)==numberof grids1,243 md2.results.(solutionfields(i)).(solutionsubfields(j))=field(pos_ grid);242 if length(field)==numberofnodes1, 243 md2.results.(solutionfields(i)).(solutionsubfields(j))=field(pos_node); 244 244 elseif length(field)==numberofelements1, 245 245 md2.results.(solutionfields(i)).(solutionsubfields(j))=field(pos_elem); … … 260 260 md2.strainrate=NaN; 261 261 262 %Keep track of pos_ gridand pos_elem263 md2.extracted grids=pos_grid;262 %Keep track of pos_node and pos_elem 263 md2.extractednodes=pos_node; 264 264 md2.extractedelements=pos_elem; -
issm/trunk/src/m/model/outflow.m
r7512 r8298 11 11 VdotN=Vx.*Nx+Vy.*Ny; 12 12 13 flag=zeros(md.numberof grids,1);13 flag=zeros(md.numberofnodes,1); 14 14 flag(A(find(VdotN>0)))=1; -
issm/trunk/src/m/model/parametercontroloptimization.m
r5631 r8298 35 35 md2.cm_jump=0.99*ones(md2.nsteps,1); 36 36 md2.control_analysis=1; 37 md2.weights=ones(md2.numberof grids,1);37 md2.weights=ones(md2.numberofnodes,1); 38 38 39 39 %loop over the set of parameters -
issm/trunk/src/m/model/parameterization/parametercontrolB.m
r6037 r8298 24 24 25 25 %weights 26 weights=getfieldvalue(options,'weights',ones(md.numberof grids,1));27 if (length(weights)~=md.numberof grids)28 md.weights=ones(md.numberof grids,1);26 weights=getfieldvalue(options,'weights',ones(md.numberofnodes,1)); 27 if (length(weights)~=md.numberofnodes) 28 md.weights=ones(md.numberofnodes,1); 29 29 else 30 30 md.weights=weights; -
issm/trunk/src/m/model/parameterization/parametercontroldrag.m
r8227 r8298 24 24 25 25 %weights 26 weights=getfieldvalue(options,'weights',ones(md.numberof grids,1));27 if (length(weights)~=md.numberof grids)28 md.weights=ones(md.numberof grids,1);26 weights=getfieldvalue(options,'weights',ones(md.numberofnodes,1)); 27 if (length(weights)~=md.numberofnodes) 28 md.weights=ones(md.numberofnodes,1); 29 29 else 30 30 md.weights=weights; … … 40 40 41 41 %cm_min 42 cm_min=getfieldvalue(options,'cm_min',1*ones(md.numberof grids,1));42 cm_min=getfieldvalue(options,'cm_min',1*ones(md.numberofnodes,1)); 43 43 if (length(cm_min)==1) 44 md.cm_min=cm_min*ones(md.numberof grids,1);45 elseif (length(cm_min)==md.numberof grids)44 md.cm_min=cm_min*ones(md.numberofnodes,1); 45 elseif (length(cm_min)==md.numberofnodes) 46 46 md.cm_min=cm_min; 47 47 else … … 50 50 51 51 %cm_max 52 cm_max=getfieldvalue(options,'cm_max',250*ones(md.numberof grids,1));52 cm_max=getfieldvalue(options,'cm_max',250*ones(md.numberofnodes,1)); 53 53 if (length(cm_max)==1) 54 md.cm_max=cm_max*ones(md.numberof grids,1);55 elseif (length(cm_max)==md.numberof grids)54 md.cm_max=cm_max*ones(md.numberofnodes,1); 55 elseif (length(cm_max)==md.numberofnodes) 56 56 md.cm_max=cm_max; 57 57 else -
issm/trunk/src/m/model/partition/adjacency.m
r4663 r8298 14 14 values=1; 15 15 16 md.adjacency=sparse(indi,indj,values,md.numberof grids,md.numberofgrids);16 md.adjacency=sparse(indi,indj,values,md.numberofnodes,md.numberofnodes); 17 17 md.adjacency=double([md.adjacency | md.adjacency']); 18 18 … … 21 21 22 22 %get node connectivity 23 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);23 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 24 24 25 25 connectivity=md.nodeconnectivity(:,1:end-1); -
issm/trunk/src/m/model/partition/partitioner.m
r4713 r8298 75 75 elseif strcmpi(package,'linear'), 76 76 77 part=1:1:md.numberof grids;77 part=1:1:md.numberofnodes; 78 78 79 79 elseif strcmpi(package,'metis'), -
issm/trunk/src/m/model/plot/plot_contour.m
r7588 r8298 16 16 end 17 17 18 %first, process data: must be on grids18 %first, process data: must be on nodes 19 19 if datatype==1, 20 20 %elements -> take average … … 67 67 edges_tria=[vec(elementslist), vec(elementslist+numberofelements), vec(elementslist+2*numberofelements)]; 68 68 69 %segments [ grids1 gruids2]69 %segments [nodes1 nodes2] 70 70 Seg1=index(:,[1 2]); 71 71 Seg2=index(:,[2 3]); -
issm/trunk/src/m/model/plot/plot_gridnumbering.m
r5617 r8298 1 function plot_ gridnumbering(md,options,width,i);2 %PLOT_GRIDNUMBERING - plot gridnumbering1 function plot_nodenumbering(md,options,width,i); 2 %PLOT_GRIDNUMBERING - plot node numbering 3 3 % 4 4 % Usage: 5 % plot_ gridnumbering(md,options,width,i);5 % plot_nodenumbering(md,options,width,i); 6 6 % 7 7 % See also: PLOTMODEL … … 9 9 %process data and model 10 10 [x y z elements is2d]=processmesh(md,[],options); 11 [ gridnumbers datatype]=processdata(md,[1:md.numberofgrids]',options);11 [nodenumbers datatype]=processdata(md,[1:md.numberofnodes]',options); 12 12 13 13 %plot … … 47 47 48 48 %apply options 49 options=addfielddefault(options,'title',' Gridnumbering');49 options=addfielddefault(options,'title','Node numbering'); 50 50 options=addfielddefault(options,'colorbar',0); 51 51 applyoptions(md,[],options); -
issm/trunk/src/m/model/plot/plot_highlightgrids.m
r5617 r8298 1 function plot_highlight grids(md,options,width,i);2 %PLOT_HIGHLIGHTGRIDS - plot selected grids1 function plot_highlightnodes(md,options,width,i); 2 %PLOT_HIGHLIGHTGRIDS - plot selected nodes 3 3 % 4 4 % Usage: 5 % plot_highlight grids(md,options,width,i);5 % plot_highlightnodes(md,options,width,i); 6 6 % 7 7 % See also: PLOTMODEL … … 9 9 %process data and model 10 10 [x y z elements is2d]=processmesh(md,[],options); 11 [ gridnumbers datatype]=processdata(md,[1:md.numberofgrids]',options);11 [nodenumbers datatype]=processdata(md,[1:md.numberofnodes]',options); 12 12 13 13 %plot … … 40 40 %apply options 41 41 if ~exist(options,'highlight') 42 disp('highlight grids warning : highlight option empty, not gridhighlighted');42 disp('highlightnodes warning : highlight option empty, not node highlighted'); 43 43 end 44 options=addfielddefault(options,'title','Highlighted Grids');44 options=addfielddefault(options,'title','Highlighted Nodes'); 45 45 options=addfielddefault(options,'colorbar',0); 46 46 applyoptions(md,[],options); -
issm/trunk/src/m/model/plot/plot_importancefactors.m
r4330 r8298 61 61 62 62 %distribute importance factor 63 gridimportance=importancefactors(npart);63 nodeimportance=importancefactors(npart); 64 64 65 65 %process data and model … … 72 72 subplot(width,width,ii); 73 73 74 %ok, plot gridimportance now.74 %ok, plot nodeimportance now. 75 75 if is2d, 76 76 A=elements(:,1); B=elements(:,2); C=elements(:,3); 77 patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', gridimportance,'FaceColor','interp','EdgeColor',edgecolor);77 patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', nodeimportance,'FaceColor','interp','EdgeColor',edgecolor); 78 78 else 79 79 error('plot_importancefactors error message: 3d meshes not supported yet'); -
issm/trunk/src/m/model/plot/plot_manager.m
r8128 r8298 62 62 plot_elementstype(md,options,subplotwidth,i); 63 63 return; 64 case ' gridnumbering',65 plot_ gridnumbering(md,options,subplotwidth,i);66 return; 67 68 case 'highlight grids',69 plot_highlight grids(md,options,subplotwidth,i);64 case 'nodenumbering', 65 plot_nodenumbering(md,options,subplotwidth,i); 66 return; 67 68 case 'highlightnodes', 69 plot_highlightnodes(md,options,subplotwidth,i); 70 70 return; 71 71 case {'basal_drag','basal_dragx','basal_dragy'}, -
issm/trunk/src/m/model/plot/plot_overlay.m
r7985 r8298 11 11 if strcmpi(data,'none'), 12 12 radaronly=1; 13 data=NaN*ones(md.numberof grids,1);13 data=NaN*ones(md.numberofnodes,1); 14 14 datatype=1; 15 15 else -
issm/trunk/src/m/model/plot/plot_penalties.m
r5617 r8298 40 40 P2=plot3(x(md.penalties(i,:)),y(md.penalties(i,:)),z(md.penalties(i,:)),'bo-','LineWidth',2,'MarkerSize',8,'MarkerFaceColor','b'); 41 41 end 42 legend([P1 P2],'MacAyeal''s penalized grids','Pattyn''s penalized grids');42 legend([P1 P2],'MacAyeal''s penalized nodes','Pattyn''s penalized nodes'); 43 43 end 44 44 -
issm/trunk/src/m/model/plot/plot_qmumean.m
r5561 r8298 48 48 49 49 %now, project onto vertices 50 responses_on_ grid=responses(md.part+1);50 responses_on_node=responses(md.part+1); 51 51 52 52 %plot 53 53 A=elements(:,1); B=elements(:,2); C=elements(:,3); 54 patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', responses_on_ grid,'FaceColor','interp','EdgeColor',edgecolor);54 patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', responses_on_node,'FaceColor','interp','EdgeColor',edgecolor); 55 55 56 56 %apply options -
issm/trunk/src/m/model/plot/plot_qmustddev.m
r5561 r8298 49 49 50 50 %now, project onto vertices 51 responses_on_ grid=responses(md.part+1);51 responses_on_node=responses(md.part+1); 52 52 53 53 %plot 54 54 A=elements(:,1); B=elements(:,2); C=elements(:,3); 55 patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', responses_on_ grid,'FaceColor','interp','EdgeColor',edgecolor);55 patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', responses_on_node,'FaceColor','interp','EdgeColor',edgecolor); 56 56 57 57 %apply options -
issm/trunk/src/m/model/plot/plot_riftfraction.m
r4330 r8298 23 23 end 24 24 25 %first, build a vector of fractions, over all grids.26 fractions=zeros(md.numberof grids,1);25 %first, build a vector of fractions, over all nodes. 26 fractions=zeros(md.numberofnodes,1); 27 27 28 28 %plug riftproperties fractions: -
issm/trunk/src/m/model/plot/plot_riftnumbering.m
r6751 r8298 82 82 83 83 for j=1:size(penaltypairs,1), 84 grid=penaltypairs(j,1);85 t=text(x( grid),y(grid),[num2str(i) '.' num2str(j)]);84 node=penaltypairs(j,1); 85 t=text(x(node),y(node),[num2str(i) '.' num2str(j)]); 86 86 set(t,'FontSize',fontsize); 87 87 end -
issm/trunk/src/m/model/plot/plot_riftrelvel.m
r7317 r8298 8 8 9 9 %some checks 10 if (length(md.vx)~=md.numberof grids | length(md.vy)~=md.numberofgrids),10 if (length(md.vx)~=md.numberofnodes | length(md.vy)~=md.numberofnodes), 11 11 error('plot_riftvel error message: vx and vy do not have the right size'), 12 12 end … … 21 21 22 22 %set as NaN all velocities not on rifts 23 u=NaN*ones(md.numberof grids,1);24 v=NaN*ones(md.numberof grids,1);23 u=NaN*ones(md.numberofnodes,1); 24 v=NaN*ones(md.numberofnodes,1); 25 25 for i=1:md.numrifts, 26 26 penaltypairs=md.rifts(i).penaltypairs(:,[1 2]); … … 64 64 for i=1:md.numrifts, 65 65 66 %get grids on rift66 %get nodes on rift 67 67 penaltypairs=md.rifts(i).penaltypairs; 68 68 -
issm/trunk/src/m/model/plot/plot_riftvel.m
r4330 r8298 8 8 9 9 %some checks 10 if (length(md.vx)~=md.numberof grids | length(md.vy)~=md.numberofgrids),10 if (length(md.vx)~=md.numberofnodes | length(md.vy)~=md.numberofnodes), 11 11 error('plot_riftvel error message: vx and vy do not have the right size'), 12 12 end … … 17 17 18 18 %set as NaN all velocities not on rifts 19 u=NaN*ones(md.numberof grids,1);20 v=NaN*ones(md.numberof grids,1);19 u=NaN*ones(md.numberofnodes,1); 20 v=NaN*ones(md.numberofnodes,1); 21 21 for i=1:md.numrifts, 22 22 penaltypairs=md.rifts(i).penaltypairs(:,[1 2]); … … 58 58 59 59 for i=1:size(md.rifts,1), 60 %get grids on rift60 %get nodes on rift 61 61 penaltypairs=md.rifts(i).penaltypairs; 62 62 -
issm/trunk/src/m/model/plot/plot_tensor_principalaxis.m
r4330 r8298 27 27 end 28 28 29 %take the center of each element if ~ison grid29 %take the center of each element if ~isonnode 30 30 if datatype==1, 31 31 x=mean(md.x(md.elements'))'; y=mean(md.y(md.elements'))'; z=mean(md.z(md.elements'))'; -
issm/trunk/src/m/model/plot/plotanalyse.m
r1 r8298 7 7 %Do a series of plots that will help the user analyse what is going on. 8 8 plot(md,'data','segmentonneumann_diag','title','dynamic boundary conditions',... 9 'data',' gridondirichlet_diag','title','fixed velocity grids',...9 'data','nodeondirichlet_diag','title','fixed velocity nodes',... 10 10 'data','vx_obs','title','vx observation (m/s)',... 11 11 'data','vy_obs','title','vy observation (m/s)',... … … 19 19 20 20 plot(md,'data','elementoniceshelf','title','elements on iceshelf',... 21 'data',' gridoniceshelf','title','nodes on iceshelf',...21 'data','nodeoniceshelf','title','nodes on iceshelf',... 22 22 'data','elementonicesheet','title','elements on icesheet',... 23 'data',' gridonicesheet','title','nodes on icesheet','colorbar#all','on','figure',4);23 'data','nodeonicesheet','title','nodes on icesheet','colorbar#all','on','figure',4); -
issm/trunk/src/m/model/plot/plotdoc.m
r8016 r8298 22 22 disp(' - ''elements_type'': model used for each element'); 23 23 disp(' - ''elementnumbering'': numbering of elements'); 24 disp(' - '' gridnumbering'': numbering of grids');24 disp(' - ''nodenumbering'': numbering of nodes'); 25 25 disp(' - ''highlightelements'': to highlight elements to highlight the element list'); 26 disp(' - ''highlight grids'': to highlight grids (use highlight option to enter the gridlist');26 disp(' - ''highlightnodes'': to highlight nodes (use highlight option to enter the node list'); 27 27 disp(' - ''mesh'': draw mesh using trisurf'); 28 28 disp(' - ''riftvel'': velocities along rifts'); … … 86 86 disp(' ''fontweight'': same as standard matlab option (normal: ''n'',bold: ''b'',light: ''l'',demi: ''d'')'); 87 87 disp(' ''fontcolor'': same as standard matlab option'); 88 disp(' ''highlight'': highlights certain grids or elements when using ''gridnumbering'' or ''elementnumbering'' or ''highlightgrids '' or ''highlightelements'' option');88 disp(' ''highlight'': highlights certain nodes or elements when using ''nodenumbering'' or ''elementnumbering'' or ''highlightnodes '' or ''highlightelements'' option'); 89 89 disp(' ''resolution'': resolution used by section value (array of type [horizontal_resolution vertical_resolution])'); 90 90 disp(' horizontal_resolution must be in meter, and vertical_resolution a number of layers'); … … 119 119 disp(' ''textcolor'': same as standard ''color'' matlab option applied to text, use a cell of strings if more than one'); 120 120 disp(' ''textrotation'': same as standard ''Rotation'' matlab option applied to text, use a cell of strings if more than one'); 121 disp(' ''mask'': list of flags of size numberof grids or numberofelements. Only ''true'' values are plotted ');121 disp(' ''mask'': list of flags of size numberofnodes or numberofelements. Only ''true'' values are plotted '); 122 122 disp(' ''partitionedges'': ''off'' by default. overlay plot of partition edges'); 123 123 disp(' ''log'': value of log'); -
issm/trunk/src/m/model/plot/processdata.m
r7244 r8298 58 58 59 59 %check length 60 if datasize(1)~=md.numberof grids & datasize(1)~=md.numberofelements & datasize(1)~=md.numberofgrids*6 & (md.dim==3 & ~(datasize(1)==md.numberofelements2d | datasize(1)==md.numberofgrids2d))60 if datasize(1)~=md.numberofnodes & datasize(1)~=md.numberofelements & datasize(1)~=md.numberofnodes*6 & (md.dim==3 & ~(datasize(1)==md.numberofelements2d | datasize(1)==md.numberofnodes2d)) 61 61 error('plotmodel error message: data not supported yet'); 62 62 end … … 78 78 end 79 79 80 %treat the case datasize(1)=6* grids81 if datasize(1)==6*md.numberof grids80 %treat the case datasize(1)=6*nodes 81 if datasize(1)==6*md.numberofnodes 82 82 %keep the only norm of data 83 data1=data(1:6:md.numberof grids*6,:);84 data2=data(2:6:md.numberof grids*6,:);83 data1=data(1:6:md.numberofnodes*6,:); 84 data2=data(2:6:md.numberofnodes*6,:); 85 85 data=sqrt(data1.^2+data2.^2); 86 datasize(1)=md.numberof grids;87 %---> go to griddata86 datasize(1)=md.numberofnodes; 87 %---> go to node data 88 88 end 89 89 90 %treat the case datasize(1)= grids2d91 if (md.dim==3 & datasize(1)==md.numberof grids2d),90 %treat the case datasize(1)=nodes2d 91 if (md.dim==3 & datasize(1)==md.numberofnodes2d), 92 92 data=project3d(md,data,'node'); 93 datasize(1)=md.numberof grids;94 %---> go to griddata93 datasize(1)=md.numberofnodes; 94 %---> go to node data 95 95 end 96 96 97 %treat the case datasize(1)= grids2d97 %treat the case datasize(1)=nodes2d 98 98 if (md.dim==3 & datasize(1)==md.numberofelements2d), 99 99 data=project3d(md,data,'element'); 100 100 datasize(1)=md.numberofelements; 101 %---> go to griddata101 %---> go to node data 102 102 end 103 103 … … 105 105 if exist(options,'smooth') 106 106 data=averaging(md,data,getfieldvalue(options,'smooth')); 107 datasize(1)=md.numberof grids;108 %---> go to griddata107 datasize(1)=md.numberofnodes; 108 %---> go to node data 109 109 end 110 110 end … … 122 122 flags=getfieldvalue(options,'mask'); 123 123 pos=find(~flags); 124 if length(flags)==md.numberof grids,124 if length(flags)==md.numberofnodes, 125 125 [pos2 dummy]=find(ismember(md.elements,pos)); 126 126 data(pos2,:)=NaN; … … 128 128 data(pos,:)=NaN; 129 129 else 130 disp('plotmodel warning: mask length not supported yet (supported length are md.numberof grids and md.numberofelements');130 disp('plotmodel warning: mask length not supported yet (supported length are md.numberofnodes and md.numberofelements'); 131 131 end 132 132 end … … 144 144 end 145 145 146 % griddata147 if (datasize(1)==md.numberof grids & datasize(2)==1),146 %node data 147 if (datasize(1)==md.numberofnodes & datasize(2)==1), 148 148 datatype=2; 149 149 … … 152 152 flags=getfieldvalue(options,'mask'); 153 153 pos=find(~flags); 154 if length(flags)==md.numberof grids,154 if length(flags)==md.numberofnodes, 155 155 data(pos,:)=NaN; 156 156 elseif length(flags)==md.numberofelements 157 157 data(md.elements(pos,:),:)=NaN; 158 158 else 159 disp('plotmodel warning: mask length not supported yet (supported length are md.numberof grids and md.numberofelements');159 disp('plotmodel warning: mask length not supported yet (supported length are md.numberofnodes and md.numberofelements'); 160 160 end 161 161 end -
issm/trunk/src/m/model/plot/processmesh.m
r7651 r8298 8 8 9 9 %some checks 10 if md.numberof grids==md.numberofelements11 error('plot error message: the number of elements is the same as the number of grids! cannot plot anything with model/plot, use matlab/plot instead')10 if md.numberofnodes==md.numberofelements 11 error('plot error message: the number of elements is the same as the number of nodes! cannot plot anything with model/plot, use matlab/plot instead') 12 12 end 13 13 -
issm/trunk/src/m/model/plug.m
r1 r8298 28 28 29 29 distance=sqrt( (md.x(index)-md.x).^2 + (md.y(index)-md.y).^2 ); 30 distance(holevalues)=10^10; %be sure we are not picking up the nan grids!30 distance(holevalues)=10^10; %be sure we are not picking up the nan nodes! 31 31 32 32 index2=find(distance==min(distance));index2=index2(1); -
issm/trunk/src/m/model/presolve.m
r6748 r8298 31 31 end 32 32 33 md.riftinfo=zeros(numpairs,12); % 2 for grids + 2 for elements+ 2 for normals + 1 for length + 1 for fill + 1 for friction + 1 for fraction + 1 for fractionincrement + 1 for state.33 md.riftinfo=zeros(numpairs,12); % 2 for nodes + 2 for elements+ 2 for normals + 1 for length + 1 for fill + 1 for friction + 1 for fraction + 1 for fractionincrement + 1 for state. 34 34 35 35 count=1; -
issm/trunk/src/m/model/project2d.m
r4642 r8298 32 32 end 33 33 34 if size(value,1)==md3d.numberof grids,35 projection_value=value((layer-1)*md3d.numberof grids2d+1:layer*md3d.numberofgrids2d,:);34 if size(value,1)==md3d.numberofnodes, 35 projection_value=value((layer-1)*md3d.numberofnodes2d+1:layer*md3d.numberofnodes2d,:); 36 36 else 37 37 projection_value=value((layer-1)*md3d.numberofelements2d+1:layer*md3d.numberofelements2d,:); -
issm/trunk/src/m/model/project3d.m
r2823 r8298 3 3 % 4 4 % vertically project a vector from 2d mesh (split in noncoll and coll areas) into a 3d mesh. 5 % This vector can be a grid vector of size (md3d.numberofgrids2d,N/A) or an5 % This vector can be a node vector of size (md3d.numberofnodes2d,N/A) or an 6 6 % element vector of size (md3d.numberofelements2d,N/A). 7 7 % type is 'element' or 'node'. layer an optional layer number where vector … … 23 23 if strcmpi(type,'node'), 24 24 25 projected_vector=zeros(md3d.numberof grids,size(vector2d,2));25 projected_vector=zeros(md3d.numberofnodes,size(vector2d,2)); 26 26 27 27 if layer==0, 28 28 for i=1:md3d.numlayers, 29 projected_vector(((i-1)*md3d.numberof grids2d+1):(i*md3d.numberofgrids2d),:)=vector2d;29 projected_vector(((i-1)*md3d.numberofnodes2d+1):(i*md3d.numberofnodes2d),:)=vector2d; 30 30 end 31 31 else 32 projected_vector(((layer-1)*md3d.numberof grids2d+1):(layer*md3d.numberofgrids2d),:)=vector2d;32 projected_vector(((layer-1)*md3d.numberofnodes2d+1):(layer*md3d.numberofnodes2d),:)=vector2d; 33 33 end 34 34 else -
issm/trunk/src/m/model/removeholes.m
r1236 r8298 3 3 % 4 4 % as its name indicates, this routine takes a model, a field (value of some 5 % physical quantity evaluated at the mesh grids) of the model, and interpolates this field5 % physical quantity evaluated at the mesh nodes) of the model, and interpolates this field 6 6 % on the model mesh, without any hole. 7 7 % -
issm/trunk/src/m/model/setelementstype.m
r6713 r8298 75 75 76 76 %1: Hutter elements 77 gridonhutter=zeros(md.numberofgrids,1);78 gridonhutter(md.elements(find(hutterflag),:))=1;79 md. gridonhutter=gridonhutter;77 nodeonhutter=zeros(md.numberofnodes,1); 78 nodeonhutter(md.elements(find(hutterflag),:))=1; 79 md.nodeonhutter=nodeonhutter; 80 80 md.elements_type(find(hutterflag))=HutterApproximationEnum(); 81 81 82 82 %2: MacAyeal elements 83 gridonmacayeal=zeros(md.numberofgrids,1);84 gridonmacayeal(md.elements(find(macayealflag),:))=1;85 md. gridonmacayeal=gridonmacayeal;83 nodeonmacayeal=zeros(md.numberofnodes,1); 84 nodeonmacayeal(md.elements(find(macayealflag),:))=1; 85 md.nodeonmacayeal=nodeonmacayeal; 86 86 md.elements_type(find(macayealflag))=MacAyealApproximationEnum(); 87 87 88 88 %3: Pattyn elements 89 gridonpattyn=zeros(md.numberofgrids,1);90 gridonpattyn(md.elements(find(pattynflag),:))=1;91 md. gridonpattyn=gridonpattyn;89 nodeonpattyn=zeros(md.numberofnodes,1); 90 nodeonpattyn(md.elements(find(pattynflag),:))=1; 91 md.nodeonpattyn=nodeonpattyn; 92 92 md.elements_type(find(pattynflag))=PattynApproximationEnum(); 93 93 … … 95 95 %First modify stokesflag to get rid of elements contrained everywhere (spc + border with pattyn or macayeal) 96 96 if any(stokesflag), 97 gridonstokes=zeros(md.numberofgrids,1);98 gridonstokes(md.elements(find(stokesflag),:))=1;99 fullspcnodes=double(sum(md.spcvelocity(:,1:3),2)==3 | ( gridonpattyn & gridonstokes)); %find all the grids on the boundary of the domain without icefront100 fullspcelems=double(sum(fullspcnodes(md.elements),2)==6); %find all the grids on the boundary of the domain without icefront97 nodeonstokes=zeros(md.numberofnodes,1); 98 nodeonstokes(md.elements(find(stokesflag),:))=1; 99 fullspcnodes=double(sum(md.spcvelocity(:,1:3),2)==3 | (nodeonpattyn & nodeonstokes)); %find all the nodes on the boundary of the domain without icefront 100 fullspcelems=double(sum(fullspcnodes(md.elements),2)==6); %find all the nodes on the boundary of the domain without icefront 101 101 stokesflag(find(fullspcelems))=0; 102 102 end 103 gridonstokes=zeros(md.numberofgrids,1);104 gridonstokes(md.elements(find(stokesflag),:))=1;105 md. gridonstokes=gridonstokes;103 nodeonstokes=zeros(md.numberofnodes,1); 104 nodeonstokes(md.elements(find(stokesflag),:))=1; 105 md.nodeonstokes=nodeonstokes; 106 106 md.elements_type(find(stokesflag))=StokesApproximationEnum(); 107 107 … … 110 110 if any(pattynflag), %fill with pattyn 111 111 pattynflag(~stokesflag)=1; 112 gridonpattyn(md.elements(find(pattynflag),:))=1;113 md. gridonpattyn=gridonpattyn;112 nodeonpattyn(md.elements(find(pattynflag),:))=1; 113 md.nodeonpattyn=nodeonpattyn; 114 114 md.elements_type(find(~stokesflag))=PattynApproximationEnum(); 115 115 elseif any(macayealflag), %fill with macayeal 116 116 macayealflag(~stokesflag)=1; 117 gridonmacayeal(md.elements(find(macayealflag),:))=1;118 md. gridonmacayeal=gridonmacayeal;117 nodeonmacayeal(md.elements(find(macayealflag),:))=1; 118 md.nodeonmacayeal=nodeonmacayeal; 119 119 md.elements_type(find(~stokesflag))=MacAyealApproximationEnum(); 120 120 else %fill with none … … 126 126 %Now take care of the coupling between MacAyeal and Pattyn 127 127 md.penalties=[]; 128 gridonmacayealpattyn=zeros(md.numberofgrids,1);129 gridonpattynstokes=zeros(md.numberofgrids,1);130 gridonmacayealstokes=zeros(md.numberofgrids,1);128 nodeonmacayealpattyn=zeros(md.numberofnodes,1); 129 nodeonpattynstokes=zeros(md.numberofnodes,1); 130 nodeonmacayealstokes=zeros(md.numberofnodes,1); 131 131 if strcmpi(coupling_method,'penalties'), 132 %Create the border grids between Pattyn and MacAyeal and extrude them133 num grids2d=md.numberofgrids2d;132 %Create the border nodes between Pattyn and MacAyeal and extrude them 133 numnodes2d=md.numberofnodes2d; 134 134 numlayers=md.numlayers; 135 border grids2d=find(gridonpattyn(1:numgrids2d) & gridonmacayeal(1:numgrids2d)); %Grids connected to two different types of elements135 bordernodes2d=find(nodeonpattyn(1:numnodes2d) & nodeonmacayeal(1:numnodes2d)); %Nodes connected to two different types of elements 136 136 137 137 %initialize and fill in penalties structure 138 if ~isnan(border grids2d),138 if ~isnan(bordernodes2d), 139 139 penalties=[]; 140 140 for i=1:numlayers-1, 141 penalties=[penalties; [border grids2d bordergrids2d+md.numberofgrids2d*(i)]];141 penalties=[penalties; [bordernodes2d bordernodes2d+md.numberofnodes2d*(i)]]; 142 142 end 143 143 md.penalties=penalties; … … 145 145 elseif strcmpi(coupling_method,'tiling'), 146 146 if any(macayealflag) & any(pattynflag), %coupling macayeal pattyn 147 %Find gridat the border148 gridonmacayealpattyn(find(gridonmacayeal & gridonpattyn))=1;147 %Find node at the border 148 nodeonmacayealpattyn(find(nodeonmacayeal & nodeonpattyn))=1; 149 149 %Macayeal elements in contact with this layer become MacAyealPattyn elements 150 matrixelements=ismember(md.elements,find( gridonmacayealpattyn));150 matrixelements=ismember(md.elements,find(nodeonmacayealpattyn)); 151 151 commonelements=sum(matrixelements,2)~=0; 152 152 commonelements(find(pattynflag))=0; %only one layer: the elements previously in macayeal … … 154 154 macayealpattynflag=zeros(md.numberofelements,1); 155 155 macayealpattynflag(find(commonelements))=1; 156 gridonmacayeal=zeros(md.numberofgrids,1);157 gridonmacayeal(md.elements(find(macayealflag),:))=1;158 md. gridonmacayeal=gridonmacayeal;156 nodeonmacayeal=zeros(md.numberofnodes,1); 157 nodeonmacayeal(md.elements(find(macayealflag),:))=1; 158 md.nodeonmacayeal=nodeonmacayeal; 159 159 160 160 %Create MacaAyealPattynApproximation where needed 161 161 md.elements_type(find(macayealpattynflag))=MacAyealPattynApproximationEnum(); 162 162 163 %Now recreate gridonmacayeal and gridonmacayealpattyn164 gridonmacayealpattyn(md.elements(find(macayealpattynflag),:))=1;163 %Now recreate nodeonmacayeal and nodeonmacayealpattyn 164 nodeonmacayealpattyn(md.elements(find(macayealpattynflag),:))=1; 165 165 elseif any(pattynflag) & any(stokesflag), %coupling pattyn stokes 166 %Find gridat the border167 gridonpattynstokes(find(gridonpattyn & gridonstokes))=1;166 %Find node at the border 167 nodeonpattynstokes(find(nodeonpattyn & nodeonstokes))=1; 168 168 %Stokes elements in contact with this layer become PattynStokes elements 169 matrixelements=ismember(md.elements,find( gridonpattynstokes));169 matrixelements=ismember(md.elements,find(nodeonpattynstokes)); 170 170 commonelements=sum(matrixelements,2)~=0; 171 171 commonelements(find(pattynflag))=0; %only one layer: the elements previously in macayeal … … 173 173 pattynstokesflag=zeros(md.numberofelements,1); 174 174 pattynstokesflag(find(commonelements))=1; 175 gridonstokes=zeros(md.numberofgrids,1);176 gridonstokes(md.elements(find(stokesflag),:))=1;177 md. gridonstokes=gridonstokes;175 nodeonstokes=zeros(md.numberofnodes,1); 176 nodeonstokes(md.elements(find(stokesflag),:))=1; 177 md.nodeonstokes=nodeonstokes; 178 178 179 179 %Create MacaAyealPattynApproximation where needed 180 180 md.elements_type(find(pattynstokesflag))=PattynStokesApproximationEnum(); 181 181 182 %Now recreate gridonpattynstokes183 gridonpattynstokes=zeros(md.numberofgrids,1);184 gridonpattynstokes(md.elements(find(pattynstokesflag),:))=1;182 %Now recreate nodeonpattynstokes 183 nodeonpattynstokes=zeros(md.numberofnodes,1); 184 nodeonpattynstokes(md.elements(find(pattynstokesflag),:))=1; 185 185 elseif any(stokesflag) & any(macayealflag), 186 %Find gridat the border187 gridonmacayealstokes(find(gridonmacayeal & gridonstokes))=1;186 %Find node at the border 187 nodeonmacayealstokes(find(nodeonmacayeal & nodeonstokes))=1; 188 188 %Stokes elements in contact with this layer become MacAyealStokes elements 189 matrixelements=ismember(md.elements,find( gridonmacayealstokes));189 matrixelements=ismember(md.elements,find(nodeonmacayealstokes)); 190 190 commonelements=sum(matrixelements,2)~=0; 191 191 commonelements(find(macayealflag))=0; %only one layer: the elements previously in macayeal … … 193 193 macayealstokesflag=zeros(md.numberofelements,1); 194 194 macayealstokesflag(find(commonelements))=1; 195 gridonstokes=zeros(md.numberofgrids,1);196 gridonstokes(md.elements(find(stokesflag),:))=1;197 md. gridonstokes=gridonstokes;195 nodeonstokes=zeros(md.numberofnodes,1); 196 nodeonstokes(md.elements(find(stokesflag),:))=1; 197 md.nodeonstokes=nodeonstokes; 198 198 199 199 %Create MacaAyealMacAyealApproximation where needed 200 200 md.elements_type(find(macayealstokesflag))=MacAyealStokesApproximationEnum(); 201 201 202 %Now recreate gridonmacayealstokes203 gridonmacayealstokes=zeros(md.numberofgrids,1);204 gridonmacayealstokes(md.elements(find(macayealstokesflag),:))=1;202 %Now recreate nodeonmacayealstokes 203 nodeonmacayealstokes=zeros(md.numberofnodes,1); 204 nodeonmacayealstokes(md.elements(find(macayealstokesflag),:))=1; 205 205 elseif any(stokesflag) & any(hutterflag), 206 206 error('type of coupling not supported yet'); … … 209 209 210 210 %Create vertices_type 211 md.vertices_type=zeros(md.numberof grids,1);212 pos=find( gridonhutter);211 md.vertices_type=zeros(md.numberofnodes,1); 212 pos=find(nodeonhutter); 213 213 md.vertices_type(pos)=HutterApproximationEnum(); 214 pos=find( gridonmacayeal);214 pos=find(nodeonmacayeal); 215 215 md.vertices_type(pos)=MacAyealApproximationEnum(); 216 pos=find( gridonpattyn);216 pos=find(nodeonpattyn); 217 217 md.vertices_type(pos)=PattynApproximationEnum(); 218 pos=find( gridonhutter);218 pos=find(nodeonhutter); 219 219 md.vertices_type(pos)=HutterApproximationEnum(); 220 pos=find( gridonpattyn & gridonmacayeal);220 pos=find(nodeonpattyn & nodeonmacayeal); 221 221 md.vertices_type(pos)=PattynApproximationEnum(); 222 pos=find( gridonmacayealpattyn);222 pos=find(nodeonmacayealpattyn); 223 223 md.vertices_type(pos)=MacAyealPattynApproximationEnum(); 224 pos=find( gridonstokes);224 pos=find(nodeonstokes); 225 225 md.vertices_type(pos)=StokesApproximationEnum(); 226 226 if any(stokesflag), 227 pos=find(~ gridonstokes);227 pos=find(~nodeonstokes); 228 228 if(~any(pattynflag) & ~any(macayealflag)), 229 229 md.vertices_type(pos)=NoneApproximationEnum(); 230 230 end 231 231 end 232 pos=find( gridonpattynstokes);232 pos=find(nodeonpattynstokes); 233 233 md.vertices_type(pos)=PattynStokesApproximationEnum(); 234 pos=find( gridonmacayealstokes);234 pos=find(nodeonmacayealstokes); 235 235 md.vertices_type(pos)=MacAyealStokesApproximationEnum(); 236 236 -
issm/trunk/src/m/model/slope.m
r3994 r8298 8 8 if (md.dim==2), 9 9 numberofelements=md.numberofelements; 10 numberof grids=md.numberofgrids;10 numberofnodes=md.numberofnodes; 11 11 index=md.elements; 12 12 x=md.x; y=md.y; z=md.z; 13 13 else 14 14 numberofelements=md.numberofelements2d; 15 numberof grids=md.numberofgrids2d;15 numberofnodes=md.numberofnodes2d; 16 16 index=md.elements2d; 17 17 x=md.x2d; y=md.y2d; z=md.z2d; -
issm/trunk/src/m/model/thicknessevolution.m
r1748 r8298 9 9 % dhdt=thicknessevolution(md) 10 10 11 if (length(md.vx)~=md.numberof grids)|(length(md.vy)~=md.numberofgrids)12 error(['thicknessevolution error message: vx and vy should have a length of ' num2str(md.numberof grids)])11 if (length(md.vx)~=md.numberofnodes)|(length(md.vy)~=md.numberofnodes) 12 error(['thicknessevolution error message: vx and vy should have a length of ' num2str(md.numberofnodes)]) 13 13 end 14 14 -
issm/trunk/src/m/model/tres.m
r8108 r8298 26 26 md.vz=PatchToVec(md.results.DiagnosticSolution.Vz); 27 27 else 28 md.vz=zeros(md.numberof grids,1);28 md.vz=zeros(md.numberofnodes,1); 29 29 end 30 30 end -
issm/trunk/src/m/qmu/importancefactors.m
r5244 r8298 51 51 52 52 %weight importancefactors by area 53 %if numel(factors)==md.numberof grids,53 %if numel(factors)==md.numberofnodes, 54 54 % %get areas for each vertex. 55 55 % aire=GetAreas(md.elements,md.x,md.y); 56 56 % num_elements_by_node=md.nodeconnectivity(:,end); 57 % grid_aire=zeros(md.numberof grids,1);58 % for i=1:md.numberof grids,57 % grid_aire=zeros(md.numberofnodes,1); 58 % for i=1:md.numberofnodes, 59 59 % for j=1:num_elements_by_node(i), 60 60 % grid_aire(i)=grid_aire(i)+aire(md.nodeconnectivity(i,j)); -
issm/trunk/src/m/utils/Analysis/resetspcs.m
r2995 r8298 3 3 resolution=20000; x_ellsworth=-1.24*10^6; y_ellsworth=1*10^5; 4 4 pos=find((md.x>(x_ellsworth-resolution)) & (md.x<(x_ellsworth+resolution)) & (md.y>(y_ellsworth-resolution)) & (md.y<(y_ellsworth+resolution))); 5 md.spcvelocity=zeros(md.numberof grids,6);5 md.spcvelocity=zeros(md.numberofnodes,6); 6 6 md.spcvelocity(pos,1:3)=1; 7 7 -
issm/trunk/src/m/utils/BC/SetIceSheetBC.m
r8232 r8298 7 7 % See also: SETICESHELFBC, SETMARINEICESHEETBC 8 8 9 % gridon Dirichlet10 pos=find(md. gridonboundary);11 md.spcvelocity=zeros(md.numberof grids,6);9 %node on Dirichlet 10 pos=find(md.nodeonboundary); 11 md.spcvelocity=zeros(md.numberofnodes,6); 12 12 md.spcvelocity(pos,1:3)=1; 13 md.diagnostic_ref=NaN*ones(md.numberof grids,6);13 md.diagnostic_ref=NaN*ones(md.numberofnodes,6); 14 14 15 15 %Dirichlet Values 16 if (length(md.vx_obs)==md.numberof grids & length(md.vy_obs)==md.numberofgrids)16 if (length(md.vx_obs)==md.numberofnodes & length(md.vy_obs)==md.numberofnodes) 17 17 disp(' boundary conditions for diagnostic model: spc set as observed velocities'); 18 18 md.spcvelocity(:,4:5)=[md.vx_obs md.vy_obs]; %vz is zero … … 30 30 %Create zeros melting_rate and accumulation_rate if not specified 31 31 if isnan(md.accumulation_rate), 32 md.accumulation_rate=zeros(md.numberof grids,1);32 md.accumulation_rate=zeros(md.numberofnodes,1); 33 33 disp(' no accumulation_rate specified: values set as zero'); 34 34 end 35 35 if isnan(md.melting_rate), 36 md.melting_rate=zeros(md.numberof grids,1);36 md.melting_rate=zeros(md.numberofnodes,1); 37 37 disp(' no melting_rate specified: values set as zero'); 38 38 end 39 39 if isnan(md.dhdt), 40 md.dhdt=zeros(md.numberof grids,1);40 md.dhdt=zeros(md.numberofnodes,1); 41 41 disp(' no dhdt specified: values set as zero'); 42 42 end 43 43 44 md.spcthickness=zeros(md.numberof grids,2);44 md.spcthickness=zeros(md.numberofnodes,2); 45 45 46 if (length(md.observed_temperature)==md.numberof grids),47 md.spctemperature=[md. gridonsurface md.observed_temperature]; %impose observed temperature on surface48 if (length(md.geothermalflux)~=md.numberof grids),49 md.geothermalflux=50*10^-3*ones(md.numberof grids,1); %50 mW/m^246 if (length(md.observed_temperature)==md.numberofnodes), 47 md.spctemperature=[md.nodeonsurface md.observed_temperature]; %impose observed temperature on surface 48 if (length(md.geothermalflux)~=md.numberofnodes), 49 md.geothermalflux=50*10^-3*ones(md.numberofnodes,1); %50 mW/m^2 50 50 end 51 51 else -
issm/trunk/src/m/utils/BC/SetIceShelfBC.m
r8232 r8298 15 15 % See also: SETICESHEETBC, SETMARINEICESHEETBC 16 16 17 % gridon Dirichlet (boundary and ~icefront)17 %node on Dirichlet (boundary and ~icefront) 18 18 if nargin==2, 19 19 icefrontfile=varargin{1}; 20 20 if ~exist(icefrontfile), error(['SetIceShelfBC error message: ice front file ' icefrontfile ' not found']); end 21 gridinsideicefront=ContourToMesh(md.elements,md.x,md.y,icefrontfile,'node',2);22 gridonicefront=double(md.gridonboundary & gridinsideicefront);21 nodeinsideicefront=ContourToMesh(md.elements,md.x,md.y,icefrontfile,'node',2); 22 nodeonicefront=double(md.nodeonboundary & nodeinsideicefront); 23 23 elseif nargin==1, 24 gridonicefront=zeros(md.numberofgrids,1);24 nodeonicefront=zeros(md.numberofnodes,1); 25 25 else 26 26 help SetIceShelfBC 27 27 error('bad usage'); 28 28 end 29 pos=find(md. gridonboundary & ~gridonicefront);30 md.spcvelocity=zeros(md.numberof grids,6);29 pos=find(md.nodeonboundary & ~nodeonicefront); 30 md.spcvelocity=zeros(md.numberofnodes,6); 31 31 md.spcvelocity(pos,1:3)=1; 32 md.diagnostic_ref=NaN*ones(md.numberof grids,6);32 md.diagnostic_ref=NaN*ones(md.numberofnodes,6); 33 33 34 34 %Dirichlet Values 35 if (length(md.vx_obs)==md.numberof grids & length(md.vy_obs)==md.numberofgrids)35 if (length(md.vx_obs)==md.numberofnodes & length(md.vy_obs)==md.numberofnodes) 36 36 disp(' boundary conditions for diagnostic model: spc set as observed velocities'); 37 37 md.spcvelocity(pos,4:5)=[md.vx_obs(pos) md.vy_obs(pos)]; %zeros for vz … … 42 42 %segment on Ice Front 43 43 %segment on Neumann (Ice Front) 44 pos=find( gridonicefront(md.segments(:,1)) | gridonicefront(md.segments(:,2)));44 pos=find(nodeonicefront(md.segments(:,1)) | nodeonicefront(md.segments(:,2))); 45 45 if (md.dim==2) 46 46 pressureload=md.segments(pos,:); 47 47 elseif md.dim==3 48 pressureload_layer1=[md.segments(pos,1:2) md.segments(pos,2)+md.numberof grids2d md.segments(pos,1)+md.numberofgrids2d md.segments(pos,3)];48 pressureload_layer1=[md.segments(pos,1:2) md.segments(pos,2)+md.numberofnodes2d md.segments(pos,1)+md.numberofnodes2d md.segments(pos,3)]; 49 49 pressureload=[]; 50 50 for i=1:md.numlayers-1, 51 pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.numberof grids2d pressureload_layer1(:,5)+(i-1)*md.numberofelements2d ];51 pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.numberofnodes2d pressureload_layer1(:,5)+(i-1)*md.numberofelements2d ]; 52 52 end 53 53 end … … 61 61 %Create zeros melting_rate and accumulation_rate if not specified 62 62 if isnan(md.accumulation_rate), 63 md.accumulation_rate=zeros(md.numberof grids,1);63 md.accumulation_rate=zeros(md.numberofnodes,1); 64 64 disp(' no accumulation_rate specified: values set as zero'); 65 65 end 66 66 if isnan(md.melting_rate), 67 md.melting_rate=zeros(md.numberof grids,1);67 md.melting_rate=zeros(md.numberofnodes,1); 68 68 disp(' no melting_rate specified: values set as zero'); 69 69 end 70 70 if isnan(md.dhdt), 71 md.dhdt=zeros(md.numberof grids,1);71 md.dhdt=zeros(md.numberofnodes,1); 72 72 disp(' no dhdt specified: values set as zero'); 73 73 end 74 74 75 md.spcthickness=zeros(md.numberof grids,2);75 md.spcthickness=zeros(md.numberofnodes,2); 76 76 77 if (length(md.observed_temperature)==md.numberof grids),78 md.spctemperature=[md. gridonsurface md.observed_temperature]; %impose observed temperature on surface79 if (length(md.geothermalflux)~=md.numberof grids),80 md.geothermalflux=zeros(md.numberof grids,1);77 if (length(md.observed_temperature)==md.numberofnodes), 78 md.spctemperature=[md.nodeonsurface md.observed_temperature]; %impose observed temperature on surface 79 if (length(md.geothermalflux)~=md.numberofnodes), 80 md.geothermalflux=zeros(md.numberofnodes,1); 81 81 end 82 82 else -
issm/trunk/src/m/utils/BC/SetMarineIceSheetBC.m
r8232 r8298 16 16 % See also: SETICESHELFBC, SETMARINEICESHEETBC 17 17 18 % gridon Dirichlet (boundary and ~icefront)18 %node on Dirichlet (boundary and ~icefront) 19 19 if nargin==2, 20 20 %User provided Front.exp, use it … … 23 23 error(['SetMarineIceSheetBC error message: ice front file ' icefrontfile ' not found']); 24 24 end 25 gridinsideicefront=ContourToMesh(md.elements,md.x,md.y,icefrontfile,'node',2);26 gridonicefront=double(md.gridonboundary & gridinsideicefront);25 nodeinsideicefront=ContourToMesh(md.elements,md.x,md.y,icefrontfile,'node',2); 26 nodeonicefront=double(md.nodeonboundary & nodeinsideicefront); 27 27 else 28 28 %Guess where the ice front is 29 gridoniceshelf=zeros(md.numberofgrids,1);30 gridoniceshelf(md.elements(find(md.elementoniceshelf),:))=1;31 gridonicefront=double(md.gridonboundary & gridoniceshelf);29 nodeoniceshelf=zeros(md.numberofnodes,1); 30 nodeoniceshelf(md.elements(find(md.elementoniceshelf),:))=1; 31 nodeonicefront=double(md.nodeonboundary & nodeoniceshelf); 32 32 end 33 pos=find(md. gridonboundary & ~gridonicefront);33 pos=find(md.nodeonboundary & ~nodeonicefront); 34 34 if isempty(pos), 35 35 warning('SetMarineIceSheetBC warning: ice front all around the glacier, no dirichlet found. Dirichlet must be added manually') 36 36 end 37 md.spcvelocity=zeros(md.numberof grids,6);37 md.spcvelocity=zeros(md.numberofnodes,6); 38 38 md.spcvelocity(pos,1:3)=1; 39 md.diagnostic_ref=NaN*ones(md.numberof grids,6);39 md.diagnostic_ref=NaN*ones(md.numberofnodes,6); 40 40 41 41 %Dirichlet Values 42 if (length(md.vx_obs)==md.numberof grids & length(md.vy_obs)==md.numberofgrids)42 if (length(md.vx_obs)==md.numberofnodes & length(md.vy_obs)==md.numberofnodes) 43 43 disp(' boundary conditions for diagnostic model: spc set as observed velocities'); 44 44 md.spcvelocity(pos,4:5)=[md.vx_obs(pos) md.vy_obs(pos)]; %zeros for vz … … 47 47 end 48 48 49 md.spcwatercolumn=zeros(md.numberof grids,2);50 pos=find(md. gridonboundary);49 md.spcwatercolumn=zeros(md.numberofnodes,2); 50 pos=find(md.nodeonboundary); 51 51 md.spcwatercolumn(pos,1)=1; 52 52 53 53 %segment on Neumann (Ice Front) 54 pos=find( gridonicefront(md.segments(:,1)) | gridonicefront(md.segments(:,2)));54 pos=find(nodeonicefront(md.segments(:,1)) | nodeonicefront(md.segments(:,2))); 55 55 if (md.dim==2) 56 56 pressureload=md.segments(pos,:); 57 57 elseif md.dim==3 58 pressureload_layer1=[md.segments(pos,1:2) md.segments(pos,2)+md.numberof grids2d md.segments(pos,1)+md.numberofgrids2d md.segments(pos,3)];58 pressureload_layer1=[md.segments(pos,1:2) md.segments(pos,2)+md.numberofnodes2d md.segments(pos,1)+md.numberofnodes2d md.segments(pos,3)]; 59 59 pressureload=[]; 60 60 for i=1:md.numlayers-1, 61 pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.numberof grids2d pressureload_layer1(:,5)+(i-1)*md.numberofelements2d ];61 pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.numberofnodes2d pressureload_layer1(:,5)+(i-1)*md.numberofelements2d ]; 62 62 end 63 63 end … … 71 71 %Create zeros melting_rate and accumulation_rate if not specified 72 72 if isnan(md.accumulation_rate), 73 md.accumulation_rate=zeros(md.numberof grids,1);73 md.accumulation_rate=zeros(md.numberofnodes,1); 74 74 disp(' no accumulation_rate specified: values set as zero'); 75 75 end 76 76 if isnan(md.melting_rate), 77 md.melting_rate=zeros(md.numberof grids,1);77 md.melting_rate=zeros(md.numberofnodes,1); 78 78 disp(' no melting_rate specified: values set as zero'); 79 79 end 80 80 if isnan(md.dhdt), 81 md.dhdt=zeros(md.numberof grids,1);81 md.dhdt=zeros(md.numberofnodes,1); 82 82 disp(' no dhdt specified: values set as zero'); 83 83 end 84 84 85 md.spcthickness=zeros(md.numberof grids,2);85 md.spcthickness=zeros(md.numberofnodes,2); 86 86 87 if (length(md.observed_temperature)==md.numberof grids),88 md.spctemperature=[md. gridonsurface md.observed_temperature]; %impose observed temperature on surface89 if (length(md.geothermalflux)~=md.numberof grids),90 md.geothermalflux=zeros(md.numberof grids,1);91 md.geothermalflux(find(md. gridonicesheet))=50*10^-3; %50mW/m287 if (length(md.observed_temperature)==md.numberofnodes), 88 md.spctemperature=[md.nodeonsurface md.observed_temperature]; %impose observed temperature on surface 89 if (length(md.geothermalflux)~=md.numberofnodes), 90 md.geothermalflux=zeros(md.numberofnodes,1); 91 md.geothermalflux(find(md.nodeonicesheet))=50*10^-3; %50mW/m2 92 92 end 93 93 else -
issm/trunk/src/m/utils/DataProcessing/TracksToMatrix.m
r6860 r8298 72 72 73 73 %Create design site(points where we are looking for the data) 74 Points= gridsamp([x_f(1)+posting/2,y_f(1)+posting/2;x_f(end)-posting/2,y_f(end)-posting/2],[length(x_f)-1;length(y_f)-1]);74 Points=nodesamp([x_f(1)+posting/2,y_f(1)+posting/2;x_f(end)-posting/2,y_f(end)-posting/2],[length(x_f)-1;length(y_f)-1]); 75 75 76 76 %Compute data on these points -
issm/trunk/src/m/utils/Ecco3/ecco32issm.m
r8103 r8298 1 function gridfield=ecco32issm(field,transition,xecco3,yecco3)1 function nodefield=ecco32issm(field,transition,xecco3,yecco3) 2 2 3 3 xecco3linear=xecco3(:); yecco3linear=yecco3(:); %linearize 4 gridfieldlinear=zeros(length(xecco3linear),1);5 gridfieldlinear(transition(:,1))=field(transition(:,2));6 gridfield=xecco3;7 gridfield(:)=gridfieldlinear;8 % gridfield=gridfield'; %not sure we need that4 nodefieldlinear=zeros(length(xecco3linear),1); 5 nodefieldlinear(transition(:,1))=field(transition(:,2)); 6 nodefield=xecco3; 7 nodefield(:)=nodefieldlinear; 8 %nodefield=nodefield'; %not sure we need that -
issm/trunk/src/m/utils/Ecco3/issm2ecco3.m
r6205 r8298 1 function gridfield=issm2ecco3(field,transition,xecco3,yecco3)1 function nodefield=issm2ecco3(field,transition,xecco3,yecco3) 2 2 3 3 xecco3linear=xecco3(:); yecco3linear=yecco3(:); %linearize 4 gridfieldlinear=zeros(length(xecco3linear),1);5 gridfieldlinear(transition(:,1))=field(transition(:,2));6 gridfield=xecco3;7 gridfield(:)=gridfieldlinear;8 % gridfield=gridfield'; %not sure we need that4 nodefieldlinear=zeros(length(xecco3linear),1); 5 nodefieldlinear(transition(:,1))=field(transition(:,2)); 6 nodefield=xecco3; 7 nodefield(:)=nodefieldlinear; 8 %nodefield=nodefield'; %not sure we need that -
issm/trunk/src/m/utils/Exp/expcontract.m
r2317 r8298 1 function normal_ grid=expcontract(newfile,oldfile,distance)1 function normal_node=expcontract(newfile,oldfile,distance) 2 2 %EXPCONTRACT - contract or expand a profile, according to the normal. 3 3 % … … 12 12 13 13 normal=zeros(num-1,2); 14 normal_ grid=zeros(num-1,2);14 normal_node=zeros(num-1,2); 15 15 16 16 for i=1:num-1, … … 19 19 end 20 20 21 normal_ grid(2:end,:)=[normal(1:end-1,:)+normal(2:end,:)];22 normal_ grid(1,:)=normal(1,:)+normal(end,:);21 normal_node(2:end,:)=[normal(1:end-1,:)+normal(2:end,:)]; 22 normal_node(1,:)=normal(1,:)+normal(end,:); 23 23 24 normal_ grid_norm=sqrt(normal_grid(:,1).^2+normal_grid(:,2).^2);25 normal_ grid(:,1)=normal_grid(:,1)./normal_grid_norm;26 normal_ grid(:,2)=normal_grid(:,2)./normal_grid_norm;24 normal_node_norm=sqrt(normal_node(:,1).^2+normal_node(:,2).^2); 25 normal_node(:,1)=normal_node(:,1)./normal_node_norm; 26 normal_node(:,2)=normal_node(:,2)./normal_node_norm; 27 27 28 contour.x(1:end-1)=contour.x(1:end-1)+distance*normal_ grid(:,1);29 contour.y(1:end-1)=contour.y(1:end-1)+distance*normal_ grid(:,2);28 contour.x(1:end-1)=contour.x(1:end-1)+distance*normal_node(:,1); 29 contour.y(1:end-1)=contour.y(1:end-1)+distance*normal_node(:,2); 30 30 31 31 contour.x(end)=contour.x(1); -
issm/trunk/src/m/utils/Exp/expcreatecircle.m
r4994 r8298 1 function expcreatecircle(filename,x0,y0,radius,numberof grids)1 function expcreatecircle(filename,x0,y0,radius,numberofnodes) 2 2 %EXPCREATECIRCLE - create a circular contour corresponding to given parameters 3 3 % 4 4 % Creates a closed argus contour centered on x,y of radius size. 5 % The contour is made of numberof grids5 % The contour is made of numberofnodes 6 6 % 7 7 % Usage: 8 % expcreatecircle(filename,x0,y0,radius,numberof grids)8 % expcreatecircle(filename,x0,y0,radius,numberofnodes) 9 9 % 10 10 % See also EXPMASTER, EXPDOC 11 11 12 12 %Calculate the cartesians coordinates of the points 13 x_list=ones(numberof grids+1,1);14 y_list=ones(numberof grids+1,1);13 x_list=ones(numberofnodes+1,1); 14 y_list=ones(numberofnodes+1,1); 15 15 16 theta=(0:2*pi/numberof grids:2*pi*(1-1/numberofgrids))';16 theta=(0:2*pi/numberofnodes:2*pi*(1-1/numberofnodes))'; 17 17 theta=[theta;0]; 18 18 -
issm/trunk/src/m/utils/Interp/FieldFindVarNames.m
r2577 r8298 29 29 xenum=NaN; yenum=NaN; dataenum=NaN; indexenum=NaN; 30 30 if length(A)==3, 31 is grid=1;31 isnode=1; 32 32 for i=1:3 33 33 if strcmpi(A(i).name(1),'x'); … … 42 42 end 43 43 elseif length(A)==4, 44 is grid=0;44 isnode=0; 45 45 for i=1:4 46 46 if strcmpi(A(i).name(1),'x'); … … 57 57 end 58 58 else 59 error(['FieldFindVarNames error message: file ' filename ' not supported yet (it should hold 3 variables x,y and data (for grids) OR 4 variables x,y,index and data (for mesh))']);59 error(['FieldFindVarNames error message: file ' filename ' not supported yet (it should hold 3 variables x,y and data (for nodes) OR 4 variables x,y,index and data (for mesh))']); 60 60 end 61 61 62 62 %2: if only one item is missing, find it by elimination 63 if ~is grid,63 if ~isnode, 64 64 pos=find(isnan([xenum yenum indexenum dataenum])); 65 65 if length(pos)==1, … … 95 95 96 96 %find index 97 if (~is grid& isnan(indexenum)),97 if (~isnode & isnan(indexenum)), 98 98 for i=1:4 99 99 lengthi=min(A(i).size); … … 108 108 109 109 %4: last chance 110 if ~is grid,110 if ~isnode, 111 111 pos=find(isnan([xenum yenum indexenum dataenum])); 112 112 if length(pos)==1, … … 146 146 Names.yname=A(yenum).name; 147 147 Names.dataname=A(dataenum).name; 148 if ~is grid,148 if ~isnode, 149 149 Names.indexname=A(indexenum).name; 150 150 Names.interp='mesh'; 151 151 else 152 Names.interp=' grid';152 Names.interp='node'; 153 153 end -
issm/trunk/src/m/utils/Interp/FillHole.m
r7479 r8298 34 34 end 35 35 36 %search the gridon the closest to i, that is not in a hole either36 %search the node on the closest to i, that is not in a hole either 37 37 [d posd]=min(sqrt((x(pos_hole(i))-x_noholes).^2+(y(pos_hole(i))-y_noholes).^2)); 38 38 field(pos_hole(i))=field_noholes(posd); -
issm/trunk/src/m/utils/Interp/InterpFromFile.m
r5192 r8298 38 38 Names=FieldFindVarNames(filename); 39 39 Data=load(filename); 40 if strcmpi(Names.interp,' grid'),40 if strcmpi(Names.interp,'node'), 41 41 data_out=InterpFromGridToMesh(Data.(Names.xname),Data.(Names.yname),Data.(Names.dataname),x,y,default_value); 42 42 else -
issm/trunk/src/m/utils/Interp/VelFindVarNames.m
r2574 r8298 29 29 xenum=NaN; yenum=NaN; vxenum=NaN; vyenum=NaN; indexenum=NaN; 30 30 if length(A)==4, 31 is grid=1;31 isnode=1; 32 32 for i=1:4 33 33 if strcmpi(A(i).name(1),'x'); … … 44 44 end 45 45 elseif length(A)==5, 46 is grid=0;46 isnode=0; 47 47 for i=1:5 48 48 if strcmpi(A(i).name(1),'x'); … … 61 61 end 62 62 else 63 error(['VelFindVarNames error message: file ' filename ' not supported yet (it should hold 4 variables x,y,vx and vy (for grids) OR 5 variables x,y,index,vx and vy (for mesh))']);63 error(['VelFindVarNames error message: file ' filename ' not supported yet (it should hold 4 variables x,y,vx and vy (for nodes) OR 5 variables x,y,index,vx and vy (for mesh))']); 64 64 end 65 65 … … 70 70 71 71 %find index 72 if (~is grid& isnan(indexenum)),72 if (~isnode & isnan(indexenum)), 73 73 for i=1:5 74 74 lengthi=min(A(i).size); … … 115 115 Names.vxname=A(vxenum).name; 116 116 Names.vyname=A(vyenum).name; 117 if ~is grid,117 if ~isnode, 118 118 Names.indexname=A(indexenum).name; 119 119 Names.interp='mesh'; 120 120 else 121 Names.interp=' grid';121 Names.interp='node'; 122 122 end -
issm/trunk/src/m/utils/Interp/plugvelocities.m
r2575 r8298 28 28 29 29 %Interpolation 30 if strcmpi(Names.interp,' grid'),30 if strcmpi(Names.interp,'node'), 31 31 md.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,default_value); 32 32 md.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,default_value); -
issm/trunk/src/m/utils/Mesh/BamgCall.m
r6860 r8298 25 25 %Compute metric 26 26 t1=clock; fprintf('%s',' computing metric...'); 27 if length(md. gridonwater)==md.numberofgrids,28 pos=find(md. gridonwater);27 if length(md.nodeonwater)==md.numberofnodes, 28 pos=find(md.nodeonwater); 29 29 else 30 30 pos=[]; … … 36 36 t1=clock; fprintf('%s',' writing initial mesh files...'); 37 37 fid=fopen('carre0.met','w'); 38 fprintf(fid,'%i %i\n',md.numberof grids,3);38 fprintf(fid,'%i %i\n',md.numberofnodes,3); 39 39 fprintf(fid,'%i %i %i\n',metric'); 40 40 fclose(fid); … … 49 49 50 50 %Vertices 51 fprintf(fid,'\n%s\n%i\n\n','Vertices',md.numberof grids);52 fprintf(fid,'%8g %8g %i\n',[md.x md.y ones(md.numberof grids,1)]');51 fprintf(fid,'\n%s\n%i\n\n','Vertices',md.numberofnodes); 52 fprintf(fid,'%8g %8g %i\n',[md.x md.y ones(md.numberofnodes,1)]'); 53 53 54 54 %Triangles … … 72 72 md.z=zeros(A.nods,1); 73 73 md.elements=A.index; 74 md.numberof grids=A.nods;74 md.numberofnodes=A.nods; 75 75 md.numberofelements=A.nels; 76 76 numberofelements2=md.numberofelements; -
issm/trunk/src/m/utils/Mesh/BamgCallFromMetric.m
r6860 r8298 17 17 t1=clock; fprintf('%s',' writing initial mesh files...'); 18 18 fid=fopen('carre0.met','w'); 19 fprintf(fid,'%i %i\n',md.numberof grids,3);19 fprintf(fid,'%i %i\n',md.numberofnodes,3); 20 20 fprintf(fid,'%i %i %i\n',metric'); 21 21 fclose(fid); … … 30 30 31 31 %Vertices 32 fprintf(fid,'\n%s\n%i\n\n','Vertices',md.numberof grids);33 fprintf(fid,'%8g %8g %i\n',[md.x md.y ones(md.numberof grids,1)]');32 fprintf(fid,'\n%s\n%i\n\n','Vertices',md.numberofnodes); 33 fprintf(fid,'%8g %8g %i\n',[md.x md.y ones(md.numberofnodes,1)]'); 34 34 35 35 %Triangles … … 53 53 md.z=zeros(A.nods,1); 54 54 md.elements=A.index; 55 md.numberof grids=A.nods;55 md.numberofnodes=A.nods; 56 56 md.numberofelements=A.nels; 57 57 numberofelements2=md.numberofelements; -
issm/trunk/src/m/utils/Mesh/ComputeHessian.m
r2923 r8298 13 13 14 14 %some variables 15 numberof grids=length(x);15 numberofnodes=length(x); 16 16 numberofelements=size(index,1); 17 17 18 18 %some checks 19 if length(field)~=numberof grids & length(field)~=numberofelements,19 if length(field)~=numberofnodes & length(field)~=numberofelements, 20 20 error('ComputeHessian error message: the given field size not supported yet'); 21 21 end … … 32 32 areas=GetAreas(index,x,y); 33 33 34 %comput weights that holds the volume of all the element holding the gridi35 weights=sparse(line,ones(linesize,1),repmat(areas,3,1),numberof grids,1);34 %comput weights that holds the volume of all the element holding the node i 35 weights=sparse(line,ones(linesize,1),repmat(areas,3,1),numberofnodes,1); 36 36 37 37 %compute field on nodes if on elements 38 38 if length(field)==numberofelements, 39 field=sparse(line,ones(linesize,1),repmat(areas.*field,3,1),numberof grids,1)./weights ;39 field=sparse(line,ones(linesize,1),repmat(areas.*field,3,1),numberofnodes,1)./weights ; 40 40 end 41 41 … … 44 44 grad_ely=sum(field(index).*beta,2); 45 45 46 %Compute gradient for each grid(average of the elements around)47 gradx=sparse(line,ones(linesize,1),repmat(areas.*grad_elx,3,1),numberof grids,1);48 grady=sparse(line,ones(linesize,1),repmat(areas.*grad_ely,3,1),numberof grids,1);46 %Compute gradient for each node (average of the elements around) 47 gradx=sparse(line,ones(linesize,1),repmat(areas.*grad_elx,3,1),numberofnodes,1); 48 grady=sparse(line,ones(linesize,1),repmat(areas.*grad_ely,3,1),numberofnodes,1); 49 49 gradx=gradx./weights; 50 50 grady=grady./weights; … … 55 55 if strcmpi(type,'node') 56 56 %Compute Hessian on the nodes (average of the elements around) 57 hessian=[sparse(line,ones(linesize,1),repmat(areas.*hessian(:,1),3,1),numberof grids,1)./weights ...58 sparse(line,ones(linesize,1),repmat(areas.*hessian(:,2),3,1),numberof grids,1)./weights ...59 sparse(line,ones(linesize,1),repmat(areas.*hessian(:,3),3,1),numberof grids,1)./weights ];57 hessian=[sparse(line,ones(linesize,1),repmat(areas.*hessian(:,1),3,1),numberofnodes,1)./weights ... 58 sparse(line,ones(linesize,1),repmat(areas.*hessian(:,2),3,1),numberofnodes,1)./weights ... 59 sparse(line,ones(linesize,1),repmat(areas.*hessian(:,3),3,1),numberofnodes,1)./weights ]; 60 60 end -
issm/trunk/src/m/utils/Mesh/ComputeMetric.m
r1346 r8298 7 7 % 8 8 % Example: 9 % metric=ComputeMetric(hessian,2/9,10^-1,100,10^5,find(md. gridonwater)9 % metric=ComputeMetric(hessian,2/9,10^-1,100,10^5,find(md.nodeonwater) 10 10 11 11 %first, find the eigen values of eah line of H=[hessian(i,1) hessian(i,2); hessian(i,2) hessian(i,3)] -
issm/trunk/src/m/utils/Mesh/MeshQuality.m
r2613 r8298 17 17 18 18 %Compute metric 19 if length(md. gridonwater)==md.numberofgrids,20 pos=find(md. gridonwater);19 if length(md.nodeonwater)==md.numberofnodes, 20 pos=find(md.nodeonwater); 21 21 else 22 22 pos=[]; … … 35 35 e3y=[y(index(:,1))-y(index(:,3))]; 36 36 37 %metric of each the 3 grids for each element37 %metric of each the 3 nodes for each element 38 38 M1=metric(index(:,1),:); 39 39 M2=metric(index(:,2),:); … … 60 60 lambda1=min(max(abs(lambda1)*scale/epsilon,1/hmax^2),1/hmin^2); 61 61 lambda2=min(max(abs(lambda2)*scale/epsilon,1/hmax^2),1/hmin^2); 62 if length(md. gridonwater)==md.numberofgrids;63 pos=find(md. gridonwater);62 if length(md.nodeonwater)==md.numberofnodes; 63 pos=find(md.nodeonwater); 64 64 lambda1(pos)=0; 65 65 lambda2(pos)=0; -
issm/trunk/src/m/utils/Mesh/YamsCall.m
r6860 r8298 25 25 %Compute metric 26 26 t1=clock; fprintf('%s',' computing metric...'); 27 if length(md. gridonwater)==md.numberofgrids,28 pos=find(md. gridonwater);27 if length(md.nodeonwater)==md.numberofnodes, 28 pos=find(md.nodeonwater); 29 29 else 30 30 pos=[]; … … 46 46 47 47 %Vertices 48 fprintf(fid,'\n%s\n%i\n\n','Vertices',md.numberof grids);49 fprintf(fid,'%8g %8g %i\n',[md.x md.y zeros(md.numberof grids,1)]');48 fprintf(fid,'\n%s\n%i\n\n','Vertices',md.numberofnodes); 49 fprintf(fid,'%8g %8g %i\n',[md.x md.y zeros(md.numberofnodes,1)]'); 50 50 51 51 %Triangles … … 92 92 md.z=zeros(size(Coor,1),1); 93 93 md.elements=Tria; 94 md.numberof grids=size(Coor,1);94 md.numberofnodes=size(Coor,1); 95 95 md.numberofelements=size(Tria,1); 96 96 numberofelements2=md.numberofelements; -
issm/trunk/src/m/utils/Mesh/argusmesh.m
r3994 r8298 29 29 end 30 30 31 %Read first line of the argus mesh: gridand element parameters31 %Read first line of the argus mesh: node and element parameters 32 32 [buffer,bytecount]=fscanf(fileid,'%i %i %i %i',[1 4]); 33 33 if bytecount~=4, … … 37 37 nods=buffer(2); 38 38 num_element_parameters=buffer(3); 39 num_ grid_parameters=buffer(4);40 disp([' argus model ''' root ''' contains ' num2str(nel) ' elements and ' num2str(nods) ' grids.']);39 num_node_parameters=buffer(4); 40 disp([' argus model ''' root ''' contains ' num2str(nel) ' elements and ' num2str(nods) ' nodes.']); 41 41 42 %initialize elements and grids42 %initialize elements and nodes 43 43 elements=zeros(nel,3); 44 44 element_parameters=zeros(nel,num_element_parameters); … … 46 46 y=zeros(nods,1); 47 47 z=zeros(nods,1); 48 grid_parameters=zeros(nods,num_grid_parameters);48 node_parameters=zeros(nods,num_node_parameters); 49 49 50 %read grids:50 %read nodes: 51 51 format_string='%s %i %f %f '; 52 for n=1:num_ grid_parameters,52 for n=1:num_node_parameters, 53 53 format_string=[format_string ' %i ']; 54 54 end 55 55 56 56 for n=1:nods, 57 [buffer,bytecount]=fscanf(fileid,format_string,[1,num_ grid_parameters+4]);57 [buffer,bytecount]=fscanf(fileid,format_string,[1,num_node_parameters+4]); 58 58 x(n)=buffer(3); 59 59 y(n)=buffer(4); 60 grid_parameters(n,:)=buffer(5:length(buffer));60 node_parameters(n,:)=buffer(5:length(buffer)); 61 61 end 62 62 … … 81 81 md.y=y; 82 82 md.z=z; 83 md.numberof grids=size(md.x,1);83 md.numberofnodes=size(md.x,1); 84 84 md.numberofelements=size(md.elements,1); 85 md. gridonbed=ones(md.numberofgrids,1);86 md. gridonsurface=ones(md.numberofgrids,1);85 md.nodeonbed=ones(md.numberofnodes,1); 86 md.nodeonsurface=ones(md.numberofnodes,1); 87 87 md.elementonbed=ones(md.numberofelements,1); 88 88 md.elementonsurface=ones(md.numberofelements,1); … … 93 93 md=addnote(md,notes); 94 94 95 %Add segments and grids on boundary95 %Add segments and nodes on boundary 96 96 md.segments=findsegments(md); 97 md. gridonboundary=zeros(md.numberofgrids,1);98 md. gridonboundary(md.segments(:,1))=1;99 md. gridonboundary(md.segments(:,2))=1;97 md.nodeonboundary=zeros(md.numberofnodes,1); 98 md.nodeonboundary(md.segments(:,1))=1; 99 md.nodeonboundary(md.segments(:,2))=1; -
issm/trunk/src/m/utils/Mesh/squaremesh.m
r7101 r8298 56 56 segments(2*(ny-1)+(nx-1)+1:2*(nx-1)+2*(ny-1),:)=[[1:ny:(nx-2)*ny+1]' [ny+1:ny:ny*(nx-1)+1]' [1:2*(ny-1):2*(nx-2)*(ny-1)+1]']; 57 57 58 %plug coordinates and grids58 %plug coordinates and nodes 59 59 md.x=x; 60 60 md.y=y; 61 61 md.z=zeros(nods,1); 62 md.numberof grids=nods;63 md. gridonboundary=zeros(nods,1);md.gridonboundary(segments(:,1:2))=1;64 md. gridonbed=ones(nods,1);65 md. gridonsurface=ones(nods,1);62 md.numberofnodes=nods; 63 md.nodeonboundary=zeros(nods,1);md.nodeonboundary(segments(:,1:2))=1; 64 md.nodeonbed=ones(nods,1); 65 md.nodeonsurface=ones(nods,1); 66 66 67 67 %plug elements … … 73 73 74 74 %Now, build the connectivity tables for this mesh. 75 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberof grids);75 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofnodes); 76 76 md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity); 77 77 -
issm/trunk/src/m/utils/Mesh/zerothickness_icesheetfront.m
r1754 r8298 18 18 segments_icesheet=segments(pos,:); 19 19 20 %retrieve grids on ice sheet front21 grid_icesheetfront=intersect(segments_icesheet(:,1),segments_icesheet(:,2));20 %retrieve nodes on ice sheet front 21 node_icesheetfront=intersect(segments_icesheet(:,1),segments_icesheet(:,2)); 22 22 23 23 %modify thickness, surface and bed to be a default value 24 thickness( grid_icesheetfront)=default_value;25 bed( grid_icesheetfront)=surface(grid_icesheetfront)-thickness(grid_icesheetfront);24 thickness(node_icesheetfront)=default_value; 25 bed(node_icesheetfront)=surface(node_icesheetfront)-thickness(node_icesheetfront); 26 26 -
issm/trunk/src/m/utils/Numerics/cfl_step.m
r6129 r8298 11 11 12 12 %Check length of velocities 13 if size(vx,1)~=md.numberof grids & size(vy,1)~=md.numberofgrids,14 error('timestpes error message: size of velocity components must be the same as md.numberof grids');13 if size(vx,1)~=md.numberofnodes & size(vy,1)~=md.numberofnodes, 14 error('timestpes error message: size of velocity components must be the same as md.numberofnodes'); 15 15 end 16 16
Note:
See TracChangeset
for help on using the changeset viewer.