Szukaj Logowanie Kontakt
             Kontakt Blog Kalendarz

  ANSYS Elite Channel Partner ANSYS Polska ANSYS Logo cropped 164px

ANSYS Elite Channel Partner ansys logo czarne tlo SMALL ANSYS Logo cropped 164px
    ANSYS Elite Channel Partner

Spis Treści:

Wyraź się!

Od wersji 2019 R1 we Fluencie dostępne są wyrażenia (Expressions). Funkcjonalność znana z CFXa i AIMa pozwala na napisanie prostych funkcji użytkownika (nie, to nie UDFy) bezpośrednio w interfejsie graficznym Fluenta. Brak wyrażeń przez wiele lat powodował, że chcąc stosować nawet lekko niestandardowe warunki często należało sięgać po UDFy (które, jak już ustaliliśmy nie cieszą się opinią łatwych do opanowania). Przez to dla dużej części klientów ANSYSa Fluent wydawał się mroczny, posępny i mało dostępny.

Składnia wyrażeń we Fluencie zbliżona jest do tej znanej z AIMa. Mamy więc dostęp do większości zmiennych przepływowych, czasu i iteracji symulacji, funkcji redukcyjnych (max, min, średnia itp.), trygonometrycznych czy procedury if.

Przekładając zatem funkcję UDF na język wyrażeń Fluenta będzie to wyglądało następująco:

IF( iter < 10 , iter / 10 * 75 [kg/s] , 75 [kg/s] )

A więc kilkanaście linijek UDFa zamieniamy na jedną prostą formułę. Takie wyrażenie podpinamy następnie do warunku brzegowego i gotowe.

Więcej o tym, jak tworzyć wyrażenia we Fluencie przeczytamy w dokumentacji.

Naturalnie, zamiast liniowej możemy zastosować inną, dowolną funkcję. Do tego zadania dobrze nadaje się funkcja sinus, która przy swoich ekstremach charakteryzuje się niższym gradientem niż funkcja liniowa, co jeszcze bardziej wygładza stabilność rozwiązania na początku i końcu kroku obciążenia.

Żeby układ wyrażeń był czytelny i łatwy do kontroli możemy określić dodatkowe elementy. Przede wszystkim, wprowadzimy maksymalna wartość warunku oraz ilość iteracji po której chcemy, aby wartość warunku osiągnęła maksimum:

it_max = 10

mflow = 75 [kg /s]

Następnie definiujemy jednostkową funkcję podrelaksacji, opartą np. na funkcji sinusoidalnej. Aby precyzyjnie ją określić, najlepiej wystartować z gołej funkcji sinus (Funkcja 1):

sinus_relax = sin (iter)

Mnożąc argument funkcji razy π skrócimy okres funkcji tak, aby dla iteracji równej 1 funkcja zwracała wartość 0. Jednocześnie dzielimy argument przez it_max (Funkcja 2):

sinus_relax = sin (iter * PI / it_max)

Dodatkowo argument funkcji przesuwamy o 0.5 PI aby maksymalna i minimalna wartość zawierały się w przedziale 0 – 10 iteracji (Funkcja 3):

sinus_relax = sin (iter * PI / it_max – 0.5 * PI)

Kolejny krok to przeskalowanie funkcji o 0.5 i dodanie do wartości zwrotnej 0.5 (Funkcja 4).

sinus_relax = sin (iter * PI / it_max – 0.5 * PI) * 0.5 + 0.5

Przebiegi tych czterech kroków pokazano na wykresie poniżej:

5 Przebiegi funkcji podczas procesu dopasowywania funkcji relaksacyjnejPowyższy proces może na pierwszy rzut oka wydawać się skomplikowany, dlatego proponujemy przygotować i przetestować sobie funkcję jednostkową wcześniej, korzystając z aplikacji MS Excel lub narzędzia Desmos.

Ostatecznie funkcja trafia do wyrażenia:

mflow_relax = IF( iter < it_max , sinus_relax * mflow , mflow )

Tak zdefiniowane wyrażenia bardzo łatwo modyfikować. Na przykład, chcąc wydłużyć czas rozbiegu warunku wystarczy zmienić wyrażenie iter_max. Zaznaczyć trzeba również, że podobną funkcję można byłoby zastosować przez UDF, lub przygotowując plik profilowy (przy założeniu analizy transient). Poniżej pokazano przykładowy przebieg funkcji relaksacyjnej z wykorzystaniem funkcji sinus.

6 Przebieg funkcji relaksacyjnej z wykorzystaniem funkcji sinus

7 Eksport wyrażeń do plikuPonadto, stworzone w ten sposób wyrażenia można zapisać do zewnętrznego pliku .tsv i zaimportować do kolejnej sesji Fluenta (co zostało pokazane na rysunku obok).


Powiadomienia

Chcesz wiedzieć gdy dodamy nowy artykuł? Wybierz kategorię, która Cię interesuje!

ANSYS WORKBENCH

Oprogramowanie

STREFA AKADEMICKA