Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
U1.03.01
Indice
Riassunto 3
1 Introduzione 4
3 Linguaggio di comando 11
3.1 Python e il linguaggio di comando . . . . . . . . . . . . . . . . 11
3.2 Nozioni di concetto . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Operazioni possibili . . . . . . . . . . . . . . . . . . . . . . . . 13
3.4 Regole sul concetto prodotto da un operatore . . . . . . . . . 14
3.4.1 Principi di base . . . . . . . . . . . . . . . . . . . . . . 14
3.4.2 Concetto prodotto e concetto riutilizzato . . . . . . . . 14
3.4.3 Verifiche eseguite dal supervisore sui concetti prodotti . 14
3.5 Corpo di un comando . . . . . . . . . . . . . . . . . . . . . . . 16
3.5.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . 16
3.5.2 Parola-chiave . . . . . . . . . . . . . . . . . . . . . . . 16
3.5.3 Parola-chiave semplice . . . . . . . . . . . . . . . . . . 17
3.5.3.1 Tipi di argomento . . . . . . . . . . . . . . . 17
3.5.3.2 Nozione di lista . . . . . . . . . . . . . . . . . 18
3.5.4 Parola-chiave-fattore . . . . . . . . . . . . . . . . . . . 19
3.5.4.1 Nozione del valore di default . . . . . . . . . . 20
1
5.5 Esempio di costruzione dinamica delle parole-chiavi-fattore . . 27
2
Riassunto
Questo documento descrive il ruolo e il funzionamento di due elementi
fondamentali:
3
1 Introduzione
Il ruolo del supervisore è quello di fornire il comando del flusso di lavoro in
esecuzione di un programma. Le istruzioni di esecuzione sono generalmente
fornite dall’utente. Ciò richiede una formalizzazione delle comunicazioni tra
il codice e il suo operatore, è il linguaggio di comando.
4
2 Meccanismo generale di funzionamento del
supervisore
2.1 Architettura generale
Gli elementi di base coinvolti nell’esecuzione di un calcolo Aster sono:
• Analisi del file di comando utente: è qui che viene controllata la sintassi
di Python (parentesi, virgole tra parole chiave, rientro, . . . ). Il rileva-
mento di un errore (SyntaxError Python) provoca l’interruzione
dell’esecuzione di Aster. L’errore è di tipo <F>
5
• Verifica di ogni ETAPE: se la chiamata a un comando nel file utente non
è coerente con il catalogo dei comandi, viene visualizzato un rapporto
e l’esecuzione viene interrotta a questo livello. Questa è una verifica
semantica
• La modalità globale per la quale tutte le fasi del set di comandi vengono
prima costruite e quindi eseguite nel loro ordine di apparizione. Questa
modalità è scelta dalla parola chiave PAR_LOT = ’OUI’ nel comando
di avvio DEBUT
6
Ecco un esempio di un ciclo con un criterio di arresto sul valore di una
quantità RELV[k] calcolata, memorizzato in un concetto di tipo table. Se
ad esempio manca una parola chiave obbligatoria nella chiamata al comando
POST_RELEVE_T, questa verrà rilevata solo dopo l’esecuzione completa del
primo MECA_STATIQUE. D’altra parte, la modalità graduale consente qui di
assegnare la variabile SYY poiché il concetto RELV[k] è stato completamente
calcolato nel momento in cui il supervisore esegue questa linea.
DEBUT(PAR_LOT=’NON’)
RESU = [None]*10
RELV = [None]*10
for k in range(1,10):
RESU[k] = MECA_STATIQUE( ... )
RELV[k] = POST_RELEVE_T( ... )
SYY = RELV[k][’VMIS’, 4]
FIN()
Và fatto notare che la scelta di una modalità di esecuzione condiziona l’ordine
in cui avrà luogo l’analisi semantica (ETAPE by ETAPE o globalmente per
tutto il JDC). Ma in entrambi i casi, l’analisi sintattica di Python viene
sempre eseguita in anticipo per l’intero file di comando.
Note
7
2.3 Costruzione delle tappe
Quando si costruisce ciascun oggetto ETAPE, ne controlliamo la coerenza
semantica con il catalogo del comando a cui si riferisce. Qualsiasi errore
rilevato viene registrato in un report che, nella modalità di esecuzione globale,
viene consegnato dopo l’analisi dell’intero file di comando.
• Macro in Python
8
Un macro-comando del JDC viene prima trattato come gli altri comandi
(controllo della sintassi, costruzione del passo della macro). Quindi viene
costruito applicando il metodo build di Python sull’oggetto JDC. Dopo
la sua costruzione, i passaggi dei comandi prodotti dalla macro vengono
sostituiti con il passaggio della macro stessa, per una successiva esecuzione.
• EFICAS analizza la sintassi della macro stessa, ma non quella dei suoi
sottocomandi.
• DEBUT [U4.11.01]
• POURSUITE [U4.11.03]
Almeno una di queste due procedure deve essere presente nel file di comando.
Nessun altro comando Aster deve precederli. In questo caso o se non è presente
nessuno, l’esecuzione verrà interrotta non appena viene creato il JDC. Sono
queste procedure che contengono le informazioni sulla modalità di esecuzio-
ne (PAR_LOT = ’OUI’ oppure PAR_LOT = ’NON’) che condizionano la
modalità di esecuzione dei comandi che seguono.
9
Il primo compito è mettere in corrispondenza il numero di unità logiche dei
file di input/output standard (messaggio, errore, risultato).
Nota
10
3 Linguaggio di comando
3.1 Python e il linguaggio di comando
Un file di comandi per Code-Aster è composto esclusivamente da istruzioni
Python. Il primo dei vincoli è quindi quello di rispettare le regole di questo
linguaggio. Possiamo leggere il tutorial di Python (www.python.org) op-
pure i numerosi libri introduttivi a Python per maggiori dettagli, ma non è
necessario per l’uso di Aster.
• Comandi Aster
• Comandi Python
Nel contesto di un uso classico del codice in cui il file dei comandi contiene
esclusivamente comandi Aster, le due regole specifiche di Python da ricordare
sono:
11
Importante
12
Azione Comando
Stampare un valore print resu[‘DX’ , 1]
Assegnare un valore value = resu[‘DX’ , 1]
Nota lessicale
13
3.4 Regole sul concetto prodotto da un operatore
3.4.1 Principi di base
Ogni volta che un operatore viene eseguito fornisce un nuovo concetto
prodotto di tipo predefinito, stabilito a seconda del catalogo comandi. I
concetti che appaiono come argomenti di input ai comandi non vengono
modificati.
14
DEBUT()
FIN()
In rispetto alle note commentate della porzione di codice si ha:
In effetti un concetto può essere creato solo una volta: il che significa che
appare alla sinistra del segno = senza che il reuse sia usato negli argomenti
del comando.
15
3.5 Corpo di un comando
3.5.1 Introduzione
Il corpo di un comando contiene la parte variabile del comando. Le di-
chiarazioni sono separate da virgole e, tranne l’attributo di riutilizzo sopra
menzionato, sono tutte nella forma:
parola_chiave = argomento
Una parola-chiave è necessariamente una parola chiave dell’operatore
corrente, dichiarata nel catalogo di quest’ultimo.
3.5.2 Parola-chiave
Una parola-chiave è un identificatore formale, che è il nome dell’attributo
che riceve l’argomento. Ad esempio:
MATRICE = ...
Nota sintattica
16
3.5.3 Parola-chiave semplice
3.5.3.1 Tipi di argomento I tipi di argomento di base riconosciuti e
accettati dal supervisore sono elecati come segue:
• Numeri interi
• Numeri reali
• Numeri complessi
• Stringhe di testo
• Valori logici
• Concetti
17
Il tipo stringa di testo è dichiarato tra singoli apici ’. Il case-sensitive
dei caratteri (maiuscolo/minuscolo) viene rispettato. Tuttavia, quando una
parola-chiave deve assumere un valore in un elenco predefinito nel catalogo, è
consuetudine che questo valore rimanga capitalizzato.
Il tipo logico non è più utilizzato in questo modo nel catalogo dei comandi.
Esempi di liste
18
3.5.4 Parola-chiave-fattore
Alcune informazioni non possono essere fornite a livello globale (immediata-
mente nel comando), quindi è importante prevedere la ripetizione di alcune
parole-chiavi, per poter assegnare loro argomenti diversi. La parola-chiave-
fattore offre questa possibilità. In una parola-chiave-fattore si troverà quindi
un insieme di parole-chiavi, che possono essere utilizzate ad ogni occorrenza
della parola-chiave-fattore. Migliora anche la leggibilità del file di coman-
do raggruppando parole-chiavi che condividono un senso comune, come ad
esempio: diversi parametri dello stesso materiale. A differenza della parola-
chiave semplice, la parola-chiave-fattore può ricevere solo un tipo di oggetto:
l’oggetto supervisore _F, oppure un suo elenco.
IMPRESSION = (
_F (
RESULTAT = resu,
UNITE = 6,
),
),
19
UNITE = 7,
),
),
Promemoria
20
4 Definizione valori e valutazioni espressioni
È possibile assegnare valori alle variabili Python per usarle come semplici
argomenti di parole chiave: queste variabili sono chiamate parametri in
EFICAS. Possono contenere valori interi, reali, complessi, testi o elenchi di
questi tipi.
Esempio:
young = 2.E+11
material = DEFI_MATERIAU (
ELAS = _F (
E = young,
NU = 0.3,
),
);
Alla fine dell’esecuzione, il contesto Python viene salvato con il database.
Pertanto, nella continuazione che seguirà, i parametri saranno sempre presenti,
con i loro valori predefiniti, proprio come i concetti di Aster.
command = MA_COMMANDE (
VALE = half_pi,
);
Oppure:
text = ’world’
command = MA_COMMANDE (
VALE1 = pi/2.0,
VALE2 = half_pi+cos(30.0),
TEXTE = ’hello’+text,
),
21
5 Utilizzo di Python nel file di comando
Non è necessario conoscere il linguaggio Python per usare Code-Aster. In
effetti, con alcune regole di base per rispettare il rientro e la parentesi, è
necessaria solo la conoscenza del linguaggio di comando descritto nei cataloghi
dell’ordine. E ancora, EFICAS consente di astenersi dal ricorrere al catalogo
o al paragrafo "sintassi" degli ordini proponendo graficamente le parole chiave
da informare.
22
Le altre varie funzionalità di Python interessanti per l’utente di Code-Aster
possono essere:
23
• aster.MatriceSinguliereError: matrice singolare
Esempio di utilizzo:
try:
resu = STAT_NON_LINE(...)
except aster.NonConvergenceError, message:
print ’Ooops errore: %s’ % str(message)
print ’Piu iterazioni’
24
da un except, l’utente assume il controllo, altrimenti il codice si arresta
(nessuna segnalazione di errori Fortran). Questa scelta è determinata dai
comandi DEBUT e POURSUITE, fattore chiave ERREUR (vedere [U4.11.01] e
[U4.11.03]) e in qualsiasi momento dal metodo aster.onFatalError.
Infine, prima di restituire la mano all’utente, gli oggetti di base volatili ven-
gono rimossi da una chiamata a JEDETV e il segno Jeveux viene riposizionato
su 1 (con JEDEMA) per rilasciare gli oggetti riportati in memoria.
25
• Attivare il sollevamento di eccezioni in caso di errore <S> attraverso il
metodo aster.FatalError(’EXCEPTION’), oppure nei comandi
DEBUT e POURSUITE
Esistono alcuni gateway tra Python e le strutture dati calcolate dal codice
e presenti nella memoria JEVEUX. Altri rimangono da programmare. Questo
è un campo in evoluzione e sono previsti sviluppi futuri.
26
Ecco alcuni metodi per accedere alle strutture di dati. L’elenco non è
esaustivo, consultare la documentazione [U1.03.02].
list = DEFI_LIST_REEL (
DEBUT = 0.0,
27
INTERVALLE = a,
# oppure
INTERVALLE = b,
# oppure
INTERVALLE = d,
);
FIN()
28