Používání externích souborů v prostředí ANSYS

volně přeložil: Petr Novák,

z knihy Erdogan Madenci, Ibrahim Guven, The Finite Element Method and Applications in Engineering Using ANSYS, 2006, ISBN 0 387 28289 0; kapitola 11: Advanced Topics in Ansys.

 Obsah
 

Úvod

Čtení vstupních souborů  

Zápis dat do ASCII

/OUTPUT příkaz

*CFOPEN a *CFCLOS příkazy

*VWRITE příkaz

Vykonání externího souboru

Modifikování výsledků

 

Úvod:

Možnost používání externích souborů dělá ANSYS velmi všestranným nástrojem. Nejběžnější operace s externími soubory zahrnují:

  • Čtení vstupního souboru.

  • Zápis dat do ASCII (textových) souborů.

  • Čtení dat z textových souborů.

  • Vkládání řetězců příkazů do spuštěného programu.

Tato témata jsou krátce popsána v následující části. Nicméně popis používaných příkazů není kompletní, jsou uvedeny pouze jejich nejčastější zástupci/deklarace. Proto je doporučeno příp. zájemcům podrobnější studium nápovědy systému Ansys.

Čtení vstupních souborů

Vstupní soubory jsou v ASCII formátu a obsahují ANSYS příkazy (jeden příkaz na jedné řádce) v pořadí, v jakém mají být vykonány. Vstupní soubory jsou v Ansysu používány pomocí /INPUT příkazu. Běžná deklarace tohoto příkazu je:

/INPUT,Fname,Ext

kde Fname a Ext jsou cesta k souboru a jeho přípona. Pokud není specifikována cesta, argument Fname obsahuje pouze jméno souboru a soubor je hledán v pracovním adresáři („Working Directory").

Zápis dat do ASCII (textových) souborů

Existují dva hlavní důvody, proč zapisovat data do souborů:

  • Ansys může být použit jako „pre-" a „postprocessor" při zpracování vlastního výpočtu jiným softwarem.

  • Ačkoliv Ansys nabízí řadu možností zobrazení, ne vždy je toto prostředí vhodné pro naše požadavky. V takovém případě může být efektivnější zápis výstupních dat do externího ASCII souboru. Tento soubor pak můžeme zpracovat specializovaným softwarem pro získání požadovaného zobrazení.

Existují dva hlavní příkazy umožňující zápis dat do externího souboru: /OUTPUT a *CFOPEN. Když je vykonán jeden z těchto dvou příkazů, data jsou zapsána do externího souboru použitím *VWRITE příkazu. Tyto soubory jsou podrobněji popsány v následující sekci.

...obsah  

/OUTPUT příkaz

/OUTPUT příkaz přesměrovává textový výstup do specifikovaného souboru. Deklarace příkazu je:

/OUTPUT,Fname,Ext, ,Loc

kde Fname a Ext jsou cesta (název souboru a přípona) a Loc stanovuje, zda začít zápis od začátku souboru (tedy zda má smazat obsah souboru) nebo zda má zápis přidat ke konci souboru. Jestliže je pole Loc necháno bez zápisu, Ansys začne zapisovat data od začátku souboru. Pro připojení na konec souboru je vepsána deklarace Append do pole Loc. Po vykonání /OUTPUT příkazu je text, který se obvykle objevuje ve výstupním okně („Output Window") zapsán do externího souboru. Bezprostředně po zápisu dat do souboru je potřeba přesměrovat textový výstup do výstupního okna („Output Window") příkazem /OUTPUT bez argumentů. Příklad, který zapisuje data do souboru DATA.OUT v pracovním adresáři je ukázán níže:

/OUTPUT,DATA,OUT, ,APPEND

*VWRITE,CH1,NUM1,NUM2

(A8,2X,F12.8,2X,E13.6)

/OUTPUT

...obsah

*CFOPEN a *CFCLOS Příkazy

Lepším způsobem jak zapisovat data do externích souborů je „otevřít příkazové pole" příkazem *CFOPEN. Deklarace je podobná jako u /OUTPUT příkazu se stejnou definicí proměnných:

*CFOPEN,Fname,Ext, ,Loc

Po vykonání tohoto příkazu je kdykoliv proveden příkaz *VWRITE, čímž jsou data zapsána do souboru. Když je dokončen zápis, může být příkaz ukončen použitím *CFCLOS příkazu.

...obsah

*VWRITE příkaz 

Deklarace *VWRITE příkazu je následující:

*VWRITE,Par1,Par2,....,Par19

kde Par1, ...., Par19 jsou uživatelem definované parametry. Řádek příkazu *VWRITE musí být následován definicí formátu uzavřenou v závorkách. Způsob definice formátu je dle FORTRAN syntaxe programovacího jazyka. Používá se pět různých formátovacích popisovačů odkazujících na reálná čísla (tři různé popisovače), charaktery a prázdná místa. Popisovače reálných čísel jsou F, E a D, které mají následující deklaraci:

Fw.d

Ew.d

Dw.d

kde w je celkový počet číslic přidělených číslu v souboru (jeho celková „šířka"), a d stanovuje počet desetinných míst(počet číslic na pravé straně od desetinné čárky). Informace zde dané jsou běžné pro FORTRAN překladače používané v operačních systémech MS Windows. Pro překladače jiných OS může být potřeba malá změna, nicméně celkový koncept zůstává stejný. Popisovač F udává reálná čísla bez exponentů zatímco popisovače E a D zapisují s E a D exponenty. Číslo w musí zahrnout návěstí čísla, desetinnou čárku a exponenciální pole. Exponenciální pole, při použití popisovačů E a D, zahrnuje čtyři znaky: jeden pro charakter exponentu E nebo D, další pro návěstí exponentu a dva znaky pro vlastní exponent. Proto, ve formátu užívajícím E a D popisovače, musí být rozdíl (w-d) nejméně 7.

Pro specifikování formátu znaku je popisovač A použit s následující deklarací:

Aw

kde w je celková šířka. Maximální šířka povolená v ANSYSU je 8 číslic.

Prázdná místa jsou vložena použitím X popisovače s následující deklarací:

wX

kde w je celkový počet prázdných míst.

Použití popisovačů F, E, D, A, a X je ukázáno dále.

Vezměte v úvahu čísla 152.67328199 a -3.251667x106, která jsou uložena v parametru NUM1 a NUM2 a výraz RESULT1 je uložen v parametru CH1 v Ansysu. Toto může být zapsáno do externího ASCII souboru s použitím následujícího příkazu:

*VWRITE,CH1,NUM1,NUM2

(A8,2X,F12.8, 2X,E13.6)

což produkuje následující výstup v ASCII souboru:

 

Všimněte si dvou věcí: (i) když je dáno více znaků než je délka řetězce, Ansys vloží tolik prázdných míst, kolik je potřeba, tak aby mělo pole stejnou šířku, jaká je specifikována a zarovná řetězec doleva, (ii) když je použit popisovač E nebo D, Ansys umístí 0 na začátek číselného řetězce.

Při nahrazení výše popsaného formátu tímto:

(A2,1X,F11.8,1X,E13.2)

Následující výstup v ASCII souboru je:

Poznámka:

Když je počet znaků přidělených popisovačem A menší než je aktuální délka řetězce, Ansys řetězec zkrátí.

Když je počet znaků přidělených popisovačem F (nebo E nebo D) menší než aktuální délka reálného čísla, Ansys vloží znak „*" tolikrát, kolikrát je specifikován počet znaků.

Když je deklarace formátu nahrazena tímto:

(A7,1X,E11.4,1X,D14.7]

následující výstup v ASCII souboru bude:

Vykonání externího souboru

V některých případech může být vyžadováno vykonání externího souboru (vykonání je myšleno načtení a provedení příkazů zapsaných v daném souboru). V takových případech je použit /SYS příkaz, který zavádí řetězec do spuštěného programu. Jeho deklarace je:

/SYS,String

kde argument String je příkazový řetězec. Je to jméno spustitelného souboru. Např., když je jméno spustitelného souboru ROOTS.EXE, pak je deklarace příkazu:

/SYS,ROOTS.EXE

Při vykonání tohoto příkazu, kdy se zpracovává ROOTS.EXE soubor, nedovoluje Ansys vykonání dalších akcí.

Jako příklad budeme uvažovat vytvoření časově závislého náhodného teplotního zatížení. V tomto příkladu bude název zavedeného souboru RANDOM.EXE a generování náhodných čísel je pomocí FORTRAN programovacího jazyka. Kód požaduje hodnoty pro pět vstupních parametrů:

TOT Celkový čas aplikovaného zatížení.

ND Počet bodů (náhodné číslo).

MIN Minimální hodnota zatížení.

MAX Maximální hodnota zatížení.

SEED Vstupní počet generovaných náhodných.

Hodnoty těchto parametrů jsou poskytovány vstupním souborem RANDOM.DAT. Poté co kód generuje čísla v rozsahu (MIN, MAX), jsou zapsána do výstupního souboru s názvem RANDOM.OUT. Vstup je jednotně formátován. FORTRAN kód je dán jako:


REAL(8) NUM,TOT,DT,T,MIN,MAX

INTEGER(4) ND,F,I,SEED

OPEN(1,FILE='RANDOM.DAT')

OPEN(2,FILE='RANDOM.OUT')

READ(1,*) TOT,ND,MIN,MAX,SEED

DT=TOT/ND

T=DT

F=0

AMP=MAX-MIN

NUM=DRAND(SEED)

DO I=1,ND

NUM=MIN+AMP*DRAND(F)

WRITE(2,100) T,NUM

T=T+DT

ENDDO

100 FORMAT(2(E16.8,2X))

END

! REAL VARIABLES

! INTEGER VARIABLES

! DECLARE INPUT FILE

! DECLARE OUTPUT FILE

! READ INPUT

! FIND TIME STEP SIZE

! INITIALIZE TIME

! INITIALIZE RANDOM NUMBER GENERATOR

!FLAG

! FIND LOAD RANGE

! GENERATE RANDOM NUMBER SET

! START LOOP OVER DATA POINTS

! FIND LOAD VALUE

! WRITE TIME AND LOAD VALUES

! UPDATE TIME

! END LOOP OVER DATA POINTS

! FORMAT STATEMENT

! END OF PROGRAM

 

Následující sekvence příkazů, vykonávána v Ansysu, zapisuje požadovaný vstup do souboru RANDOM.DAT, vykoná příkazy v souboru RANDOM.EXE (umístěny v prac. adresáři), načte čas s odpovídajícím zatížením ze souboru RANDOM.OUT a nakonec zobrazí závislost zatížení a času. Po vykonání příkazů souboru RANDOM.EXE jsou definovány tři parametry pole („array parameters") (*SET příkaz) s jejich rozměrem (*DIM příkaz). Hodnoty zatížení a času jsou uloženy v jednom poli použitím *VREAD příkazu. Nakonec jsou specifikovány názvy os pomocí /AXLAB příkazu a zobrazen výsledek *VPLOT příkazem.

 

/PREP7

TOT=8

ND=160

MN=0

MX=100

SEED=12

/OUTPUT,RANDOM,DAT

*VWRITE,TOT,ND,MN,MX,SEED

(E16.8,2X,F8.0,2X,E10.2,2X,E10.2,2X,F8.0)

/OUTPUT

/SYS,RANDOM.EXE

*SET,ARY

*SET,TIM

*SET,LOAD

*DIM,ARY,ARRAY,2*ND

*DIM,TIM,TABLE,ND

*DIM,LOAD,TABLE,ND

*VREAD,ARY(1),RANDOM,OUT

(2(E16.8,2X))

*DO,I,1,ND

TIM(I)=ARY(2*I-1)

LOAD(I)=ARY(2*I)

*ENDDO

/AXLAB,X,TIME

/AXLAB,Y,LOAD

*VPLOT,TIM(1),LOAD(1)

!Vstup do PREPROCESSORu.

!Definování parametrů.

!

!

!

!

!Přesměrování výstupu do soub. RANDOM.DAT.

!Zápis dat do souboru.

!Deklarace formátování.

!Přesměrování výstupu do okna.

!Vykonání souboru RANDOM.EXE.

!Vytvoření parametru ARY.

!Vytvoření parametru TIM.

!Vytvoření paramtru LOAD.

!Rozměr parametru ARY.

!Rozměr parametru TIM.

!Rozměr parametru LOAD.

!”Naplnit pole ARY z RANDOM.OUT.

!Deklarace formátu.

!Počátek cyklu příkazů.

!Oddělit část pole ARY do TIM.

!a část do LOAD.

!Konec cyklu příkazů.

!Definování názvu X-ové osy.

!Definování názvu Y-ové osy.

!Zobrazení dvou vzájemně závislých polí.

 Když je výše uvedený skript, s danými hodnotami parametrů, vykonán v Ansysu, je výsledkem graf zobrazený na obr. 1.

  Závislost hodnot zatížení a času načtených ze souboru RANDOM.OUT.

Obr. 1. Závislost hodnot zatížení a času načtených ze souboru RANDOM.OUT.

...obsah

Modifikování výsledků

Program Ansys může být použit jako POSTPROCESSOR pro výsledky vypočítané externím programem pomocí DNSOL nebo DESOL příkazu, které vloží tyto výsledky do Ansysu. Deklarace příkazů DNSOL a DESOL jsou:

DNSOL,NODE,Item,Comp,V1,V2,V3,V4,V5,V6

DESOL,ELEM,NODE,Item,Comp,V1,V2,V3,V4,V5,V6

kde NODE a ELEM jsou čísla elementů, tedy těch, na kterých jsou specifikovány výsledky, Item a Comp jsou názvy pro specifikované stupně volnosti a V1V6 jsou hodnoty výsledků. Pokud je např. y-ové posunutí (Item je U a Comp je Y) v uzlu 12 pozměněno na 2.5, následující příkaz je:

DNSOL,12,U,Y,2.5

Podobně, když je smykové napětí v yz-směru (Item je S a Comp je YZ) v uzlu 212 elementu 23 je modifikováno na 1200, následující příkaz bude:

DESOL,23,212,S,YZ,1200

...obsah