LIBPF® Manuale dell’utente

Questo documento è il manuale dell’utente di modelli LIBPF® per la versione 1.1; è rivolto a chi desidera interagire attraverso l’applicazione desktop con modelli sviluppati da altri (model user). È anche disponibile inglese, francese e tedesco.

Prerequisiti:

Per maggiori informazioni consultare:

Introduzione

La tecnologia LIBPF® (C++ LIBrary for Process Flowsheeting) permette di creare una forma eseguibile ed interattiva del modello di un processo in varie configurazioni, che può poi essere distribuito come un applicativo a sé stante.

L’interazione con il modello avviene in modo controllato attraverso l’interfaccia utente di LIBPF® (UIPF: User Interface for Process Flowsheeting). L’interfaccia non permette all’utente la modifica delle configurazioni di processo: le correnti ed unità presenti, i loro collegamenti e le loro configurazioni sono fissate una volta per tutte da chi ha sviluppato il modello. Un eccezione possono essere certi modelli pre-configurati con particolari accorgimenti che permettono di accendere o spegnere alcuni oggetti. L’interfaccia permette invece di:

L’interfaccia utente di LIBPF® è compatibile con vari sistemi operativi: Microsoft Windows (Windows 10 o successivo), Apple macOS (14.1.1 o successivo) e Linux (es. Debian 11 e successivi, Ubuntu 21.04 e successivi); le immagini mostrate in questo manuale sono state riprese per la maggior parte su Microsoft Windows Windows 7, ma l’aspetto dell’applicazione e il suo funzionamento non cambiano sugli altri sistemi operativi.

L’interfaccia utente di LIBPF® è un’applicazione internazionalizzata che supporta 12 lingue: (arabo moderno, cinese semplificato, inglese, francese tedesco, ebraico, italiano, giapponese, coreano, portoghese, russo e spagnolo); e lo scorrimento del testo da destra verso sinistra (per arabo ed ebraico) oltre a quello da sinistra verso destra per tutte le altre lingue.

Avvio dell’interfaccia utente di LIBPF®

Su Windows al termine dell’installazione, l’interfaccia utente di LIBPF® è installata in Programmi → LIBPF® 1.1. Per lanciare l’interfaccia utente, cliccare su UIPF:

LIBPFUSRmanual-img001.png

Per maggior comodità, a questo punto è meglio cliccare col tasto destro del mouse sull’applicazione e selezionare Aggiungi alla barra delle applicazioni nel menu sottostante, in questo modo ogni qual volta si vuole avviare l’interfaccia utente LIBPF® la si troverà nella barra delle applicazioni del Desktop:

LIBPFUSRmanual-img004.png

Sui sistemi Linux l’interfaccia utente di LIBPF® è disponibile come file eseguibile /usr/bin/UIPF. È possibile spostare il file UIPF in qualunque posizione preferita (desktop, altre cartelle, …) ed eseguirlo: tutti i dati, i risultati e le impostazioni sono sempre salvati nella cartella di cache del kernel (/var/cache/LIBPF_1.1).

All’avvio, l’interfaccia si presenta come nella figura sottostante, dove si possono individuare le 6 aree principali :

LIBPFUSRmanual-img005.png
  1. Barra dei menu;

  2. Barra degli strumenti, che presenta una selezione dei comandi più usati;

  3. Pannello della vista ad albero, che mostra una vista strutturata dei vari elementi (correnti, unità, reazioni) che compongono il processo;

  4. Pannello della vista di dettaglio, dove è possibile consultare input e risultati, e visualizzare la connettività per i flowsheet;

  5. Pannello dei messaggi, dove vengono mostrati i messaggi di diagnostica provenienti dal motore di calcolo;

  6. Barra di stato, dove compaiono i messaggi di conferma e dove sulla destra si trova una casellina (verde nell’immagine) che in caso di errori diventa rossa.:

Gestione dei problemi

A differenza della maggior parte degli strumenti di simulazione di processo, l’interfaccia utente di LIBPF® non utilizza file per salvare i risultati delle simulazioni (che sono chiamati cases ovvero problemi in italiano), ma si appoggia ad un database.

Questo è possibile perché l’interfaccia non permette all’utente la modifica della configurazione di processo, ma solo dei parametri operativi e delle opzioni che sono state rese disponibili da chi ha sviluppato il modello. La distinzione tra configurazione (fissata per tutte le simulazioni di un certo processo) e condizioni operative (diverse da un problema all’altro) è analoga alla distinzione tra classe e instanza di un oggetto nella programmazione orientata agli oggetti, ed è un tratto distintivo della tecnologia LIBPF®.

La differenza tra l’approccio convenzionale e quello orientato agli oggetti di LIBPF® è illustrata dalle due seguenti tabelle:

Approccio convenzionale

Programma ad uso generale Configurazione / Condizioni di funzionamento
Microsoft Excel Modello di processo A in condizioni 1 (fileA1.xls)
Modello di processo A in condizioni 2 (fileA2.xls)
Modello di processo A in condizioni 3 (fileA3.xls)
Modello di processo A in condizioni 4 (fileA4.xls)

Approccio orientato agli oggetti di LIBPF®

Programma ad uso specifico / Configurazione Condizioni di funzionamento
Applicativo LIBPF® per il processo A Condizioni 1: problema A1
Condizioni 2: problema A2
Applicativo LIBPF® per il processo B Condizioni 3: problema B3
Condizioni 4: problema B4

I vantaggi dell’approccio orientato agli oggetti sono:

  1. Riduce la duplicazione delle informazioni;

  2. Riduce la possibilità di errori (es. per un confronto del processo A in condizioni 1 e 2 è necessario che i files Microsoft Excel fileA1.xls e fileA2.xls differiscano unicamente per le condizioni operative, e non per i dettagli di calcolo del modello - ma è facile fare errori !);

  3. Permette di aggiornare una serie di scenari (un insieme di problemi) con una nuova versione del processo (es. con modelli più accurati) in modo sistematico.

In una tipica installazione su Microsoft Windows il database usato è in formato Access (benché non sia richiesto che Microsoft Access sia installato), e si trova nel file persistency.mdb nella cartella di lavoro all’interno del profilo dell’utente corrente, tipicamente in C:\ProgramData\LIBPF 1.0.

Creazione di un nuovo problema

È possibile creare un nuovo problema nell’interfaccia utente di LIBPF® con il comando Problema → Nuovo dalla barra dei menù:

LIBPFUSRmanual-img006.png

ovvero con il corrispondente bottone nella barra degli strumenti:

LIBPFUSRmanual-img007.png

Il programma mostra una finestra di dialogo da cui è possibile scegliere la configurazione di processo (tipicamente un singolo applicativo LIBPF® può gestire diverse configurazioni), e dare un nome ed una descrizione al problema:

LIBPFUSRmanual-img008.png

Ci sono delle limitazioni ai caratteri ammissibili nei campi etichetta e descrizione:

Quando l’utente dà la conferma, l’interfaccia avvia il kernel di calcolo che instanzia un oggetto del tipo scelto (in questo caso DeltaT) con il nome (in questo caso “base”) e la descrizione (in questo caso “Base case”) forniti dall’utente, lo salva nel database e infine lo apre. Nota che i risultati non sono significativi perché il calcolo non è ancora stato lanciato.

Al termine di queste operazioni l’interfaccia utente di LIBPF® è pronta per la modifica dei dati di ingresso e per il calcolo, vedi i relativi capitoli Modifica dei dati di ingresso e Calcolo).

Salvataggio di un problema con nuovo nome / descrizione

Dopo aver consultato i risultati, è possibile decidere di creare un nuovo problema partendo dal problema corrente, rispetto al quale si vogliono modificare alcune condizioni operative.

Ad esempio se il caso corrente è il caso “Base case” si potrebbe voler creare un nuovo problema “75 percent case” per calcolare le condizioni operative a carico ridotto. Per far ciò è disponibile il comando Problemi → Salva con nome:

LIBPFUSRmanual-img009.png

che duplica nel database il problema corrente, applicando la descrizione da noi indicata:

LIBPFUSRmanual-img010.png

Per i caratteri ammessi nel campo descrizione valgono le limitazioni elencate al capitolo Creazione di un nuovo problema; una descrizione “75% case” non è ammessa perchè il carattere % non è ammesso.

NB: il nuovo problema non viene immediatamente caricato nell’interfaccia: è necessario procedere esplicitamente al recupero del nuovo problema, con le modalità illustrate al capitolo successivo Recupero di un problema esistente.

Come meglio illustrato al capitolo Modifica dei dati di ingresso, ogni modifica alle condizioni operative apportata attraverso l’interfaccia grafica viene immediatamente applicata al problema corrente. Perciò è importante dare il comando Salva con nome e subito dopo caricare il nuovo problema prima di iniziare a modificare alcunché, altrimenti andremo a modificare il  problema corrente !

Recupero di un problema esistente

Man mano che si procede con il lavoro, nel database vengono salvati tutti i problemi che generiamo. In qualsiasi momento è possibile riaprire un problema creato in precedenza, con il comando Problemi → Apri:

LIBPFUSRmanual-img011.png

ovvero con il corrispondente bottone nella barra degli strumenti:

LIBPFUSRmanual-img012.png

Il programma presenta allora una tabella con l’elenco dei problemi esistenti, da cui è possibile scegliere quello che interessa:

LIBPFUSRmanual-img013.png

N.B.: dopo il caricamento del problema non viene lanciato il calcolo: i problemi vengono salvati nel database subito dopo essere stati calcolati, quindi l’interfaccia grafica può ripristinarne lo stato completo (input e risultati).

Eliminazione dei problemi

Se per qualche motivo il problema corrente non interessa più, è possibile eliminarlo dal database con il comando Problemi → Elimina:

LIBPFUSRmanual-img014.png

Nota: il comando è disponibile solo dopo aver aver caricato il problema.

Nota bene: l’eliminazione di un problema è un processo irreversibile, e non viene richiesta una conferma: prestare attenzione !

Inoltre se nel database sono presenti troppi problemi, o se si vuole riazzerare il lavoro fatto, è possibile svuotare completamente il database. A questo scopo è disponibile il comando Problemi → Svuota:

LIBPFUSRmanual-img015.png

Nota bene: lo svuotamento completo del database è un processo irreversibile e dalle conseguenze estese (es. cancella anche problemi generati con un altro applicativo LIBPF®, che siano salvati nel database, anche se essi sono invisibili dall’interfaccia), per questo motivo viene richiesta un’esplicita conferma:

LIBPFUSRmanual-img016.png

Si consiglia, in caso di dubbio di creare una copia del database (persistency.mdb posto nella cartella di lavoro menzionata sopra) manualmente (copia-incolla del file) in una cartella sicura (i.e. Documenti\backupDataBases).

Organizzazione degli oggetti e dei sotto-oggetti

Quando un problema è aperto con l’interfaccia, nel pannello della vista ad albero viene mostrata una vista strutturata dei vari elementi (correnti, unità, reazioni) che compongono il processo.

Il programma usa varie icone per indicare il tipo di oggetto:

Icon Description
LIBPFUSRmanual-img017.png flowsheets e sotto-flowsheets
LIBPFUSRmanual-img018.png la cartella che contiene tutte le correnti
LIBPFUSRmanual-img019.png la cartella che contiene tutte le unità
LIBPFUSRmanual-img020.png una corrente materiale
LIBPFUSRmanual-img021.png una fase (normalmente contenuta in una corrente)
LIBPFUSRmanual-img022.png un’unità (es. un compressore oppure un reattore)
LIBPFUSRmanual-img023.png una reazione chimica
LIBPFUSRmanual-img024.png una multi-reazione (un tipo particolare di reazione che sposta le specie da una corrente all’altra, usata nelle unità celle a combustibile e membrane)
LIBPFUSRmanual-img025.png un oggetto sconosciuto (quest’icona non dovrebbe mai apparire)

Appena dopo aver aperto un problema, l’elemento radice (quello più in alto) rappresenta il problema corrente. La navigazione attraverso gli oggetti ed i sotto-oggetti avviene per mezzo del doppio click (singolo click per sistemi linux) sulla riga nella vista ad albero, che cambia l’oggetto selezionato: man mano che ci si addentra nella struttura ad albero, questa mostra solo gli oggetti contenuti nell’oggetto corrente.

Ad esempio partendo da una vista di questo tipo:

LIBPFUSRmanual-img026.png

facendo doppio click su Gasifier la vista cambierà in questo modo:

LIBPFUSRmanual-img027.png

si noti il percorso completo all’oggetto: JasperDanny:Gasifier; nei percorsi completi alle variabili viene usato il segno due punti (:) per separare gli oggetti dai sotto-oggetti, e il punto (.) per separare l’oggetto dalla variabile.

Continuando nella consultazione dei sotto-oggetti contenuti all’interno di Gasifier, facendo doppio click su RCOMB la vista ad albero diventerà:

LIBPFUSRmanual-img028.png

e infine facendo doppio click su reactions[1] verrà mostrato solo l’oggetto corrente (in quanto la reazione non contiene sotto-oggetti):

LIBPFUSRmanual-img029.png

si noti il percorso completo all’oggetto: JasperDanny:Gasifier:RCOMB:reactions[1]; per gli oggetti o le variabili vettoriali l’operatore suffisso parentesi quadra [] seleziona l’oggetto che interessa con un indice intero conteggiato a partire da zero, ad esempio reactions[0] è la prima reazione e x[5] è la sesta frazione molare.

La cartella Stream contiene oggetti di tipo Stream, ciascuno col suo stato termodinamico (T, P), e, come sotto-oggetti, le Phase, sia le singole fasi che (se vi è più di una fase presente) la fase totale. All’interno della cartella Unit si trovano i sotto-flowsheet e le operazioni unitarie ciascuna con le specifiche e i parametri che le caratterizzano (deltaP, duty, deltaH, deltaS, efficienze, ). Le unit possono a loro volta contenere le reazioni caratterizzate da coefficienti stechiometrici, costanti di equilibrio e/o grado di conversione.

Per risalire all’indietro la struttura di un singolo livello, è possibile usare il comando Vista → Su dalla barra dei menù:

LIBPFUSRmanual-img030.png

ovvero il corrispondente bottone nella barra degli strumenti:

LIBPFUSRmanual-img031.png

Per risalire all’indietro la struttura fino al livello più alto, è possibile usare il comando Vista → Radice dalla barra dei menù:

LIBPFUSRmanual-img032.png

ovvero il corrispondente bottone nella barra degli strumenti:

LIBPFUSRmanual-img033.png

Una volta selezionato l’oggetto d’interesse, è possibile consultare i dettagli nel pannello di destra (vista di dettaglio), che presenta tre linguette:

L’ultima linguetta è attiva solamente per i flowsheet e per i sotto-flowsheet, permettendo la visualizzazione del diagramma del processo, di ingrandirlo o rimpicciolirlo, e di consultare i sotto-oggetti cliccando interattivamente sulle unità o sulle correnti: l’effetto è equivalente ad un doppio click sull’oggetto corrispondente nella vista ad albero a sinistra.

Simulazione

Modifica dei dati di ingresso

L’interfaccia utente permette di impostare i parametri operativi, le condizioni di funzionamento e cambiare le opzioni che sono state rese disponibili da chi ha sviluppato il modello. Questo implica che alcuni parametri di input potrebbero essere inaccessibili, perché lo sviluppatore del modello ha ritenuto che fossero poco interessanti o addirittura pericolosi da manipolare (es. per la stabilità, correttezza e convergenza del modello).

Con queste limitazioni, la modifica è molto diretta: basta sfogliare la vista ad albero e identificare la corrente, l’unità, il sotto-flowsheet o la reazione che si vuole modificare, ed effettuare un doppio click. Ad esempio se vogliamo modificare un parametro d’ingresso relativo alla reazione reactions[0] di tipo BiomassReaction_pyro_max nell’unità RPY di tipo FlashDrum che si trova nel sotto-flowsheet Gasifier di tipo PerfectMixedStageGasificationPluggable, basterà sfogliare la vista ad albero ed effettuare un doppio click sopra all’oggetto Gasifier:RPY:reactions[0]:

LIBPFUSRmanual-img034.png

affinché cambi la vista ad albero, che mostra ora l’oggetto corrente:

LIBPFUSRmanual-img035.png

Il pannello della vista di dettaglio presenta ora una vista filtrata dei dettagli relativi alla reazione selezionata; in particolare cliccando sulla linguetta Input verranno visualizzate le variabili d’ingresso che possono essere manipolate (in questo caso una sola, la conversione):

LIBPFUSRmanual-img036.png

A questo punto basta cliccare nella casella e digitare il nuovo valore:

LIBPFUSRmanual-img037.png

La modifica diventa effettiva premendo Invio oppure cliccando su un altro elemento dell’interfaccia utente (cioè togliendo il focus al campo di input).

Ogni modifica alle condizioni operative così apportata attraverso l’interfaccia grafica viene immediatamente attualizzata nel database in riferimento al problema corrente. Per questo motivo non è necessario salvare esplicitamente le modifiche come siamo abituati a fare in altri programmi: il comando Problemi → Salva non esiste neppure, c’è invece Problemi → Salva con nome, che viene usato per creare una copia del problema corrente (vedi il relativo capitolo Salvataggio di un problema con nuovo nome / descrizione).

Calcolo

Quando viene creato un nuovo problema, i risultati non sono significativi perché il calcolo non è ancora stato lanciato (vedi Creazione di un nuovo problema). Inoltre se si carica un problema esistente (vedi Recupero di un problema esistente) oppure se si fanno delle modifiche al problema corrente (vedi capitolo precedente Modifica dei dati di ingresso), è necessario lanciare il calcolo esplicitamente.

Questa logica è vantaggiosa se le simulazioni sono di durata considerevole: infatti se il calcolo partisse in automatico dopo ogni modifica, ciò potrebbe rendere poco reattiva l’interfaccia utente.

In ogni caso il calcolo del problema corrente si può lanciare con il comando Calcola → Calcola:

LIBPFUSRmanual-img038.png

ovvero con il corrispondente bottone nella barra degli strumenti:

LIBPFUSRmanual-img039.png

Il calcolo viene delegato dall’interfaccia grafica ad un eseguibile, il kernel di calcolo, che viene lanciato come processo separato, come è possibile osservare dalla notifica riportata nella barra di stato in basso a destra:

LIBPFUSRmanual-img040.png

Durante il calcolo nel pannello inferiore (dei messaggi), vengono mostrati in tempo reale i messaggi di diagnostica provenienti dal kernel, per poter sorvegliare l’andamento del calcolo. Un tipico tracciato in caso di riuscita del calcolo potrebbe essere:

LIBPFUSRmanual-img041.png

Se invece durante il calcolo si presentano degli errori, questi vengono evidenziati in rosso nel pannello dei messaggi:

LIBPFUSRmanual-img042.png

In questi casi anomali la durata di un calcolo potrebbe protrarsi troppo a lungo, e visti gli errori incontrati i risultati saranno certamente privi di interesse; se necessario in questi casi è possibile interrompere il calcolo, con il comando Calcola → Stop:

LIBPFUSRmanual-img043.png

ovvero con il corrispondente bottone nella barra degli strumenti:

LIBPFUSRmanual-img044.png

Al termine di ogni calcolo è possibile consultare i risultati con le modalità indicate al capitolo Consultazione dei risultati.

Omotopia

L’omotopia è un metodo numerico di continuazione globalmente convergente per la risoluzione di sistemi di equazioni non-lineari. Attraverso l’omotopia, a partire da un problema numerico complesso, viene costruito e risolto un opportuno problema semplice tale da poter essere deformato e trasformato nel problema originario. Durante la deformazione si tiene traccia sia delle deformazioni intermedie del sistema di equazioni sia delle corrispondenti soluzioni intermedie in modo da adattare la deformazione e la velocità di deformazione.

Nell’interfaccia utente di LIBPF® è possibile eseguire il calcolo in modalità omotopia:

LIBPFUSRmanual-img045.png

Questa modalità è utile quando un processo risulta molto sensibile al cambiamento di alcuni parametri di ingresso o qualora il valore di questi parametri venga cambiati “molto” in termini di valori numerici. Durante la risoluzione in modalità omotopia tutti i parametri di input che sono stati variati dall’utente rispetto alla precedente esecuzione del calcolo vengono variati simultaneamente e gradualmente, eseguendo più simulazioni per valori intermedi fino a portarli ai nuovi valori desiderati.

Consultazione dei risultati

Stato del calcolo

Al termine di un calcolo oppure appena dopo aver creato un nuovo problema l’interfaccia utente mostrerà qualcosa di simile a questa figura:

LIBPFUSRmanual-img046.png

Si noti innanzitutto nella barra di stato in basso a destra la notifica “Il nodo 426 è stato aperto”: questo numero è usato all’interno del database per identificare univocamente il problema corrente.

Nel pannello in alto a sinistra (vista ad albero) il programma usa dei codici di colore per indicare a colpo l’occhio lo stato dell’ultimo calcolo:

In caso di avvisi (warnings) o errori i codici di colori sono riportati su ciascun oggetto contenuto, per rendere più agevole la ricerca della causa:

LIBPFUSRmanual-img050.png

Da questo esempio di vede che il problema (“base”) contiene degli errori (riga di colore rosso) perchè i sotto-oggetti Gasifier e SynGasCond contengono degli errori. I sotto-oggetti AirPreHeater, GasMediumPreHeater, SynGasCooler e TarCracker contengono degli avvisi o warnings (righe di colore giallo), ma gli errori prevalgono nella determinazione dello stato globale del problema.

I dettagli e le descrizioni relativi a errori e avvisi (warnings) sono riportati nella scheda “Messaggi” a destra con le stesse convenzioni di colore, giallo per gli avvisi warnings e rosso per gli errori.

LIBPFUSRmanual-img051.png

Risultati

I risultati per le varie unità e correnti si trovano nelle linguette “Risultati” nel pannello di destra (vista di dettaglio), navigando attraverso gli oggetti ed i sotto-oggetti come illustrato al capitolo Organizzazione degli oggetti e dei sotto-oggetti.

Queste tabelle permettono la selezione di una regione o dell’intera tabella, e la copia negli appunti:

LIBPFUSRmanual-img052.png

Per la selezione in figura, il testo copiato negli appunti comprenderà l’intestazione delle colonne e il contenuto delle celle selezionate, con le colonne separate da tabulazioni (carattere ⇥):

Tag ⇥Value ⇥Units
:purity[0] ⇥0,269262 ⇥
:purity[1] ⇥0,689469 ⇥
:purity[2] ⇥0,0412695 ⇥
:recovery[0] ⇥0,678194 ⇥
:recovery[1] ⇥0,984059 ⇥
:recovery[2] ⇥0,589029 ⇥
TestMembraneFreeFlowMulti:FEED:P ⇥650.000 ⇥m^-1 kg s^-2

Gli appunti possono essere direttamente incollati in un foglio elettronico, poiché le tabulazioni vengono interpretate come interruzioni di colonna.

I risultati per le correnti materiali, (bilanci di materia ed energia) possono essere esportati ad un programma di spreadsheeting quale Microsoft Excel (se disponibile) sui sistemi operativi Microsoft Windows supportati, oppure LibreOffice (se disponibile) su tutti i sistemi operativi supportati, come illustrato nei due paragrafi successivi.

Per quanto riguarda i valori numerici, l’interfaccia utente di LIBPF® utilizza le impostazioni di sistema per i formati (virgola o punto come separatore decimale etc.).

Unità di misura (UOM)

L’interfaccia utente di LIBPF® attualmente supporta tre sistemi di unità di misura: SI (Sistema Internazionale), EN (sistema anglosassone) e Eng (sistema ingegneristico). Di base è impostato il SI ed il kernel di fatto utilizza questo sistema di unità di misura per eseguire i calcoli. É possibile cambiare il sistema di unità per tutte le variabili selezionando il menù Impostazioni → Unità:

LIBPFUSRmanual-img053.png

A partire da quando il settaggio globale per unità viene cambiato, tutte le maschere di input e di risultati vengono presentate nelle nuove unità, e i valori già inseriti vengono opportunamente cambiati in modo che non vi sia alcun cambiamento nella simulazione.

Oltre ai sistemi di unità di misura, l’interfaccia utente di LIBPF® supporta anche altre unità di misura selezionabili per le singole variabili sia negli input sia nei risultati. Queste impostazioni sono raggiungibili per ogni variabile selezionando la corrispondente cella nella colonna “Unità di misura”. Selezionata l’unità, il valore numerico viene convertito automaticamente.

LIBPFUSRmanual-img054.png

Le unità di misura supportate sono elencate in questa tabella, che le elenca suddivise per ogni grandezza fisica.

Esportazione dei bilanci di materia ed energia a LibreOffice

Se è installato un programma in grado di leggere il formato OpenDocument ODF quale LibreOffice, è possibile esportare tutta la tabella dei bilanci di materia ed energia per le correnti materiali agendo sul comando Vista → Risultati per le correnti in formato ODS:

LIBPFUSRmanual-img055.png

ovvero con il corrispondente bottone nella barra degli strumenti:

LIBPFUSRmanual-img056.png

Nota: il comando è disponibile solo dopo aver aver effettuato il calcolo.

Anche in questo caso il foglio elettronico viene aperto in pochi secondi:

LIBPFUSRmanual-img057.png

La logica di funzionamento di questo comando è tuttavia molto diversa da quella descritta al capitolo successivo, Esportazione dei bilanci di materia ed energia a Microsoft Excel; in questo caso infatti non vengono eseguite macro in LibreOffice, bensì il file streamtable.ods viene generato direttamente a partire da certi files prodotti dal kernel di calcolo (in particolare content.xml, che viene prodotto al termine di ogni calcolo). Questo implica che il file streamtable.ods viene riscritto ogni volta, quindi non è possibile mantenervi un foglio “formatted” che presenti gli stessi risultati opportunamente formattati, come in Microsoft Excel. Inoltre per una questione interna a LIBPF®, i dati per ciascuna corrente e per ciascuna fase sono disposti per riga anziché per colonna come nel caso di Microsoft Excel, il che ne rende difficile la lettura.

L’approccio per creare una formattazione leggibile è creare un file LibreOffice indipendente es. formattato.ods, e andare a prendere le caselle che interessano creando dei link tra il file formattato.ods e il file streamtable.ods, esempio:

=file:///home/paolog/LIBPF_1.0/streamtable.ods’#$Tabella1.$A$1

Può essere utile la funzione LibreOffice INDICE(riferimento, riga, colonna) che permette di passare da una visualizzazione per righe ad una visualizzazione per colonne.

Creando dei collegamenti di questo tipo, il file formattato.ods rimarrà collegato in permanenza con il file streamtable.ods; ad ogni nuova girata sarà possibile aggiornare il file formattato.ods procedendo in quattro passaggi:

  1. Dare nell’interfaccia utente di LIBPF® il comando Vista → Risultati per le correnti in formato ODS;

  2. Chiudere il file streamtable.ods così rigenerato che viene aperto automaticamente (non ci interessa consultare o modificare questo file);

  3. In LibreOffice dare il comando Modifica → Collegamenti per formattato.ods:

    LIBPFUSRmanual-img058.png
  4. Cliccare sul bottone “Aggiorna” e chiudere la finestra di dialogo:

    LIBPFUSRmanual-img059.png

Esportazione dei bilanci di materia ed energia a Microsoft Excel

Sui sistemi operativi Microsoft Windows supportati, se è installato il programma Microsoft Excel, è possibile esportare tutta la tabella dei bilanci di materia ed energia per le correnti materiali agendo sul comando Vista → Risultati per le correnti in formato XLS:

LIBPFUSRmanual-img060.png

ovvero con il corrispondente bottone nella barra degli strumenti:

LIBPFUSRmanual-img061.png

Questo comando apre il file streamtable.xls in Microsoft Excel, e avvia una macro scritta in Visual Basic for Applications che legge i valori necessari dal database Microsoft Access, caricandoli sul foglio “rawdata” del file.

Il foglio “formatted” presenta gli stessi risultati opportunamente formattati:

LIBPFUSRmanual-img062.png

Prestare attenzione alle colonne del foglio “formatted”: potrebbe essere necessario estendere o ridurre le colonne formattate con gli opportuni comandi di Excel, per gestire flowsheet con un numero maggiore o minore di correnti. Per estendere le colonne formattate selezionare la colonna della prima stream e cliccare nell’angolo in alto a destra della selezione (dove compare il cursore di riempimento) e trascinare verso destra. Dopo di che eliminare le colonne prive del nome della stream.

La finestra di Microsoft Excel può essere lasciata aperta, e premendo sul bottone “Aggiorna i risultati” è possibile in qualunque momento (es. dopo un nuovo calcolo) ripetere l’esecuzione della macro: questo file rimarrà puntato sull’oggetto che era aperto nell’interfaccia utente di LIBPF® al momento in cui è stato dato il comando di aprire Excel.

Esportazione di tutti i dati in un file di testo

É possibile esportare tutti i dati per l’oggetto attualmente aperto e i suoi sotto-oggetti, salvandoli in un file di testo (.txt). Questa funzionalità è disponibile sotto il menu “Vista” (in inglese “View”), cliccando su “Risultati in formato TXT” (in inglese, “TXT results”):

LIBPFUSRmanual-img063.png

Quando questo comando viene richiamato, il modello attualmente mostrato (più precisamente il nodo correntemente aperto nella vista ad albero) da UIPF viene esportato in un file di testo denominato “ID.txt”, in cui ID è l’identificativo con cui il modello è salvato nel database. Il file di testo generato viene aperto automaticamente dal programma predisposto dal sistema operativo per aprire i file di testo (i.e. Blocco Note).

Esportazione di tutti i dati in formato XHTML

É possibile esportare tutti i dati per l’oggetto attualmente aperto e i suoi sotto-oggetti, salvandoli in formato XHTML. Questa funzionalità è disponibile sotto il menu “Vista” (in inglese “View”), cliccando su “Risultati in formato HTML” (in inglese, “HTML results”):

LIBPFUSRmanual-img064.png

Quando questo comando viene richiamato, il modello attualmente mostrato (più precisamente il nodo correntemente aperto nella vista ad albero) viene esportato in una serie di files XML separati, che vengono posti in una directory temporanea insieme ad una dozzina di files ausiliari che ne permettono la visualizzazione.

Il file XHTML denominato “index.xhtml”, viene aperto automaticamente dal programma predisposto dal sistema operativo per aprire i file HTML (che deve essere uno dei browser supportati), e da questo è possibile navigare tutti i sotto-oggetti seguendo i link.

Analisi di sensitività

Succede molto spesso nel corso di un progetto di dover effettuare degli studi di sensitività. Questi studi di sensitività sono molto ripetitivi e consistono nel cambiare un certo numero di parametri (variabili controllate) su un certo range per un certo numero di punti, eseguendo una simulazione per ogni punto e riportando in una tabella  un certo numero di risultati (variabili osservate).

Per automatizzare questi compiti l’interfaccia utente di LIBPF® ha una funzionalità di analisi di sensitività multidimensionale. In pratica questo strumento permette di determinare quanto un modello sia sensibile alla variazione del valore di uno dei parametri e di valutare come la variazione del valore influenzi il comportamento del modello; Inoltre, fornisce un aiuto per la selezione delle cosiddette variabili “critiche”, cioè quelle il cui scostamento dal valore nominale influisce maggiormente sugli indicatori di performance; con questo strumento, si possono acquisire in tempi brevi, una gran quantità di informazioni relative al modello e al processo. Il tool di analisi di sensitività disponibile nell’Interfaccia Utente di LIBPF® consente di effettuare differenti simulazioni controllando una o più variabili del problema e mantenendo invariate tutte le altre, e monitorare l’effetto su uno o più risultati.

Cliccando su Strumenti → Analisi di sensitività:

LIBPFUSRmanual-img065.png

appare una finestra contenente tre schede: “Controlla”, “Osserva” e “Risultati”.

LIBPFUSRmanual-img066.png

Nella scheda “Controlla” è possibile selezionare una o più variabili controllate (almeno una è necessaria), selezionarne l’unità di misura, assegnare un’etichetta che verrà visualizzata come intestazione nella colonna corrispondente della tabella dei risultati, stabilire i valori di inizio e fine del range di variazione ed il numero di punti in cui suddividere il range. La tabella si presenta con una riga già inserita, l’aggiunta di altre variabili controllate avviene per mezzo del bottone “+” in basso a sinistra. La rimozione di una variabile controllata avviene per mezzo del bottone “-” a fianco della stessa.

Nella parte bassa della finestra  è possibile scegliere in quale ordine eseguire la sensitività (naturale, bustrofedico che è il valore di difetto o quasi-spirale) e il limite di tempo massimo per il calcolo. L’ordinamento della sensitività è importante qualora si riscontrino difficoltà di convergenza in alcuni punti. Il limite di tempo massimo per il calcolo della sensitività, se viene impostato ad un valore strettamente maggiore di zero, viene interpretato come un time-out espresso in secondi - se l’esecuzione dell’analisi di sensitività dura così a lungo, la girata viene interrotta e i risultati ottenuti fino a quel punto vengono riportati.

L’utente può scegliere la variabile controllata dalla lista di tutte le variabili specificabili per il caso corrente (sono le variabili che appaiono sulle linguette “Input” delle unità e degli stream).

Non appena una variabile controllata è stata scelta, o la sua selezione è stata cambiata, il programma aggiorna le unità di misura e inizializza i limiti di inizio e fine della sensitività con il valore corrente della variabile; inoltre viene mostrata la descrizione della variabile. L’utente tipicamente deve solo cambiare uno dei due limiti e probabilmente impostare il numero di punti ad un valore maggiore del valore di difetto pari ad 1 che ridurrebbe la sensitività all’esecuzione di una sola girata.

A questo punto è possibile premendo “Avanti” procedere alla linguetta “Osserva” dove si possono scegliere le variabili (risultati) da osservare.

L’utente può scegliere le variabili osservate dalla lista di tutte le variabili di tipo risultato  per il caso corrente (sono le variabili che appaiono sulle linguette “Risultati” delle unità e degli stream). Non appena una variabile osservata è stata scelta, o la sua selezione è stata cambiata, il programma aggiorna le unità di misura, la descrizione e l’etichetta della variabile. L’utente se lo desidera può cambiare l’etichetta, che verrà mostrata come intestazione nella colonna corrispondente della tabella dei risultati.

La tabella delle variabili osservate ha un numero variabile di righe, comunque maggiore o uguale ad uno (non ha senso eseguire uno studio di sensitività senza osservare almeno una variabile). L’utente può aggiungere nuove righe o eliminare quelle esistenti per mezzo dei bottoni più (+) e meno (-).

LIBPFUSRmanual-img067.png

A questo punto è possibile premendo “Avanti” procedere alla linguetta “Risultati” da cui è possibile avviare l’analisi di sensitività cliccando sul bottone “Vai”; prima di far ciò può essere utile salvare l’analisi di sensitività premendo sul bottone “Salva” (si veda più sotto il paragrafo “Salvataggio e recupero di analisi di sensitività”).

Si noti che una volta arrivati alla linguetta “Risultati” le due linguette precedenti sono congelate, cioè le impostazioni per la variabile controllata e per le variabili osservate non possono essere più cambiate. In realtà il bottone “Modifica la sensitività” funziona come un bottone “indietro”: sblocca le pagine “Controlla“ e “Osserva” e permette di cambiare qualsiasi impostazione.

Se invece si lancia l’analisi di sensitività, l’interfaccia utente di LIBPF® avvia il kernel di calcolo. Durante l’esecuzione le righe relative ad ogni valore della variabile controllata vengono evidenziate via via al procedere del calcolo, e i risultati delle variabili osservate vengono tabulati non appena diventano disponibili. È possibile in ogni momento copiare la tabella (premendo sul bottone “Copia i risultati negli appunti”), interrompere (premendo sul bottone “Ferma”) e riprendere (premendo nuovamente sul bottone “Vai”) l’esecuzione del calcolo.

LIBPFUSRmanual-img068.png

Le righe sono evidenziate con codici di colori in base alla tabella:

Grigio grey square Riga in esecuzione
Verde green square Riga eseguita senza avvisi (warnings) o errori
Giallo yellow square Riga eseguita con avvisi (warnings)
Rosso red square Riga eseguita con errori (i risultati sono disponibili ma probabilmente non sono validi)
Rosso scuro dark red square Riga non eseguita a causa di un errore interno grave di LIBPF® (nessun risultato disponibile)
Viola purple square Riga non eseguita a causa di un crash di LIBPF® (nessun risultato disponibile)
Ciano scuro dark cyan square Riga non eseguita fino alla fine a cause di un interruzione da parte dell’utente (nessun risultato disponibile)

La tabella, così generata, può essere copiata negli appunti (premendo sul bottone “Copia i risultati negli appunti”) e da qui in un foglio di calcolo.

Nota: al termine della sensitività l’interfaccia sostituisce il valore assunto dalla variabile controllata nell’ultima girata nella corrispondente casella di Input, in modo che il problema caricato risulta modificato.

Salvataggio e recupero di analisi di sensitività

Se dopo aver completamente specificato l’analisi di sensitività si preme sul bottone “Salva” presente sulla seconda linguetta (“Osserva”), appare una piccola finestra modale:

LIBPFUSRmanual-img069.png

dov’è possibile inserire un nome mnemonico per la sensitività, lungo fino a 50 caratteri, e contenente qualsiasi segno eccetto i seguenti: < (minore) > (maggiore) . (punto) : (due punti) " (virgolette doppie) / (diviso) \ (diviso all’indietro) | (barra verticale) ? (punto di domanda) * (asterisco) _ (trattino basso), caratteri la cui rappresentazione numerica ASCII è compresa tra 0 e 31 e $ (simbolo del dollaro).

Se il nome inserito è già stato usato in precedenza per salvare un’analisi di sensitività per lo stesso tipo, verrà proposta una maschera per richiedere conferma alla sostituzione del file esistente; l’analisi di sensitività viene salvata in un file XML nella directory di lavoro, con un nome completo ottenuto combinando il nome della sensitività con il nome del tipo corrente.

Le sensitività salvate in precedenza possono essere recuperate col comando Apri analisi di sensitività esistente disponibile nel menù Settings:

LIBPFUSRmanual-img065.png

che fa apparire la finestra per la scelta dell’analisi di sensitività da recuperare:

LIBPFUSRmanual-img070.png

Questa finestra mostra la lista delle analisi di sensitività salvate, mostrando per ognuna il tipo del modello; le analisi di sensitività salvate il cui tipo è uguale al tipo attualmente aperto sono evidenziate in azzurro. Tipicamente ha senso recuperare un’analisi di sensitività salvata in precedenza per lo stesso tipo, ma gli utenti esperti possono sfruttare la flessibilità di recuperare anche analisi riferite a tipi diversi, a patto di effettuare gli adattamenti richiesti se necessario.

Impostazioni

Dal menù impostazioni è possibile cambiare alcuni settaggi generali dell’applicazione:

LIBPFUSRmanual-img071.png