Verfasst am: 27.06.2016, 12:23
Titel: Mesh generation mit Matlab. Kein Ergebnis bekommen.
Hi Zusammen,
momentan bin ich beschäftigt mit Mesh-Generation mit Matlab. Die Mesh-Datei wird nachher in einem Berechnungstool Elmer importiert.
Jetzt baue ich die Boundary-Datei auf, die für die Berechnung mit Elmer erforderlich ist. Alle Knoten in der Mesh-Struktur sind bereits nummeriert. Jede Boundary-Element besteht aus vier Knotennummer.
Das Prinzip von der Boundary-Datei wird in der PDF beschrieben. Die Pfeile zeigen der Reihenfolge der Knoten in einem Element. Insgesamt 6 Flächen sollen aufgebaut.
Das Problem ist, das Programm läuft sehr lange und gibt endlich eine leere Datei. Ich glaube gibt es irgendwie Fehler im dem Software. Ich bin kein experte von Matlab und kann ich die Fehler nicht finden.
%Flaeche 3
k_3=k_2+2*yges+2;
g(2*yges+1,:)=[1 k_3+1 k_3+23];
for i=2:xges-1
g(2*yges+i,:)=[k_3+2*i-3 k_3+2*i-1 k_3+2*i k_3+2*i-2];
end
g(2*yges+xges,:)=[k_3+2*(xges-1)-1 yges*2+3 yges*2+5 k_3+2*(xges-1)];
%Flaeche 4
k_4=k_3+2*(xges-1);
g(2*yges+xges+1,:)=[k_4+2 k_4+1 k_2-1 k_2];
for i=2:xges-1
g(2*yges+i,:)=[k_4+2*i k_4+2*i-1 k_4+2*i-3 k_3+2*i-2];
end
g(2*(yges+xges),:)=[k_3 k_3-1 k_4+2*(xges-1)-1 k_4+2*(xges-1)];
%Flaeche 5
k_5=k_4+2*(xges-1);
%Allgemein
for j=0:xges-1 for i=1:yges
g(2*(xges+yges)+j*yges+i,:)=[k_5+(j-1)*(yges-1)+i k_5+j*(yges-1)+i k_5+j*(yges-1)+i-1 k_5+(j-1)*(yges-1)+i-1];
end end
%Rand x=0(ausser y_max)
%erst zwei Quadrats
g(2*(yges+xges)+1,1)=2;
g(2*(yges+xges)+1,4)=1;
g(2*(yges+xges)+2,1)=5;
g(2*(yges+xges)+2,4)=2;
for i=3:yges-1
g(2*(yges+xges)+i,1)=2*i+1;
g(2*(yges+xges)+i,4)=2*i-1;
end
%Rand x=max(ausser y_max)
%erst zwei Quadrats
g(2*(yges+xges)+yges*(xges-1)+1,2)=k_2+2;
g(2*(yges+xges)+yges*(xges-1)+1,3)=k_2+1;
g(2*(yges+xges)+yges*(xges-1)+2,2)=k_2+5;
g(2*(yges+xges)+yges*(xges-1)+2,3)=k_2+2;
for i=3:yges-1
g(2*(yges+xges)+yges*(xges-1)+i,2)=k_2+2*i+1;
g(2*(yges+xges)+yges*(xges-1)+i,3)=k_2+2*i-1;
end
%Rand y=0
g(2*(yges+xges)+1,3)=k_3+1;
g(2*(yges+xges)+yges*(xges-1)+1,4)=k_3+2*(xges-1)-1;
for i=2:xges-1
g(2*(yges+xges)+i,3)=k_3+2*i-1;
g(2*(yges+xges)+i,4)=k_3+2*i-3;
end
%Rand y=max(4 nodes)
g(2*(yges+xges)+yges,:)=[k_4+1 k_5+yges-2 yges*2-1 yges*2+1];
for i=2:xges-1
g(2*(yges+xges)+i*yges,:)=[k_4+2*i-1 k_5+i*(yges-2) k_5+(i-1)*(yges-2) k_4+2*i-3];
end
g(2*(yges+xges)+yges*xges,:)=[k_3-1 k_3-3 k_5+(xges-1)*(yges-1) k_5-1];
%Flaeche 6
k_6=k_5+(xges-1)*(yges-1);
%Allgemein
for j=0:xges-1 for i=1:yges
g(2*(xges+yges)+xges*yges+j*yges+i,:)=[k_6+(j-1)*(yges-1)+i k_6+j*(yges-1)+i k_6+j*(yges-1)+i-1 k_6+(j-1)*(yges-1)+i-1];
end end
%Rand x=0(ausser y_max)
%erst zwei Quadrats
g(2*(yges+xges)+xges*yges+1,1)=4;
g(2*(yges+xges)+1,4)=3;
g(2*(yges+xges)+2,1)=6;
g(2*(yges+xges)+2,4)=4;
for i=3:yges-1
g(2*(yges+xges)+i,1)=2*i+2;
g(2*(yges+xges)+i,4)=2*i;
end
%Rand x=max(ausser y_max)
%erst zwei Quadrats
g(2*(yges+xges)+xges*yges+yges*(xges-1)+1,2)=k_2+4;
g(2*(yges+xges)+xges*yges+yges*(xges-1)+1,3)=k_2+3;
g(2*(yges+xges)+xges*yges+yges*(xges-1)+2,2)=k_2+6;
g(2*(yges+xges)+xges*yges+yges*(xges-1)+2,3)=k_2+4;
for i=3:yges-1
g(2*(yges+xges)+xges*yges+yges*(xges-1)+i,2)=k_2+2*i+2;
g(2*(yges+xges)+xges*yges+yges*(xges-1)+i,3)=k_2+2*i;
end
%Rand y=0
g(2*(yges+xges)+1,3)=k_3+3;
g(2*(yges+xges)+yges*(xges-1)+1,4)=k_3+2*(xges-1);
for i=2:xges-1
g(2*(yges+xges)+xges*yges+i,3)=k_3+2*i;
g(2*(yges+xges)+xges*yges+i,4)=k_3+2*i-2;
end
%Rand y=max(4 nodes)
g(2*(yges+xges)+xges*yges+yges,:)=[k_4+2 k_6+yges-2 yges*2 yges*2+2];
for i=2:xges-1
g(2*(yges+xges)+xges*yges+i*yges,:)=[k_4+2*i k_6+i*(yges-2) k_6+(i-1)*(yges-2) k_4+2*i-2];
end
g(2*(yges+xges)+2*yges*xges,:)=[k_3 k_3-2 k_6+(xges-1)*(yges-1) k_5];
meshBoundary=zeros(2*(xges+yges)+2*xges*yges,5);
for i=1:2*(xges+yges)+2*xges*yges
meshBoundary(i,1)=i;
meshBoundary(i,2)=g(i,1);
meshBoundary(i,3)=g(i,2);
meshBoundary(i,4)=g(i,3);
meshBoundary(i,5)=g(i,4);
end
[file_out_me,path_out_l] = uiputfile('mesh.boundary','Save file name');
FileOut_me=[path_out_l,file_out_me];
fid=fopen(FileOut_me,'wt');
for k = 1:(2*(xges+yges)+2*xges*yges) fprintf(fid, '%i %i %i %i %i\n',meshBoundary(g,:));
end;
fclose('all');
das ist genau meine Frage. Diese Programm ist in ein Teil von einem großen Projekt. Aber wenn ich dieses Teil in dem gesamte Programm einfügen, es funktioniert einfach nicht. Es gibt keine Warnung oder Fehler, aber es gibt nur eine leer Datei. Eigentlich soll die nummer in der txt.Datei geschrieben, oder?
Wo kannst du finden, dass xges und yges in anderem Programm schon belegt?
Aber wenn ich dieses Teil in dem gesamte Programm einfügen, es funktioniert einfach nicht.
Das ist kein Wunder, weil der Code für sich genommen schon nicht durchläuft.
Zitat:
Es gibt keine Warnung oder Fehler, aber es gibt nur eine leer Datei
Lass den Code doch erst mal für sich laufen. Dann bekommst du zunächst als Fehler
"Undefined function or variable 'yges'." in Zeile 1.
Wenn man nun die Definition von xges und yges vorzieht, bekomme ich den Fehler
"Subscript indices must either be real positive integers or logicals." in Zeile 132.
Das liegt z.B. daran, dass g in den Zeilen 92 bis 99 Nullen enthält.
Aber wenn ich dieses Teil in dem gesamte Programm einfügen, es funktioniert einfach nicht.
Das ist kein Wunder, weil der Code für sich genommen schon nicht durchläuft.
Zitat:
Es gibt keine Warnung oder Fehler, aber es gibt nur eine leer Datei
Lass den Code doch erst mal für sich laufen. Dann bekommst du zunächst als Fehler
"Undefined function or variable 'yges'." in Zeile 1.
Wenn man nun die Definition von xges und yges vorzieht, bekomme ich den Fehler
"Subscript indices must either be real positive integers or logicals." in Zeile 132.
Das liegt z.B. daran, dass g in den Zeilen 92 bis 99 Nullen enthält.
Grüße,
Harald
Hi,
genau gibt es bestimmt diese Fehler. Das Hauptziel des Programms ist, Matrix g zu beschreiben. Wieso ist es Nullen geworden?
Oder es ist noch irgendwie mit das Hauptprogramm abhängig?
Die Matrix ist mit Nullen initialisiert. Vermutlich ist dieser Bereich nie überschrieben worden.
Die Ursache dürfte nun irgendwo zwischen Zeilen 5 und 119 liegen. Mehr kann ich dir leider nicht sagen, da ich die Anwendung nicht kenne und die Dokumentation des Codes recht spärlich ist. Der Autor des Codes dürfte da der beste Ansprechpartner sein.
Auf jeden Fall vielen Dank. Ich versuche erstmal weiter.
[EDITED, Jan, Bitte kein Top-Quoting - Danke!]
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.