Changeset 1336
- Timestamp:
- 07/16/09 12:41:01 (16 years ago)
- Location:
- issm/trunk/src/m/utils/Mesh
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/utils/Mesh/MeshYams.m
r1332 r1336 1 function md=MeshYams(md,velpath,domainoutline );1 function md=MeshYams(md,velpath,domainoutline,varargin); 2 2 %MESHYAMS - Build model of Antarctica by refining according to observed velocity error estimator 3 3 % … … 23 23 hmax=150*10^3; %150km 24 24 gradation=[1.5*ones(2,1);3*ones(nsteps-2,1)]; 25 epsilon= 3*10^-0; %3m/a interpolation error25 epsilon=2*10^-0; %3m/a interpolation error 26 26 scale=1; 27 27 %%} 28 29 %check number of arguments 30 waterflag=0; 31 if nargin==4, 32 groundedoutline=varargin{1}; 33 if exist(groundedoutline); 34 disp(['grounded ice domain found. Metric will be minimum on water']); 35 waterflag=1; 36 else 37 error(['MeshYams error message: file ' groundedoutline ' not found.']); 38 end 39 end 28 40 29 41 %mesh with initial resolution … … 45 57 md.vel_obs=averaging(md,sqrt(md.vx_obs.^2+md.vy_obs.^2),2); 46 58 59 %set gridonwater field 60 if waterflag, 61 gridground=ContourToMesh(md.elements,md.x,md.y,expread(groundedoutline,1),'node',2); 62 md.gridonwater=ones(md.numberofgrids,1); 63 md.gridonwater(find(gridground))=0; 64 else 65 md.gridonwater=zeros(md.numberofgrids,1); 66 end 67 47 68 %adapt according to velocities 48 69 disp(' adapting'); … … 51 72 52 73 disp(['Final mesh, number of elements: ' num2str(md.numberofelements)]); 74 75 %Now, build the connectivity tables for this mesh. 76 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofgrids); 77 md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity); 78 79 %Recreate the segments 80 elementconnectivity=md.elementconnectivity; 81 elementonboundary=double(elementconnectivity(:,end)==0); 82 pos=find(elementonboundary); 83 num_segments=length(pos); 84 segments=zeros(num_segments,3); 85 for i=1:num_segments, 86 el1=pos(i); 87 els2=elementconnectivity(el1,find(elementconnectivity(el1,:))); 88 flag=intersect(md.elements(els2(1),:),md.elements(els2(2),:)); 89 nods1=md.elements(el1,:); 90 nods1(find(nods1==flag))=[]; 91 segments(i,:)=[nods1 el1]; 92 93 ord1=find(nods1(1)==md.elements(el1,:)); 94 ord2=find(nods1(2)==md.elements(el1,:)); 95 96 %swap segment grids if necessary 97 if ( (ord1==1 & ord2==2) | (ord1==2 & ord2==3) | (ord1==3 & ord2==1) ), 98 temp=segments(i,1); 99 segments(i,1)=segments(i,2); 100 segments(i,2)=temp; 101 end 102 segments(i,1:2)=fliplr(segments(i,1:2)); 103 end 104 md.segments=segments; 105 106 %Fill in rest of fields: 107 md.z=zeros(md.numberofgrids,1); 108 md.gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1; 109 md.gridonbed=ones(md.numberofgrids,1); 110 md.gridonsurface=ones(md.numberofgrids,1); 111 md.elementonbed=ones(md.numberofelements,1); 112 md.elementonsurface=ones(md.numberofelements,1); -
issm/trunk/src/m/utils/Mesh/YamsCall.m
r1333 r1336 88 88 89 89 %some corrections for 0 eigen values 90 metric(pos1,:)=repmat([1/hmin^2 0 1/hmin^2],length(pos1),1); 91 metric(pos2,:)=repmat([1/hmin^2 0 1/hmin^2],length(pos2),1); 90 metric(pos1,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos1),1); 91 metric(pos2,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos2),1); 92 93 %take care of water elements 94 if length(md.gridonwater)==numberofgrids; 95 pos=find(md.gridonwater); 96 metric(pos,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos),1); 97 end 92 98 93 99 if any(isnan(metric)), … … 143 149 md.numberofgrids=size(Coor,1); 144 150 md.numberofelements=size(Tria,1); 145 t2=clock;fprintf('%s\n ',[' done (' num2str(etime(t2,t1)) ' seconds)']);151 t2=clock;fprintf('%s\n\n',[' done (' num2str(etime(t2,t1)) ' seconds)']); 146 152 147 153 %clean up:
Note:
See TracChangeset
for help on using the changeset viewer.