Entwicklung eines Profilstraks mit Xoptfoil: Bericht

Jojo26

User
Hallo Martin,

... vielen Dank für Deine tollen Anmerkungen und Ergänzungen zur Profiloptimierung! 👍

Nachdem ich diese Beiträge geschrieben hatte, habe ich mich weiter auf die Entwicklung realer Profile und der Verbesserung von Xoptfoil-JX konzentriert. Die "Geschichte" geht daher sozusagen weiter in Entwicklung eines F3F-Profils. Aus meinen Erfahrungen der letzten 18 Monate noch ein paar weitere Anmerkungen...

1. Entscheidend für den Verlauf der Optimierung ist die Parametrisierung des Profils.
a. Ich approximiere hierzu erstmal das Seedprofil mit einer analytischen Funktion. Wenn die einzelnen Anteile dieser Funktion orthonormal sind,
d.h. die Parameter unabhängig voneinander sind, konvergiert der Optimierungsalgorithmus besonders gut.
b. Deswegen sind Hicks-Henne und NACA, wie in Xoptfoil, nicht wirklich gut geeignet.
c. Besser geeignet sind Wagner-Funktionen oder Orthonormal-Funktionen. Ich verwende in der Regel 5-7 Parameter pro Seite des Profils.
Wenn ich es richtig verstehe ist in Xoptfoil NACA auf 4 bzw. 5 limitiert.

... volle Zustimmung. Ich denke auch immer mal wieder drüber nach, eine Parameterisierung des Profils mit Beziér-Kurven wie es beispielsweise hier beschrieben ist, vorzunehmen. Dadurch würde man von vorneherein geometrische Artefakte ausschließen können. Auf der anderen Seite sind die erzielten Ergebnisse mit den implementierten Hicks-Henne-Funktion so (hinreichend) gut, dass mögliche Verbesserungen in meinen Augen eher gering sind.

Hicks-Henne-Funktion (zur Erläuterung: das sind sozusagen kleinste Beulen und Hubbel mit denen das Profil verändert wird) sind recht gut geeignet um ein beliebiges Ausgangsprofil zu optimieren, da sie additiv auf die bestehende Profilkontur aufgebracht werden. Der Nachteil ist, dass Fehler bzw. Unschönheiten des Ausgangsprofils oft mit vererbt werden. Zudem muss man einge Tricks anwenden, dass das resultierende Profil nicht wirklich "Beulen" bekommt ... ;-)

Typischweise verwendet man 5 Hicks-Henne-Funktion pro Profilseite. Jede Funktion wird mit 3 Paramtern definiert, so dass man pro Profilseite 15 Paramter hat. Da hilft bei der Optimierung am Ende nur Rechenleistung!

2. Weiterhin entscheidend ist die Wahl des Optimierungsalgorithmus
a. Ein Gradientenverfahren, ist relativ schnell, bleibt aber manchmal - wie Du ja auch berichtest - in lokalen Optima stecken.
Xoptfoil nutzt hier das Simplexverfahren, mit dem ich auch sehr gute Erfahrungen gemacht habe.
b. Evolutionsalgorithmen sind dagegen sehr rechenaufwendig, finden aber unerwartete und durchaus interessante Lösungen.
c. Zu Particle Swarm Optimization habe ich leider keine Erfahrung, scheint mir aber auch in einem lokalen Optimum stecken zu bleiben.

.... ich habe bisher nur mit "Particle Swarm" gearbeitet und bin aber immer wieder aufs Neue von der Leistungsfähigkeit dieses Optimierungsverfahrens beeindruckt. Dass der Schwarm in einem lokalen Optimum stecken bleibt, lässt sich weitgehend durch der Problemdomäne angepasste PSO-Parameter (PSO = particle swarm optimization) und durch vollständige / richtige Definition der Arbeitspunkte (operating points) verhindern.

3. Last not Least ist die Zielfunktion entscheidend.
a. "Fische", also sich kreuzende Profilkonturen, sind selbstredend zu verbieten. Ich habe in Xoptfoil dazu (noch) keine zweifelsfreie Eingabe
gefunden.
b. Die Profildicke und das cm0 sollten sinnvoll einzugrenzen sein. Xoptfoil kennt beim cm0 leider nur min_moment. Ein max_moment hab´ ich
(noch) nicht entdeckt.
c. Ich verwende auch die Typ2-Polare und "drehe" diese, so daß ich cw=f(ca) erhalte. Das Integral unter der Polare ist dann zu minimieren. Ein
Problem ist dabei immer noch die ca-Grenze. Da ist mir noch nicht gescheites Eingefallen um diese während der Optimierung dynamisch zu
erweitern. Xoptfoil hat da leider auch nichts. D.h. eine Optimierung auf maximales ca geht wohl auch in Xoptfoil nicht.

.... nach meinem Verständnis gehören "Fische" (schöner Ausdruck) zu den geometrischen Constraints. Sie lassen sich in Xoptfoil-JX vermeiden durch die Begrenzung der Krümmungsumkehrungen (curve reversals), dem Hinterkantenwinkel (trailing edge angle) und/oder der Begrenzung der maximalen Krümmung an der Hinterkante.

... für Profildicke, Wölbung und cm0 wurde in Xoptfoil-JX der Ansatz gewählt, dass diese Werte auch als Zielwert einer Optimierung definiert werden können. Das Erreichen einer Dicke von z.B. 8,4% ist dann in "Konkurrenz" mit beispielweise einer Minimierung des Wiederstands bei ca=0,1.

c. Ich verwende auch die Typ2-Polare und "drehe" diese, so daß ich cw=f(ca) erhalte. Das Integral unter der Polare ist dann zu minimieren.

... die (finale) Zielfunktion in Xoptfoil ist die gewichtete Summe der Zielfunktion der einzelnen Arbeitspunkte. Wird beispielsweise cw optimiert für ca=0,1 , 0,2 und 0,3 so ist das quasi das approximierte Integral.

Ein Problem ist dabei immer noch die ca-Grenze. Da ist mir noch nicht gescheites Eingefallen um diese während der Optimierung dynamisch zu erweitern. Xoptfoil hat da leider auch nichts. D.h. eine Optimierung auf maximales ca geht wohl auch in Xoptfoil nicht.

... die ca-Grenze lässt sich nach oben schieben indem ca=f(alpha) für einen Arbeitspunkt z.B. alpha=10° optimiert bzw. ein Zielwert für ca vorgegeben wird.

4. Die numerische Optimierung nutzt schamlos jedes Schlupfloch des Aerodynamik-Solvers aus und ist auch nur eine Näherung an das Optimium.

... wohl wahr! ;) Wobei mindestens genauso schlimm wie die Schlupflöcher des Solvers (Xfoil) sind die Schlupflöcher, die "Mensch" bei der Definition der Optimierungsaufgabe zulässt. Mit den Arbeitspunkten darf nicht nur vorgegen werden, welche Punkte optimiert werden sollen, sondern auch alle Bereiche meines Betrachtungsraums (ca-min bis ca-max, RE-Zahl) die erhalten bleiben sollen bzw. die, die sich in Grenzen verschlechtern dürfen.

Von Xoptfoil mit seinem Multithreading bin ich echt begeistert.

... nach nun fast 3 Jahren mit Xoptfoil geht es mir immer noch auch so (wobei ich es zwischenzeitlich immer mal wieder "gegen die Wand geworfen hätte" ;) ) Mit den neuen PC mit 16 logischen Prozessoren ( = 16 Xfoil-Berechnungen laufen gleichzeitig) kann der Partikel-Schwarm nun auch einiges wegschaffen...

An die Stelle des aerodynamischen Fachwissens tritt notwendiges Fachwissen über Parametrisierung und Optimierungsverfahren.

... volle Zustimmung! Dabei erlaubt aber Xoptfoil einen fast spielerischen Zugang zum tieferen Eintauchen in die Aerodynamik ...

P.S.: Es ist noch kein gutes Profil vom Himmel gefallen!

... das hab ich inzwischen auch gelernt! ;)


--

Die aktuelle Version von Xoptfoil-JX ist hier zu finden. Unter Releases gibt es eine für Windows fertig kompilierte Version.

--

Viele Grüße

Jochen
 
Zuletzt bearbeitet:
Hallo Jochen,
vielen Dank für Deine prompte und ausführliche Antwort. 🙂

Nachdem ich diese Beiträge geschrieben hatte, habe ich mich weiter auf die Entwicklung realer Profile und der Verbesserung von Xoptfoil-JX konzentriert. Die "Geschichte" geht daher sozusagen weiter in Entwicklung eines F3F-Profils. Aus meinen Erfahrungen der letzten 18 Monate noch ein paar weitere Anmerkungen...
Da hast Du absolut Recht.
Es soll ja schon Baumfäller gegeben haben, die vor lauter Säge schärfen keinen Baum mehr gefällt haben. 😉
( Die Ähnlichkeit zu der bekannten KVP-Geschichte ist natürlich rein zufällig! )
Ich denke man muß beides tun, aber wichtiger als das Werkzeug ist immer noch das Ergebnis.

... volle Zustimmung. Ich denke auch immer mal wieder drüber nach, eine Parameterisierung des Profils mit Beziér-Kurven wie es beispielsweise hier beschrieben ist, vorzunehmen. Dadurch würde man von vorneherein geometrische Artefakte ausschließen können. Auf der anderen Seite sind die erzielten Ergebnisse mit den implementierten Hicks-Henne-Funktion so (hinreichend) gut, dass mögliche Verbesserungen in meinen Augen eher gering sind.
Das Thema "Parametrisierung" hat sich inzwischen als ein eigener Forschungszweig etabliert. Das scheint´s also wirklich in sich zu haben.
Man muß sich schon bewußt sein, daß man den Lösungsraum der Optimierung mit der Representation des Profils durch parametrisierte Funktionen mehr oder weniger einschränkt. Das wird in On the Effect of Shape Parameterization on Airfoil Shape Optimization auch sehr schön gezeigt.
Bezier´s schneiden da übrigens nicht so gut ab. Hicks-Henne dagegen schon. Aber nur am Beispiel des NACA 0012. Das kann an einem anderen Seedprofil schon wieder ganz anders aussehen!
Ich glaube, daß die Prominenz der Optimierungsansätze mit Bezier´s und B-Spline´s auf´s CAD zurückgeht. Da will man ja auch hübsche Kurven erzeugen. Die tatsächlichen Anforderungen, die ein Tragflügelprofil, bzw. Optimierungsverfahren an die Parameterisierung stellen, werden da aber
garnicht berücksichtigt. Auch Hicks-Henne, wenn ich das so richtig im Sinn habe, ist ursprünglich für transsonische Profile mit einer optimalen Beule unterm Stoß zur Auffächerung desselben gedacht gewesen. Also für unsere Anwendungen dann wohl auch nicht wirklich passend.
Wenn Du Lust hast, schau Dir mal die Wagner-Funktionen an, z.B.: Onur: Wagner Functions
Die Funktionen funktionieren bei mir recht ordentlich. (das Wortspiel mußte jetzt sein!) 😎

Kennst Du eigentlich: Tomas Melin, Aerodynamic Validation of a Parametric Airfoil Description ? (nur so als Ergänzung zu Deinem Link hier)

Übrigens: das "Broggini 55509" hat sich bei mir mal als besonders widerspenstig erwiesen und dient mir seitdem als Testcase, siehe Anhang. Ich nutze mein Approximationsverfahren, das ich ja ursprünglich zur Parametrisierung programmiert habe, inzwischen hauptsächlich zur Glättung der Koordinaten, sodaß die Druckverteilung hinterher auch immer hübsch durch die Mitte der Zacken geht und XFoil auch brav rechnet.

.... nach meinem Verständnis gehören "Fische" (schöner Ausdruck) zu den geometrischen Constraints. Sie lassen sich in Xoptfoil-JX vermeiden durch die Begrenzung der Krümmungsumkehrungen (curve reversals), dem Hinterkantenwinkel (trailing edge angle) und/oder der Begrenzung der maximalen Krümmung an der Hinterkante.
Ja genau: Geometrische Constraints!
Um auch Doppelkreuzungen zu vermeiden, ist aber der Hinterkantenwinkel leider nicht geeignet und ich fürchte die beiden anderen Kriterien auch nicht. Ich gehe tatsächlich durch alle Panels der Oberseite und schaue ob es sich mit einem Panel der Unterseite kreuzt. Und wenn sich´s kreuzt, dann belege ich das Individuum einfach mit einer grottenschlechten Bewertung.

... für Profildicke, Wölbung und cm0 wurde in Xoptfoil-JX der Ansatz gewählt, dass diese Werte auch als Zielwert einer Optimierung definiert werden können. Das Erreichen einer Dicke von z.B. 8,4% ist dann in "Konkurrenz" mit beispielweise einer Minimierung des Wiederstands bei ca=0,1.

... die ca-Grenze lässt sich nach oben schieben indem ca=f(alpha) für einen Arbeitspunkt z.B. alpha=10° optimiert bzw. ein Zielwert für ca vorgegeben wird.
Danke für die Tips. Das muß ich mal ausprobieren ...

... nach nun fast 3 Jahren mit Xoptfoil geht es mir immer noch auch so (wobei ich es zwischenzeitlich immer mal wieder "gegen die Wand geworfen hätte" ;) ) Mit den neuen PC mit 16 logischen Prozessoren ( = 16 Xfoil-Berechnungen laufen gleichzeitig) kann der Partikel-Schwarm nun auch einiges wegschaffen...
Bei mir rennt´s mit 12 Cores auch nicht schlecht. 😀
Mein uraltes "AirfOpti" - es stammt noch aus dem letzten Jahrtausend(!) - läuft noch single-thread unter DOS. Das ist inzwischen schon arg grausam anzuschauen. 😩 Dafür verschafft es einem genügend Schlaf, denn es rechnet die ganze Nacht durch. 😉
Ich glaube ich müßte es langsam nun wirklich mal auf Windows portieren ... noch so´n Säge-Schärfen-Projekt ... soviel zu meinem konsequenten Tun ... 😟

Die aktuelle Version von Xoptfoil-JX ist hier zu finden. Unter Releases gibt es eine für Windows fertig kompilierte Version.
Große Anerkennung und Dank dafür! Hab´ ich mir schon downgeloaded ... und werd´s mal ausprobieren ... 😉

Viele Grüße
Martin
 

Anhänge

  • Broggini 55509 approx.dat
    1,5 KB · Aufrufe: 115

Jojo26

User
Um den geneigten Leser, der vielleicht nicht so tief mit dieser speziellen Materie vertraut ist, bei dieser Fachsimpelei nicht ganz abzuhängen, schreibe ich ein wenig mehr über die Zusammenhänge …

Hallo Martin,

…. Dein angehängtes Profil „Broggini 55509“, mit dem Du Deine Optimierungstests durchführst, hat sich auch bei mir als harte Nuss herausgestellt!

Im Netz konnte ich auf die Schnelle keine näheren Information über das Profil finden. Es scheint mir ein älteres Nurflügelprofil mit dem typischen S-Schlag und einer ungewöhnlich hohen Wölbung zu sein.

Zunächst hab die in Xoptfoil-JX (Xfoil_Worker) implementierte Smoothing-Funktion drüber laufen lassen – auch um diese Darstellung zu bekommen:

Matchfoil_Broggini_55509.png


Besonders wichtig sind hier die gestrichelten Linien, die die Krümmung (2. Ableitung) der Profilober- und Unterseite darstellen. Schneidet die Krümmungskurve die x-Achse, findet ein Krümmungswechsel statt – die Profilkontur wechselt von konkav zu konvex bzw. umgekehrt.

Wichtig ist diese Krümmungskurve vor allem um die Oberflächenqualität eines Profils beurteilen zu können. Artefakte in der Profilkontur werden in der Krümmungskurve als starke „Hubbel“ sichtbar.

Es zeigte sich, dass Du mit der von Dir durchgeführten Glättung schon perfekte Vorarbeit geleistet hast. Das Profil ist wie hingezirkelt. Klasse!
(die kleine Zacken in der blau gestrichelten Krümmung des Ausgangsprofils sind wohl Rundungsfehler in den Profilkoordinaten?)

Nun an’s Werk. Was ist dabei die Aufgabe?

Um die Leistungsfähigkeit eines Profil-Parametrisierungsverfahren wie Bezier-Kurve bzw. Spline, NACA-Polynom, Wagner-Funktion oder Hicks-Henne-Funktion beurteilen zu können, versucht man mit Hilfe eines Optimierungsverfahren möglichst genau ein Zielprofil, in unserem Fall das „Broggini 55509“ anzunähern.

Dazu werden Zielprofil und zu optimierendes Profil zunächst auf gleiche X-Koordinaten-Werte transformiert. Damit ist die Abweichung zweier Profile an einem Koordinatenpunkt die Differenz der beiden Y-Koordinaten. Alle Differenzen quadriert, summiert und daraus die Wurzel ergibt den „Abweichungswert“ zweier Profile. Ist dieser Wert = 0 sind beide Profile identisch.

Ziel der Optimierungsaufgabe ist es, den „Abweichungswert“ möglichst klein werden zu lassen. Dieser Wert ist somit gleich der berühmten Zielfunktion (englisch: objective function) eines Optimierungsverfahrens.

Wie immer nutzte ich als Parametrisierung „Hicks-Henne“ mit je 6 Funktionen auf der Profilober- und Unterseite und als Optimierungsverfahren „Particle Swarm“ (es stellte sich heraus, dass für die „harte Nuss Broggini mehr als die üblichen 5 Hicks-Henne-Funktion nötig sind).

Was eigentlich recht trivial aussieht, entpuppt sich bei näherer Betrachtung als Herkulesaufgabe. Man stelle sich vor: Man sitzt vor einem Mischpult mit 36 Schiebereglern (entsprechend den 3 x 6 x 2 Parametern) , die Augen sind verbunden. Die einzige Rückkopplung, die ich bekomme, ist ein Pfeifton, der sich in der Tonhöhe ändert – wie bei dem Suchspiel „heiß-kalt“. Meine Aufgabe ist nun, die 36 Schiebregel zu einzustellen, dass die beiden Profile gleich werden. Leider ist es nicht so, dass ich nun einfach die 36 Schieberegler hintereinander in Position bringen kann, weil sie untereinander abhängig sind. Wenn man nicht vorher verrückt werden würde, bedürfte es wohl vieler Menschenleben um hier zu einem einigermaßen vernünftigen Ergebnis zu kommen …

Anders der Partikel-Scharm der nach ein paar Hundert schon viel bzw. nach ein paar Tausend Iterationsrunden schon praktisch alles an Annäherung der beiden Profil herausholt. Das Ganze dauert ca. eine Minute.


Nachfolgend ein paar Eindrücke – Standbilder- aus dem Optimierungsverlauf:

Als Ausgangsprofil verwendete ich ein „Phantasieprofil“, dass ich auch für die F3F-Profil-Entwicklungen verwendete. Grün dargestellt ist das Zielprofil „Broggini 55509“, blau das Ausgangsprofil und rot das aktuell beste Design des Partikel-Schwarms. Das erste Design ist natürlich noch weit vom Ziel entfernt. Die grün gestrichelte Linie zeigt den Unterschied zwischen aktuellem und Zielprofil vergrößert um den Faktor 10.

Matchfoil_Design_1.png


Das 50. Design zeigt schon eine echte Annäherung. Größere Abweichungen gibt es noch auf der Profilunterseite an der Nase und an der Hinterkante.
Die gestrichelte Krümmungskurve (wir erinnern uns) ist auch noch recht wellig….

Matchfoil_Design_50.png


Das 500. Design ist schon recht passabel. Die Hinterkante ist praktisch deckungsgleich. Nur die Nasenunterseite wehrt sich noch (… die ist aber auch sehr speziell beim „Broggini 55509“ 😉)

Matchfoil_Design_500.png


Da helfen nur viele weitere kleinste Iterationen … Kurz nach dem 4000. Design wurde die Optimierung dann beendet. Das ehemals F3F-nahe Profil tut nun erfolgreich in einem Retro-Nurflügler seinen Dienst...

Matchfoil_Design_5000.png


Hier noch ein paar Kennwerte aus Xoptfoil-JX, wie nahe das optimierte Profil dem Zielprofil gekommen ist:

Matchfoil_Results.png


Ich denke inzwischen, dass Hicks-Henne-Funktion für solch starke „Profildeformationen“ nicht optimal geeignet ist. Da gibt es sicherlich noch Raum für weitere Implementierungen mit anderen Parametrisierungsverfahren.

Die von Dir aufgeführten Literaturangaben weisen den Weg. Wobei ich für „normale Profile“ durchaus „Bezier“ als starken Ansatz sehe.

So weit eine paar Ausführungen aus der Optimiererecke… 😉

Viele Grüße

Jochen
 
Hallo Jochen,
Um den geneigten Leser, der vielleicht nicht so tief mit dieser speziellen Materie vertraut ist, bei dieser Fachsimpelei nicht ganz abzuhängen, schreibe ich ein wenig mehr über die Zusammenhänge …
Ich hoffe auch, daß wir die anderen Mitleser nicht verlieren.
Wir driften nämlich etwas von dem Hauptthema "Entwicklung eines Profilstraks ..." ab und tummeln uns grad mehr im Bereich "... mit Xoptfoil".
Schlimmer noch: Wir reden über die Parametrisierung einer Profilkontur in Xoptfoil.
Ich entschuldige mich an dieser Stelle schon mal aufrichtig für alles Ungemach. 🥴
Für diejenigen, die sich dennoch für Xoptfoil und die damit verbundenen Möglichkeiten der Profiloptimierung interessieren,
möchte ich folgenden Hintergrund liefern:

Um WAS geht´s denn?
Xoptfoil nutzt das Profilrechenprogramm XFOIL. Es ist einleuchtend, daß dieses nur dann aussagekräfige Ergebnisse liefert, wenn es mit
hinreichend genauen Profilkoordinaten gefüttert wird. So wie alle Programme dieser Art (Eppler, Javafoil usw.) im übrigen auch.

Nun gibt es zwei gängige Arten, wie eine Profilkontur angegeben werden kann:
1. durch eine Liste von X-Y-Koordinaten, im engl. 'Point Cloud Airfoil'. Das ist die am meisten verbreitete Art und wir finden sie in -zig Profilkatalogen. Es ist auch die Art, wie XFOIL die Eingabe der Profilkontur erwartet.
Leider ist das dann oft, insbesondere wenn die Profile aus früheren Zeiten stammen, eben nicht so genau wie XFOIL das braucht. Manchmal sogar extrem grauselig. Das erwähnte "Broggini 55509" ist so ein Fall, aber dazu im nächsten Beitrag mehr.
2. durch eine mathematische Funktion, wobei die Kontur dann durch die Parameter dieser Funktion festgelegt wird, im engl. 'Parametric Airfoil'.
Die bekannteste dieser Art sind die NACA Profile, aber auch die HORTEN-Profile zählen dazu. Das sind im übrigen auch durchaus betagte Profile.
Alle notwendigen Informationen sollten im Profilnamen zu finden sein, wie z.B. beim NACA-2412.
An den 4-Stellen erkennen wir, daß als Kontur-Funktion das 4-stelliges-NACA-Polynom (siehe Kapitel '2.1 Equation for a symmetrical 4-digit NACA airfoil' angewendet wird. Bekanntermaßen beschreibt dann die "2" die Wölbung. die "4" die Wölbungsrücklage und die "12" die Profildicke. Mit dieser Information können dann die Koordinaten hinreichend genau berechnet werden.

Xoptfoil erwartet, genau wie XFOIL, die Eingabe des Startprofils als 'Point Cloud Airfoil'. Das 'Point Cloud Airfoil' wird dann in Xoptfoil durch ein Näherungsverfahren (Approximation) in ein 'Parametric Airfoil' überführt. Das wird gemacht, weil eine Optimierung umso einfacher ist, je weniger Parameter vorhanden sind.
Xoptfoil bietet dazu zwei unterschiedliche Kontur-Funktionen an:
A. NACA (siehe 4-stelliges-NACA-Polynom, Kapitel '2.1 Equation for a symmetrical 4-digit NACA airfoil')
B. Hicks-Henne plus Basiskontur (Wer´s genauer wissen will, siehe Hick-Henne Funktion Kapitel 3.3 Shape parameterization)

Jochen hat in #43 sehr schön gezeigt, daß Hicks-Henne in der Lage ist das "Broggini 55509" auf Basis seines „Phantasieprofil“ gut abzubilden.
Die Voraussetzung dafür, daß Xoptfoil mit Hick-Henne für die Optimierung in Richtung eines "Broggini 55509" verwendet werden kann, ist also gegeben. Vielen Dank an dieser Stelle an Jochen. Das habe ich tatsächlich so schön noch nie gesehen.

Nun schreibt Jochen aber auch, daß es 36 Parameter und 4000 Iterationsschleifen bedurfte, um zu diesem Ergebnis zu kommen.
Das ist relativ viel und ein Computer und möglicherweise der Mensch, der davor sitzt, kommt da schon mal in´s schwitzen. 😀

In der Diskussion geht´s nun darum ob es neben den beiden in Xoptfoil vorgegebenen Kontur-Funktionen möglicherweise weitere gibt, die geeigneter sind.
Die Anforderungen sind relativ klar (Ergänzungen sind willkommen):
1. es muß natürlich eine Konturlinie, die vorne rund und hinten spitz ist, erzeugt werden können. D.h. vorne eine senkrechte Tangente und hinten auf die gleiche Höhe wie vorne (vornehmlich vorne Y = 0,0 und hinten auch Y = 0,0 oder mit einer definierten Endkantendicke).
2. es sollten so wenig Parameter wie möglich sein, damit Xoptfoil eben keine 4000 Iterationen braucht.
3. die Parameter sollten möglichst unabhängig voneinander sein, damit Xoptfoil bei Änderung eines Parameters die anderen Parameter nicht gleich total über den Haufen wirft.

Nun hat sich gezeigt, daß es da wohl tatsächlich welche gibt:
- Wagner Funktion, siehe Onur: Wagner Functions
- Orthonormal Funktion, siehe Kuruvila, Ta'asan, Salas: Airfoil Optimization by the One-Shot Method

Vielleicht gibt´s noch mehr und noch besser geeignete? Wenn ihr welche kennt, schreibt´s hier bitte rein ...

Eine Anmerkung zum Abschluß sei erlaubt:
Ironischerweise gibt Xoptfoil sein so mühevoll an den Parametern optimiertes Profil dann als 'Point Cloud Airfoil' aus und nicht als 'Parametric Airfoil'. Zumindest konnte ich in den Ausgabefiles von Xoptfoil nichts finden.
Warum macht es das? 🤔
Wahrscheinlich weil 'Point Cloud Airfoil' immer noch am weitesten verbreitet ist und es keiner Interpretation durch eine Kontur-Funktion bedarf.
Aber ist das wirklich noch zeitgemäß? Da waren NACA und HORTEN doch ihrer Zeit weit voraus, oder?

Soweit zum Hintergrund.

Ich fasse nochmal zusammen:
- XFOIL braucht hinreichend genaue Koordinaten.
- Xoptfoil braucht Parameter an denen es optimieren kann.
- Xoptfoil erzeugt die Parametrisierung mit NACA oder Hicks-Henne
- es gibt mit Wagner und Orthonormal hierzu Alternativen

Was die Wagner-Funktion speziell am "Broggini 55509" leistet und Orthonormal Funktion nicht leistet erfahrt ihr im folgenden Beitrag.
Da gibt´s dann auch ein paar Bildchen - versprochen! 🙂

Viele Grüße
Martin
 
Zuletzt bearbeitet:

dp-air

User
Ich stimme Dir absolut zu: Profile sollten (und können) auf den jeweiligen Verwendungszweck hin entworfen werden. 20%-30% Verbesserung
gegenüber einem Profil aus dem Katalog sind da locker drin. Wenn es darum geht ein Profil für einen besonderen Einsatzzweck zu machen, dann
sowieso.
Hallo Martin,
meinst Du das tatsächlich im Ernst. 20 - 30% Verbesserung z. B. ggü. dem MH 32, oder dem RG15 (das sind ja altbekannte und weit verbreitete Prodile)?
Das ist ganz schön viel!!!
Gruß
Dieter
 
Was die Wagner-Funktion speziell am "Broggini 55509" leistet und Orthonormal Funktion nicht leistet erfahrt ihr im folgenden Beitrag.
Hier nun wie versprochen:

Es geht um die Glättung einer bestimmten Profilkontur mit Hilfe der Parametrisierung.
Eine geschickte Parametrisierung ist aber auch in Xoptfoil für eine schnell konvergierende Optimierung von großer Bedeutung.
Hier nun meine Erfahrungen beim Glätten des mathematisch doch recht widerspenstigen "Broggini 55509".

Die Koordinaten habe ich von Hans-Walter Bender, der mir vor vielen Jahren schon freundlicherweise seine Profildatenbank hat zukommen lassen.
Anbei die Originalkoordinaten, siehe BRO55509.dat
Die Koordinaten sind ziemlich ungenau und die errechnete Druckverteilung (ca=0.8) sieht dann, besonders vorne auf der Oberseite furchtbar aus:
1629628087788.png

Sowas findet auch XFOIL furchtbar und macht sich vom Acker, oder antwortet mit irgendwelchem Unsinn - das ist doch menschlich! 😱

Es liegt auf der Hand: die Koordinaten müssen geglättet werden. Und zwar so, daß
1. die Druckverteilung schön mittig durch die furchtbaren Zacken geht und
2. die Profilkontur nicht allzu sehr verfälscht wird.
Da gibt´s nun verschiedene Methoden. Eine davon ist, die Koordinaten mit einer geeigneten Kontur-Funktion zu approximieren.
(Manch einer kennt das von Excel: Methode der kleinsten Quadrate mit Excel)

Hier meldet sich sogleich die Orthonormal-Funktion☝zu Wort (Kuruvila, Ta'asan, Salas: Airfoil Optimization by the One-Shot Method), stammelt rum 😟 und versagt mit den Worten: "Das Gleichungssystem ist für die Unterseite nicht lösbar". 😖 Naja, ein Versuch war´s ja mal wert!
Die Orthonormal-Funktion ist sonst immer gut bei der Sache, aber bei dem "Broggini 55509", dann doch überfordert gewesen.

Da wittert die Wagner-Funktion (Onur: Wagner Functions) ihre Chance und meldet sich ebenfalls zu Wort☝.
Und siehe da: 🤩
1629630230573.png
Zum Vergleich:
1629630363813.png


Wie ist passiert?
Beide Funktionen haben versucht mit Hilfe der kleinsten Fehlerquadrate ihre Parameter so einzustellen, daß sie sich genau in die Mitte zwischen den vorhandenen Koordinaten hinsetzen. Die Wagner-Funktion war allerdings etwas gelenkiger als die Orthonormal-Funktion.
Nun und weil wir gerade mal dabei waren, habe ich auch die Anzahl der Koordinaten von 35 auf 78 erhöht. Die 78 sind dabei in gewissen Grenzen beliebig - so zw. 60 und 120 ist gut - was halt so üblich ist.
Leider weiß ich heute nicht mehr genau wie viele Parameter ich seinerzeit der Wagner-Funktion spendiert habe. Es dürften so 6 für die Oberseite und 6 für die Unterseite gewesen sein, also insgesamt 12. Das ist zumindest genauso viel wie Jochen mit Hicks-Henne brauchte:
Wie immer nutzte ich als Parametrisierung „Hicks-Henne“ mit je 6 Funktionen auf der Profilober- und Unterseite und als Optimierungsverfahren „Particle Swarm“ (es stellte sich heraus, dass für die „harte Nuss Broggini mehr als die üblichen 5 Hicks-Henne-Funktion nötig sind).


Bei der ganzen Aktion ist natürlich die Kontur verändert worden, wenn auch nur geringfügig. Eine Koordinate wird maximal etwa +-0,1 % der Profiltiefe verändert. Bei normierten Koordinaten (Profiltiefe=1) kann dann aus z.B. einer (X=0,5; Y=0,1) auch schon mal eine (X=0,5; Y=0,101) oder (X=0,5; Y=0,099) werden. Aber das wollen wir ja so! 😁

Wenn Jochen schreibt:
Es zeigte sich, dass Du mit der von Dir durchgeführten Glättung schon perfekte Vorarbeit geleistet hast. Das Profil ist wie hingezirkelt. Klasse!
dann schmeichelt mir das natürlich - danke Jochen für die Blumen - aber es ist nicht wirklich verwunderlich.
Schließlich habe ich für die neue Kontur eine mathematische Funktion benutzt. Die zirkelt die Koordinaten immer hin.
Die Frage ist nur, wie nahe die Kontur dann noch an der Originalkontur liegt. Aber das war ja nicht das Ziel von Jochens Untersuchung.

XFOIL findet das jedenfalls prima und spielt wieder begeistert mit - das ist doch logisch. 😋

Viele Grüße
Martin
P.S.: Vielleicht sollte ich jetzt mal einen Antiknurflügel mit dem "Broggini 55509" bauen ... 😎
 

Anhänge

  • BRO55509.dat
    430 Bytes · Aufrufe: 104
  • Broggini 55509 approx.dat
    1,5 KB · Aufrufe: 99
Hallo Dieter,

Hallo Martin,
meinst Du das tatsächlich im Ernst. 20 - 30% Verbesserung z. B. ggü. dem MH 32, oder dem RG15 (das sind ja altbekannte und weit verbreitete Prodile)?
Das ist ganz schön viel!!!
Gruß
Dieter

nein, natürlich nicht. Ich dachte da eher an ein NACA oder so. 😟
Nichts gegen NACA. Es gibt durchaus auch NACAs die bereits ganz gut dafür geeignet sind, was man da gerade auf dem Baubrett hat.
Wenn man als Ausgangsbasis schon ein für die Anwendung einigermaßen passendes Profil hernimmt, ist das Verbesserungpotential natürlich geringer.
Aber so 5-10% darf man schon erwarten.
Wenn man auf ein Hangseglerprofil optimiert und als Ausgangsbasis dann ein NACA-6409 nimmt, würden mich 30% Verbesserung überhaupt nicht wundern.
Wenn man dagegen auf ein Thermikseglerprofil optimiert und als Ausgangsbasis das gleiche NACA-6409 nimmt, darf man mit 5-10% zufrieden sein. Kommt halt immer auf die jeweilige Konstellation drauf an, wobei die Re-Zahl die Sache natürlich auch ordentlich beeinflußt.

Viele Grüße
Martin
 
Angefixt durch eure tollen Berichte zur Profilbewertung und Profilentwicklung hier im Forum auch mittels xoptfoil, habe ich mich relativ intensiv mit der Materie beschäftigt und kann mittlerweile leidlich mit Profipolaren (Xflr5) und xoptfoil-jx umgehen.
Denke ich habe alle Grundbegriffe verinnerlicht und versuche gerade einen Re-Zahl angepassten Profilstrak zu erstellen, der den Anforderungen eines ersten Profilprojektes erfüllt.
Das Erstellen von "guten" xoptfoil-jx input-Files, mit den doch sehr unübersichtlichen Target-Werten und Optionen, stellt sich jedoch doch als ziemliche Hürde heraus. Die Lernkurve basierend auf der verfügbaren Doku und den diversen Versuchen ist doch relativ niedrig.

Gibt es hierzu irgend eine gute Quelle die man empfehlen könnte?
Gibt es bei den operating_conditions die Möglichkeit, bei den OperationPoints evtl. noch flap-Werte z.B. bei den höheren ca mit zu geben, um hier gleich die gewünschten Target-Werte für bestimmte Flap-Stellungen zu evaluieren?

Gruß Rainer
 

Jojo26

User
Hallo Rainer,

... ja, Xoptfoil(-JX) ist schon ziemlich "rustikal". Ich denke, es braucht schon einige Tage (Wochen) bis man ein Verständnis für die Eingabeparameter und ein Gefühl für die Zusammenhänge entwickelt, um dann ernsthafte Profilentwicklung machen zu können. Ich selbst habe diese Lern-Zeit nie als unnütz angesehen, weil ich bei jedem Optimierungslauf "nebenbei" ein wenig in Sachen Profilaerodynamik und Optimierung dazugelernt habe ... ;)

Leider gibt es keine schrittweise Einführungsanleitung. Meine Empfehlung wäre, die Beispiele bei Xoptfoil-JX zu nehmen und dann anzufangen, mit den Paramtern zu spielen. Mit dem "Visualizer" sieht man recht schnell, ob es in die gewünschte Richtung geht.

Ansonsten sehr gerne hier im Forum fragen oder mir eine PN schicken.

Zu Flaps: Ja, man kann gleichzeitig Profil und/mit Flap(-Stellung) optimieren. Das ist allerdings schon eine "heiße Kiste", die ich bisher nur einmal kurz ausprobiert habe. Es wär klasse, wenn Du hier weiter experimentieren und berichten würdest...!

Viele Grüße

Jochen

(... eigentlich wollten Matthias und ich bereits mit dem "Zukunftsprojekt" begonnen haben, aber leider ist beruflich bedingt die Zeit grad sehr begrenzt. Wer mal einen Blick drauf werfen möchte, wie so etwas mit einem richtigen User-Interface aussehen könnte, der drückt einfach mal in Xflr5 v6.50 im "Xfoil Direct Analysis" die Taste F12... André hat hier schon mal tolle Vorarbeit geleistet!
Ideen gibt es jede Menge wie "grafisches Polarendesign" oder "Wagner functions" (s.o. der Beitrag von Martin) ...
Mitstreiter sind herzlich willkommen! ;) )
 
Kannst du mir bzgl. der Flap-Parameter mal ein Beispiel zeigen, das als operation_condition eingetragen werden kann?
Ich finde aktuell Flap-Infos nur in der Datei input_output.F90 und meine Fortran (77) Kenntnisse sind in den späten 80ern verschütt gegangen. Hab noch nicht mal gewusst das es Fortran90 gibt ;-(
 
habe den User_Guide.pdf gefunden und würde sagen, dass er meine Fragen alle perfekt beantwortet. War genau das richtige Dokument für mich.
Leider funktionieren aber leider genau die flap-Parameter in der "operating_conditions namelist" nicht. Sobald dort Flap-Parameter eingetragen werden, wird die Fehlermeldung:
Error: unrecognized variable in namelist operating_conditions (err=5010)
ausgegeben.
Code:
&operating_conditions
  re_default_as_resqrtcl = .true.                           ! strak: get reynolds (type 2) from command line
  use_flap = .true.
  x_flap = 0.79
  y_flap = 0.0
  y_flap_spec = 'y/c'

                       ! Speed                  <--- achieve desired Glide High Point      --->
  noppoint         = 7 ! 1              2             3               4                5              6               7
  op_mode          = 'spec-cl'    , 'spec-cl'   , 'spec-cl'     , 'spec-cl'      , 'spec-cl'    , 'spec-cl'     , 'spec-al'
  op_point         = -0.10        , 0.04        , 0.2           , 0.40           , 0.66         , 0.8           , 8.5
  optimization_type= 'target-drag','target-drag','target-drag'  ,'min-drag'      ,'min-drag'   , 'target-drag' , 'target-lift'
  target_value     =  0.0050      , 0.00450     , 0.046         ,                ,              , 0.0112        , 1.0
  flap_selection   =  'specify'   ,'specify'    ,'specify'      ,'specify'       ,'specify'     ,'specify'      ,'specify'
  flap_degrees     =  0.0         , 0.0         , 0.0           , 0.0            , 0.0          , 0.0           , 0.0
  weighting        =  2.1         , 3.0         , 2.0           , 1.0            , 1.0          , 1.0           , 0.5

Habe gesehen, das das Projekt xoptfoil-JX gerade hier in der input_output.F90 einige Änderungen gegenüber Daniel Prossers Branch gemacht hat. Leider ist mein Fortran aktuell viel zu schlecht, um hier auf Fehlersuche zu gehen.
Wenn es hier was zu tun gibt und sich mir jemand nen Einsteig gibt, könnte ich versuchen hier was zu tun (habe Erfahrung in mehreren OO-Sprachen). Bitte ggfs. um Nachricht / PN ;-)

Hoffe das wird hier nicht zu "off-topic".

Gruß Rainer
 

Jojo26

User
Hallo Rainer,

... sehr gerne kannst Du mit einsteigen! Selbst ist der Mann.
Und das mit Fortran kriegen wir schon hin - das ist nicht so schwer ;)

Schick mir einfach eine PN mit Deiner Email-Adresse.

Viele Grüße
Jochen
 

Jojo26

User
Neue Version Xoptfoil-JX v 1.71.2 verfügbar...

Es wurden einige Verbesserungen umgesetzt, um vor allem bei anspruchsvollen Profilentwicklungsaufgaben noch den letzten Prozentpunkt "herauszuquetschen". Im Screenshot aus einer aktullen Profilentwicklung sind die wichtigsten neuen Features zu sehen:

Xoptfoil-JX v1.71.2.png

+ Die überarbeitete Dokumentation enthält nun alle von Xoptfoil-JX unterstützten Optionen und Parameter.
+ Der Visualizer kann nun unter Windows ohne Installation von Python gestartet werden.
+ Die Beispiel-Optimierungen wurden überarbeitet und an die neuen Features angepasst.

Die fertige Window-Version ist wie immer hier auf Github zu finden.

Ein kleiner Hinweis für Neueinsteiger: Schaut Euch zunächst in Ruhe die Beispiele an, verändert den ein oder anderen Parameter bis Ihr ein gutes Verständnis der Zusammenhänge entwickelt habt. Erst dann - nach ein, zwei Wochen 😉 - mit dem eigenen Projekt loslegen...

Viel Spaß und erfolgreiche Projekte in 2022!

Jochen
 

klb

User
Hallo Jochen,

ich habe gerade xoptfoil-JX 1.71.4 unter Linux installiert. Dazu musste in der CMakeLists.txt die Zeile # unset(CMAKE_SYSTEM_NAME) deaktiviert werden, sonst entsteht eine Version, die nur Speicherüberläufe produziert. Danach habe ich versucht die Beispiele zu starten, leider ohne Erfolg. Ich denke, irgendeine Datei wird noch nicht richtig kompiliert. Einer meiner Versuche mit Deiner ersten Version von xoptfoil-JX läuft ohne Probleme. Ich habe länger nicht damit gearbeitet und möchte eigentlich einen Constraint ergänzen aber erst muss die aktuelle Version natürlich laufen.

Ich habe "cetris paribus" jede einzelne Einstellung in X.inp geändert - konnte das Problem aber nicht finden.

Hast Du einen Tip für mich, wo die Ursache im Quellcode liegen könnte?

Hier der Output der Beispiele:

1_Hello_Optimizer

xoptfoil-JX -i SD7003mod.inp -o Hello-Optimizer-TEST

This is Xoptfoil-JX - a modified version of Xoptfoil
Xoptfoil Copyright 2017-2019 Daniel Prosser

- Optimization targets & Smoothing by Jochen Guenzel
- Shape_type "camb_thick" by Matthias Boese, Jochen Guenzel


Error: namelist constraints is required and was not found in input file.


2_Targets_and_Dynamic

xoptfoil-JX -i MH32mod.inp -o Targets_and_Dynamic-TEST

This is Xoptfoil-JX - a modified version of Xoptfoil
Xoptfoil Copyright 2017-2019 Daniel Prosser

- Optimization targets & Smoothing by Jochen Guenzel
- Shape_type "camb_thick" by Matthias Boese, Jochen Guenzel


Error: unrecognized variable in namelist optimization_options.
See User Guide for correct variable names.


3_Hicks-Henne_OhNo

xoptfoil-JX -i JX-bad.inp -o Hicks-Henne_OhNo-TEST

This is Xoptfoil-JX - a modified version of Xoptfoil
Xoptfoil Copyright 2017-2019 Daniel Prosser

- Optimization targets & Smoothing by Jochen Guenzel
- Shape_type "camb_thick" by Matthias Boese, Jochen Guenzel


Error: namelist constraints is required and was not found in input file.


4_Hicks-Henne_F3F

xoptfoil-JX -i F3F-Example.inp -o Hicks-Henne_F3F-TEST

This is Xoptfoil-JX - a modified version of Xoptfoil
Xoptfoil Copyright 2017-2019 Daniel Prosser

- Optimization targets & Smoothing by Jochen Guenzel
- Shape_type "camb_thick" by Matthias Boese, Jochen Guenzel


Error: unrecognized variable in namelist operating_conditions.
See User Guide for correct variable names.

Gruß,

Klaus
 

Jojo26

User
Hallo Klaus,

... es scheint, dass bei Dir gerade noch eine recht alte Version zur Laufzeit "gezogen" wird, die die weiterentwickelte Input-Datei nicht mehr verarbeiten kann. Leider kenn ich mich mit LINUX-Suchpfaden nicht aus ...

Der Start von Xoptfoil-JX sollte so aussehen:

Startup.png

--

Unabhängig davon - kannst Du mal schauen, was bei Dir in der CMAKE-Variable CMAKE_HOST_SYSTEM_NAME drin steht? (es ist sonderbar, dass die Kompilierung nicht mehr sauber läuft ...)
Gerne auch per PN an mich...

Viele Grüße
Jochen
 
Ansicht hell / dunkel umschalten
Oben Unten