[CoolProb] Viscosity model is not available for this fluid

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo zusammen,

ich muss mich gerade mit der Möglichkeit beschäftigen Gaseigenschaften von Gasgemischen abhängig von Druck und Temperatur zu bestimmen.
Dazu verwende ich die Bibliothek CoolProb

Ein Auszug aus meinem Code:

Code: Alles auswählen

import CoolProp


class Gas:
    def __init__(self, gas_name, gas_percent, temperature, pressure):
        self.temperature = temperature + 273.15
        self.pressure = pressure * 10**5
        # HEOS is the used backend
        self._gas = CoolProp.CoolProp.AbstractState('HEOS', gas_name)
        self._gas.specify_phase(CoolProp.iphase_gas)
        self._gas.set_mole_fractions(gas_percent)
        self._gas.update(CoolProp.PT_INPUTS, self.pressure, self.temperature)

    @property
    def dynamic_viscosity(self):
        return CoolProp.CoolProp.AbstractState.viscosity(self._gas)


def main():
    gas = Gas('H2&CO&CH4', (0.57, 0.21, 0.22), 80, 12)
    print(gas.dynamic_viscosity)


if __name__ == '__main__':
    main()
führt zur folgenden Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\straub\AppData\Roaming\JetBrains\PyCharmCE2022.1\scratches\scratch_1.py", line 25, in <module>
    main()
  File "C:\Users\straub\AppData\Roaming\JetBrains\PyCharmCE2022.1\scratches\scratch_1.py", line 21, in main
    print(gas.dynamic_viscosity)
  File "C:\Users\straub\AppData\Roaming\JetBrains\PyCharmCE2022.1\scratches\scratch_1.py", line 16, in dynamic_viscosity
    return CoolProp.CoolProp.AbstractState.viscosity(self._gas)
  File "CoolProp\AbstractState.pyx", line 321, in CoolProp.CoolProp.AbstractState.viscosity
  File "CoolProp\AbstractState.pyx", line 323, in CoolProp.CoolProp.AbstractState.viscosity
ValueError: Viscosity model is not available for this fluid
Die Meldung ist ja ziemlich eindeutig. Wenn ich den Druck und die Temperatur ändere, erhalte ich die Meldung trotzdem.
Es gibt eine Liste von CoolProb in der alle verfügbaren Fluide aufgelistet sind. Die einzelnen Bestandteile sind in diesem Fall gelistet und den Mix in meinem Code ist auch ein realistischer Mix und keine "Erfindung".

Es gibt auch verschiedene Backends die man theoretisch nutzen kann. REFPROP hört sich auch vielversprechend an, aber da muss man wohl eine Lizenz kaufen, wenn ich das richtig verstanden habe: https://www.nist.gov/srd/refprop

Mit den restlichen Backends bin ich auch zu keinem Ziel gekommen.

Die GitHub Issues habe ich auch mal durchgeschaut. Da findet man auch Probleme bei Gasgemischen und dadurch bin dann auch auf 'CoolProp.CoolProp.AbstractState' umgestiegen. Meine erste Versuche waren mit 'CoolProb.CoolProb.PropsSI'.

Das was ich da von Coolprob benutze sind Wrapper von C-Code. Ich habe mir zwar teilweise den C-Code angeschaut, auf den in der Doku immer wieder verwiesen wird, aber das hat mir gar nichts gebracht. Ich habe mir erhofft, dass es vielleicht noch Argumente/Optionen gibt, die ich setzen könnte um an meine Stoffeigenschaft zu kommen.
Ich bin natürlich auch kein Thermodynamiker und kann jetzt aus dem Gasmix irgendwelche Rückschlüsse ziehen, deswegen poste ich hier mein Problem mal.

Falls irgendjemand vielleicht Erfahrung mit CoolProb hat und/oder in der Doku einen entscheidenten Hinweis findet wäre ich sehr dankbar.
Da hier auch jeder andere Schwerpunkte und Interessen gibt, vielleicht kann auch einer wissenschaftlich begründen, wieso die Berechnung für diesen Gasmix nicht möglich ist. Auch darüber würde ich mich freuen.

Zum Schluss noch, es muss nicht CoolProb sein, auch in der Hinsicht bin ich vollkommen frei. An der Stelle muss ich ehrlich sagen, das ich noch nicht viel Zeit für die Suche nach Alternativen aufgebracht habe. Zum einen war die erste Suche nicht sonderlich erfolgreich und irgendwie habe ich mich dann doch weiters mit CoolProb beschäftigt und die Alternativen mal zurückgestellt.

Vielen Dank für jeden Hinweis und schon mal an jeden, der sich mit dem Problem beschäftigt.

Grüße
Dennis

Edit: Habe den Link zu den Backends vergessen.
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Code: Alles auswählen

        return CoolProp.CoolProp.AbstractState.viscosity(self._gas)
sieht komisch aus. Das wird am Problem nix ändern, aber Methoden ruft man ja üblicherweise auf dem Objekt auf, nicht auf der Klasse. Also:

Code: Alles auswählen

        return self._gas.viscosity()
Die Klasse `AbstractState` scheint nicht dokumentiert zu sein und das `Abstract` im Namen könnte auch darauf hindeuten, dass die nicht dazu gedacht ist um Objekte damit zu erstellen, sondern um davon konkrete Klassen abzuleiten.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

Danke für den Hinweis, das ist mir noch gar nicht aufgefallen :oops:

Du meinst die Klasse wäre nur so eine Art Vorlage? Das wäre natürlich schlecht für mich.
Verwendet habe ich die 'AbstractState'- Klasse, weil die auch in vielen GitHub-Issues verwendet wurde. Dort wurde davon noch niemandem abgeraten, was ja aber nicht heißen soll, dass du unrecht hast.

REFPROP kann man wohl doch nutzen. Das versuche ich auch mal noch.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Vielleicht könnt ihr mir helfen REFPROP zu kompilieren, ich bekomme das wieder nicht hin.

Mit git clone habe ich mir die Daten herunter geladen und habe dann gleich beim zweiten Punkt in der Anleitung gar keine Ahnung was ich machen soll:

"Copy the FORTRAN directory from your REFPROP installation into the root of your checked out code (or see below about using the path directly)"

Ich habe keinen FORTRAN Ordner auf meinem System finden können. Versteht ihr wo der Ordner her kommen soll?
Fortran an sich habe ich mit 'sudo dnf install gcc-gfortran' installiert.

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das repo ist nur ein cmake für das eigentliche Paket. Das musst du runterladen. Darin ist der Ordner.
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen,

vielen Dank für die Info. Dann komme ich wieder hier bei meinen 325 $ raus:
https://www.nist.gov/srd/refprop

Dann ist das Backend eine Sackgasse für mich.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

falls jemand wissen will, wie es weiter geht:
https://github.com/CoolProp/CoolProp/issues/2180

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten