Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
R
User Subroutines scritte in linguaggio C++
Premessa
Negli appunti che seguono sono riportate alcune informazioni relative all’uso
di Abaqus User Subroutines scritte in linguaggio C++. Tali informazioni sono
state raccolte durante la stesura della tesi di laurea “Analisi di solidi elastici
3D mediante elementi finiti ad alta continuità. Formulazione del modello
numerico e implementazione nel codice ABAQUS“ [6].
1 Introduzione
ABAQUS° R
è una suite di programmi di simulazione ingegneristica della
compagnia Simulia° R
.
Abaqus offre la possibilità di ampliare le proprie capacità. L’utente infatti
può implementare elementi finiti, modelli materiali e altro ancora [2], utiliz-
zando un’apposita interfaccia per scrivere le proprie procedure, la Abaqus
User Subroutine Interface.
La scrittura delle procedure definite dall’utente può essere effettuata in
Fortran (linguaggio della Abaqus User Subroutine Interface) oppure in un
altro linguaggio, come ad esempio il C++ 1 , in tal caso però si aumenta la
complessità della fase di programmazione. L’Abaqus On Line Support infatti
raccomanda di scrivere le proprie user subroutine in Fortran [1].
2 Requisiti di sistema
Se si sta utilizzando un sistema operativo Windows XP, sono necessari i
seguenti software per poter eseguire Abaqus 6.7-1 [5]:
• Microsoft Visual C++ .NET 2003, Microsoft Visual C++ .NET 2005,
1
Il C++ in generale offre migliore efficienza nelle prestazioni rispetto al Fortran.
1
• Microsoft Platform SDK for Windows Server 2003 R2.
In particolare nella stesura di [6] sono stati usati Abaqus 6.6-1 e 6.7-1,
Intel Fortran 8.1 e 9.1, Microsoft Visual C++ .NET 2003 (indicato anche
come Ms Visual C++ 7.1).
È inoltre necessario aggiungere al valore di alcune variabili di ambiente gli
indirizzi di alcune directory. In particolare alle seguenti variabili d’ambiente
si aggiungano gli indirizzi delle directory indicate:
• PATH:
Intel\Compiler\Fortran\9.1\IA32\Bin,
Microsoft Visual Studio .NET 2003\Vc7\bin,
Microsoft Visual Studio .NET 2003\Common7\IDE,
Microsoft Platform SDK for Windows Server 2003 R2\Bin
• LIB:
Microsoft Visual Studio .NET 2003\SDK\v1.1\Lib,
Intel\Compiler\Fortran\9.1\IA32\Lib,
Microsoft Visual Studio .NET 2003\Vc7\lib,
Microsoft Platform SDK for Windows Server 2003 R2\Lib
• INCLUDE:
Microsoft Visual Studio .NET 2003\SDK\v1.1\include,
Intel\Compiler\Fortran\9.1\IA32\include,
Microsoft Visual Studio .NET 2003\Vc7\include
• corrispondenza fra gli external C++ names e gli external Fortran names,
• corrispondenza fra i C++ data types e i Fortran data types (in par-
ticolare conosciamo le corrispondenze: int, integer; float, real; double,
double precision),
• convenzioni per le chiamate di procedure inter-language.
2
Nella user subroutine bisogna adottare opportune accortezze, fra cui ad
esempio:
m[i][j]
3
#define FOR NAME(lc name,uc name) uc name
#define CALL NAME(lc name,uc name) uc name
#else
#define FOR NAME(lc name,uc name) lc name
#define CALL NAME(lc name,uc name) lc name
#endif
4 Eseguire l’analisi
Per lanciare un’analysis job con un input file che richiama procedure defi-
nite dall’utente in C++ occorre prima creare il file .obj, compilando il file
sorgente. Il file .obj deve essere contenuto nella directory da cui si andrà a
lanciare l’analysis job. La linea di comando da eseguire per lanciare il job
associato all’input file inpfilename.inp e al file object objfilename.obj (file
.obj ottenuto compilando il file sorgente contenente la procedura invocata
dall’analysis job) è la seguente:
4
element può essere definito solo tramite Input file Usage (non è possibile da
Abaqus/CAE definire e invocare un elemento di tipo user-defined) [6]. Gli
elementi user-defined possono essere di tipo linear o di tipo general. Quel-
li di tipo linear forniscono le matrici dell’elemento, o tramite la lettura di
esse da un Abaqus/Standard results file, o tramite la scrittura diretta del-
la loro espressione numerica nell’input file Per usare un elemento general
user-defined in un analysis job occorre disporre del file sorgente o del file
oggetto relativi alla subroutine UEL [3] in cui preventivamente si siano im-
plementati il contributo locale allo jacobiano (con la variabile AMATRX) e
il contributo locale al residuo (con la variabile RHS), per le varie procedure
di soluzione (individuate dalla variabile LFLAG). Inoltre si dovrà definire
e invocare l’elemento nell’input file. L’invocazione di un elemento definito
dall’utente all’interno dell’input file (che avviene quando si definisce, all’in-
terno del modello, un elemento finito del tipo definito dall’utente) avviene
allo stesso modo con cui viene invocato un elemento predefinito di Abaqus:
vale a dire, che nella definizione dell’elemento è sufficiente specificare l’ele-
mento tipo, il numero dell’elemento e i nodi connessi ad esso. Il tipo di
elemento si specifica tramite la chiave (element type key) associata ad esso,
che per gli elementi nativi di Abaqus è predefinita, mentre per gli elemen-
ti user-defined deve essere indicata nella definizione dell’elemento all’interno
dell’input file. Nella definizione dell’elemento, oltre all’element type key de-
vono essere specificati i gradi attivi dell’elemento e l’ordinamento di essi, che
saranno poi assunti nell’implementazione contenuta nella UEL subroutine.
Per usare uno general user-defined element di Abaqus occorre utilizzare la
user subroutine interface di Abaqus . La user subroutine interface di Abaqus
consente all’utente di scrivere delle procedure che gli servono per estendere
le capacità di Abaqus . La User subroutine interface di Abaqus è scritta nel
linguaggio di programmazione Fortran, tuttavia è possibile scrivere le user
subroutine non solo in Fortran ma anche in altri linguaggi quali il C++ (lin-
guaggio generalmente usato per ottenere alte prestazioni computazionali),
con il vincolo però che il codice sia invocabile da Fortran.
Ringraziamenti
Grazie per aver usato questo breve documento. Per segnalare incongruenze
su quanto qui scritto o per chiedere info scrivi a merengue82@libero.it
5
Riferimenti bibliografici
[1] Sito internet http://abaqus.custhelp.com. Answer Writing
ABAQUS/Standard user subroutines in C++.