• Non ci sono risultati.

CAPITOLO 3

N/A
N/A
Protected

Academic year: 2021

Condividi "CAPITOLO 3"

Copied!
16
0
0

Testo completo

(1)

DESCRIZIONE DEL SIMULATORE

3.1 GENERALITA’

In questo capitolo verrà data una descrizione generale del programma utilizzato per le simulazioni, illustrandone le principali caratteristiche di funzionamento e quali debbano essere le strutture dei file da inserire in ingresso al programma e le strutture dei file in uscita dallo stesso.

Il codice è scritto in linguaggio Fortran, esso è composto di sette parti, che illustriamo brevemente di seguito:

I. Main - Blocco principale che si occupa di gestire le chiamate di Pre-processing, Processing e Post-processing.

II. Pre-processing - Insieme di routine per il caricamento e

l’elaborazione dei dati dai file d’ingresso e per la creazione delle strutture dati necessarie ai blocchi successivi.

III. Processing - Insieme di routine di elaborazione e di calcolo, che

(2)

IV. Post-processing - Insieme di routine necessarie per riordinare i

dati nella forma più conveniente per la loro rappresentazione.

V. Utility - Questo blocco contiene la routine che consente di

determinare il segno di un elemento triangolare relativamente allo spigolo considerato.

VI. Math - Insieme di routine matematiche per il calcolo di integrali,

inversioni di matrici, risoluzione di sistemi e simili.

VII. Commonvar - Questo blocco contiene un modulo in cui sono

definite variabili comuni a più routine, la cui dimensione non può essere nota a priori. Esse vengono allocate e deallocate in Main. Il programma riceve in ingresso i seguenti file:

1. il file ansys, contenente le informazioni relative alla discretizzazione della struttura in esame;

2. il file campo, contente la descrizione del campo incidente e parametri riguardanti il calcolo del campo reirradiato e della Radar Cross Section, (significativi solo se stiamo considerando un problema di scattering), nonché informazioni relative ad alcune opzioni presenti nel programma;

3. il file source, contente informazioni relative alla sorgente (tale file è necessario solo se stiamo considerando un problema di irradiazione);

(3)

4. il file cload, contenente le informazioni relative ad eventuali sorgenti da usarsi in caso si voglia usare il programma per problemi di trasmissione piuttosto che di scattering.

3.2 PRE-PROCESSING

Il blocco Pre-processing elabora il file ansys fornito in ingresso, contenente, come già accennato, la geometria della struttura da analizzare, in modo da poter costruire le strutture dati necessarie al simulatore vero e proprio.

Il file in ingresso è chiamato ansys perché la modellizzazione della struttura tramite elementi triangolari, detti anche patch, viene effettuata appunto tramite il software Ansys.

La discretizzazione così realizzata viene fornita sotto forma di due file:

• un file elementi, contenente i tre nodi e l’impedenza superficiale relativi ad ogni elemento triangolare;

• un file nodi, contenente le coordinate relative a ciascun nodo.

Le informazioni contenute in questi due file devono essere inserite nel file ansys in maniera opportuna così come riportato in Appendice B.

(4)

La generica riga della struttura:

Nj-1 Nj-2 Nj-3 Nj-4 Oj-1 …….. Oj-8 Cηj 1

derivata dal file elementi e fornisce la seguente informazione: “ l’elemento j è costituito dai nodi aventi per etichetta Nj-1, Nj-2 e Nj-3 e la

sua impedenza superficiale è descritta da Cηj”.

Cηj è un intero che si riferisce ad una tabella inserita tramite il file di ingresso campo. E’ importante notare come Ansys fornisca i nodi in un ordine tale da far sì che la normale alle facce triangolari sia diretta sempre nello stesso verso; nel caso di corpi chiusi il verso assegnato da Ansys è quello uscente dal corpo.

L’elemento Nj-4 nel caso di patch triangolari non è altro che la ripetizione di Nj-3 e questo perché il programma Ansys può fornire anche mesh di tipo rettangolare nel qual caso Nj-4 rappresenterebbe il quarto nodo.

Seguono, nella generica riga, otto valori Oj-1 …….. Oj-8 di nessun significato ed infine l’ultima colonna rappresenta il numero progressivo della patch.

La riga:

-888 k1 k2 ... k12 k13

serve a comunicare al programma che le informazioni riguardanti i patch sono state interamente acquisite, e che le informazioni scritte nel seguito del file riguardano non più gli elementi triangolari, ma i nodi.

In pratica, quindi, facendo riferimento ai due file originari tramite i quali viene costruito il file ansys, questa riga separa gli elementi dai nodi .

(5)

In realtà è il solo numero –888 ad indicare la separazione fra i due tipi di informazione; gli interi k1, k2 ... k13 possono essere assegnati arbitrariamente dall’utente: essi sono necessari in quanto il programma ha letto, fino a questo momento, quattordici valori, ed avvertirebbe l’utente di un’inconsistenza nel file di ingresso nel caso in cui dovesse trovarne un numero minore.

Infine, la generica riga:

k XNk YNk ZNk

fornisce l’informazione: “ il nodo k ha coordinate XNk ,YNk e ZNk ”

Poiché le incognite del nostro problema sono le densità di corrente relative a ciascuno spigolo non di bordo, il blocco di pre-processing si occuperà innanzitutto di individuare gli spigoli attraverso i nodi che li delimitano. Questa operazione viene realizzata costruendo la matrice NCONN, la cui generica riga ha la forma:

j NAj NBj

che fornisce l’informazione: “lo spigolo j ha per estremi i nodi NAj e NBj ” Occorre notare come il programma si occupi di riordinare la matrice in modo che risulti (NAk < NBk) e (NAk < NA(k+1))

k.

Successivamente, il blocco di pre-procesing si occupa di individuare gli spigoli di bordo e caricarli nel vettore ITRACK. In questo modo si può capire immediatamente se, su un certo spigolo, devono essere svolte le operazioni di processing.

(6)

Vengono inoltre create altre matrici contenti informazioni sulla geometria del corpo considerato, tra le quali:

ƒ NBOUND: contiene le informazioni relative a quali spigoli formino ciascun elemento triangolare; gli spigoli di ogni patch sono ordinati in senso antiorario, cosicché la normale ad ogni elemento triangolare risulti orientata verso l’esterno, nel caso in cui si stia considerando un corpo chiuso.

ƒ NBOUN1: contiene le informazioni relative ai nodi che formano ciascun elemento triangolare.

ƒ CIMPS : contiene le impedenze superficiali relative a ciascuna

patch.

ƒ AL : contiene le informazioni relative alla lunghezza dei vari spigoli.

ƒ AREA : contiene le aree delle varie patch.

ƒ BARCTR : contiene le coordinate dei baricentri delle varie

patch.

ƒ BORDER : contiene tutti gli spigoli di bordo (edge) ossia quelli che fanno da bordo alla figura presa in considerazione. ƒ CHARGE_DISTR : contiene la distribuzione di carica di ogni

patch.

ƒ CHARGE_MATL : contiene la densità di carica nei vari baricentri.

ƒ CURRCOEFF : contiene le costanti In (ad esclusione di degli

(7)

ƒ CURRCOEFF2 : contiene tutte le costanti In incluse quelle di bordo che sono uguali a 0.

ƒ CZ : contiene la matrice di impedenza. ƒ DATNOD : contiene le coordinate dei nodi. ƒ ITRACK : contiene gli spigoli di bordo. ƒ NCONN : contiene gli spigoli non di bordo.

ƒ NORM : contiene le coordinate delle normali ai vari patch. Le seguenti strutture dati vengono invece create solo nel caso in cui si stia considerando un problema di irradiazione:

ƒ SORGEDGE : contiene gli spigoli relativi alla sorgente.

ƒ DISTBAR : contiene le coppie di elementi triangolari associati ad ogni spigolo di sorgente, e le distanze fra i loro baricentri.

ƒ NORM2 : contiene la direzione del campo elettrico imposto per la simulazione del problema di irradiazione.

E’ necessario un breve cenno sulla subroutine NORM2: la direzione del campo elettrico generato dall’alimentazione viene stabilita calcolando la normale alla regione di alimentazione.

Il verso di tale normale viene stabilito secondo la seguente convenzione:

- nel verso delle z positive, nel caso in cui la componente del vettore normale lungo quest’asse risulti diversa da zero;

(8)

- nel verso delle x positive, se la componente lungo z dovesse risultare nulla;

- nel verso delle y positive, qualora anche la componente lungo x dovesse risultare nulla.

In realtà, il controllo sulle componenti del vettore normale viene eseguito confrontando i valori ottenuti con 1.0E-9 e non con zero, per tener conto di eventuali approssimazioni introdotte da Ansys durante la discretizzazione.

Nel caso in cui l’utente desideri orientare il campo imposto dalla sorgente nel verso opposto a quello dato per convenzione, potrà aggiungere 180° alla fase della sorgente stessa.

3.3 PROCESSING

Il blocco di processing costituisce il cuore del programma: esso esegue, sui dati elaborati dal pre-processing, le operazioni necessarie a calcolare le distribuzioni di corrente e di carica, l’andamento del campo vicino, l’impedenza di ingresso (nel caso in cui si stia esaminando un problema di irradiazione) e, se richiesto dall’utente, il campo per r→∞ e la Radar Cross Section.

Questo blocco provvede innanzitutto ad effettuare il calcolo degli elementi della matrice

Z

, implementando la (2.35); osservando tale relazione, si può notare come questi elementi dipendano solo dalle

(9)

caratteristiche fisiche e geometriche della struttura in esame, e dalla frequenza di lavoro.

Per calcolare il vettore dei termini noti V, il programma deve sapere se si sta analizzando un problema di scattering o di irradiazione.

Tale informazione è contenuta nel file campo. La struttura di tale file e il significato delle singole righe sono riportati in Appendice B.

Supponiamo di esaminare un problema di scattering: attraverso la lettura delle informazioni contenute in campo, il blocco di processing è in grado di valutare il vettore dei termini noti V, implementando la (2.34).

Osservando tale espressione, possiamo notare come essa risulti dipendente sia dalla geometria del corpo in esame, sia dalle caratteristiche del campo elettrico incidente.

Ipotizzando invece di esaminare un problema di irradiazione, le informazioni relative alla sorgente vengono fornite dal file source la cui struttura è riportata ancora una volta in Appendice B.

In questo caso, il software calcola il vettore dei termini noti implementando non la (2.34), ma la seguente formula:

(

)

I

[

(

)

sn

(

)]

N 1 n s n n s

r

e

r

e

r

E

= +

+

=

, (3.1)

Una volta generati Z e V, il blocco di processing si occupa di risolvere il sistema (2.33):

V

I

(10)

invertendo la matrice

Z

tramite le sottoroutine csminv o zgesv, che utilizzano entrambi l’inversione diretta della matrice, oppure utilizzando il solver iterativo RMA_Iterative_Solver, a seconda di quale sia stata la scelta dell’utente. Per una descrizione di quest’ultimo programma, si veda il paragrafo 3.5.

Una volta noto il vettore I, verranno calcolate le distribuzioni di corrente e di carica e, se richiesti, il campo vicino, il campo lontano e la Radar Cross Section.

Il blocco di processing provvede inoltre al calcolo dell’impedenza d’ingresso tramite la funzione ZIN, nel caso in cui si stia considerando un problema di irradiazione implementano le formule opportune nel caso di una o più sorgenti. Il risultato viene fornito nel file di uscita zin.

Per quanto riguarda il calcolo del campo lontano, il programma è in grado di riconoscere se stiamo effettuando un’analisi con φ oppure θ costante: in questo caso crea due file, ephinorm ed ethetanorm nei quali inserire le componenti lungo φ e lungo θ del campo lontano normalizzate al valore massimo; questo per agevolare la rappresentazione dei diagrammi di irradiazione tramite software come Kaleidagraph.

Infine, la Radar Cross Section viene calcolata a partire dall’espressione del campo in zona lontana:

         × × + ⋅ +    +       × × + ⋅ π = − − − − = + + + +

r n c n n M c n r c n N 1 n r n c n n M c n r c n n n 2 jkη µ 2 jω ) exp(jk 2 jkη µ 2 jω ) exp(jk l I exp(-jkr) r 4 1 i i ρ ρ i r i i ρ ρ i r (r) Es (3.2)

(11)

e implementando la relazione: 2 2 2

)

0

,

0

(

)

,

(

4

lim

)

,

,

,

(

inc s r inc inc

r

E

E

θ

φ

π

=

φ

θ

φ

θ

σ

∞ → , (3.3)

valida nel caso di onda incidente piana. Poiché sotto questa ipotesi vale:

|H

inc

| = |E

inc

| / η

M

,

(3.4)

con ηM impedenza caratteristica del mezzo circostante, la (3.3) diventa: 2 2 2 2 ( ) 4 lim ) ( inc s M r r H r E r η π = σ ∞ → . (3.5)

Tenendo conto della (3.2) si ha, infine:

2 2 N 1 n r n c n n M c n r c n r n c n n M c n r c n n n M M 2 jkη µ 2 jω ) exp(jk 2 jkη µ 2 jω ) exp(jk l I µ ε 4π 1 ) σ( inc H i i ρ ρ i r i i ρ ρ i r r

= − − − − + + + +               × × + ⋅ +       × × + ⋅ ⋅ ⋅ =

Poiché in zona lontana il campo elettrico reirradiato può essere considerato come un’onda piana:

E

s

≅ i

θ

E

θs

+ i

φ

E

φs

,

(3.7)

(12)

la Radar Cross Section può essere scritta come :

σ

(

θ

,

φ

,

θ

inc

,

φ

inc

)

=

σ

θ

(

θ

,

φ

)

+

σ

φ

(

θ

,

φ

)

, (3.8)

ed il software fornisce l’uscita sia nella forma (3.6) che nella forma (3.8), tramite i file rcs, rcstheta e rcsphi.

Il calcolo della Radar Cross Section è significativo solo nel caso in cui si stia affrontando un problema di scattering, poiché nel caso di un problema di irradiazione non si ha un vero e proprio campo incidente.

3.4 POST-PROCESSING

Diamo ora una breve descrizione del blocco Post-processing.

Esso comprende alcune routine necessarie a riordinare i dati in modo da rendere possibile la visualizzazione delle distribuzioni di carica e di corrente tramite l’ausilio di Matlab.

A questo scopo vengono utilizzati i file di uscita x, y, z, charge_matl e current.

In particolare, se stiamo analizzando una piastra piana, è possibile riportare tali distribuzioni su grafici tridimensionali: per fare ciò, si devono riordinare gli spigoli, ed i relativi coefficienti di corrente, in modo da scandire la superficie dall’ascissa minima a quella massima e, per ogni ascissa, dall’ordinata minima a quella massima.

(13)

I coefficienti di corrente I all’interno di ogni faccia vengono calcolati utilizzando la seguente relazione:

1 1 1 2 2 2 3 3

I

3

2

I

2

I

2

I

ρ

ρ

ρ

A

l

A

l

A

l

+

+

=

, (3.9)

dove I1, I2, I3 rappresentano i coefficienti della densità di corrente relativi a ciascuno spigolo del patch considerato, con riferimento alla figura 3.1; A indica l’area del patch.

Il verso del vettore ρi sarà diverso a seconda che il patch sia positivo o negativo relativamente allo spigolo i. La subroutine sgnfaccia nel blocco Utility si occupa di stabilire tale verso.

ρ3 ρ2 ρ1 l3 l1 l2

(14)

3.5 SOLVER ITERATIVO

In questo paragrafo verrà brevemente illustrato l’utilizzo del software RMA_Iterative_Solver. Questo software consente di risolvere l’equazione matriciale (2.33):

Z

I

=

V

tramite un metodo iterativo precondizionato. Se utilizzato su un calcolatore con almeno 512 Kbyte di RAM, tale software è in grado di abbreviare notevolmente i tempi di calcolo, consentendo di infittire la discretizzazione pur mantenendo accettabili i tempi di esecuzione.

Il software è disponibile come file di libreria, e se ne deve effettuare il link tramite l’apposita opzione di Visual Fortran; in alternativa, può essere posto nella stessa directory del programma principale.

La sintassi per la chiamata è.

CALL RMA_iterative_solver(N,Z,V,I, TOL, NITER,ALFA,IERR) dove:

N : Dimensione del sistema lineare di equazioni (intero);

Z : Matrice NxN (complesso a doppia precisione); V : Vettore Nx1 (complesso a doppia precisione);

TOL : Errore residuo percentuale massimo richiesto (reale a

doppia precisione);

(15)

NITER: Variabile intera che indica il numero massimo di

iterazioni che vogliamo far eseguire al solver: nel caso in cui la tolleranza richiesta non venga raggiunta, l’esecuzione del solver termina dopo NITER passi. Viene consigliato di porre NITER=N.

Il solver restituisce in uscita:

X : Vettore soluzione Nx1 (complesso a doppia precisione);

TOL : Errore residuo percentuale ottenuto;

NITER: Numero d’iterazioni effettuate per raggiungere tale errore;

IERR : Segnale d’errore secondo la Tabella 2 dell’Appendice B. Occorre notare come la scelta di ALFA sia critica per il raggiungimento della tolleranza desiderata. Nel caso in cui N sia inferiore a 1500, un valore di ALFA pari a 0.5 o 1.0 dà solitamente buoni risultati.

Con l’aumentare della dimensione del sistema, è consigliabile aumentare anche ALFA.

Se poi stiamo analizzando un problema di irradiazione, la scelta di

ALFA risulta ancora più determinante. A causa dei numerosi termini nulli

presenti nel vettore V, è infatti possibile che una variazione di pochi decimi nel valore di ALFA decida sulla convergenza o meno della procedura alla tolleranza richiesta.

(16)

L’intervallo all’interno del qual far variare il parametro ALFA è compreso tra 0 e 99: per valori esterni a questo intervallo il solver fornisce risultati non attendibili.

L’errore residuo percentuale TOL è definito nel modo seguente:

       ⋅ − = 100 TOL 2 2 V V ZI % ,

Solitamente si pone TOL pari a 0.1.

3.6 FLOW – CHART DEL PROGRAMMA

Allo scopo di rendere il programma il più possibile leggibile a beneficio di coloro che lo vorranno cambiare per adattarlo a problemi diversi, riportiamo nelle seguenti due pagine il flow-chart del programma contenente le sottoroutine più importanti

Figura

Fig. 3.1  -  Corrente nel generico punto di un patch

Riferimenti

Documenti correlati