WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Mesh generation mit Matlab. Kein Ergebnis bekommen.

 

Dragonghost
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2016, 12:23     Titel: Mesh generation mit Matlab. Kein Ergebnis bekommen.
  Antworten mit Zitat      
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.

Code ist so:
Code:
g=zeros((yges+xges)*2+yges*xges,4);
yges=40;
xges=10;

%Flaeche 1 und 2
k_2=yges*2+2;
for i=1:2
    g(i,:)=[i*2+2 i*2 i*2-1 i*2+1];
    g(yges+i,:)=[k_2+i*2 k_2+i*2+2, k_2+i*2+1 k_2+i*2-1];
end
for i=3:yges-1
    g(i,:)=[i*2+2 i*2+1, i*2-1 i*2];
    g(yges+i,:)=[k_2+i*2+1 k_2+i*2+2, k_2+i*2 k_2+i*2-1];
end

g(yges,:)=[yges*2-1 yges*2 yges*2+2 yges*2+1];
g(2*yges,:)=[k_2+yges*2-1 k_2+yges*2 k_2+yges*2+2 k_2+yges*2+1];

%Flaeche 3
k_3=k_2+2*yges+2;
g(2*yges+1,:)=[1 k_3+1 k_3+2 3];
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');


xges,yges sind die Anzahl der Elemente von jedem Rand in x oder y-Richtung.

Vielen Dank!

handschriftliche_Notizen_zu_den_meshdateien.pdf
 Beschreibung:

Download
 Dateiname:  handschriftliche_Notizen_zu_den_meshdateien.pdf
 Dateigröße:  999.11 KB
 Heruntergeladen:  309 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.06.2016, 13:37     Titel:
  Antworten mit Zitat      
Hallo,

schau dir mal im Workspace die Variablen an, nutze den Debugger.

Der Code ist so nicht lauffähig, da xges und yges verwendet werden, bevor sie belegt werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Dragonghost
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2016, 16:19     Titel:
  Antworten mit Zitat      
Hi Harald,

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?

Vielen Dank!

[EDITED, Jan, Bitte kein Top-Quoting - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Dragonghost
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2016, 16:27     Titel:
  Antworten mit Zitat      
Nur das Warnung:

Subscript indices must either be real positive integers or logicals.

Error in FVA_I_T_anz_vs_ts_x_ref_T620x55_y180_846x216 (line 703)
fprintf(fid, '%i %i %i %i %i\n',meshBoundary(g,Smile);

Aber welche Wert ist nicht "positive integers", weiß ich auch nicht.


[EDITED, Jan, Bitte kein Top-Quoting - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.06.2016, 16:28     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Dragonghost
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2016, 16:42     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

Zitat:
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?

Gruß,
Shaomeng
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.06.2016, 16:46     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wieso ist es Nullen geworden?

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Dragonghost
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2016, 16:52     Titel:
  Antworten mit Zitat      
Auf jeden Fall vielen Dank. Ich versuche erstmal weiter.


[EDITED, Jan, Bitte kein Top-Quoting - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.