2017-10-23 2 views
0

Wenn möglich, möchte ich ein Array aus austauschbaren Medienpaketen erstellen, die ein Benutzer dann mithilfe der verfügbaren Optionen ändern kann.Erstellen von Arrays austauschbarer Medienpakete

Unten ist eine typische Möglichkeit, das Medium zu definieren.

Das folgende ist ein Prototyp von dem, was ich hoffte, konnte getan werden, wo jedes der "Medien" möglicherweise ein anderes Medium ist.

parameter Integer n = 1 "Number of media models"; 
replaceable package Medium[n] = {Modelica.Media.Interfaces.PartialMedium} 
    "Coolant medium" annotation (choicesAllMatching=true); 

Dies ist jedoch nicht akzeptabel modelica. Ich habe versucht, auch Variationen auf Platten zu verwenden, fand aber keinen Erfolg. Irgendwelche Ideen? Vielleicht ist das in Modelica nicht erlaubt ... Danke.

+0

Was ist Ihre Absicht damit? Einem Benutzer die Auswahl eines Kühlmediums ermöglichen? Wenn ja, gibt es wahrscheinlich einen idiomatischen Weg, um dies zu tun, möglicherweise durch austauschbare/redeclare. – Christoph

+0

Ich kann dir nicht sagen, wie ich es benutzen würde. Das ist streng geheim ... ok, werde ich sagen. Ein Anwendungsfall ist ein mehrschichtiges Material mit unterschiedlichen Eigenschaften in jeder Schicht. Ich verwende nicht die Medienbibliothek, sondern meine Medienbibliothek, die das gleiche Paketformat hat. Hält mich davon ab, ein neues Modell für jede zusätzliche Schicht zu machen, die jemand braucht/braucht. –

Antwort

2

Wenn es möglich war, ein solches Array zu erstellen, überlegen, wie Sie es verwenden könnte:

model M 
    replaceable package Medium[n]; 
    medium[1] m1; // "Creates a Medium array of size 1"; not reference to Medium 1 
    Real r = Medium[1].f(...); // Disallowed syntax; function names do not contain subscripts 
end M; 

Sie wahrscheinlich die folgenden (Arbeiten in OpenModelica, nicht in Dymola getestet) versuchen könnte, aber es ist nur von begrenztem Wert:

package M 
    constant Real r; 
end M; 

model Test 
    M[2] m(r={1,2}); 
    M m1=m[1]; 
    M m2=m[2]; 
end Test; 
+0

Ein bisschen schade, dass dies nicht erlaubt ist. Danke für den Vorschlag zum Beispiel. Leider ist das in meinem Fall nicht hilfreich, aber ich habe es in Dymola getestet und es funktioniert gut. –