10.06.2014 Views

Prezentarea unui program cu elemente finite capabil a fi folosit în ...

Prezentarea unui program cu elemente finite capabil a fi folosit în ...

Prezentarea unui program cu elemente finite capabil a fi folosit în ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Lab. 01. <strong>Prezentarea</strong> <strong>unui</strong> <strong>program</strong> <strong>cu</strong> <strong>elemente</strong> <strong><strong>fi</strong>nite</strong> <strong>capabil</strong> a <strong>fi</strong> <strong>folosit</strong> în<br />

analiza de optimizare. Exemplu simplu de optimizare pentru o grindă în<br />

consolă<br />

Ghid de modelare parametrică 3D<br />

Orice <strong>program</strong> <strong>cu</strong> <strong>elemente</strong> <strong><strong>fi</strong>nite</strong> comercial este un produs exe<strong>cu</strong>tabil obŃinut prin<br />

compilarea <strong>unui</strong> text sursă dezvoltat în medii de <strong>program</strong>are gen Fortran, C, Visual Basic, etc.<br />

Pentru a <strong>fi</strong> un produs flexibil de regulă aceste <strong>program</strong>e sunt concepute în forma unor<br />

comenzi de generare a geometriei, rezolvare a problemei şi vizualizarea rezultatelor. Aceste<br />

comenzi parti<strong>cu</strong>larizate constituie practic un alt limbaj de <strong>program</strong>are propriu <strong>program</strong>ului <strong>cu</strong><br />

<strong>elemente</strong> <strong><strong>fi</strong>nite</strong>. Pentru a spori viteza de lucru a utilizatorului, în momentul de faŃă <strong>program</strong>ele<br />

accesează comenzile interne prin intermediul unor <strong>program</strong>e de interfaŃă gra<strong>fi</strong>că. Astfel<br />

utilizatorul utilizează de regulă mouse-ul şi tastatura <strong>cu</strong> cifre. În ANSYS acest mod de lucru<br />

se numeşte GUI (Graphic User Interface). Utilizatorii experimentaŃi pot utiliza comenzile<br />

ANSYS care se introduc prin linia de comandă. De regulă <strong>program</strong>ele monitorizează toate<br />

comenzile utilizatorului într-un <strong>fi</strong>şier text (în ANSYS numit log) care poate <strong>fi</strong> eventual<br />

re<strong>folosit</strong>.<br />

1.1. Introducere în limbajul de <strong>program</strong>are parametrică din ANSYS<br />

Programul ANSYS a fost conceput să poată <strong>fi</strong> utilizat şi prin intermediul <strong>unui</strong> limbaj<br />

de <strong>program</strong>are parametrică APDL (ANSYS Parametric Design Language). Acesta permite<br />

utilizarea comenzilor de generare a modelului din <strong>program</strong>ul <strong>cu</strong> <strong>elemente</strong> <strong><strong>fi</strong>nite</strong> în termenii<br />

unor parametri (variabile). Deasemenea o serie de rezultate pot <strong>fi</strong> extrase prin intermediul<br />

unor parametri şi utilizate pentru a obŃine o serie de funcŃii necesare în special în modulul de<br />

optimizare. Descrierea parametrică a unor comenzi echivalează <strong>cu</strong> crearea unor funcŃii<br />

utilizator care pot <strong>fi</strong> utilizate pentru o clasă largă de aplicaŃii similare, adică spre exemplu<br />

dacă modelul unei structuri variază în raport <strong>cu</strong> o serie de parametri, odată creat un singur<br />

model parametric, celelalte modele geometrice se pot obŃine din acesta printr-o apelare a<br />

funcŃiei create <strong>cu</strong> parametrii actuali. Uneori este necesară repetarea unor comenzi (do-loops)<br />

sau introducerea unor blo<strong>cu</strong>ri de decizie (if-then-else), sau utilizarea unor operaŃii vectoriale<br />

sau matriceale (înmulŃiri, inversări de matrice). Toate acestea se pot efectua <strong>cu</strong> ajutorul<br />

acestui limbaj intern de <strong>program</strong>are.<br />

APDL stă la baza utilizării algoritmilor de optimizare şi discretizare adaptivă şi oferă<br />

avantaje chiar şi pentru modelarea unei structuri singulare, deoarece spre exemplu o serie de<br />

mărimi care conŃin multe caractere (zecimale), sau care se obŃin prin operaŃii algebrice simple,<br />

pot <strong>fi</strong> declarate o singură dată şi apoi pot <strong>fi</strong> <strong>folosit</strong>e de mai multe ori.<br />

În acest ghid se descriu o serie de facilităŃi ale APDL <strong>cu</strong>m ar <strong>fi</strong> parametri, macrouri,<br />

blo<strong>cu</strong>ri de decizie, cicluri, parametri tip matrice. Pentru exempli<strong>fi</strong>care se prezintă o serie de<br />

exemple prezentate în helpul <strong>program</strong>ului ANSYS pre<strong>cu</strong>m şi o serie de aplicaŃii create pentru<br />

lărgirea şi exempli<strong>fi</strong>carea prezentării. Nu se insistă pe comenzile <strong>program</strong>ului ANSYS, care<br />

sunt în număr de câteva mii, ci pe modul în care aceste comenzi pot <strong>fi</strong> utilizate prin<br />

intermediul unor parametri de<strong>fi</strong>niti de utilizator. Totuşi, o serie de comenzi, care folosesc la<br />

de<strong>fi</strong>nirea şi lucrul <strong>cu</strong> parametri, se prezintă complet.<br />

1.1.1. Utilizarea parametrilor


Parametri sunt variabile APDL (ei sunt similari variabilelor din Fortran). Aceştia nu<br />

trebuie declaraŃi ca tip (intregi, reali, etc). Toate variabilele intregi sau reale sunt alocate în<br />

dublă precizie. Parametri utilizaŃi fără a <strong>fi</strong> iniŃializaŃi sunt automat setaŃi la o valoare foarte<br />

mică, practic zero, adică aproximativ 2 -100 . ANSYS utilizează două tipuri de parametri: scalari<br />

şi matrice (array).<br />

Variabile de tip şir de caractere (de lungime maximă opt caractere) pot <strong>fi</strong> atribuite unor<br />

parametri prin simpla încadrare între apostroafe simple. Pentru tipul array APDL permite<br />

câteva tipuri parti<strong>cu</strong>lare de variabile şi anume: numerice, caracter, şir şi tabel (table). Aceastea<br />

din urmă folosesc la obŃinerea unor valori interpolate liniar, de exemplu la de<strong>fi</strong>nirea unei<br />

încărcări <strong>cu</strong> variaŃie în timp.<br />

Un parametru poate înlo<strong>cu</strong>i argumentul unei comenzi ANSYS oarecare <strong>cu</strong> condiŃia să<br />

<strong>fi</strong>e de<strong>fi</strong>nit anterior la valoarea dorită de utilizator şi acceptată de <strong>program</strong>.<br />

1.1.2. Reguli de atribuire a numelor parametrilor<br />

Parametrii trebuie să: înceapă <strong>cu</strong> o literă; să conŃină numai litere, numere şi caracterul<br />

underscore (liniuŃă jos); să nu conŃină mai mult de 32 de caractere. Exemple de parametri<br />

valizi sunt:<br />

A1, A2345, PI, A_1 etc.<br />

Exemple de parametri greşit de<strong>fi</strong>niŃi sunt:<br />

1A, A&B etc.<br />

Se precizează că limbajul ANSYS nu este case sensitive, adică atât parametri cât şi<br />

comenzile pot <strong>fi</strong> apelate <strong>fi</strong>e <strong>cu</strong> litere mari, sau mici <strong>fi</strong>e <strong>cu</strong> litere combinate.<br />

Se recomandă ca parametrii de<strong>fi</strong>niŃi de utilizator să nu coincidă <strong>cu</strong> o serie de nume gen<br />

etichetă (label) din ANSYS <strong>cu</strong>m ar <strong>fi</strong>: DOF, TEMP, UX, PRES, ALL, PICK, STAT, CHAR,<br />

ARRAY, TABLE etc. O serie de alŃi parametri numiŃi ARG1 până la ARG9 şi AR10 până la<br />

AR99 sunt rezervaŃi pentru parametri locali din macrouri. Deasemenea nu se recomandă<br />

utilizarea numelor atribuite unor funcŃii de pres<strong>cu</strong>rtare (adică de<strong>fi</strong>niŃi prin comanda ANSYS<br />

*ABBR) pre<strong>cu</strong>m şi a parametrilor care încep <strong>cu</strong> caracterul liniuŃă jos, adică _A1 de exemplu,<br />

deoarece aceştia sunt rezervaŃi pentru lucru intern al <strong>program</strong>ului.<br />

1.1.3. De<strong>fi</strong>nirea parametrilor<br />

În continuare, dacă nu se speci<strong>fi</strong>că, parametri de<strong>fi</strong>niŃi pot <strong>fi</strong> atribuiŃi atât variabilelor<br />

scalari cât şi array. Parametrii pot <strong>fi</strong> speci<strong>fi</strong>caŃi explicit, sau pot <strong>fi</strong> extraşi din baza de date a<br />

<strong>program</strong>ului ANSYS folosind funcŃia complexă *GET.<br />

Atribuirea valorilor unor parameteri se poate face <strong>cu</strong> comanda *SET sau direct<br />

folosind caracterul =, de exemplu comenzile de mai jos sunt echivalente<br />

*SET,A1,-24<br />

A1=-24<br />

*SET,grosime,2.07E-3<br />

Grosime=2.07E-3<br />

*SET,A2,A1<br />

A2=A1<br />

*SET,CPARM,'CASE1'<br />

CPARM='CASE1'<br />

ObŃinerea (extragerea) unor date (de intrare sau rezultate) în parametri de<strong>fi</strong>niŃi de<br />

utilizator este posibilă numai prin utilizarea funcŃiei *GET, <strong>fi</strong>e direct <strong>fi</strong>e ca argument în<br />

anumite funcŃii implicate în cal<strong>cu</strong>lul parametrilor.<br />

Comanda *GET extrage valori numerice care corespund de<strong>fi</strong>niŃiei <strong>unui</strong> nod, element,<br />

arii, volum etc şi le stochează într-un parametru de<strong>fi</strong>nit de utilizator. De exemplu comanda<br />

*GET,XG5,ELEM,5,CENT,X


atribuie parametrului XG5 coordonata centrului de greutate pe direcŃia X a elementului <strong>fi</strong>nit<br />

<strong>cu</strong> numărul 5.<br />

Comanda *GET se apelează ca o funcŃie <strong>cu</strong> o serie de parametri actuali care trebuie să<br />

<strong>fi</strong>e corect de<strong>fi</strong>niŃi pentru a obŃine ceea ce se doreşte. Formatul complet al acesteia este:<br />

*GET,Par,Entity,ENTNUM,Item1,IT1NUM,Item2,IT2NUM<br />

în care:<br />

-Par este parametrul care de<strong>fi</strong>neşte mărimea căutată;<br />

-Entity este un <strong>cu</strong>vânt cheie legat de caracteristica mărimii salvate în parametru. De<br />

exemplu NODE, ELEM, KP, LINE, AREA, VOLU, etc;<br />

-ENTNUM este numărul entităŃii sau zero pentru unele <strong>cu</strong>vinte cheie;<br />

-Item1 este numele caracteristicii unei entităŃi parti<strong>cu</strong>lare, de exemplu, dacă Entity este<br />

ELEM, Item1 poate <strong>fi</strong> <strong>fi</strong>e NUM (cel mai mic sau cel mai mare număr de element din lista de<br />

<strong>elemente</strong> selectate) sau COUNT (numărul de element din set).<br />

Comanda *GET poate <strong>fi</strong> imaginată ca o cale dintr-o structură gen arbore, de la general<br />

la o informaŃie speci<strong>fi</strong>că. Următoarele exemple prezintă câteva posibilităŃi de folosire a acestei<br />

comenzi. Prima linie extrage în parametrul MAT_E_25 materialul atribuit elementului <strong>cu</strong><br />

numărul 25:<br />

*GET,MAT_E_25,ELEM,25,ATTR,MAT MAT_E_25 = numărul elementului 25<br />

*GET,V37,ELEM,37,VOLU V37 = volumul elementului 37<br />

*GET,EL52,ELEM,52,HGEN<br />

EL52 = valoarea fluxului de căldură generat în<br />

elementul 52<br />

*GET,TMP,ELEM,16,TBULK,3 TMP = temperatura mediului ambiant pentru<br />

elementul 16 pe faŃa 3<br />

*GET,NMAX,NODE,,NUM,MAX NMAX = numărul nodului maxim din setul<br />

selectat<br />

*GET,COORD,ACTIVE,,CSYS COORD = numărul sistemului de coordonate<br />

activ<br />

Pentru unele caracteristici ale unor entităŃi parti<strong>cu</strong>lare este posibil a se utiliza o formă<br />

s<strong>cu</strong>rtă a comenzii *GET. Mai mult uneori formele s<strong>cu</strong>rte se pretează la efectuarea directă a<br />

unor operaŃii asupra parametrilor, aşa <strong>cu</strong>m se prezintă în exemplul următor. Să presupunem că<br />

se doreşte obŃinerea mediei aritmetice a coordonatelor X a două noduri <strong>cu</strong> numerele 1 şi 2.<br />

Pentru acesta se poate folosi secvenŃa de comenzi:<br />

*GET,L1,NODE,1,LOC,X<br />

*GET,L2,NODE,2,LOC,X<br />

MID=(L1+L2)/2.<br />

Metoda s<strong>cu</strong>rtă constă din apelarea<br />

MID=(NX(1)+NX(2))/2<br />

în care funcŃia „get” NX(N), întoarce coordonata X a nodului N.<br />

Argumentele funcŃiei *Get pot <strong>fi</strong> parametri sau chiar alte funcŃii get. De exemplu<br />

funcŃia<br />

NELEM(ENUM,NPOS)<br />

întoarce numărul nodului din poziŃia NPOS pentru elementul <strong>cu</strong> numărul ENUM. Se<br />

reaminteşte că nodurile <strong>unui</strong> element <strong>fi</strong>nit se numerotează I, J, K, L,... şi NPOS ia valorile 1,<br />

2, 3, 4,....Din combinaŃia funcŃiilor<br />

NX(NELEM(ENUM,NPOS))<br />

rezultă coordonata X a acelui nod solicitat de comanda precedentă.<br />

Odată de<strong>fi</strong>niŃi mai mulŃi parametri, aceştia pot <strong>fi</strong> vizualizaŃi <strong>cu</strong> comanda<br />

*STATUS.


Comanda<br />

*GET,par,PARM,,MAX<br />

întoarce numărul total de parametri de<strong>fi</strong>niŃi. În ANSYS se pot de<strong>fi</strong>ni pănă la 5000 de<br />

parametri.<br />

Pentru a şterge un parametru se poate folosi una dintre metodele de atribuire fără<br />

valoare, adică pentru a şterge parametrul A1 se pot folosi comenzile echivalente<br />

A1=<br />

*SET,A1,<br />

Uneori pentru lucrul <strong>cu</strong> <strong>fi</strong>şiere (salvare, încărcare dintr-un <strong>fi</strong>şier <strong>cu</strong> nume speci<strong>fi</strong>cat<br />

prin parametru) se impune folosirea parametrilor şir de caractere atât pentru numele <strong>fi</strong>şierelor<br />

cât şi pentru extensiile acestora. Parametri şir de caracter pot avea maximum 8 caractere. De<br />

exemplu pentru a lansa în exe<strong>cu</strong>Ńie un macrou se foloseşte comanda *USE în care argumentul<br />

este un şir de caractere alfanumeric <strong>cu</strong>m ar <strong>fi</strong>:<br />

NAME='MACRO' ! MACRO este numele <strong>fi</strong>şierului macrou<br />

*USE,NAME ! Se apelează MACRO.MAC<br />

dacă extensia <strong>fi</strong>sierului macrou este alta decât MAC atunci aceasta trebuie speci<strong>fi</strong>cată.<br />

Macroul poate <strong>fi</strong> lansat (apelat) şi direct fără a utiliza explicit comanda *USE:<br />

*SET,DEF,'SY’<br />

NEWMACRO,DEF ! Se apelează <strong>fi</strong>şierul MACROU NEWMACRO.SY<br />

Pentru a transforma o valoare numerică într-un şir de caractere, adică a a<strong>fi</strong>şa unele<br />

valori numerice, se foloseşte parametrul încadrat de semnul %. Spre exemplu dacă în titlu se<br />

doreşte a<strong>fi</strong>şarea valorii parametrului TM se foloseşte comanda:<br />

/TITLE, DISTRIBUTIA TENSIUNILOR LA TIMPUL=%TM%<br />

1.1.4. Expresii parametrice<br />

Expresiile parametrice constau în utilizarea unor operaŃii de adunare, scădere,<br />

înmulŃire, împărŃire <strong>cu</strong> parametri. De exemplu<br />

X=A+B<br />

P=(R2+R1)/2<br />

D=-B+(E**2)-(4*A*C)<br />

XYZ=(A Mai mare decât<br />

Ordinea exe<strong>cu</strong>tării operaŃiilor este cea naturală, pentru formulele complexe se folosesc<br />

parantezele. Între operatori şi variabile nu se recomandă utilizarea spaŃiilor.<br />

Sunt prede<strong><strong>fi</strong>nite</strong> următoarele funcŃii:<br />

ABS(x) Modulul lui x.


SIGN(x,y)<br />

Valoarea absolută a lui x <strong>cu</strong> semnul dat de y. Dacă y=0 semnul se<br />

consideră pozitiv<br />

EXP(x) Exponentiala lui x (e x ).<br />

LOG(x)<br />

Logaritm natural din x (ln (x)).<br />

LOG10(x)<br />

Logaritm în baza 10 din x (log 10 (x)).<br />

SQRT(x) Radical din x.<br />

NINT(x) Cel mai apropiat întreg de x.<br />

MOD(x,y) Restul împărŃirii x/y. Dacă y=0 se obŃine zero (0).<br />

RAND(x,y) Se generază numere aleatoare în domeniul x până la y (x = marginea<br />

inferioară, y = marginea superioară).<br />

GDIS(x,y)<br />

Generarea unei valori <strong>cu</strong> distribuŃie Gaussiană (normală) de medie x şi<br />

deviaŃie standard y.<br />

SIN(x), COS(x),<br />

TAN(x)<br />

Sinus, Cosinus, şi Tangenta din x. Implicit x este în radiani dar poate<br />

<strong>fi</strong> schimbată în grade <strong>cu</strong> ajutorul funcŃiei*AFUN<br />

SINH(x), COSH(x), Sinus, Cosinus şi Tangent Hiberbolic din x.<br />

TANH(x)<br />

ASIN(x), ACOS(x),<br />

ATAN(x)<br />

ATAN2(y,x)<br />

VALCHR(CPARM)<br />

CHRVAL(PARM)<br />

UPCASE(CPARM)<br />

LWCASE(CPARM)<br />

Arcsinus, Arccosinus, şi Arctangentă din x. Variabila x trebuie să <strong>fi</strong>e<br />

între -1.0 şi +1.0 pentru ASIN and ACOS. Rezultatul este în radiani<br />

dar poate <strong>fi</strong> schimbat <strong>cu</strong> *AFUN. Rezultatele sunt în intervalul -pi/2 la<br />

+pi/2 pentru ASIN şi ATAN, şi 0 la pi pentru ACOS.<br />

Arctangentă din y/x <strong>cu</strong> semnul <strong>fi</strong>ecărei componente considerate.<br />

Rezultatele sunt în domeniul -pi la +pi.<br />

Valoarea numerică a CPARM (dacă CPARM nu este numeric, se<br />

obŃine 0.0).<br />

Transformă valoarea numerică a parametrului PARM într-un şir de<br />

caractere alfanumerice<br />

Litere mari pentru parametrul CPARM.<br />

Litere mici pentru parametrul CPARM.<br />

Câteva exemple de utilizare se prezintă mai jos:<br />

PI=ACOS(-1) ! PI = 3,1415...<br />

Z3=COS(2*THETA)-Z1**2<br />

R2=SQRT(ABS(R1-3))<br />

X=RAND(-24,R2) ! X = număr aleator între -24 şi R2<br />

*AFUN,DEG ! UnităŃi de măsură pentru unghiuri în GRADE<br />

THETA=ATAN(SQRT(3)) ! THETA cal<strong>cu</strong>lat la 60 grade<br />

PHI=ATAN2(-SQRT(3),-1) ! PHI evaluat la -120 grade<br />

*AFUN,RAD ! UnităŃi de măsură pentru unghiuri resetat la RADIANI<br />

X249=NX(249) ! coordonata pe X a nodului 249<br />

SLOPE=(KY(2)-KY(1))/(KX(2)-KX(1)) ! Panta liniei dintre punctele cheie 1 şi 2<br />

CHNUM=CHRVAL(X) ! CHNUM = valoarea „caracter” a lui X<br />

UPPER=UPCASE(LABEL) ! UPPER = valoarea caracter <strong>cu</strong> litere mari a variabilei LABEL<br />

Parametrii de<strong>fi</strong>niŃi pot <strong>fi</strong> salvaŃi într-un <strong>fi</strong>şier <strong>cu</strong> comanda PARSAV şi pot <strong>fi</strong> citiŃi <strong>cu</strong><br />

comanda PARRES.<br />

1.1.5. Parametri de tip ARRAY<br />

Pe lângă parametri scalari se pot de<strong>fi</strong>ni şi parametri multipli, tip vectori sau matrice. În<br />

ANSYS aceşti parameti tip ARRAY pot <strong>fi</strong>:


• 1-D (o singură coloană)<br />

• 2-D (rânduri şi coloane)<br />

• 3-D (rânduri, coloane şi plane)<br />

• 4-D (rânduri, coloane, plane şi cărŃi)<br />

• 5-D (rânduri, coloane, plane, cărŃi şi rafturi).<br />

Programul permite trei tipuri fundamentale de parametri ARRAY:<br />

1. ARRAY. Acest tip este similar vectorilor <strong>program</strong>ului FORTRAN 77 şi este<br />

tipul implicit atunci când se dimensionează un vector. Indicii pentru rânduri, coloane si plane<br />

sunt numere conse<strong>cu</strong>tive întregi care încep <strong>cu</strong> cifra 1. Elementele vectorilor (matricelor) pot <strong>fi</strong><br />

numere reale sau întregi.<br />

2. CHAR. Acesta este un vector de caractere <strong>cu</strong> <strong>fi</strong>ecare element constând din<br />

caractere alfanumerice care nu depăşesc opt caractere. Indicii pentru rânduri, coloane si plane<br />

sunt numere conse<strong>cu</strong>tive întregi care încep <strong>cu</strong> cifra 1.<br />

3. TABLE. Aceste este un tip special de matrice <strong>cu</strong> valori numerice care<br />

permite <strong>program</strong>ului să cal<strong>cu</strong>leze prin interpolare liniară între <strong>elemente</strong>le matricei valori<br />

intermediare. Mai mult de atât, se pot de<strong>fi</strong>ni vectori de indici pentru <strong>fi</strong>ecare rând, coloană sau<br />

plan şi aceştia sunt numere reale nu întregi. Elementele matricelor pot <strong>fi</strong> numere reale sau<br />

întregi. Această structură de date permite descrierea unor funcŃii matematice.<br />

Deoarece parametrii de tip ARRAY sunt cei uzuali în toate domeniile, în continuare se<br />

insistă pe variabilele de tip TABLE (tabel).<br />

Orice tabel conŃine un rând şi o coloană de index zero. Valorile corespunzătoare<br />

acestor indecşi sunt valori reale în ordine crescătoare şi pot <strong>fi</strong> de<strong>fi</strong>niŃi <strong>cu</strong> comanda *TAXIS.<br />

Fig. 1.1 prezintă structura unei variabile de tip tabel.<br />

Fig. 1.1 Structura unei variabile de tip tabel(6,6,3)<br />

Pentru a de<strong>fi</strong>ni o variabilă de tip ARRAY, mai întâi trebuie declarat tipul şi<br />

dimensiunile parametrului utilizând comanda *DIM, aşa <strong>cu</strong>m se prezintă de exemplele de mai<br />

jos:<br />

*DIM,AA,,4 ! Tipul ARRAY este implicit, dimensiunea 4[x1x1]<br />

*DIM,XYZ,ARRAY,12 ! Tipul ARRAY, dimensiunea 12[x1x1]<br />

*DIM,FORCE,TABLE,5 ! Tipul TABLE, dimensiunea 5[x1x1]<br />

*DIM,T2,,4,3 ! Dimensiunile sunt 4x3[x1]<br />

*DIM,CPARR1,CHAR,5 ! Tipul CHAR, dimensiunea 5[x1x1]


Se menŃionează că <strong>elemente</strong>le parametrilor de tip ARRAY şi TABLE sunt iniŃializate<br />

la zero, iar parametri de tip CHAR sunt iniŃializaŃi <strong>cu</strong> valori blanc. Exemplele următoare arată<br />

<strong>cu</strong>m se pot iniŃializa valorile parametrilor de tip ARRAY şi TABLE:<br />

*DIM,XVAL,ARRAY,X1<br />

*DIM,YVAL,ARRAY,Y1<br />

YVAL(1)=0,20<br />

*DIM,ZVAL,ARRAY,10<br />

ZVAL(1)=10,20,30,40,50,60,70,80,90,100<br />

*DIM,TVAL,ARRAY,5<br />

TVAL(1)=1,.90,.80,.70,.60<br />

*DIM,TEVL,ARRAY,5<br />

TEVL(1)=1,1.20,1.30,1.60,1.80<br />

!!!! CREAZA TABEL 5D PENTRU APLICAREA PRESIUNII<br />

X1=2 !!!! DIMENSIUNE X<br />

Y1=2 !!!! DIMENSIUNE Y<br />

Z1=10 !!!! DIMENSIUNE Z<br />

D4=5 !!!! DIMENSIUNEA TIMPULUI<br />

D5=5 !!!! DIMENSIUNEA TEMPERATURII<br />

LEN=10<br />

!!!! LUNGIMEA BARE INCASTRATE<br />

WID=1<br />

!!!! LATIMEA BAREI INCASTRATE<br />

HTH=2<br />

!!!! INALTIMEA BARE INCASTRATE<br />

*DIM,XVAL,ARRAY,X1<br />

!!!! CREAZA UN VECTOR 1D PENTRU A<br />

INCARCATABELUL 5D<br />

XVAL(1)=0,20<br />

!!!! VARIATIA PE DIMENSIUNE<br />

*DIM,YVAL,ARRAY,Y1 !!!! VALORI DIFERITE PE FIECARE<br />

YVAL(1)=0,20<br />

!!!! CARTE SI RAFT<br />

*DIM,ZVAL,ARRAY,10<br />

ZVAL(1)=10,20,30,40,50,60,70,80,90,100<br />

*DIM,TVAL,ARRAY,5<br />

TVAL(1)=1,.90,.80,.70,.60<br />

*DIM,TEVL,ARRAY,5<br />

TEVL(1)=1,1.20,1.30,1.60,1.80<br />

*DIM,CCC,TAB5,X1,Y1,Z1,D4,D5,X,Y,Z,TIME,TEMP<br />

*TAXIS,CCC(1,1,1,1,1),1,0,WID<br />

!!! X-DIM<br />

*TAXIS,CCC(1,1,1,1,1),2,0,HTH<br />

!!! Y-DIM<br />

*TAXIS,CCC(1,1,1,1,1),3,1,2,3,4,5,6,7,8,9,10 !!! Z-DIM<br />

*TAXIS,CCC(1,1,1,1,1),4,0,10,20,30,40<br />

!!! TIMP<br />

*TAXIS,CCC(1,1,1,1,1),5,0,50,100,150,200 !!! TEMP<br />

*DO,II,1,2<br />

*DO,JJ,1,2<br />

*DO,KK,1,10<br />

*DO,LL,1,5<br />

*DO,MM,1,5<br />

CCC(II,JJ,KK,LL,MM)=(XVAL(II)+YVAL(JJ)+ZVAL(KK))*TVAL(LL)*TEVL(MM)<br />

*ENDDO


*ENDDO<br />

*ENDDO<br />

*ENDDO<br />

*ENDDO<br />

1.1.6. Moduri de atribuire a valorilor unor parametri ARRAY<br />

Valorile unor parametri se pot speci<strong>fi</strong>ca folosind una dintre metodele:<br />

-Se foloseşte comanda *SET pentru atribuirea individuală a <strong>elemente</strong>lor, sau<br />

forma pres<strong>cu</strong>rtată „=”;<br />

-Se utilizează comanda *VFILL pentru iniŃializare pe coloane;<br />

-Se foloseşte modul interactiv de editare utilizând *VEDIT<br />

-Se citesc valorile din <strong>fi</strong>şiere ASCII utilizând comenzile *VREAD şi<br />

*TREAD.<br />

Folosind comanda *SET (sau „=”) se pot speci<strong>fi</strong>ca până la 10 valori pe linie. De<br />

exemplu pentru a de<strong>fi</strong>ni un vector XYZ <strong>cu</strong> 12 valori se pot folosi comenzile:<br />

XYZ(1)=59.5,42.494,-9.01,-8.98,-8.98,9.01,-30.6,51<br />

XYZ(9)=-51.9,14.88,10.8,-10.8<br />

Se observă că lo<strong>cu</strong>l de unde începe completarea trebuie marcat prin indexul de rând<br />

(1) sau (9) în exemplul de mai sus.<br />

Exemplul următor arată <strong>cu</strong>m se atribuie valori <strong>unui</strong> parametru de tip ARRAY de<br />

dimensiuni 4x3 <strong>cu</strong> numele T2:<br />

T2(1,1)=.6,2,-1.8,4 ! de<strong>fi</strong>neşte (1,1),(2,1),(3,1),(4,1)<br />

T2(1,2)=7,5,9.1,62.5 ! de<strong>fi</strong>neşte (1,2),(2,2),(3,2),(4,2)<br />

T2(1,3)=2E-4,-3.5,22,.01 ! de<strong>fi</strong>neşte (1,3),(2,3),(3,3),(4,3)<br />

Dacă variabila FORCE de tip tabel de<strong>fi</strong>nită anterior este<br />

1e − 6 ⎡ 0.0 ⎤<br />

0.8<br />

⎢ ⎥<br />

⎢<br />

560.0<br />

⎥<br />

FORCE = 7.2 ⎢560.0⎥<br />

⎢ ⎥<br />

8.5 ⎢238.5⎥<br />

9.3 ⎢<br />

⎣ 0.0 ⎥<br />

⎦<br />

atunci comenzile de iniŃializare pot <strong>fi</strong>:<br />

FORCE(1)=0,560,560,238.5,0<br />

FORCE(1,0)=1E-6,.8,7.2,8.5,9.3<br />

În mod similar se pot iniŃializa şi parametri de tip CHAR, pentru exempli<strong>fi</strong>care se<br />

prezintă mai jos un exemplu:<br />

*DIM,REZULT,CHAR,3 !Vector de tip CHAR de dimensiuni (3,1,1)<br />

REZULT(1)='SX','SY','SZ' !Atribuirea valorilor variabilei RESULT<br />

Uneori este mai convenabil a se folosi comanda *VFILL pentru a iniŃializa parametri<br />

deoarece aceasta permite utilizarea unor funcŃii simple de generare. De exemplu o matrice<br />

poate <strong>fi</strong> obŃinută <strong>cu</strong> comenzile:<br />

*DIM,DTAB,ARRAY,4,3 ! dimensiune 4 x 3, matrice numerică<br />

*VFILL,DTAB(1,1),DATA,-3,8,-12,57 ! patru valori încărcate în vectorul 1<br />

*VFILL,DTAB(1,2),RAMP,2.54,2. 4 ! „umple” vectorul 2 <strong>cu</strong> valori începând<br />

<strong>cu</strong> 2.54 şi apoi incrementate <strong>cu</strong> 2.4<br />

*VFILL,DTAB(1,3),RAND,1.5,10 ! iniŃializează vectorul 3 <strong>cu</strong> valori aleatoare<br />

între 1.5 şi 10. Rezultatul variază din cauza generării aleatoare.


Lucrul interactiv este permis numai în modul de lucru interactiv, adică în GUI şi se<br />

poate efectua <strong>cu</strong> comanda *VEDIT.<br />

Parametrii de tip ARRAY pot <strong>fi</strong> citiŃi dintr-un <strong>fi</strong>şier ASCII tot în forma precizată de<br />

start din locaŃia dorită. Formatul de citire se controlează printr-un descriptor asemănător celor<br />

din FORTRAN şi trebuie să urmeze comanda de citire. Descriptorul controlează numărul<br />

câmpurilor de citit din <strong>fi</strong>ecare înregistrare, lăŃimea datelor şi poziŃia punctului zecimal.<br />

De exemplu dispunând de un <strong>fi</strong>şier numit dataval care conŃine informaŃia:<br />

1.5 7.8 12.3<br />

15.6 -45.6 42.5<br />

şi un vector <strong>cu</strong> numele EXEMPLU care are dimensiunea 2x3, următoarele comenzi<br />

*DIM,EXEMPLU,,2,3<br />

*VREAD,EXEMPLU(1,1),dataval,,,JIK,3,2<br />

(3F6.1)<br />

conduc la obŃinerea matricei<br />

⎡ 1.5 7.8 12.3⎤<br />

EXEMPLU = ⎢<br />

⎥ .<br />

⎣15.6<br />

− 45.6 42.5⎦<br />

Se menŃionează că funcŃia *VREAD nu poate <strong>fi</strong> <strong>folosit</strong>ă la citirea unor matrice 4D<br />

sau 5D.<br />

În mod similar se pot citi şi parametri de tip TABLE, folosind comanda *TREAD.<br />

FaŃă de cazul comenzii *VREAD pentru citirea parametrilor de tip ARRAY, comanda<br />

*TREAD este mai flexibilă, în sensul că nu necesită o formatare rigidă. Comanda permite ca<br />

un număr de linii iniŃiale (de comentariu) să nu <strong>fi</strong>e citite, dar dimensiunea delarată trebuie să<br />

<strong>fi</strong>e în concordantă <strong>cu</strong> numărul de linii şi coloane ale <strong>fi</strong>şierului. Valorile sunt citite pe rânduri<br />

pănă când toate coloanele din <strong>fi</strong>ecare rând sunt citite.<br />

Se presupune că este creat un <strong>fi</strong>şier ASCII <strong>cu</strong> numele "T2data.txt" care conŃine<br />

temperatura ca funcŃie de timp şi coordonata X şi se doreşte ca aceste date să <strong>fi</strong>e încărcate<br />

într-un tabel <strong>cu</strong> numele "Ttx." Tabelul în forma ASCII arată astfel:<br />

Timp<br />

Temp (timp-X-coord) Table<br />

Coordinata X<br />

0 0 .3 .5 .7 .9<br />

0 10 15 20 25 30<br />

1 15 20 25 35 40<br />

2 20 25 35 55 60<br />

4 30 40 70 90 100<br />

În ANSYS, comenzile sunt:<br />

*DIM,Ttx,table,4,5,,time,X-COORD<br />

*TREAD,Ttx,t2data,txt,,2<br />

Se poate utiliza şi comanda *VGET care este similară comenzii *GET <strong>cu</strong> deosebirea<br />

că se pot atribui mai maulte valori într-un vector. De exemplu comanda<br />

*VGET,A(1),ELEM,5,CENT,X<br />

întoarce coordonata X a elementului 5, apoi 6 şi aşa mai departe până când vectorul este<br />

complet de<strong>fi</strong>nit („umplut”).<br />

Pentru a modi<strong>fi</strong>ca anumite valori în baza de date se poate folosi comanda *VPUT care<br />

poate <strong>fi</strong> considerată opusul comenzii *VGET.


Datele din ANSYS pot <strong>fi</strong> salvate în <strong>fi</strong>şiere utilizând comanda *VWRITE care scrie<br />

maximum 10 vectori în <strong>fi</strong>şierul deschis <strong>cu</strong> comanda *CFOPEN. Formatul de scriere pentru<br />

<strong>fi</strong>ecare vector trebuie speci<strong>fi</strong>cat între paranteze imediat după comanda *VWRITE.<br />

Comenzile de formatare corespund compitatorului FORTRAN 77. De exemplu pentru<br />

descriptorul F (floating point) care este valabil pentru orice valoare numerică se foloseşte<br />

sintaxa:<br />

Fw.d<br />

în care w este lăŃimea datei în număr de caractere iar d este numărul de zecimale. Deci pentru<br />

un câmp de 10 caractere <strong>cu</strong> 8 zecimale se declară (F10.8).<br />

Pentru câmpuri de caractere se foloseşte descriptorul A, care se foloseşte <strong>cu</strong> sintaxa:<br />

Aw<br />

în care w este lăŃimea datei în număr de caractere. Pentru un parametru <strong>cu</strong> 8 caractere se<br />

foloseşte (A8).<br />

Dacă se dispune de matricea<br />

atunci secvenŃa de comenzi<br />

X=25<br />

*CFOPEN,VECTOR<br />

*VWRITE,SEQU,MYDATA(1,1,1),MYDATA(1,2,1),MYDATA(1,3,1),10.2,X,<br />

MYDATA(1,1,1)+3<br />

(F3.0,' ',F8.4,' ',F8.1,' 'F8.6,' ',F4.1,' 'F4.0,' 'F8.1)<br />

*CFCLOSE<br />

de<strong>fi</strong>neşte un parametru X de valoare 25, apoi deschide pentru scriere <strong>fi</strong>şierul VECTOR şi<br />

scrie în el un număr de odine (începând <strong>cu</strong> 1) prin <strong>cu</strong>vântul cheie SEQU şi apoi alŃi parametri<br />

speci<strong>fi</strong>caŃi. Rezultă <strong>fi</strong>sierul:<br />

1. 2.1522 3.9 5.286370 10.2 25. 5.2<br />

2. 2.3049 4.0 5.409196 10.2 25. 5.2<br />

3. 2.0105 3.4 5.936638 10.2 25. 5.2<br />

4. 2.3683 3.3 5.632203 10.2 25. 5.2<br />

5. 2.8491 4.8 5.978024 10.2 25. 5.2<br />

6. 2.2280 3.5 5.546851 10.2 25. 5.2<br />

Se menŃionează că în paranteza care de<strong>fi</strong>neşte formatarea se pot include şi caractere<br />

alfanumerice între apostroafe simple. De exemplu pentru matricea<br />

⎡10 50⎤<br />

DATA1 =<br />

⎢<br />

20 70<br />

⎥<br />

⎢ ⎥<br />

⎢⎣<br />

30 80⎥⎦<br />

secvenŃa de comenzi:<br />

*CFOPEN,VECTOR1,TXT<br />

*VWRITE,SEQU,DATA1(1,1),DATA1(1,2),(DATA1(1,1)+DATA1(1,2))<br />

(' ROW',F3.0,' CONTAINS ',2F7.3,'. IS THEIR SUM ',F7.3,' ?')<br />

*CFCLOSE<br />

are drept rezultat <strong>fi</strong>şierul vector1.txt care arată astfel:<br />

ROW 1. CONTAINS 10.000 50.000. IS THEIR SUM 60.000 ?<br />

ROW 2. CONTAINS 20.000 70.000. IS THEIR SUM 60.000 ?<br />

ROW 3. CONTAINS 30.000 80.000. IS THEIR SUM 60.000 ?


1.1.7. OperaŃii <strong>cu</strong> vectori şi matrice<br />

O modalitate mai rapidă de a efectua operaŃii vectoriale decât utilizarea operaŃiilor în<br />

cadrul <strong>unui</strong> ciclu, <strong>cu</strong>m ar <strong>fi</strong> adunări/scăderi, sin, cos, produs vectorial sau produs scalar, etc<br />

pot <strong>fi</strong> efectuate <strong>cu</strong> o serie de comenzi prede<strong><strong>fi</strong>nite</strong> <strong>cu</strong>m ar <strong>fi</strong>: *VOPER, *VFUNC, *VSCFUN,<br />

*VITRP. Vectorii care se folosesc în cadrul acestor comenzi trebuie declaraŃi anterior <strong>cu</strong><br />

funcŃia *DIM ca variabile de tip vector sau tabel. Structura comenzii *VOPER este:<br />

*VOPER, ParR, Par1, Oper, Par2, CON1, CON2<br />

în care argumentele funcŃiei sunt:<br />

ParR –numele parametrului rezultant care trebuie declarat anterior;<br />

Par1 –primul parametru utilizat în operaŃie, poate <strong>fi</strong> şi un scalar, sau un parametru scalar;<br />

Oper - operaŃia care se efectuează, poate <strong>fi</strong> una dintre:<br />

ADD pentru adunare Par1+Par2;<br />

SUB pentru scădere Par1-Par2;<br />

MULT pentru înmulŃire Par1*Par2;<br />

DIV pentru împărŃire Par1/Par2 (o împărŃire <strong>cu</strong> zero dă zero!);<br />

MIN sau MAX pentru minimum şi maximum;<br />

LT, LE, EQ, NE, GE şi GT pentru mai mic, mai mic sau egal, egal, not egal, mai<br />

mare sau egal şi strict mai mare. Rezultatul este 1 pentru adevărat şi 0 pentru fals;<br />

DER1 prima derivată d(Par1)/d(Par2). Par2 trebuie să <strong>fi</strong>e în ordine crescătoare;<br />

DER2 derivata a doua d 2 (Par1)/d(Par2) 2 ;<br />

INT1 integrala simplă ∫ Par1 d(Par2), unde CON1 este constanta de interare;<br />

Par1 d(Par2), unde CON1 este constanta de<br />

INT2 este integrala conse<strong>cu</strong>tivă ∫ ∫<br />

integrare a primei integrale iar CON2 este constanta de integrare a celei de-a doua integrări.<br />

Dacă Par1 conŃine date legate de distribuŃia de acceleraŃie, atunci CON1 este viteza iniŃială iar<br />

CON2 este deplasarea iniŃială;<br />

DOT produs scalar;<br />

CROSS produs vectorial.<br />

Par2 – al doilea parametru în operaŃie.<br />

CON1 – prima constantă de integrare pentru operaŃiile INT1 şi INT2.<br />

CON2 - a doua constantă de integrare pentru operaŃia INT2.<br />

O comandă similară este *MOPER.<br />

Comanda *VFUNC efectuează o funcŃie asupra <strong>unui</strong> singur vector Par1 şi are sintaxa:<br />

*VFUN, ParR, Func, Par1, CON1, CON2, CON3<br />

în care argumentul<br />

Func este funcŃia apelată şi poate <strong>fi</strong> una dintre funcŃiile uzuale:<br />

ACOS,<br />

ASIN,<br />

ASORT (parametrul Par1 este sortat în ordine crescătoare),<br />

ATAN,<br />

COMP (compres),<br />

COPY,<br />

COS,<br />

COSH,<br />

DIRCOS (cosinusurile directoare ale tensiunilor principale),<br />

DSORT (parametrul Par1 este sortat în ordine descrescătoare),<br />

EULER (unghiurile Euler pentru tensiunile principale),


EXP,<br />

EXPA (expandare-reversul COMP),<br />

LOG,<br />

LOG10,<br />

NINT (cel mai apropiat întreg),<br />

NOT,<br />

PRIN (tensiunile principale din componente),<br />

PWR (funcŃia putere),<br />

SIN,<br />

SINH,<br />

SQRT,<br />

TAN,<br />

TANH,<br />

TANG (tangenta la o <strong>cu</strong>rbă),<br />

NORM (normala la o <strong>cu</strong>rbă),<br />

LOCAL (transformă coordonatele globale într-un sistem de coordonate local),<br />

GLOBAL (transformă coordonatele dintr-un sistem de coordonate local în sistemul de<br />

coordonate global).<br />

Par1 – parametrul implicat în operaŃie.<br />

CON1, CON2, CON3 - constante (utilizate doar pentru funcŃiile PWR, NORM, LOCAL şi<br />

GLOBAL).<br />

Deci operaŃiile efectuate pot <strong>fi</strong> rezumate în<br />

ParR = f(Par1)<br />

unde funcŃia (f) a fost descrisă mai sus. Dacă rezultatul depăşeşte domeniul de reprezentare al<br />

numerelor, adică partea exponenŃială este mai mică decât -32 ori mai mare decât 32 atunci<br />

funcŃia atribuie valoarea zero. OperaŃiile continuă să „umple” vectorul ParR complet dacă nu<br />

există alte speci<strong>fi</strong>caŃii suplimentare date prin comenzile *VLEN sau *VMASK.<br />

Comanda *VLEN speci<strong>fi</strong>că numărul de operaŃii efectuate pre<strong>cu</strong>m şi incrementul.<br />

Comanda *VMASK permite efectuarea parŃială numai a unor rânduri funcŃie de un alt vector<br />

care conŃine <strong>elemente</strong> 0 şi 1 în poziŃiile care trebuie „par<strong>cu</strong>rse”.<br />

Uneori este util ca parametri care intră în operaŃie (sau chiar rezultatul) să <strong>fi</strong>e folosiŃi<br />

<strong>cu</strong> valoarea lor absolută, pentru aceasta se activează funcŃia *VABS. Dacă parametri trebuie<br />

să <strong>fi</strong>e multiplicaŃi <strong>cu</strong> un factor atunci se poate folosi funcŃia *VFACT. Dacă trebuie exe<strong>cu</strong>tată<br />

o comandă de genul<br />

ParR = ParR + ParR(Precedent),<br />

atunci se poate folosi opŃiunea funcŃiei *VCUM.<br />

Pentru a obŃine anumite proprietăŃi ale <strong>unui</strong> vector Par1 se poate utiliza funcŃia <strong>cu</strong><br />

sintaxa:<br />

*VSCFUN, ParR, Func, Par1<br />

în care<br />

ParR este un parametru scalar, iar<br />

Func poate să <strong>fi</strong>e<br />

MAX,<br />

MIN,<br />

LMAX, LMIN (indexul de localizare),<br />

FIRST, LAST (indexul primei/ultimei valori nenule din vector),<br />

SUM (suma <strong>elemente</strong>lor vectorului),<br />

MEDI (valoarea de mijloc),<br />

MEAN ( adică (σ Par1)/NUM, unde NUM este numărul valorilor însumate),<br />

VARI (σ ((Par1-MEAN)**2))/NUM,


STDV (deviaŃia standard: radical din VARI),<br />

RMS (Root-mean-square: radical din (σ (Par1**2))/NUM),<br />

NUM (Numărul valorilor adunate –valorile mascate nu sunt numărate).<br />

Cu comanda *VITRP se poate extrage o matrice de tip vector dintr-o matrice de tip<br />

tabel prin interpolare liniară.<br />

Exemplele următoare prezintă modul de lucru ale funcŃiilor enumerate mai sus. Se<br />

consideră că parametrii următori sunt deja de<strong>fi</strong>niŃi (X şi Y ar pute <strong>fi</strong> de<strong>fi</strong>niŃi <strong>cu</strong> comenzile de<br />

mai jos)<br />

*DIM,X,ARRAY,4,4<br />

*VFILL,X(1,1),DATA,-2,1,4,-8<br />

*VFILL,X(1,2),DATA,6,0,-3,1<br />

*VFILL,X(1,3),DATA,8,2,-1,10<br />

*VFILL,X(1,4),DATA,0,12,7,-5<br />

*DIM,Y,ARRAY,4,4<br />

*VFILL,Y(1,1),DATA,3,-5,8,1<br />

*VFILL,Y(1,2),DATA,2,-7,0,4<br />

*VFILL,Y(1,3),DATA,5,1,0,9<br />

*VFILL,Y(1,4),DATA,-6,0,11,16<br />

⎡ 0 ⎤<br />

⎢ ⎥<br />

⎡−<br />

2 6 8 0 ⎤ ⎡ 3 2 5 − 6⎤<br />

⎢<br />

15<br />

⎥<br />

⎢<br />

⎥<br />

= ⎢<br />

1 0 2 12<br />

⎢<br />

⎥<br />

⎢30⎥<br />

X<br />

⎥ ⎢<br />

− 5 − 7 1 0<br />

⎥<br />

⎢ ⎥<br />

Y =<br />

THETA =<br />

⎢ 4 − 3 −1<br />

7 ⎥ ⎢ 8 0 0 11 ⎥<br />

⎢45⎥<br />

⎢<br />

⎥ ⎢<br />

⎥<br />

⎢60⎥<br />

⎣−<br />

8 1 10 − 5⎦<br />

⎣ 1 4 9 16 ⎦<br />

⎢ ⎥<br />

⎢75⎥<br />

⎢ ⎥<br />

⎣90⎦<br />

Pentru început se de<strong>fi</strong>neşte un vector Z1 care este rezultatul adunării coloanei 2 din X<br />

<strong>cu</strong> coloana 1 din Y. Pentru acesta se exe<strong>cu</strong>tă comenzile<br />

*DIM,Z1,ARRAY,4<br />

*VOPER,Z1(1),X(1,2),ADD,Y(1,1)<br />

care conduc la rezultatul:<br />

⎡ 9 ⎤<br />

⎢ ⎥<br />

⎢<br />

− 5<br />

Z 1 = ⎥ .<br />

⎢ 5 ⎥<br />

⎢ ⎥<br />

⎣ 2 ⎦<br />

În exemplul următor se înmulŃeşte prima coloană din X (începând <strong>cu</strong> rândul 2) <strong>cu</strong> a<br />

patra coloană din Y (începând <strong>cu</strong> rândul 1) şi se salvează rezultatele în vectorul Z2 începând<br />

<strong>cu</strong> rândul 1:<br />

*DIM,Z2,ARRAY,3<br />

*VOPER,Z2(1),X(2,1),MULT,Y(1,4)<br />

Rezultatul este:<br />

⎡ − 6 ⎤<br />

Z 2 =<br />

⎢ ⎥<br />

⎢<br />

0<br />

⎥<br />

⎢⎣<br />

− 88⎥⎦<br />

Pentru comenzile în care se implică operaŃii matriceale:


*DIM,Z3,ARRAY,4,4,1, , ,<br />

*MOPER,Z3(1,1),X(1,1),MULT,Y(1,1)<br />

se obŃine<br />

⎡28<br />

− 46 − 4 100⎤<br />

⎢<br />

⎥<br />

⎢<br />

31 50 113 208<br />

Z 3 =<br />

⎥ .<br />

⎢26<br />

57 80 77 ⎥<br />

⎢<br />

⎥<br />

⎣46<br />

− 43 − 84 78 ⎦<br />

În următorul exemplu se dimensionează mai întâi matricea Z4 şi apoi se exe<strong>cu</strong>tă<br />

produsul vectorial pentru patru perechi de vectori. Componentele i, j şi k a acestor vectori sunt<br />

coloanele 1, 2 şi 3 din X şi coloanele 2, 3 şi 4 din Y. Aceste rezultate sunt scrise în matricea<br />

Z4, pentru care componentele i, j şi k sunt vectorii din coloanele 1, 2 şi 3.<br />

*DIM,Z4,ARRAY,4,3<br />

*VOPER,Z4(1,1),X(1,1),CROSS,Y(1,2)<br />

⎡−<br />

76 4 − 22⎤<br />

⎢<br />

⎥<br />

⎢<br />

− 2 −14<br />

1<br />

Z 4 =<br />

⎥<br />

⎢−<br />

33 − 44 0 ⎥<br />

⎢<br />

⎥<br />

⎣−<br />

74 168 − 76⎦<br />

Pentru prima pereche de vectori: -2i+6j+8k şi 2i+5j-6k, rezultă prima linie, adică<br />

i j k<br />

− 2 6 8 = −76i<br />

+ 4j − 22k .<br />

2<br />

5 − 6<br />

Comenzile de mai jos exe<strong>cu</strong>tă: se dimensionează matricea A4; se setează interpretarea<br />

unghiurilor în grade; se cal<strong>cu</strong>lează în prima coloană cosinus de theta, apoi în coloana<br />

următoare sinus de theta, iar în ultima coloană se atribuie valori constante egale <strong>cu</strong> 2. În<br />

această situaŃie variabila A4 reprezintă un arc de cerc de rază 1 reprezentat prin 7 puncte<br />

echidistante care se află în planul z=2.<br />

*DIM,A4,ARRAY,7,3<br />

*AFUN,DEG<br />

*VFUN,A4(1,1),COS,THETA(1)<br />

*VFUN,A4(1,2),SIN,THETA(1)<br />

A4(1,3)=2,2,2,2,2,2,2<br />

OperaŃiile matriceale se efectuează <strong>cu</strong> comanda *MOPER care are sintaxa:<br />

*MOPER, ParR, Par1, Oper, Par2, Par3, kDim, --, kOut<br />

în care argumentele au semni<strong>fi</strong>caŃia:<br />

ParR – numele parametrului în care se stochează rezultatele;<br />

Par1 – primul parametru de intrare implicat în operaŃie. Pentru unele operaŃii <strong>cu</strong>m ar <strong>fi</strong> MAP,<br />

acesta trebuie să să aibă dimensiunea N x 3 , adică coordonatele pentru care se doreşte a <strong>fi</strong><br />

efectuată interpolarea, iar ParR rezultă de dimensiune N(out) x M şi conŃine valorile<br />

interpolate;<br />

Oper - operaŃia matriceală, care poate <strong>fi</strong>:<br />

INVERT (inversarea unei matrice pătratice);<br />

MULT (înmulŃire de matrice);<br />

COVAR (covarianŃa);<br />

CORR (coe<strong>fi</strong>cienŃii de corelaŃie);


SOLV (rezolvarea <strong>unui</strong> sistem de e<strong>cu</strong>aŃii liniar, se rezolvă unsistem de n e<strong>cu</strong>aŃii <strong>cu</strong> n<br />

ne<strong>cu</strong>nos<strong>cu</strong>te de forma a n1 x 1 + a n2 x 2 + ... + a nn x n = b n unde Par1 conŃine matricea coe<strong>fi</strong>cienŃilor<br />

a, Par2 vectorul sau vectorii valorilor b, şi ParR este vectorul sau vectorii ne<strong>cu</strong>nos<strong>cu</strong>telor x;<br />

SORT,<br />

NNEAR (determinarea rapidă a celor mai apropiate noduri faŃă de vectorul Par1 a<br />

coordonatelor n x 3;<br />

ENEAR (cel mai apropiat element faŃă de un vector de coordonate);<br />

MAP (proiectarea unor rezultate dintr-un <strong>program</strong> în altul, un fel de interpolare)<br />

Par2 – al doilea parametru implicat în operaŃii<br />

Par3 - al treilea parametru implicat în operaŃii<br />

kDim - criteriul de interpolare utilizat în MAP (pe o suprafaŃă sau pe un volum)<br />

kOut – criteriul de interpolare în afara regiunii declarate<br />

Toate operaŃiile <strong>cu</strong> vectori şi matrice sunt afectaŃi de speci<strong>fi</strong>caŃiile din anumite<br />

comenzi <strong>cu</strong>m ar <strong>fi</strong>: *VCUM (soluŃie <strong>cu</strong>mulativă), *VABS (se lucrează <strong>cu</strong> valori absolute),<br />

*VFACT (se scalează <strong>cu</strong> un factor), *VLEN (numărul de rânduri implicate în operaŃie),<br />

*VCOL (numărul de coloane implicat în operaŃie), and*VMASK (selectarea parŃială) şi care<br />

sunt resetate la implicit după <strong>fi</strong>ecare operaŃie <strong>cu</strong> vectori şi matrice. Starea <strong>cu</strong>rentă a<br />

speci<strong>fi</strong>caŃiilor se poate afla <strong>cu</strong> *VSTAT. Se precizează că funcŃiile de speci<strong>fi</strong>caŃie devin<br />

active doar atunci când operaŃiile implicate permit acest lucru.<br />

Vectorii se pot reprezenta gra<strong>fi</strong>c utilizând comanda *VPLOT. Eticheta axei<br />

ordonatelor se poate modi<strong>fi</strong>ca <strong>cu</strong> comanda /GCOLUMN.<br />

1.1.8. Limbajul APDL utilizat în macrouri<br />

O serie de comenzi frecvente se pot salva într-un <strong>fi</strong>şier şi apoi se pot apela ori de câte<br />

ori este nevoie printr-o comandă similară celor din ANSYS. Această listă de comenzi poartă<br />

numele de “macrou”. Macrourile pot să conŃină (includă) alte macrouri, adică un macou<br />

poate să apeleze alt macrou şi aşa mai departe. Se pot utiliza până la 20 de nivele de<br />

includere.<br />

Fig. 1.2: Geometria parametrică <strong>unui</strong> nit, în macroul nit_1.mac


Un exemplu de macrou care de<strong>fi</strong>neşte un nit (în /prep7) în planul de lucru <strong>cu</strong>rent, <strong>cu</strong><br />

axa nitului pe direcŃia Z şi centul nitului chiar in originea planului de lucru (vezi Fig. 1.2)<br />

este:<br />

!* VERSIUNEA 1.0 STEFAN SOROHAN 01/06/2007<br />

!* MACROUL DEFINESTE UN NIT PLIN CU CAP TRONCONIC DE GEOMETRIE:<br />

!* DIAMETRU D = ARG1<br />

!* LUNGIME PARTE CILINDRICA L = ARG2<br />

!* DIAMETRU MAX A CAPULUI DE NIT DC = ARG3<br />

!* INALTIMEA CAPULUI DE NIT H = ARG4<br />

/NOPR ! SE SUPRIMA PRINTAREA COMENZILOR DIN MACROU<br />

!* VERIFICAREA SI CORECTIA DATELOR DE INTRARE<br />

*IF,ARG1,LE,0,THEN<br />

ARG1=1 ! implicit diametrul nitului este 1<br />

*MSG, NOTE, 'NIT',1,1,2,0.75<br />

DIAMETRU ( %C) = %I, LUNGIME = %G, DIAM CAP NIT = %G, INALTIME CAP<br />

NIT = %G<br />

*ENDIF<br />

*IF,ARG2,LE,0,THEN<br />

ARG2=ARG1<br />

*ENDIF<br />

*IF,ARG3,LE,0,THEN<br />

ARG3=2*ARG1<br />

*ENDIF<br />

*IF,ARG4,LE,0,THEN<br />

ARG4=0.75*ARG1<br />

*ENDIF<br />

*IF,DC,LE,D,THEN<br />

ARG3=2*ARG1<br />

*ENDIF<br />

VSEL,U,,,ALL ! DESELECTAREA TUTUROR VOLUMELOR<br />

!* CREAREA NITULUI<br />

CYLIND,ARG1/2, ,-ARG2/2,ARG2/2,0,360,<br />

CONE,ARG3/2,ARG1/2,ARG2/2,ARG2/2+ARG4,0,360,<br />

CONE,ARG1/2,ARG3/2,-ARG2/2-ARG4,-ARG2/2,0,360,<br />

VADD,ALL ! ADUNAREA CELOR TREI VOLUME DEFINITE<br />

VSEL,S,,,ALL ! SELECTAREA TUTUROR VOLUMELOR<br />

/GO<br />

! IN CONTINUARE SE SCRIU (AFISEAZA) COMENZILE<br />

Dacă acest macrou este salvat în <strong>fi</strong>şierul nit_1.mac atunci el se poate apela <strong>cu</strong><br />

comanda:<br />

*USE,NIT_1<br />

sau, deoarece extensia este mac, prin simpla apelare<br />

NIT_1<br />

în acesta variantă de apelare se obŃine un nit <strong>cu</strong> dimensiunile prede<strong><strong>fi</strong>nite</strong> în macrou, adică<br />

D = 1; L = 1, D c = 2; H = 0,75,<br />

dacă spre exemplu se doreşte obŃinerea <strong>unui</strong> nit <strong>cu</strong> dimensiunile


D = 2; L = 3, D c = 4; H = 1<br />

atunci se foloseşte comanda:<br />

NIT_1,2,3,4,1<br />

Macrourile se pot crea în ANSYS sau se pot utiliza o serie de editoare text (wordpad<br />

de exemplu) în care se “scriu” comenzi.<br />

Macrourile trebuie să nu <strong>fi</strong>e denumite identic <strong>cu</strong> numele comenzilor ANSYS, sau să<br />

înceapă <strong>cu</strong> primele 4 caractere ale unei comenzi ANSYS deoarece atunci <strong>program</strong>ul exe<strong>cu</strong>tă o<br />

comandă internă şi nu macroul. Numele <strong>fi</strong>şierului macrou nu trebuie să depăşească 32 de<br />

caractere, nu poate să înceapă <strong>cu</strong> un număr, extensia nu poate să <strong>fi</strong>e mai lungă decât 8<br />

caractere (dacă se doreşte apelarea prin numele <strong>fi</strong>şierului această extensie trebuie să <strong>fi</strong>e<br />

.MAC). Se recomandă totuşi evitarea utilizării de extensii .mac deoarece acestea sunt <strong>folosit</strong>e<br />

de regulă pentru macrourile prede<strong><strong>fi</strong>nite</strong> ale <strong>program</strong>ului ANSYS.<br />

Atunci când se exe<strong>cu</strong>tă un macrou <strong>cu</strong> extensia mac, ordinea de căutare a numelui<br />

<strong>fi</strong>şierului este: 1. directorul /ansys_inc/v100/ansys/apdl; 2. directoarele speci<strong>fi</strong>cate în<br />

ANSYS_MACROLIB; 3. directorul speci<strong>fi</strong>cat prin $HOME; 4. directorul de lucru.<br />

În interiorul <strong>program</strong>ului ANSYS un macrou se poate crea prin patru metode:<br />

-1. folosind comanda *CREATE, dar astfel valorile unor parametri trebuie declarate în<br />

<strong>fi</strong>şierul macro şi se pot schimba la apelare;<br />

-2. folosind comenzile *CFOPEN, *CFWRITE şi *CFCLOS, în acest fel se rezolvă<br />

problema parametrilor;<br />

-3. folosind comanda /TEE în linia de comandă care scrie o listă de comenzi într-un<br />

<strong>fi</strong>şier odată <strong>cu</strong> exe<strong>cu</strong>tarea unor comenzi, astfel parametrii se utilizează <strong>cu</strong> valoarea lor <strong>cu</strong>rentă,<br />

dar în <strong>fi</strong>şierul creat nu se rezolvă problema parametrilor, care se înregistrează <strong>cu</strong> numele lor;<br />

-4. folosind Utility Menu> Macro> Create Macro. Această metodă deschide o<br />

fereastră dialog în care se crează un macro, dar nici astfel nu se rezolvă complet problema<br />

parametrilor.<br />

Este posibil a introduce mai multe macrouri într-un singur <strong>fi</strong>şier. În acest fel pot <strong>fi</strong><br />

create biblioteci de macrouri. Fişierul nu trebuie să aibă o extensie explicită şi are structura de<br />

forma:<br />

MACRONAME1<br />

.<br />

.<br />

/EOF<br />

MACRONAME2<br />

.<br />

.<br />

/EOF<br />

MACRONAME3<br />

.<br />

.<br />

./EOF<br />

Orice macrou se poate exe<strong>cu</strong>ta prin apelare <strong>cu</strong> comanda *USE. De exemplu apelarea<br />

macroului MYMACRO (fără extensie) care este salvat undeva în zona de căutare a<br />

<strong>program</strong>ului ANSYS se dă comanda:<br />

*USE,MYMACRO<br />

în acest fel, macroul nu are argumente. Dacă acest macrou este salvat în alt director:<br />

/myaccount/macros şi are numele MYMACRO.MACRO se apelează <strong>cu</strong>:<br />

*USE,/MYACCOUNT/MACROS/MYMACRO.MACRO


Dacă macroul are extensia .mac şi se află salvat în zona de căutare a <strong>program</strong>ului,<br />

atunci exe<strong>cu</strong>Ńia lui constă în simpla apelare din linia de comandă<br />

MYMACRO<br />

Dacă macroul are argumente, acestea urmează imediat după numele de apelare, şi sunt<br />

încadrate de virgule, adică<br />

MYMACRO,4,3,2,1.5<br />

sau<br />

*USE,MYMACRO.MAC,4,3,2,1.5<br />

Utilizarea macrourilor salvate într-o bibliotecă de macrouri, se face similar <strong>cu</strong><br />

deosebirea că înainte de apelare se speci<strong>fi</strong>că (selectează) <strong>fi</strong>şierul în care este salvat macroul<br />

respectiv folosind comanda *ULIB. De exemplu dacă macroul se află în <strong>fi</strong>şierul<br />

mymacros.mlib din directorul the /myaccount/macros, atunci comanda este:<br />

*ULIB,MYMACROS,MLIB,/MYACCOUNT/MACROS/<br />

Limbajul APDL permite două seturi de parametri scalari care pot <strong>fi</strong> <strong>folosit</strong>i ca<br />

variabile locale. Acestea sunt:<br />

• Un set de parametri de atribuire care se apelează odată <strong>cu</strong> macroul;<br />

• O serie de parametri care sunt folosiŃi şi sunt vizibili numai în interiorul macroului.<br />

Parametri de atribuire sunt prede<strong>fi</strong>niŃi şi sunt în număr de maxim 19. Aceşti parametri<br />

pot <strong>fi</strong> refolosiŃi în macrouri care apelează alte macrouri, deoarece de <strong>fi</strong>ecare dată aceşti<br />

parametri sunt locali. Parametrii au nume prede<strong><strong>fi</strong>nite</strong>, de la ARG1 până la AR19 şi pot <strong>fi</strong><br />

utilizaŃi ca numere, caractere alfanumerice (de lungime maximă 8 caractere şi încadrate între<br />

apostroafe), parametri numerici sau tip CHAR şi expresii parametrice.<br />

De exemplu, următorul macrou (mymacro.mac) necesită introducerea a patru<br />

argumente: ARG1, ARG2, ARG3 şi ARG4:<br />

/PREP7<br />

/VIEW,,-1,-2,-3<br />

BLOCK,,ARG1,,ARG2,,ARG3<br />

SPHERE,ARG4<br />

VSBV,1,2<br />

FINISH<br />

Pentru a exe<strong>cu</strong>ta acest macrou, un utilizator trebuie să-l apeleze <strong>cu</strong> comanda:<br />

MYMACRO,4,3,2.2,1<br />

Fiecare macrou poate avea până la 79 de parametrii scalari utilizaŃi ca variabile locale<br />

(AR20 până la AR99). Aceşti parametrii sunt complet locali şi nu pot <strong>fi</strong> transmişi dintr-un<br />

macrou în altul decât prin folosirea comenzii /INPUT sau a <strong>unui</strong> ciclu "do loop" în interiorul<br />

<strong>unui</strong> macrou.<br />

Pe lângă parametri locali din <strong>fi</strong>ecare macrou, <strong>program</strong>ul ANSYS are un set de<br />

parametrii scalari prede<strong>fi</strong>niŃi ARG1 până la AR99 care sunt locali într-un <strong>fi</strong>şier de intrare şi<br />

nu se suprapun <strong>cu</strong> cei din interiorul <strong>fi</strong>ecărui macrou.<br />

1.1.9. SecvenŃa de exe<strong>cu</strong>Ńie a <strong>unui</strong> <strong>program</strong> în APDL<br />

Atunci când <strong>program</strong>ul exe<strong>cu</strong>tă comenzile dintr-un <strong>fi</strong>şier, acestea sunt exe<strong>cu</strong>tate în<br />

ordinea în care apar, totuşi sunt o serie de comenzi care permit dirijarea exe<strong>cu</strong>Ńiei unor<br />

comenzi. Aceste comenzi sunt: apelarea subrutinelor (macrourilor); exe<strong>cu</strong>Ńia unei comenzi de<br />

salt condiŃionat (*IF) sau chiar necondiŃionat (GOTO) şi exe<strong>cu</strong>Ńia repetată a unei comenzi <strong>cu</strong><br />

incrementare.


Limbajul APDL permite până la 20 de nivele de apelare în “adâncime”, adică un<br />

macrou lansat apelează alt macrou şi aşa mai departe. D exemplu într-o bibliotecă de macrouri<br />

macroul MYSTART apelează macroul MYSPHERE pentru a crea o sferă:<br />

MYSTART<br />

/PREP7<br />

/VIEW,,-1,-2,-3<br />

MYSPHERE,1.2<br />

FINISH<br />

/EOF<br />

MYSPHERE<br />

SPHERE,ARG1<br />

/EOF<br />

Cea mai simplă comandă de salt necondiŃionat este *GO, de exemplu secvenŃa de<br />

instrucŃiuni de mai jos arată utilizarea comenzii.<br />

*GO,:BRANCH1<br />

--- ! Acest bloc de comenzi nu se exe<strong>cu</strong>tă<br />

---<br />

:BRANCH1<br />

---<br />

---<br />

Eticheta speci<strong>fi</strong>cată prin comanda *GO trebuie să înceapă <strong>cu</strong> (:) şi să nu conŃină mai<br />

mult de 8 caractere inclusiv cele două puncte.<br />

Limbajul APDL permite exe<strong>cu</strong>tarea <strong>unui</strong> set alternativ de blo<strong>cu</strong>ri pe baza evaluării<br />

unei condiŃii prin comanda *IF.<br />

Comanda *IF are următoarea sintaxă:<br />

*IF, VAL1, Oper, VAL2, Base<br />

în care<br />

VAL1 este primul parametru în comparaŃie;<br />

Oper este operatorul de comparaŃie; Operatorii de comparaŃie sunt:<br />

EQ (egal);<br />

NE (diferit);<br />

LT (mai mic decât);<br />

GT (mai mare decât);<br />

LE (mai mic sau egal);<br />

GE (mai mare sau egal);<br />

ABLT (mai mic în valori absolute);<br />

ABGT (mai mare în valori absolute).<br />

VAL2 este al doilea parametru în operaŃie;<br />

Base este acŃiunea care urmează a <strong>fi</strong> exe<strong>cu</strong>tată dacă evaluarea este adevărată. Dacă<br />

argumentul Base ia valoarea THEN atunci comanda *IF se transformă într-o comandă if-thenelse<br />

(similară <strong>program</strong>ului FORTRAN). ConstrucŃia completă este<br />

• O comandă *IF urmată de<br />

• Una sau mai multe comenzi *ELSEIF<br />

• O comandă opŃională *ELSE<br />

• O comandă obligatorie *ENDIF care marchează sfârşitul construcŃiei.<br />

În combinaŃie comanda *IF poate lucra ca o funcŃie CASE în alte limbaje.<br />

Dacă argumentul Base ia valoarea STOP, se iese din <strong>program</strong>. Uneori pentru ştergerea<br />

parametrilor se foloseşte comanda /CLEAR, care poate şterge şi parametrii de control a<br />

instrucŃiunii de decizie, deci se impune mare atenŃie în manipularea parametrilor.


1.1.10. Repetarea comenzilor, cicluri<br />

Cea mai simplă comandă de repetare este comanda *REPEAT. Aceasta permite<br />

exe<strong>cu</strong>tarea comenzii precedente de un număr de ori, prin simpla incrementare <strong>cu</strong> o constantă a<br />

unor câmpuri Exemplul de mai jos de creare a unor <strong>elemente</strong> de tip linie, este foarte sugestiv<br />

E,1,2<br />

*REPEAT,5,0,1<br />

acest şir de comenzi exe<strong>cu</strong>tă prin comanda E,1,2 un element între nodurile 1 şi 2, apoi<br />

comanda *REPEAT mai generează 4 <strong>elemente</strong> (numărul 5 include şi comanda iniŃială)<br />

rezultând în <strong>fi</strong>nal <strong>elemente</strong>le de<strong><strong>fi</strong>nite</strong> de nodurile: 1-2, 1-3, 1-4, 1-5 şi 1-6. Se menŃionează că<br />

majoritatea comenzilor care încep <strong>cu</strong> / sau * (<strong>cu</strong> excepŃia celor de gra<strong>fi</strong>că) nu pot <strong>fi</strong> repetate <strong>cu</strong><br />

comanda *REPEAT.<br />

Comenzile *DO pot exe<strong>cu</strong>ta o serie de comenzi de un număr speci<strong>fi</strong>cat de ori.<br />

Comenzile *DO şi *ENDDO încadrează începutul şi sfârşitul <strong>unui</strong> ciclu. Sintaxa comenzii<br />

este:<br />

*DO, Par, IVAL, FVAL, INC<br />

în care<br />

Par este parametrul utilizat în indexarea ciclului;<br />

IVAL, FVAL, INC reprezintă valoarea iniŃială, <strong>fi</strong>nală şi pasul a parametrului. Pasul nu poate<br />

<strong>fi</strong> negativ şi trebuie să <strong>fi</strong>e număr întreg.<br />

Următorul exemplu, editează cinci cazuri de încărcare şi face unele schimbări în<br />

<strong>fi</strong>ecare dintre ele:<br />

*DO,I,1,5 ! For I = 1 to 5:<br />

LSREAD,I ! Citeşte cazul de încărcare I<br />

OUTPR,ALL,NONE ! Schimbă parametrii de control pentru OUTPUT<br />

ERESX,NO ! Nu se extrapoleaza tensiunile la noduri<br />

LSWRITE,I ! Rescrie cazul de încărcare I<br />

*ENDDO<br />

În interiorul ciclurilor pot <strong>fi</strong> utilizate comenzile *IF, *EXIT sau *CYCLE. Regulile de<br />

bază ale <strong>program</strong>ării structurate este bine a <strong>fi</strong> <strong>folosit</strong>e şi în cadrul <strong>program</strong>ului ANSYS.<br />

Există şi o formă indirectă de a exe<strong>cu</strong>ta comenzi tip ciclu prin utilizarea a două puncte<br />

ca în Matlab. Această convenŃie exe<strong>cu</strong>tă mai rapid comenzile deoarece se face direct în<br />

memorie. Sintaxa directă este:<br />

(x:y:z)<br />

în care z implicit este 1 dacă nu este speci<strong>fi</strong>cat. De exemplu comanda<br />

N,(1:6),(2:12:2)<br />

exe<strong>cu</strong>tă acelaşi lucru <strong>cu</strong> seria de comenzi:<br />

N,1,2<br />

N,2,4<br />

N,3,6<br />

.<br />

.<br />

.<br />

N,6,12<br />

Se menŃionează că cea mai s<strong>cu</strong>rtă expresie controlează exe<strong>cu</strong>Ńia ciclului. De exemplu<br />

comanda N,(1:7),(2:12:2) are acelaşi efect ca precedenta.<br />

Alte comenzi care se pot folosi sunt *DOWHILE (repetă până când un parametru<br />

extern se modi<strong>fi</strong>că).<br />

1.1.11. Parametri _STATUS şi _RETURN în Macrouri


Programul ANSYS generează doi parametri interni _STATUS şi _RETURN care pot<br />

<strong>fi</strong> folosiŃi în macrouri. De exemplu funcŃiile de modelare solidă generează parametrul<br />

_RETURN care conŃine rezultatul exe<strong>cu</strong>tării funcŃiei. De exemplu exe<strong>cu</strong>tarea unei comenzi<br />

de generare a <strong>unui</strong> Keypoint <strong>cu</strong> comanda K atribuie parametrului _RETURN numărul acelui<br />

Keypoint. Exe<strong>cu</strong>Ńia unei comenzi oarecare (inclusiv un macro) generează parametrul<br />

_STATUS. Acest parametru prin valoarea lui reflectă starea exe<strong>cu</strong>tării, adică:<br />

0 (fără eroare);<br />

1 (o notă explicativă);<br />

2 (un warning);<br />

3 (<strong>cu</strong> eroare).<br />

1.1.12. Exemple simple de macrouri<br />

Primul exemplu de macrou numit offset.mac, deplasează setul nodurilor selectate în<br />

cadrul preprocesorului PREP7. Acest macrou este prezentat numai din considerente<br />

demonstrative deoarece comanda NGEN este mai e<strong>fi</strong>cientă. Deoarece toate comenzile<br />

inclusiv comentariile unor macrouri prede<strong><strong>fi</strong>nite</strong> sunt în limba engleză, următorul exemplu se<br />

prezintă aşa <strong>cu</strong>m este descris în manualul APDL din ANSYS:<br />

! Macro to offset selected nodes in PREP7<br />

! The below <strong>fi</strong>le is saved as: offset.mac<br />

! Usage: OFFSET,DX,DY,DZ<br />

/NOP<br />

! suppress printout for this macro<br />

*GET,NNODE,NODE,,NUM,MAX ! get number of nodes<br />

*DIM,X,,NNODE<br />

*DIM,Y,,NNODE<br />

*DIM,Z,,NNODE<br />

*DIM,SEL,,NNODE<br />

! set up arrays for node locations<br />

! set up array for select vector<br />

*VGET,X(1),NODE,1,LOC,X ! get coordinates<br />

*VGET,Y(1),NODE,1,LOC,Y<br />

*VGET,Z(1),NODE,1,LOC,Z<br />

*VGET,SEL(1),NODE,1,NSEL ! get selected set<br />

*VOPER,X(1),X(1),ADD,ARG1 ! offset locations<br />

*VOPER,Y(1),Y(1),ADD,ARG2<br />

*VOPER,Z(1),Z(1),ADD,ARG3<br />

! *DO,I,1,NNODE ! store new positions<br />

! *IF,SEL(I),GT,0,THEN ! this form takes 98 sec for 100,000 nodes<br />

! N,I,X(I),Y(I),Z(I)<br />

! *ENDIF<br />

! *ENDDO<br />

*VMASK,SEL(1) ! takes 3 seconds for 100,000 nodes<br />

N,(1:NNODE),X(1:NNODE),Y(1:NNODE),Z(1:NNODE)<br />

X(1) =<br />

! delete parameters (cleanup)


Y(1) =<br />

Z(1) =<br />

SEL(1) =<br />

I=<br />

NNODE=<br />

/GO<br />

! resume printout<br />

Cel de-al doilea exemplu numit bilinear.mac, evaluează tensiunile dintr-un model<br />

deja rulat static şi atribuie materialul 1 <strong>elemente</strong>lor supuse la întindere şi materialul 2<br />

<strong>elemente</strong>lor supuse la compresiune (aceste două materiale trebuie să <strong>fi</strong>e deja de<strong><strong>fi</strong>nite</strong> în model<br />

şi pot avea proprietăŃi diferite la întindere şi compresiune) apoi mai rulează problema pentru a<br />

corecta eventual selecŃia <strong>elemente</strong>lor şi soluŃia problemei. Acest macrou este util a <strong>fi</strong> rulat<br />

după rezolvarea unei analize statice. ARG1 este numărul de iteraŃii (implicit este 2).<br />

/nop<br />

_niter = arg1<br />

! set number of iterations<br />

*if,_niter,lt,2,then<br />

_Niter = 2<br />

*endif<br />

*do,iter,1,_niter ! loop on number of iterations<br />

/post1<br />

set,1,1<br />

*get,ar11,elem,,num,maxd ! Get number of elements<br />

*dim,_s1,,ar11<br />

! array for element s1<br />

*dim,_s3,,ar11<br />

! array for element s3<br />

etable,sigmax,s,1 ! s1 is in element table sigmax<br />

etable,sigmin,s,3 ! s3 is in element table sigmin<br />

*vget,_s1(1),elem,1,etab,sigmax ! get element maximum stress in<br />

s1<br />

*vget,_s3(1),elem,1,etab,sigmin ! get element minimum stress in<br />

s3<br />

*dim,_mask,,ar11 ! array for mask vector<br />

*voper,_mask(1),_s1(1),lt,0 ! true if max. stress &lt; 0<br />

*v<strong>cu</strong>m,1<br />

! ac<strong>cu</strong>mulate compression elements<br />

*vabs,0,1<br />

! absolute value of s3<br />

*voper,_mask(1),_s3(1),gt,_s1(1) ! true if abs(minstr) > maxstr<br />

<strong>fi</strong>nish<br />

/prep7<br />

material mods<br />

mat,1<br />

properties<br />

emod,all<br />

! go to prep7 for element<br />

! set all materials to tension<br />

*vput,_mask(1),elem,1,esel ! select compression elements<br />

mat,2<br />

! change selected elements to compression<br />

emod,all<br />

esel,all<br />

<strong>fi</strong>nish<br />

_s1(1)=<br />

_s3(1)=<br />

_mask(1)=<br />

! select all elements<br />

! clean up all vectors (set to zero)


solve<br />

solve<br />

<strong>fi</strong>nish<br />

*enddo<br />

_niter=<br />

_iter=<br />

/gop<br />

! rerun the analysis<br />

! end of iterations<br />

! clean up iteration counters<br />

1.1.13. Aspecte de interfaŃă în lucrul GUI<br />

Atunci când se rulează un macrou în modul de lucru GUI, <strong>program</strong>ul ANSYS asigură<br />

o serie de facilităŃi suplimentare pentru lucrul <strong>cu</strong> macrouri. Astfel este posibil să:<br />

• Se introducă un parametru scalar de la tastatură folosind comanda *ASK;<br />

• Se creeze o fereastră de dialog pentru a introduce mai multe valori pentru o serie de<br />

parametri;<br />

• Se a<strong>fi</strong>şeze un mesaj folosind comanda *MSG;<br />

• Se selecteze anumite entităŃi <strong>cu</strong> ajutorul mousului;<br />

• Se deschidă orice fereastră de dialog.<br />

InformaŃii suplimentare legate de comenzile care lucrează <strong>cu</strong> parametri se găsesc în<br />

manualul APDL Programmer's Guide.


Exemplu simplu de optimizare pentru o grindă în consolă

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!