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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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!