Take out internal development notes.
parent
cd7649fd1b
commit
67684e14b9
@ -1,118 +0,0 @@
|
|||||||
L'inizializzazione del sistema prevede, ora, che l'assemblaggio del
|
|
||||||
descrittore e quello della matrice possano essere eseguiti
|
|
||||||
indipendentemente.
|
|
||||||
Durante la sua vita, il descrittore può trovarsi in due differenti
|
|
||||||
stati:
|
|
||||||
1. bld: stato di build. in questo stato è possibile aggiornare il
|
|
||||||
contenuto del descrittore attraverso la routine psb_dscins.
|
|
||||||
2. asb: stato assembled. questo è lo stato della rappresentazione
|
|
||||||
finale del descrittore ed è raggiunto a valle di una chiamata alla
|
|
||||||
routine psb_dscasb.
|
|
||||||
|
|
||||||
Durante la sua vita, la matrice può trovarsi in tre differenti
|
|
||||||
stati:
|
|
||||||
1. bld: stato di build. in questo stato è possibile aggiornare il
|
|
||||||
contenuto dela matrice attraverso la routine psb_spins.
|
|
||||||
2. asb: stato assembled. questo è lo stato della rappresentazione
|
|
||||||
finale della matrice ed è raggiunto a valle di una chiamata alla
|
|
||||||
routine psb_spasb.
|
|
||||||
3. upd: stato di update. è lo stato in cui è possibile (attraverso
|
|
||||||
una chiamata alla routine psb_spasb) rigenerare la matrice.
|
|
||||||
|
|
||||||
|
|
||||||
- Assemblaggio contestuale di matrice e descrittore
|
|
||||||
|
|
||||||
Il procedimento da seguire prevede il seguente ordine di chiamate:
|
|
||||||
1. psb_dscall: allocazione del descrittore. Alla fine di questo
|
|
||||||
step lo stato del descrittore sarà bld
|
|
||||||
2. psb_spall: allocazione della matrice. Alla fine di questo
|
|
||||||
step lo stato della matrice sarà bld
|
|
||||||
3. psb_spins: in questo caso sia il descrittore che la matrice
|
|
||||||
saranno nello stato bld. Quindi la psb_spins invoca la
|
|
||||||
psb_dscins per portare il descrittore in uno stato pre-asb e
|
|
||||||
poi effettivamente inserisce i coefficienti nella
|
|
||||||
matrice (che quindi sarà anch'essa in uno stato
|
|
||||||
pre-asb). Dunque, nel caso di costruzione/assemblaggio
|
|
||||||
contestuale di matrise e descrittore, il contenuto del
|
|
||||||
descrittore è implicitamente aggiornato da questa
|
|
||||||
chiamata. (nel caso separato bisognerà esplicitamente
|
|
||||||
prevedere questa fase attraverso una chiamata alla psb_dscins)
|
|
||||||
4. psb_dscasb: il descrittore viene assemblato e quindi portato
|
|
||||||
allo stato asb.
|
|
||||||
5. psb_spasb: la matrice viene assemblata e quindi portata
|
|
||||||
allo stato asb.
|
|
||||||
|
|
||||||
|
|
||||||
- Assemblaggio di descrittore e matrice indipendenti
|
|
||||||
|
|
||||||
Il procedimento da seguire per costruire/assemblare il descrittore
|
|
||||||
prevede il seguente ordine di chiamate:
|
|
||||||
1. psb_dscall: allocazione del descrittore. Alla fine di questo
|
|
||||||
step lo stato del descrittore sarà bld
|
|
||||||
2. psb_dscins: il descrittore viene inizializzato a partire dal
|
|
||||||
pattern di sparsità della matrice e dal partizionamento. Alla
|
|
||||||
fine di questo step sarà in uno stato pre-asb
|
|
||||||
3. psb_dscasb: il descrittore viene assemblato e quindi portato
|
|
||||||
allo stato asb.
|
|
||||||
|
|
||||||
Il procedimento da seguire per costruire/assemblare la matrice
|
|
||||||
prevede il seguente ordine di chiamate:
|
|
||||||
1. psb_spall: allocazione della matrice. Alla fine di questo
|
|
||||||
step lo stato della matrice sarà bld
|
|
||||||
2. psb_spins: i coefficienti vengono effettivamente inseriti
|
|
||||||
nella matrice che sarà portata ad uno stato pre-asb.
|
|
||||||
3. psb_spasb: la matrice viene assemblata e quindi portata
|
|
||||||
allo stato asb.
|
|
||||||
|
|
||||||
|
|
||||||
- Aggiornamento della matrice
|
|
||||||
Se il pattern di sparsità della matrice non cambia, la matrice può
|
|
||||||
essere aggiornata attraverso il seguente procedimento:
|
|
||||||
1. psb_sprn: reinizializza la matrice. Alla fine di questo step
|
|
||||||
la matrice sarà nello stato upd
|
|
||||||
2. psb_spins: i coefficienti della matrice vengono reinseriti
|
|
||||||
3. psb_spasb: la matrice viene assemblata e riportata nello stato
|
|
||||||
asb.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
La gestione degli errori
|
|
||||||
|
|
||||||
La nuova gestione degli errori prevede la creazione di uno stack di
|
|
||||||
messaggi di errore che possa consentire di seguire a ritroso la
|
|
||||||
sequenza di chiamate di routine fino ad arrivare a quella in cui
|
|
||||||
l'errore è stato rilevato. Tutte le nuove interfacce prevedono un
|
|
||||||
argomento "info" il quale ritorna un valore > 0 se all'interno della
|
|
||||||
routine chiamata è stato rilevato un errore. Dunque ogni volta che
|
|
||||||
si rileva una condizione di errore (o per verifica diretta o perchè
|
|
||||||
una routine chiamata ha ritornato info>0) occorre mettere l'errore
|
|
||||||
in cima allo stack per mezzo della routine
|
|
||||||
psb_errpush(info,name,i_err,a_err) in cui:
|
|
||||||
info: codice di errore (si veda SRC/F90/errormod.f90 per una
|
|
||||||
corrispondenza codice-messaggiodierrore)
|
|
||||||
name: stringa di lunghezza 20 contenente il nome della routine
|
|
||||||
che invoca la psb_errpush()
|
|
||||||
i_err: opzionale. E' un array di 5 interi contenente informazioni
|
|
||||||
aggiuntive per il messaggio di errore (si veda errormod.f90)
|
|
||||||
a_err: opzionale. E' una stringa di 20 contenente informazioni
|
|
||||||
aggiuntive per il messaggio di errore (si veda errormod.f90)
|
|
||||||
|
|
||||||
attraverso la routine psb_seterrverbosity si può impostare la
|
|
||||||
verbosità del messaggio d'errore (se =1 viene stampato solo l'errore
|
|
||||||
in cima allo stack; se >1 vengono stampati tutti)
|
|
||||||
|
|
||||||
la routine psb_error(ictxt) provoca la stampa degli (dell') errori
|
|
||||||
(errore) sullo stack ed, eventualmente, stronca il set di processi.
|
|
||||||
l'argomento ictxt è opzionale: se è assente viene semplicemente
|
|
||||||
stampato il messaggio d'errore altrimenti viene anche abortita
|
|
||||||
l'esecuzione di tutti i processi.
|
|
||||||
|
|
||||||
la routine psb_seterraction(action) determina quale azione deve essere
|
|
||||||
intrapresa a fronte del rilevamento di un errore:
|
|
||||||
action =0 : la routine in cui è stato rilevato un errore (e quindi
|
|
||||||
dopo che l'errore stesso sia stato inserito sullo stack)
|
|
||||||
semplicemente ritorna al chiamante un codice di errore
|
|
||||||
action =1 : la routine in cui è stato rilevato un errore (e quindi
|
|
||||||
dopo che l'errore stesso sia stato inserito sullo stack)
|
|
||||||
prima di ritornare invoca la psb_error (e quindi, può, eventualmente
|
|
||||||
stroncare l'esecuzione di tutti i processi).
|
|
@ -1,73 +0,0 @@
|
|||||||
Struttura:
|
|
||||||
psblas:
|
|
||||||
psblas/src: la directory contenente il codice sorgente
|
|
||||||
psblas/src/comm: contiene tutte le routine preposte allo scambio di
|
|
||||||
dati
|
|
||||||
psblas/src/internals: contiene una serie di routine utilizzate per
|
|
||||||
l'assemblaggio dei descrittori di comunicazione e per
|
|
||||||
lo scambio di dati (psi_dswap_data e psi_dswap_tran)
|
|
||||||
psblas/src/methd: contiene l'implementazione dei metodi iterativi
|
|
||||||
psblas/src/modules: contiene i moduli con le interfacce, le
|
|
||||||
definizioni di tipi e di costanti
|
|
||||||
psblas/src/prec: contiene tutte le routine preposte alla generazione e
|
|
||||||
applicazione dei precondizionatori
|
|
||||||
psblas/src/psblas: contiene le routine algebriche parallele
|
|
||||||
psblas/src/serial: contiene l'implementazione seriale di routine
|
|
||||||
algebriche e ausiliarie
|
|
||||||
psblas/src/serial/aux: routine ausiliarie (in realtà c'è rimasto be poco)
|
|
||||||
psblas/src/serial/coo: routine relative al formato coo
|
|
||||||
psblas/src/serial/csr: routine relative al formato csr
|
|
||||||
psblas/src/serial/dp: routine per l'assemblaggio e la conversione da
|
|
||||||
un formato all'altro
|
|
||||||
psblas/src/serial/f77: si tratta delle routine algebriche. queste
|
|
||||||
vengono chiamate all'interno delle routine in
|
|
||||||
psblas/src/psblas.
|
|
||||||
psblas/src/serial/jad: routine relative al formato jad
|
|
||||||
psblas/src/tools: tutte le routine per la generazione e rigenerazione
|
|
||||||
di descrittori e matrici
|
|
||||||
psblas/test: programmi di test
|
|
||||||
|
|
||||||
|
|
||||||
Schema di nomenclatura:
|
|
||||||
tutti i simboli (quindi routine, tipi dato, costanti, moduli etc...)
|
|
||||||
devono avere il prefisso psb_. I tipi hanno il suffisso "_type" (quindi
|
|
||||||
quello che prima era d_spmat adesso diventa psb_dspmat_type), tutti i
|
|
||||||
moduli hanno il suffisso "_mod".
|
|
||||||
|
|
||||||
|
|
||||||
Interfacce subroutine & argomenti:
|
|
||||||
l'articolo di Carney et al. richiede questa convenzione per l'ordine
|
|
||||||
degli argomenti:
|
|
||||||
1- arguments specifying options (tipo TRANS, UNITD etc...)
|
|
||||||
2- arguments specifying problem dimensions
|
|
||||||
3- input scalar associated with input matrices
|
|
||||||
4- description of sparse input matrices (che sarebbe i nostri FIDA e
|
|
||||||
DESCRA)
|
|
||||||
5- description of dense input matrices
|
|
||||||
6- input scalar associated with input-output matrices
|
|
||||||
7- description of input-output matrices
|
|
||||||
8- error processing informations
|
|
||||||
9- workspace
|
|
||||||
10- length of workspace
|
|
||||||
|
|
||||||
tutto questo va rivisto nell'ottica f90 e, quindi, con i tipi dato
|
|
||||||
user-defined e con gli argomenti opzionali.
|
|
||||||
Attualmente, in linea di massima, le interfacce delle routine
|
|
||||||
algebriche hanno sempre desc_a (il descrittore) e info (il codice di
|
|
||||||
errore riportato) nelle ultime posizioni prima dei parametri
|
|
||||||
opzionali. I parametri opzionali contengono sempre gli argomenti al
|
|
||||||
punto 1 oltre che jx, jy e k che definiscono il sottopreblema su cui
|
|
||||||
effettuare l'operazione richiesta. Per tutto il resto non c'è uno
|
|
||||||
schema ben definito e viene, generalmente seguito l'ordine con cui gli
|
|
||||||
operandi appaiono nella scrittura della formula matematica relativa
|
|
||||||
all'operazione implementata nella subroutine. si potrebbe pensare a
|
|
||||||
come risistemare la cosa ma secondo me è abbastanza chiara.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue