Changeset 1336


Ignore:
Timestamp:
07/16/09 12:41:01 (16 years ago)
Author:
Mathieu Morlighem
Message:

Added segments + metric tweaking on water

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);
     1function md=MeshYams(md,velpath,domainoutline,varargin);
    22%MESHYAMS - Build model of Antarctica by refining according to observed velocity error estimator
    33%
     
    2323hmax=150*10^3;   %150km
    2424gradation=[1.5*ones(2,1);3*ones(nsteps-2,1)];
    25 epsilon=3*10^-0; %3m/a interpolation error
     25epsilon=2*10^-0; %3m/a interpolation error
    2626scale=1;
    2727%%}
     28
     29%check number of arguments
     30waterflag=0;
     31if 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
     39end
    2840
    2941%mesh with initial resolution
     
    4557        md.vel_obs=averaging(md,sqrt(md.vx_obs.^2+md.vy_obs.^2),2);
    4658
     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
    4768        %adapt according to velocities
    4869        disp('   adapting');
     
    5172       
    5273disp(['Final mesh, number of elements: ' num2str(md.numberofelements)]);
     74
     75%Now, build the connectivity tables for this mesh.
     76md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofgrids);
     77md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity);
     78
     79%Recreate the segments
     80elementconnectivity=md.elementconnectivity;
     81elementonboundary=double(elementconnectivity(:,end)==0);
     82pos=find(elementonboundary);
     83num_segments=length(pos);
     84segments=zeros(num_segments,3);
     85for 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));
     103end
     104md.segments=segments;
     105
     106%Fill in rest of fields:
     107md.z=zeros(md.numberofgrids,1);
     108md.gridonboundary=zeros(md.numberofgrids,1); md.gridonboundary(md.segments(:,1:2))=1;
     109md.gridonbed=ones(md.numberofgrids,1);
     110md.gridonsurface=ones(md.numberofgrids,1);
     111md.elementonbed=ones(md.numberofelements,1);
     112md.elementonsurface=ones(md.numberofelements,1);
  • issm/trunk/src/m/utils/Mesh/YamsCall.m

    r1333 r1336  
    8888
    8989%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);
     90metric(pos1,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos1),1);
     91metric(pos2,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos2),1);
     92
     93%take care of water elements
     94if length(md.gridonwater)==numberofgrids;
     95        pos=find(md.gridonwater);
     96        metric(pos,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos),1);
     97end
    9298
    9399if any(isnan(metric)),
     
    143149md.numberofgrids=size(Coor,1);
    144150md.numberofelements=size(Tria,1);
    145 t2=clock;fprintf('%s\n',[' done (' num2str(etime(t2,t1)) ' seconds)']);
     151t2=clock;fprintf('%s\n\n',[' done (' num2str(etime(t2,t1)) ' seconds)']);
    146152
    147153%clean up:
Note: See TracChangeset for help on using the changeset viewer.