Changeset 1346
- Timestamp:
- 07/17/09 11:59:35 (16 years ago)
- Location:
- issm/trunk/src/m
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/classes/public/mesh/meshyams.m
r1341 r1346 28 28 29 29 %recover some fields 30 domainoutline=yamsoptions.domainoutline; 31 groundeddomain=yamsoptions.groundeddomain; 32 velocities=yamsoptions.velocities; 33 resolution=yamsoptions.resolution; 30 disp('MeshYams Options:') 31 domainoutline=yamsoptions.domainoutline; disp(sprintf(' %-15s: ''%s''','DomainOutline',domainoutline)); 32 groundeddomain=yamsoptions.groundeddomain; disp(sprintf(' %-15s: ''%s''','GroundedDomain',groundeddomain)); 33 velocities=yamsoptions.velocities; disp(sprintf(' %-15s: ''%s''','Velocities',velocities)); 34 resolution=yamsoptions.resolution; disp(sprintf(' %-15s: %f','Resolution',resolution)); 34 35 gradation=yamsoptions.gradation; 35 nsteps=yamsoptions.nsteps; 36 epsilon=yamsoptions.epsilon; 37 hmin=yamsoptions.hmin; 38 hmax=yamsoptions.hmax; 36 nsteps=yamsoptions.nsteps; disp(sprintf(' %-15s: %i','nsteps',nsteps)); 37 epsilon=yamsoptions.epsilon; disp(sprintf(' %-15s: %f','epsilon',epsilon)); 38 hmin=yamsoptions.hmin; disp(sprintf(' %-15s: %f','hmin',hmin)); 39 hmax=yamsoptions.hmax; disp(sprintf(' %-15s: %f\n','hmax',hmax)); 39 40 40 41 %mesh with initial resolution 41 42 disp('Initial mesh generation...'); 42 43 md=mesh(md,domainoutline,resolution); 44 disp(['Initial mesh, number of elements: ' num2str(md.numberofelements)]); 43 45 44 46 %load velocities … … 51 53 52 54 %interpolate velocities onto mesh 53 disp(' interpolating velocities ');55 disp(' interpolating velocities...'); 54 56 vx_obs=InterpFromGrid(x_m,y_m,vx,md.x,md.y,0); 55 57 vy_obs=InterpFromGrid(x_m,y_m,vy,md.x,md.y,0); … … 66 68 67 69 %adapt according to velocities 68 disp(' adapting ');70 disp(' adapting...'); 69 71 md=YamsCall(md,field,hmin,hmax,gradation(i),epsilon); 72 70 73 end 71 74 72 75 disp(['Final mesh, number of elements: ' num2str(md.numberofelements)]); 73 76 74 %Now, build the connectivity tables for this mesh. 75 md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofgrids); 76 md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity); 77 78 %Recreate the segments 79 disp('Creating 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; 77 %recreate segments 78 md.segments=findsegments(md); 79 md.gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1; 105 80 106 81 %Fill in rest of fields: 107 82 md.z=zeros(md.numberofgrids,1); 108 md.gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;109 83 md.gridonbed=ones(md.numberofgrids,1); 110 84 md.gridonsurface=ones(md.numberofgrids,1); -
issm/trunk/src/m/utils/Mesh/ComputeMetric.m
r1342 r1346 15 15 pos1=find(lambda1==0); 16 16 pos2=find(lambda2==0); 17 pos3=find(b==0 & lambda1==lambda2); 17 18 18 19 %Modify the eigen values to control the shape of the elements … … 28 29 v2y=((d-a)-sqrt((a-d).^2+4*b.^2))./norm2; 29 30 31 v1x(pos3)=1; v1y(pos3)=0; 32 v2x(pos3)=0; v2y(pos3)=1; 33 30 34 %Compute new metric (for each node M=V*Lambda*V^-1) 31 35 metric=full([(v1x.*v2y-v1y.*v2x).^(-1).*(lambda1.*v2y.*v1x-lambda2.*v1y.*v2x) ... … … 40 44 metric(pos,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos),1); 41 45 46 %take care of NaNs if any (use Matlab eig in a loop) 47 [pos posj]=find(isnan(metric)); clear posj; 48 if ~isempty(pos), 49 fprintf(' %i %s',length(pos),'NaN found in the metric. Use Matlab routine...'); 50 for i=1:length(pos) 51 H=[hessian(pos(i),1) hessian(pos(i),2) 52 hessian(pos(i),2) hessian(pos(i),3)]; 53 [u,v]=eig(H); 54 lambda1=v(1,1); 55 lambda2=v(2,2); 56 v(1,1)=min(max(abs(lambda1)*scale/epsilon,1/hmax^2),1/hmin^2); 57 v(2,2)=min(max(abs(lambda2)*scale/epsilon,1/hmax^2),1/hmin^2); 58 59 metricTria=u*v*u^(-1); 60 metric(pos(i),:)=[metricTria(1,1) metricTria(1,2) metricTria(2,2)]; 61 end 62 end 63 42 64 if any(isnan(metric)), 43 error('ComputeMetric error message: NaN in the metric ...')65 error('ComputeMetric error message: NaN in the metric despite our efforts...') 44 66 end -
issm/trunk/src/m/utils/Mesh/YamsCall.m
r1342 r1346 10 10 % 11 11 % Usage: 12 % md=YamsCall(md,field,hmin,hmax, epsilon)12 % md=YamsCall(md,field,hmin,hmax,gradation,epsilon); 13 13 % 14 14 % Example: 15 15 % md=YamsCall(md,md.vel_obs,1500,10^8,1.3,0.9); 16 17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Build metric %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18 16 19 17 global ISSM_DIR … … 57 55 fprintf(fid,'%i %i %i %i\n',[md.elements zeros(md.numberofelements,1)]'); 58 56 59 %Corners60 pos=find(md.gridonboundary);61 fprintf(fid,'\n\n%s\n%i\n\n','Corners',length(pos));62 fprintf(fid,'%i\n',pos');63 64 57 %close 65 58 fclose(fid); … … 68 61 %call yams 69 62 fprintf('%s\n',' call Yams...'); 70 system(['yams2-linux -O 1 -v 2-ecp -hgrad ' num2str(gradation) ' carre0 carre1']);63 system(['yams2-linux -O 1 -v -0 -ecp -hgrad ' num2str(gradation) ' carre0 carre1']); 71 64 72 65 %plug new mesh
Note:
See TracChangeset
for help on using the changeset viewer.