Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert non-tunable parameters to tunable in Bloody Mary #3

Open
TomasKulhanek opened this issue Oct 20, 2021 · 18 comments
Open

Convert non-tunable parameters to tunable in Bloody Mary #3

TomasKulhanek opened this issue Oct 20, 2021 · 18 comments
Assignees
Labels
enhancement New feature or request

Comments

@TomasKulhanek
Copy link
Member

TomasKulhanek commented Oct 20, 2021

Convert these non-tunable parameters to some tunable in Physiolibrary_Fluid_Examples_BloodGasesTransport_BloodyMary.

  • Blood_Hb
  • Hct
  • Blood_BEox
  • RR
  • TV

Changing non-tunable parameters during simulation requires stopping simulation/reinitialization and resimulation.

Non-default values may cause unstable simulation and zero or infinitive values being returned.
fxTwoQiP4E

@TomasKulhanek TomasKulhanek added the enhancement New feature or request label Oct 20, 2021
@TomasKulhanek
Copy link
Member Author

@filip-jezek
Copy link
Member

Seems to me as a Dymola bug. I have introduced a workaround, that exports said variables as tunable:

    <ScalarVariable
      name="Hct"
      valueReference="16777238"
      description="Hematocrit"
      causality="parameter"
      variability="tunable">
      <Real
        declaredType="Physiolibrary.Types.Fraction"
        start="0.44"/>
    </ScalarVariable>

Check if these tunable vars work in the simulator.

@TomasKulhanek
Copy link
Member Author

https://bodylight.physiome.cz/Bodylight-Scenarios/bloodgases/#komplexnisimulator.md
Blood_Hb nad Hct change have no consequences, while e.g. O2 change is visible. Double checked that Hb and Hct is changing in model.

6nEJKjFwxt

@filip-jezek
Copy link
Member

That is a model problem - run the model in any tool alone, both Hct and Hb have minimal steady state effect on pO2, yet there is one. Also, extreme changes are visible in the sat graph (when lettting it stabilized first for long enough). Probably debug @kofranek and @MarekMatejak ?

@MarekMatejak
Copy link

MarekMatejak commented Oct 21, 2021

You need other type of model for these application. The model Physiolibrary_Fluid_Examples_BloodGasesTransport_BloodyMary is designed for continual physical simualation of physiological system. The conservation of mass and energy during the simulation is typical for this kind of simulation. The unphysical loss or creation of energy/mass is not allowed in this world. So do it physical way: E.g. instead of direct assigment of amount of hemoglobin (in oxygenated or deoxygenated form?) you should make a flow of that (e.g. during transfusion or during hemorrhage). Or may be your application need to show steady state points only.

@MarekMatejak
Copy link

Btw. parameters Blood_Hb and Hct are used only for initialization of blood status - see: https://github.com/MarekMatejak/Physiolibrary/blob/master/Physiolibrary/package.mo#L5903

@MarekMatejak
Copy link

The real continual status is not a parameter, but state variables (as mass fractions) inside all elastic blood vessels.

@MarekMatejak
Copy link

MarekMatejak commented Oct 21, 2021

Mimochodem Blood_Hb je molarni mnozstvi hemov na objem krve, ne koncentrace hemoglobinu v krvinkach. Jedna molekula hemoglobinu ma 4 hemy. Koncentraci vsech molekul hemoglobinu v krvinkach s toho vypoctete jako Blood_Hb/(4*Hct) [mmol/L].

@TomasKulhanek
Copy link
Member Author

OK. Takze u koncentrace Hb pridat pumpu se senzorem, jejiz parametr bude desiredHBConc - ona bude pumpovat nejakou vysoce/nizce koncentrovanou krev do te doby az se desiredHbConc vyrovna s HbConc ze senzoru a zaroven odcerpavat krev aby se tam nehromadil objem - asi s nejakym ridicim clenem na bazi PID controlleru. Totez analogicky u dalsich velicin.

@filip-jezek
Copy link
Member

filip-jezek commented Oct 22, 2021

I understand that is unphysical, but transforming the simulation to steady state would require major changes in model and in simulator. The simplest way to achieve required result would be as Tomáš suggests. However, are you sure the model reacts well for the initial Hct? The venous pO2 difference for Hct 10 and 90 seems to low to me. @kofranek @MarekMatejak can you confirm this is correct?

image

@filip-jezek
Copy link
Member

@MarekMatejak I understood, that the Hct is coupled with Blood_Hb and that the blood Hb is the actual determining factor.

Blood pump in-out is impractical, we would need to set other blood parameters inflow concentrations (o2, co2, hco3...), which all depend on the current model state.

However, a simple Hb pump (similar to o2 / co2 pump in tissues) crashes the model after while, while the Hb still well in bounds of otherwise normal operating conditions (try flow + or - 1 mmol/min). Do the correct substance data play a major role here? I noticed it changes the temperature a bit too. Why the Hb outflow is crashing the model?

  Chemical.Sources.SubstanceInflowT substanceInflowT(
    SubstanceFlow=1.6666666666667e-05,
    redeclare package stateOfMatter = Chemical.Interfaces.Incompressible,
    substanceData(
      MolarWeight(displayUnit="kg/mol") = 65.494/4))
    annotation (Placement(transformation(extent={{-152,-192},{-132,-172}})));

Knowledge of these workarounds are crucial for us to adopt the PL3.0.

@MarekMatejak
Copy link

I understand that is unphysical, but transforming the simulation to steady state would require major changes in model and in simulator. The simplest way to achieve required result would be as Tomáš suggests. However, are you sure the model reacts well for the initial Hct? The venous pO2 difference for Hct 10 and 90 seems to low to me. @kofranek @MarekMatejak can you confirm this is correct?

image

Takato zmena hematorkritu v tomto modelu nemeni koncentraci hemu v krvi, ktora je v Blood_Hb.

@MarekMatejak
Copy link

OK. Takze u koncentrace Hb pridat pumpu se senzorem, jejiz parametr bude desiredHBConc - ona bude pumpovat nejakou vysoce/nizce koncentrovanou krev do te doby az se desiredHbConc vyrovna s HbConc ze senzoru a zaroven odcerpavat krev aby se tam nehromadil objem - asi s nejakym ridicim clenem na bazi PID controlleru. Totez analogicky u dalsich velicin.

Neznie to moc fyzikalne, ale numericky by to fungovat malo.

@MarekMatejak
Copy link

MarekMatejak commented Oct 22, 2021

@MarekMatejak I understood, that the Hct is coupled with Blood_Hb and that the blood Hb is the actual determining factor.

Blood pump in-out is impractical, we would need to set other blood parameters inflow concentrations (o2, co2, hco3...), which all depend on the current model state.

However, a simple Hb pump (similar to o2 / co2 pump in tissues) crashes the model after while, while the Hb still well in bounds of otherwise normal operating conditions (try flow + or - 1 mmol/min). Do the correct substance data play a major role here? I noticed it changes the temperature a bit too. Why the Hb outflow is crashing the model?

  Chemical.Sources.SubstanceInflowT substanceInflowT(
    SubstanceFlow=1.6666666666667e-05,
    redeclare package stateOfMatter = Chemical.Interfaces.Incompressible,
    substanceData(
      MolarWeight(displayUnit="kg/mol") = 65.494/4))
    annotation (Placement(transformation(extent={{-152,-192},{-132,-172}})));

Knowledge of these workarounds are crucial for us to adopt the PL3.0.

V realnom svete neni mozne do krvi pridavat (resp. z krvi odoberat) samostatne chemicke substancie, ktorych naboj je radovo v mmol/L. Fyziologicky je lepsie uvazovat komplexne a vsetky toky chemickych substancii musia byt v tychto radoch elektorneutralne.

@MarekMatejak
Copy link

Podle mne máte na noze balvan staré aplikace. Zkuste si ten pohled zrestartovat. Áno, priznejte si, že původní aplikace byla navrhnuta z pedagogického i simulačního pohledu špatně - proto jí nik nerozuměl.
Reálně chcete medikom ukazovat jako funguje pacient? Pokud je odpověď ano, tak tu aplikaci postavte jinak. Vytvořte pár typů pacientů. Typ pacienta si medik zvolí v listboxe a nastaví mu to hromady parametrů v pozadí. Tyto typy nastaví iniciální parametre (jako Hct, Hb Beox, ...). S týmto inicálním stavem pak již počas spustené simulace nelze hýbat. Počas spustené simulace lze však nastavovat to, co se reálne s pacientem děje. Bude to intuitivní. Zrozumitelné. Bez nutnosti vysvětlování teorie, že existuje neoscilačný steady state v jednom bode. Atď.

@TomasKulhanek
Copy link
Member Author

Mne ani nevadí non-tunable parameters, ale chtěl jsem vědět různé možnosti řešení. Díky za všechny poznámky, postřehy a workaround od Filipa. Do 18. listopadu bychom rádi měli nějakou náhradu za Bloody Mary, která s Flashem už nejde ve Windows spustit. A nejlépe v PL3.0. Vzhledem k omezeným zdrojům není asi v současných silách vyrábět něco úplně nového, úplně od začátku. Možná by to mohla být výzva pro někoho, kdo by si chtěl dodělat třeba habilitaci :-)?

@filip-jezek
Copy link
Member

Ano, taková aplikace by asi byla lepší. Je reálné ji trochu překopat? Jak by se pak ale řešila třeba infuze Hb nebo alb? Nechceme přidávat celou krev, ale pouze Alb (elektroneutralne s H/HCO3), nebo samotné krvinky (Hct s Hb). Na vysvětlování je občas lepší mít možnost udělat i nefyzikální mezikroky, než skočíš na přidávání celé krve, při pokojové teplotě etc..

Hemolýza by se také jednodušejí simulovala elektroneutrálním clearance Hb než pouštěním žilou. Tím chci říci, že se musíme naučit pracovat i s přidáváním / odebíráním jednotlivých látek a znát k tomu předpoklady (udržení entalpie, elektroneutrality...). Zrovna u Hb se mi v PL nedaří najít žádnou souvislost s nábojem, je tam ale komplikace s Hct.

Jak na to? Jak udělat PL3.0 opravdu užitečnou?

@MarekMatejak
Copy link

MarekMatejak commented Oct 25, 2021

Ano, taková aplikace by asi byla lepší. Je reálné ji trochu překopat?

Rozdelenie parametrov na non-tunable a tunable dava zmysel. Po zmene non-tunable pak je potreba simulaci spustit rucne, zatim co pri zmene tunable si moze simulace bezat. Predpokladam, ze toto neni moc prace, ci?

Jak by se pak ale řešila třeba infuze Hb nebo alb? Nechceme přidávat celou krev, ale pouze Alb (elektroneutralne s H/HCO3), nebo samotné krvinky (Hct s Hb).

Je potreba se divat na zlozeni roztoku dane infuze. Napr. https://www.fda.gov/media/70406/download, kde je ta elektroneutralita spusobena doplnenym sodikem a draslikem. Jinak by bez nich ten albumin ani nemohl dlouho samotny existovat - svou kyselosti by se sam degradoval.

Na vysvětlování je občas lepší mít možnost udělat i nefyzikální mezikroky, než skočíš na přidávání celé krve, při pokojové teplotě etc..

Většinou s tímto tvrzením nesouhlasím. V tomto případě obzvlášť. Sledování jednotlivých substancí samostatně je v tomto případě kotraproduktivní, protože systém takovýmto zjednodušením získava množství skrytých předpokladů, které sice pedagog v své praxi považuje za samozřejmé avšak neposkveněný student je nezná. Viď napr. zložení infuze albumínu.

Hemolýza by se také jednodušejí simulovala elektroneutrálním clearance Hb než pouštěním žilou. Tím chci říci, že se musíme naučit pracovat i s přidáváním / odebíráním jednotlivých látek a znát k tomu předpoklady (udržení entalpie, elektroneutrality...). Zrovna u Hb se mi v PL nedaří najít žádnou souvislost s nábojem, je tam ale komplikace s Hct.

Model neobsahuje hemolýzu. Pokud ji chcete zahrnout je potřeba udělat víc než jenom miznúci hemoglobín. Rozpadem hemoglobínu totiž vznikají jiné látky, které celkový náboj roztoku nemění. Nění ale jeho enthalpii i entropii.

Jak na to? Jak udělat PL3.0 opravdu užitečnou?

Bohužel PL3.0 není a nebude určena pro nefyzikální simulace. Pokud ji chcete použít tak to doporučuji dělat fyzikálně korektně - bude to pak jednoduchší na pochopení.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants