Changeset 1361
- Timestamp:
- 07/23/09 10:03:59 (16 years ago)
- Location:
- issm/trunk/src/m/classes/public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/classes/public/ismodelselfconsistent.m
r1311 r1361 328 328 end 329 329 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 330 351 end 331 352 -
issm/trunk/src/m/classes/public/modelextract2.m
r1348 r1361 70 70 end 71 71 72 %element and grid position 72 %kick out all elements with 3 dirichlets 73 spc_elem=find(~flag_elem); 74 spc_grid=sort(unique(md1.elements(spc_elem,:))); 75 flag=ones(md1.numberofgrids,1); 76 flag(spc_grid)=0; 77 pos=find(sum(flag(md1.elements),2)==0); 78 flag_elem(pos)=0; 79 80 %extracted elements and nodes lists 73 81 pos_elem=find(flag_elem); 74 82 pos_grid=sort(unique(md1.elements(pos_elem,:))); … … 103 111 md2=md1; 104 112 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 105 133 %modify some specific fields 106 134 … … 144 172 if ~isnan(md2.elements_type), md2.elements_type=md1.elements_type(pos_elem,:);end 145 173 146 % Dirichlets Diag174 %Boundary conditions: Dirichlets on new boundary 147 175 %Catch the elements that have not been extracted 148 176 orphans_elem=find(~flag_elem); … … 151 179 gridstoflag1=intersect(orphans_grid,pos_grid); 152 180 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 161 203 end 162 204 … … 215 257 md2.strainrate=NaN; 216 258 217 %other fields218 219 %loop over model fields220 model_fields=fields(md1);221 for i=1:length(model_fields),222 223 %get field224 field=md1.(model_fields(i));225 226 %size = number of grids * 1227 if (size(field,1)==numberofgrids1 & size(field,2)==1),228 md2.(model_fields(i))=field(pos_grid);229 230 %size = number of grids * 2231 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 * 1235 elseif (size(field,1)==numberofelements1 & size(field,2)==1),236 md2.(model_fields(i))=field(pos_elem);237 238 end239 end240 241 259 %Keep track of pos_grid and pos_elem 242 260 md2.extractedgrids=pos_grid;
Note:
See TracChangeset
for help on using the changeset viewer.