Changeset 1361


Ignore:
Timestamp:
07/23/09 10:03:59 (16 years ago)
Author:
Mathieu Morlighem
Message:

fixed modelextract2

Location:
issm/trunk/src/m/classes/public
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/classes/public/ismodelselfconsistent.m

    r1311 r1361  
    328328                end
    329329        end
     330
     331        %SINGULAR
     332        if ~any(md.gridondirichlet_diag),
     333                disp(['model ' md.name ' is not well posed (singular). You need at least one grid with fixed velocity!'])
     334                bool=0;return;
     335        end
     336
     337        %DIRICHLET VALUES
     338        if isempty(md.gridondirichlet_diag) | isempty(md.dirichletvalues_diag),
     339                disp(['model ' md.name ' is not well posed. Missing dirichlet values for diagnostic run']);
     340                bool=0;return;
     341        end
     342
     343        %DIRICHLET IF THICKNESS <= 0
     344        if any(md.thickness<=0),
     345                pos=find(md.thickness<=0);
     346                if ~isempty(find(md.gridondirichlet_diag(pos)==0)),
     347                        disp(['model ' md.name ' has some grids with 0 thickness']);
     348                        bool=0; return;
     349                end
     350        end
    330351end
    331352
  • issm/trunk/src/m/classes/public/modelextract2.m

    r1348 r1361  
    7070end
    7171
    72 %element and grid position
     72%kick out all elements with 3 dirichlets
     73spc_elem=find(~flag_elem);
     74spc_grid=sort(unique(md1.elements(spc_elem,:)));
     75flag=ones(md1.numberofgrids,1);
     76flag(spc_grid)=0;
     77pos=find(sum(flag(md1.elements),2)==0);
     78flag_elem(pos)=0;
     79
     80%extracted elements and nodes lists
    7381pos_elem=find(flag_elem);
    7482pos_grid=sort(unique(md1.elements(pos_elem,:)));
     
    103111        md2=md1;
    104112
     113        %automatically modify fields
     114
     115        %loop over model fields
     116        model_fields=fields(md1);
     117        for i=1:length(model_fields),
     118
     119                %get field
     120                field=md1.(model_fields(i));
     121                fieldsize=size(field);
     122
     123                %size = number of grids * n
     124                if fieldsize(1)==numberofgrids1
     125                        md2.(model_fields(i))=field(pos_grid,:);
     126
     127                %size = number of elements * n
     128                elseif fieldsize(1)==numberofelements1
     129                        md2.(model_fields(i))=field(pos_elem,:);
     130                end
     131        end
     132
    105133        %modify some specific fields
    106134
     
    144172        if ~isnan(md2.elements_type), md2.elements_type=md1.elements_type(pos_elem,:);end
    145173
    146         %Dirichlets Diag
     174        %Boundary conditions: Dirichlets on new boundary
    147175        %Catch the elements that have not been extracted
    148176        orphans_elem=find(~flag_elem);
     
    151179        gridstoflag1=intersect(orphans_grid,pos_grid);
    152180        gridstoflag2=Pgrid(gridstoflag1);
    153         if ~isnan(md1.vx_obs) & ~isnan(md1.vy_obs)
    154                 md2.dirichletvalues_diag(gridstoflag2,1)=md2.vx_obs(gridstoflag2);
    155                 md2.dirichletvalues_diag(gridstoflag2,2)=md2.vy_obs(gridstoflag2);
    156         else
    157                 md2.dirichletvalues_diag=zeros(numberofgrids2,2);
    158                 disp(' ')
    159                 disp('!! modelextract warning: dirichlet values should be checked !!')
    160                 disp(' ')
     181        if ~isnan(md1.gridondirichlet_diag),
     182                md2.gridondirichlet_diag(gridstoflag2)=1;
     183                if ~isnan(md1.vx_obs) & ~isnan(md1.vy_obs)
     184                        md2.dirichletvalues_diag(gridstoflag2,1)=md2.vx_obs(gridstoflag2);
     185                        md2.dirichletvalues_diag(gridstoflag2,2)=md2.vy_obs(gridstoflag2);
     186                else
     187                        md2.dirichletvalues_diag=zeros(numberofgrids2,2);
     188                        disp(' ')
     189                        disp('!! modelextract warning: dirichlet values should be checked !!')
     190                        disp(' ')
     191                end
     192        end
     193        if ~isnan(md1.gridondirichlet_thermal),
     194                md2.gridondirichlet_thermal(gridstoflag2)=1;
     195                if ~isnan(md1.observed_temperature)
     196                        md2.dirichletvalues_thermal(gridstoflag2,1)=md2.observed_temperature(gridstoflag2);
     197                else
     198                        md2.dirichletvalues_thermal=zeros(numberofgrids2,2);
     199                        disp(' ')
     200                        disp('!! modelextract warning: dirichlet values should be checked !!')
     201                        disp(' ')
     202                end
    161203        end
    162204
     
    215257        md2.strainrate=NaN;
    216258
    217         %other fields
    218 
    219         %loop over model fields
    220         model_fields=fields(md1);
    221         for i=1:length(model_fields),
    222 
    223                 %get field
    224                 field=md1.(model_fields(i));
    225 
    226                 %size = number of grids * 1
    227                 if (size(field,1)==numberofgrids1 & size(field,2)==1),
    228                         md2.(model_fields(i))=field(pos_grid);
    229 
    230                 %size = number of grids * 2
    231                 elseif (size(field,1)==numberofgrids1 & size(field,2)==2),
    232                         md2.(model_fields(i))=[field(pos_grid,1) field(pos_grid,2)];
    233 
    234                 %size = number of elements * 1
    235                 elseif (size(field,1)==numberofelements1 & size(field,2)==1),
    236                         md2.(model_fields(i))=field(pos_elem);
    237 
    238                 end
    239         end
    240 
    241259%Keep track of pos_grid and pos_elem
    242260md2.extractedgrids=pos_grid;
Note: See TracChangeset for help on using the changeset viewer.