Changeset 5442
- Timestamp:
- 08/20/10 09:05:55 (15 years ago)
- Location:
- issm/trunk/src/m/classes/public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/classes/public/ismodelselfconsistent.m
r5433 r5442 84 84 fields={'edges'}; 85 85 checksize(md,fields,[NaN 4]); 86 checknan(md,fields); 86 fields={'edges(:,1:3)'}; 87 checknan(md,fields); 88 checkgreaterstrict(md,fields,0); 87 89 end 88 90 %}}} … … 429 431 %CHECKSIZE - check length of a field 430 432 for i=1:length(fields), 431 if length(eval(['md.' fields{i}]))~=fieldlength, 433 eval(['field=md.' fields{i} ';']); 434 if length(field)~=fieldlength, 432 435 error(['model not consistent: field ' fields{i} ' length should be ' num2str(fieldlength)]); 433 436 end … … 439 442 %CHECKSIZE - check size of a field 440 443 for i=1:length(fields), 444 eval(['field=md.' fields{i} ';']); 441 445 if isnan(fieldsize(1)), 442 if (size(eval(['md.' fields{i}]),2)~=fieldsize(2)), 443 %LOG warnings: 444 if strcmpi(fields{i},'pressureload'), 445 disp(' '); 446 disp(' If pressureload does not have the right size (one column missing), this is due to a change in md.pressure.'); 447 disp(' To update your model, use the following line'); 448 disp(' md.pressureload=[md.pressureload WaterEnum*md.elementoniceshelf(md.pressureload(:,end))+AirEnum*md.elementonicesheet(md.pressureload(:,end))];'); 449 disp(' '); 450 end 446 if (size(field,2)~=fieldsize(2)), 451 447 error(['model not consistent: field ' fields{i} ' should have ' num2str(fieldsize(2)) ' columns']); 452 448 end 453 449 elseif isnan(fieldsize(2)), 454 if (size( eval(['md.' fields{i}]),1)~=fieldsize(1)),450 if (size(field,1)~=fieldsize(1)), 455 451 error(['model not consistent: field ' fields{i} ' should have ' num2str(fieldsize(1)) ' rows']); 456 452 end 457 453 else 458 if ((size(eval(['md.' fields{i}]),1)~=fieldsize(1)) | (size(eval(['md.' fields{i}]),2)~=fieldsize(2))) 459 %LOG warnings: 460 if strcmpi(fields{i},'weights'), 461 disp(' '); 462 disp(' ''weights'' is a new field that should be of length numberofgrids.'); 463 disp(' To update your model, use the following line'); 464 disp(' md.weights=ones(md.numberofgrids,1)'); 465 disp(' '); 466 end 454 if ((size(field)~=fieldsize(1)) | (size(field,2)~=fieldsize(2))) 467 455 error(['model not consistent: field ' fields{i} ' size should be ' num2str(fieldsize(1)) ' x ' num2str(fieldsize(2))]); 468 456 end … … 475 463 %CHECKNAN - check nan values of a field 476 464 for i=1:length(fields), 477 if any(isnan(eval(['md.' fields{i}]))), 478 error(['model not consistent: NaN values in field ' fields{i}]); 465 eval(['field=reshape(md.' fields{i} ',[prod(size(md.' fields{i} ')) 1]);']); 466 if any(isnan(field)), 467 error(['model not consistent: NaN values found in field ' fields{i}]); 479 468 end 480 469 end … … 485 474 %CHECKREAL - check real values of a field 486 475 for i=1:length(fields), 487 if any(eval(['~isreal(md.' fields{i} ')'])), 488 error(['model not consistent: complex values in field ' fields{i}]); 476 eval(['field=reshape(md.' fields{i} ',[prod(size(md.' fields{i} ')) 1]);']); 477 if any(~isreal(field)), 478 error(['model not consistent: complex values found in field ' fields{i}]); 489 479 end 490 480 end … … 495 485 %CHECKGREATERSTRICT - check values of a field 496 486 for i=1:length(fields), 497 if any(eval(['md.' fields{i} '<=' num2str(lowerbound) ])), 487 eval(['field=reshape(md.' fields{i} ',[prod(size(md.' fields{i} ')) 1]);']); 488 if any(field<=lowerbound), 498 489 error(['model not consistent: field ' fields{i} ' should have values stricly above ' num2str(lowerbound)]); 499 490 end … … 505 496 %CHECKGREATER - check values of a field 506 497 for i=1:length(fields), 507 if any(eval(['md.' fields{i} '<' num2str(lowerbound) ])), 498 eval(['field=reshape(md.' fields{i} ',[prod(size(md.' fields{i} ')) 1]);']); 499 if any(field<lowerbound), 508 500 error(['model not consistent: field ' fields{i} ' should have values above ' num2str(lowerbound)]); 509 501 end … … 515 507 %CHECKLESSSTRICT - check values of a field 516 508 for i=1:length(fields), 517 if any(eval(['md.' fields{i} '>=' num2str(upperbound) ])), 509 eval(['field=reshape(md.' fields{i} ',[prod(size(md.' fields{i} ')) 1]);']); 510 if any(field>=upperbound), 518 511 error(['model not consistent: field ' fields{i} ' should have values stricly below ' num2str(upperbound)]); 519 512 end … … 525 518 %CHECKLESS - check values of a field 526 519 for i=1:length(fields), 527 if any(eval(['md.' fields{i} '>' num2str(upperbound) ])), 520 eval(['field=reshape(md.' fields{i} ',[prod(size(md.' fields{i} ')) 1]);']); 521 if any(field>upperbound), 528 522 error(['model not consistent: field ' fields{i} ' should have values below ' num2str(upperbound)]); 529 523 end … … 535 529 %CHECKVALUE - check that a field has specified values 536 530 for i=1:length(fields), 537 if eval(['any(~ismember( md.' fields{i} ',values))']), 531 eval(['field=reshape(md.' fields{i} ',[prod(size(md.' fields{i} ')) 1]);']); 532 if any(~ismember(field,values)), 538 533 error(['model not consistent: field ' fields{i} ' should have values in ' num2str(values)]); 539 534 end -
issm/trunk/src/m/classes/public/modelextract.m
r5433 r5442 148 148 if size(md2.edges,2)>1, %do not use ~isnan because there are some NaNs... 149 149 %renumber first two columns 150 md2.edges(:,1)=Pgrid(md2.edges(:,1)); 151 md2.edges(:,2)=Pgrid(md2.edges(:,2)); 152 md2.edges(:,3)=Pelem(md2.edges(:,3)); 153 %remove column where the first element is not in the domain 154 md2.edges=md2.edges(find(md2.edges(:,1) & md2.edges(:,2) & md2.edges(:,3)),:); 155 %now we must renumber the second column and put NaN if the element is not in the domain 156 A=md2.edges(:,4); 157 A(find(~isnan(A)))=Pelem(A(find(~isnan(A)))); 158 A(find(A==0))=NaN; 159 md2.edges(:,4)=A; clear A; 160 end 161 150 pos=find(~isnan(md2.edges(:,4))); 151 md2.edges(: ,1)=Pgrid(md2.edges(:,1)); 152 md2.edges(: ,2)=Pgrid(md2.edges(:,2)); 153 md2.edges(: ,3)=Pelem(md2.edges(:,3)); 154 md2.edges(pos,4)=Pelem(md2.edges(pos,4)); 155 %remove edges when the 2 vertices are not in the domain. 156 md2.edges=md2.edges(find(md2.edges(:,1) & md2.edges(:,2)),:); 157 %Replace all zeros by NaN in the last two columns; 158 pos=find(md2.edges(:,3)==0); 159 md2.edges(pos,3)=NaN; 160 pos=find(md2.edges(:,4)==0); 161 md2.edges(pos,4)=NaN; 162 %Invert NaN of the third column with last column 163 pos=find(isnan(md2.edges(:,3))); 164 md2.edges(pos,3)=md2.edges(pos,4); 165 md2.edges(pos,4)=NaN; 166 %Finally remove edges that do not belong to any element 167 pos=find(isnan(md2.edges(:,3)) & isnan(md2.edges(:,4))); 168 md2.edges(pos,:)=[]; 169 end 162 170 163 171 %Penalties
Note:
See TracChangeset
for help on using the changeset viewer.