Professional Documents
Culture Documents
Fevereiro de 2013
Cascavel
2013
1 Introdução
Este tutorial tem como objetivo auxiliar o usuário na instalação e configuração do Fortran
para que o compilador trabalhe em conjunto com o ANSYS CFX, permitindo a implementação de
“rotinas definidas pelo usuário” nos casos específicos em que as rotinas implementados pelo CFX
não são adequadas para modelagem e simulação.
Os passos descritos a seguir foram executados em uma máquina cujas configurações são
exibidas na Figura 1.
Ao final do tutorial serão apresentados os resultados de uma simulação que trata dos efeitos
erosivos em um tubo com válvula borboleta, cujo problema e especificação são detalhados em
ANSYS CFX Tutorials (Flow Through a Butterfly Valve, pg. 193).
2 Instalação e configuração
Para o correto funcionamento dos aplicativos aqui listados, procure executar em ordem as
tarefas apresentadas assim como escolher atentamente os softwares de acordo com as configurações
do seu sistema (32 ou 64bits).
Os aplicativos necessários para realização deste tutorial são:
Integre seu Fortran com o Visual Studio já instalado. Veja a Figura 29.
xvi
Uma nova janela será exibida. Nesta janela clique sobre o link Configurações avançadas
do sistema, como mostra a Figura 34.
Ao clicar no link, uma nova janela será exibida. Nesta janela clique no botão Variáveis de
Ambiente. Veja a Figura 35
xix
Para criação das novas variáveis de ambiente, clique no botão Novo.... Figura 36
Uma caixa com os campus Nome da variável: e Valor da variável: será exibida e
deverá ser preenchida com os valores da nova variável de ambiente:
Clique em Ok para que a variável seja criada. Note que os endereços aqui utilizados podem mudar
de acordo com as opções selecionadas no momento da instalação.
Repita este procedimento criando uma nova variável include com valores:
C:\Program Files (x86)\Intel\Composer XE 2013\compiler\include;
C:\Program Files (x86)\Intel\Composer XE 2013\compiler\include\intel64
Novamente, repita este procedimento criando uma nova variável PATH com valores:
C:\Program Files\ANSYS Inc\v140\CFX\bin;C:\Program Files (x86)\Intel\
Composer XE 2013\bin;C:\Program Files (x86)\Intel\Composer XE 2013\
bin\intel64;C:\Program Files (x86)\Intel\Composer XE 2013\redist;
C:\Program Files (x86)\Intel\Composer XE 2013\redist\intel64;
C:\Program Files (x86)\Intel\Composer XE 2013\redist\intel64\compiler;
C:\Program Files (x86)\Intel\Composer XE 2013\redist\intel64\mkl;
C:\Program Files (x86)\Intel\Composer XE 2013\redist\intel64\mpirt
Caso seu sistema seja 32bits renomeie todas a pastas chamadas intel64 para ia32. Por
exemplo, a variável lib em um sistema 32bits seria da forma:
Nome da variável: lib
Valor da variável: C:\Program Files (x86)\Intel\Composer XE 2013\compiler\lib;
C:\Program Files (x86)\Intel\Composer XE 2013\compiler\lib\ia32
Feito isso, clique em OK para sair da janela de Propriedades do Sistema.
Em seguida clique no menu Tools -> Command Line. Veja Figura 39:
xxi
Nesta janela de prompt, navegue até o diretório onde se encontra o compilador Fortran
(C:\Program Files (x86)\Intel\Composer XE 2013\bin) e digite o seguinte comando:
ifortvars.bat intel64. Caso seu sistema seja 32bits use o comando ifortvars.bat ia32.
Se a configuração for realizada com sucesso será exibida uma mensagem como na Figura 41.
xxii
Para gerar os arquivos necessários ao funcionamento do CFX, navegue pelo prompt até
o diretório onde está localizado seu arquivo fonte em Fortran. Dentro do diretório digite o
comando: cfx5mkext -64bit <nome_arquivo.F>. Caso seu sistema seja 32bits use o comando
cfx5mkext <nome_arquivo.F>. Veja a Figura 42.
A Figura 43 mostra a janela que deverá ser exibida se a compilação for executada com êxito.
xxiii
Note que no diretório onde está o código fonte é gerada uma nova pasta, que contém os
arquivos utilizados pelo solver do CFX. Veja a Figura 44.
Na janela que será exibida, selecione a opção particle user routine e preencha os campus
de acordo com a Figura 47
Em que Library Path é o local onde você salvou seu código fonte Fortran pt_erosion.F.
Em seguida deve-se editar as opções do Default Domain:
xxvi
Na guia Fluid Specific Models escolha como Erosion model a opção User defined,
como apresentado nas Figuras 49 e 50.
Na guia Fluid Values selecione as opções como apresentado nas Figuras 52 e 53.
xxviii
Na guia Fluid Values selecione as opções como apresentado nas Figuras 55 e 56.
C
CHARACTER*(4) CRESLT
C
INTEGER IZ(*)
CHARACTER CZ(*)*(1)
DOUBLE PRECISION DZ(*)
LOGICAL LZ(*)
REAL RZ(*)
C
C ------------------------------
C External routines
C ------------------------------
C
C
C ------------------------------
C Local Parameters
C ------------------------------
C
C
C ------------------------------
C Local Variables
C ------------------------------
C
C ------------------------------
C Stack pointers
C ------------------------------
C
C=======================================================================
C
C ---------------------------
C Executable Statements
C ---------------------------
C
C=======================================================================
C
C Return variables:
C -----------------
C
C Particle erosion : RET(1,1)
C
C Argument variables
C -------------------
C
C Particle impact angle : ARG(1,1)
C Particle velocity : ARG(1,2)
C
C=======================================================================
C
C-----------------------------------------------------------------------
C Calculate the return variables
C-----------------------------------------------------------------------
C
CALL FINNIE (RET(1,1),
& ARG(1,1),ARG(1,2))
C
END
C
C ------------------------------
C Argument list
C ------------------------------
C
REAL EROSION, ANGLE, VEL_PT(3)
C
C ------------------------------
C Local variables
C ------------------------------
C
REAL ANGLE_DEG, F, V0, N, VEL
C
C ------------------------------
C Executable statements
C ------------------------------
C
V0 = 1.0
N = 2.0
C
ANGLE_DEG = ANGLE*180./PI
C
IF(ANGLE_DEG .GE. 18.5) THEN
F = COS(ANGLE)**2 / THREE
ELSE
F = SIN(TWO*ANGLE) - THREE*SIN(ANGLE)**2
ENDIF
C
VEL = SQRT(VEL_PT(1)**2 + VEL_PT(2)**2 + VEL_PT(3)**2)
C
EROSION = (VEL/(V0+SN))**N * F
C
END
BOUNDARY CONDITIONS:
MASS AND MOMENTUM:
Option = No Slip Wall
END
WALL ROUGHNESS:
Option = Smooth Wall
END
END
FLUID: Sand Fully Coupled
BOUNDARY CONDITIONS:
EROSION MODEL:
Option = User Defined
END
PARTICLE USER WALL INTERACTION:
Argument Variables List = Sand Fully Coupled.Particle Impact \
Angle,Sand Fully Coupled.Velocity
Particle User Routine = myerosion
Particle Wall Interaction Return Variables List = Particle Erosion
END
PARTICLE WALL INTERACTION:
Option = Equation Dependent
END
VELOCITY:
Option = Restitution Coefficient
Parallel Coefficient of Restitution = 1.0
Perpendicular Coefficient of Restitution = 0.9
END
END
END
FLUID: Sand One Way Coupled
BOUNDARY CONDITIONS:
EROSION MODEL:
Option = User Defined
END
PARTICLE USER WALL INTERACTION:
Argument Variables List = Sand One Way Coupled.Particle Impact \
Angle,Sand One Way Coupled.Velocity
Particle User Routine = myerosion
Particle Wall Interaction Return Variables List = Particle Erosion
END
PARTICLE WALL INTERACTION:
Option = Equation Dependent
END
VELOCITY:
Option = Restitution Coefficient
Parallel Coefficient of Restitution = 1.0
Perpendicular Coefficient of Restitution = 0.9
END
END
END
END
#include "cfx5ext.h"
dllexport(erosion_tabakoff)
SUBROUTINE EROSION_TABAKOFF(NLOC,NRET,NARG,RET,ARG,CRESLT,
& CZ,DZ,IZ,LZ,RZ)
CC
CD User routine: Tabakoff erosion model
CC
CC --------------------
CC Input
CC --------------------
CC
CC NLOC - number of entities
CC NRET - length of return stack
CC NARG - length of argument stack
CC ARG - argument values
CC
CC --------------------
CC Modified
CC --------------------
CC
CC --------------------
CC Output
CC --------------------
CC
CC RET - return values
CC
CC --------------------
CC Details
CC --------------------
CC
CC======================================================================
C
C ------------------------------
C Preprocessor includes
C ------------------------------
C
#include "cfd_sysdep.h"
#include "cfd_constants.h"
C
C ------------------------------
C Argument list
C ------------------------------
C
INTEGER NARG, NRET, NLOC
C
REAL ARG(NLOC,NARG), RET(NLOC,NRET)
xxxvi
C
CHARACTER*(4) CRESLT
C
INTEGER IZ(*)
CHARACTER CZ(*)*(1)
DOUBLE PRECISION DZ(*)
LOGICAL LZ(*)
REAL RZ(*)
C
C ------------------------------
C External routines
C ------------------------------
C
C
C ------------------------------
C Local Parameters
C ------------------------------
C
C
C ------------------------------
C Local Variables
C ------------------------------
C
C ------------------------------
C Stack pointers
C ------------------------------
C
C=======================================================================
C
C ---------------------------
C Executable Statements
C ---------------------------
C
C=======================================================================
C
C Return variables:
C -----------------
C
C Particle erosion : RET(1,1)
C
C Argument variables
C -------------------
C
C Particle impact angle : ARG(1,1)
C Particle velocity : ARG(1,2)
C
C=======================================================================
C
C-----------------------------------------------------------------------
C Calculate the return variables
C-----------------------------------------------------------------------
C
CALL TABAKOFF (RET(1,1),
& ARG(1,1),ARG(1,2))
C
END
C
C ------------------------------
C Argument list
C ------------------------------
C
REAL EROSION, ANGLE, VEL_PT(3)
C
C ------------------------------
C Local variables
C ------------------------------
C
REAL RT, VP, K2, K12, V1, V2, V3, ANGLE_MAX_RAD, ANGLE_MAX, ANGLE_DEG, F, VEL
C
C ------------------------------
C Executable statements
C ------------------------------
C
ANGLE_MAX = 25.0
ANGLE_MAX_RAD = ANGLE_MAX*PI/180.
K12 = 0.585
V1 = 159.11
V2 = 194.75
V3 = 190.5
C
ANGLE_DEG = ANGLE*180./PI
C
VEL = SQRT(VEL_PT(1)**2 + VEL_PT(2)**2 + VEL_PT(3)**2)
C
VP = ((VEL/V2)*SIN(ANGLE))**4
C
RT = 1-(VEL/V3)*SIN(ANGLE)
C
IF(ANGLE_DEG .LE. ANGLE_MAX) THEN
K2 = 1.0
ELSE
K2 = 0.0
ENDIF
C
F = (1+K2*K12*SIN(ANGLE*(PI/2)/ANGLE_MAX_RAD))**2
C
EROSION = (F*((VEL/V1)**2)*(COS(ANGLE)**2)*(1-RT**2)+VP)/1000.
C
END
END
DOMAIN: Default Domain
Coord Frame = Coord 0
Domain Type = Fluid
Location = B1.P3
BOUNDARY: Default Domain Default
Boundary Type = WALL
Location = \
F1.B1.P3,F10.B1.P3,F11.B1.P3,F12.B1.P3,F2.B1.P3,F6.B1.P3,F7.B1.P3,F8.\
B1.P3,F9.B1.P3
BOUNDARY CONDITIONS:
MASS AND MOMENTUM:
Option = No Slip Wall
END
WALL ROUGHNESS:
Option = Smooth Wall
END
END
FLUID: Sand Fully Coupled
BOUNDARY CONDITIONS:
EROSION MODEL:
Option = User Defined
END
PARTICLE USER WALL INTERACTION:
Argument Variables List = Sand Fully Coupled.Particle Impact \
Angle,Sand Fully Coupled.Velocity
Particle User Routine = myerosion
Particle Wall Interaction Return Variables List = Particle Erosion
END
PARTICLE WALL INTERACTION:
Option = Equation Dependent
END
VELOCITY:
Option = Restitution Coefficient
Parallel Coefficient of Restitution = 1.0
Perpendicular Coefficient of Restitution = 0.9
END
END
END
FLUID: Sand One Way Coupled
BOUNDARY CONDITIONS:
EROSION MODEL:
Option = User Defined
END
PARTICLE USER WALL INTERACTION:
Argument Variables List = Sand One Way Coupled.Particle Impact \
Angle,Sand One Way Coupled.Velocity
Particle User Routine = myerosion
Particle Wall Interaction Return Variables List = Particle Erosion
END
PARTICLE WALL INTERACTION:
Option = Equation Dependent
END
VELOCITY:
Option = Restitution Coefficient
Parallel Coefficient of Restitution = 1.0
Perpendicular Coefficient of Restitution = 0.9
END
END
END
END