17
Simulaçao cavity Aprendendo a obter resultado Você vai aprender: como executar o tutorial cavidade icoFoam. como o tutorial cavidade icoFoam está configurado, e como modificar o set-up. como procurar exemplos de como usar os utilitários. As lâminas são baseadas na distribuição OpenFOAM-1.6. Encontrar tutoriais para as aplicações em OpenFOAM Não há tutoriais específicos para os serviços públicos, mas alguns dos solver tutoriais também mostrar como usar os utilitários. Vamos dar uma olhada em alguns deles, enquanto nós corremos através do tutorial cavidade icoFoam. O tutorial cavidade icoFoam Vamos usar o tutorial cavidade icoFoam como um exemplo geral de como configurar e executar aplicações em OpenFOAM. Vamos copiar o tutorial cavidade icoFoam ao nosso diretório de execução e executá-lo. depois vamos verificar o que fizemos. Comece copiando o tutorial para seu diretório de executar: cp -r $FOAM_TUTORIALS/icoFoam/cavity $FOAM_RUN cd $FOAM_RUN/cavity Execute o tutorial cavidade icoFoam

Tutorial Cavity - OpenFOAM

Embed Size (px)

Citation preview

Page 1: Tutorial Cavity - OpenFOAM

Simulaçao cavity

Aprendendo a obter resultado

Você vai aprender:

como executar o tutorial cavidade icoFoam.

como o tutorial cavidade icoFoam está configurado, e como modificar o set-up.

como procurar exemplos de como usar os utilitários.

As lâminas são baseadas na distribuição OpenFOAM-1.6.

Encontrar tutoriais para as aplicações em OpenFOAM

Não há tutoriais específicos para os serviços públicos, mas alguns dos solver tutoriais também mostrar como usar os utilitários. Vamos dar uma olhada em alguns deles, enquanto nós corremos através do tutorial cavidade icoFoam.

O tutorial cavidade icoFoam

Vamos usar o tutorial cavidade icoFoam como um exemplo geral de como configurar e executar aplicações em OpenFOAM.

Vamos copiar o tutorial cavidade icoFoam ao nosso diretório de execução e executá-lo. depois vamos verificar o que fizemos.

Comece copiando o tutorial para seu diretório de executar:

cp -r $FOAM_TUTORIALS/icoFoam/cavity $FOAM_RUNcd $FOAM_RUN/cavity

Execute o tutorial cavidade icoFoam

A malha é definido por um dicionário que é lido pelo utilitário blockMesh. criar a malha, digitando:

blockMesh

Você já gerou a malha em formato OpenFOAM.

Verifique a malha digitando

checkMesh

Você vê o tamanho da malha, o tamanho geométrico e algumas verificações de malha.

Este é um caso para o solucionador icoFoam, então corra

Page 2: Tutorial Cavity - OpenFOAM

icoFoam >& log&

Agora você executar a simulação no fundo usando as configurações no caso, e encaminhar a saída para o arquivo de log, onde os números Courant e os resíduos são mostrados.

Pós-processo o tutorial cavidade icoFoam

Ver os resultados digitando:

paraFoam

Clique em Aceitar.Vá para a etapa última vezEscolha qual variável para colorir com pelo Display/Color byMover, girar e redimensionar a visualização usando o mouse

Encontre mais instruções sobre o uso de PARAFOAM no UserGuide:

em UserGuide.pdf

Sair do OpenFOAM: File/Exit Os resultados também podem ser vistos usando produtos de terceiros

Mais tarde, vamos mostrar muitas mais maneiras de usar PARAFOAM.

Visualização da malha em PARAFOAM

A visualização da pressão estática no PARAFOAM

IcoFoam tutorial cavidade - O que vamos fazer?

Vamos olhar o que fizemos durante a execução do tutorial cavidade, olhando para arquiva o caso.

Antes de tudo, deve-se notar que icoFoam é um solucionador transitória para incompressível, o fluxo laminar de fluidos newtonianos

O diretório caso originalmente contém as seguintes sub-diretórios: 0, constante, e sistema. Depois de nossa corrida ele também contém a saída de 0,1, 0,2, 0,3, 0,4, 0,5 e log

Os 0 * diretórios contém os valores de todas as variáveis para esses passos de tempo. O diretório 0 é, portanto, a condição inicial.

Page 3: Tutorial Cavity - OpenFOAM

O diretório constante contém a malha e um dicionário para a cinemática transportProperty viscosidade.

O diretório do sistema contém configurações para as acções realizadas, discretização e procedimentos de solução.

O solver icoFoam lê os arquivos no diretório do caso e executa o caso de acordo com essas definições.

icoFoam tutorial cavidade - O diretório constante

O arquivo transportProperties é um dicionário para o nu escalar dimensionado. O diretório polymesh originalmente contém o dicionário blockMeshDict para

o gerador de malha blockMesh, e agora também a malha em formato OpenFOAM. Vamos agora dar uma olhada rápida no dicionário blockMeshDict, a fim de

entender o que malha temos usado.

Tutorial cavidade icoFoam - dicionário blockMeshDict

O dicionário blockMeshDict primeiro lugar contém uma série de vértices:

convertToMeters 0.1;vertices( (0 0 0) (1 0 0) (1 1 0) (0 1 0) (0 0 0.1) (1 0 0.1) (1 1 0.1) (0 1 0.1));

Há oito vértices que definem um bloco 3D. OpenFOAM sempre usa 3D malhas, mesmo que a simulação é 2D.

ConvertToMeters 0.1; multiplica as coordenadas de 0,1.

tutorial cavidade icoFoam - dicionário blockMeshDict

O dicionário define blockMeshDict em segundo lugar um bloco ea malha do vértices:

blocks(hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1));

hex significa que é um bloco de hexaedro estruturado. (0 1 2 3 4 5 6 7) são os vértices utilizados para definir o bloco. A ordem destes

é importante - eles devem formar um sistema de direito (leia o UserGuide você mesmo). (20 20 1) é o número de células de malha, em cada direcção.

Page 4: Tutorial Cavity - OpenFOAM

SimpleGrading (1 1 1) é o coeficiente de expansão, neste caso equidistante. o os números são os quocientes entre as células de extremidade ao longo de três bordas. Há outros

classificação esquemas bem (leia o UserGuide você mesmo). O dicionário blockMeshDict finalmente define três correções:

patches(

wall movingWall(

(3 7 6 2))wall fixedWalls(

(0 4 7 3)(2 6 5 1)(1 5 4 0)

)empty frontAndBack(

(0 3 2 1)(4 5 6 7))

);

Cada adesivo define um tipo, um nome e uma lista de rostos de fronteira Vamos ter um olhar para o patch fixedWalls:

wall fixedWalls(

(0 4 7 3)(2 6 5 1)(1 5 4 0)

) wall é do tipo de contorno. fixedWalls é o nome do patch. o patch é definido por três lados do bloco de acordo com a lista, que se refere

aos números de vértices. A ordem dos números de vértice é de tal modo que eles são marchou ponteiros do relógio quando se olha de dentro do bloco. Isto é importante, e infelizmente checkMesh não vai encontrar esses problemas!

Para resumir, o dicionário blockMeshDict gera um bloco com: X / Y / Z dimensões 0.1/0.1/0.01

20x20x1 célulaswall fixedWalls remendar em três ladoswall movingWall consertar de um ladoempty frontAndBack corrigir em dois lados

O tipo de vazio(empty) diz OpenFOAM que é um caso 2D. Leia mais sobre blockMesh-se no UserGuide.

Page 5: Tutorial Cavity - OpenFOAM

Você também pode converter arquivos de malha a partir de produtos de terceiros, consulte o UserGuide.

blockMesh usa o blockMeshDict para gerar alguns arquivos noconstant/polyMesh Diretorio:boundaryfacesneighbourownerpoints

limite mostra as definições dos pathches, por exemplo:

movingWall{

type wall;nFaces 20;startFace 760;

} Os outros arquivos definem os pontos, faces, e as relações entre as células.

icoFoam tutorial cavidade - O diretório do sistema

O diretório do sistema(system) consiste em três arquivos de configuração:

controlDictfvSchemesfvSolution

controlDict contém instruções gerais sobre como executar o caso.

fvSchemes contém instruções sobre quais os regimes de diferenciação que devem ser usados para diferentes termos nas equações.

fvSolution contém instruções sobre como resolver cada linear discretizada sistema de equações. Ele também contém instruções para a pressão-velocidade PISO acoplamento.

O dicionário controlDict consiste nas seguintes linhas:

application icoFoam;startFrom startTime;startTime 0;stopAt endTime;endTime 0.5;deltaT 0.005;writeControl timeStep;writeInterval 20;purgeWrite 0;

Page 6: Tutorial Cavity - OpenFOAM

writeFormat ascii;writePrecision 6;writeCompression uncompressed;timeFormat general;timePrecision 6;runTimeModifiable yes;

application icoFoam; Nomeia a aplicação do tutorial está configurado para As linhas a seguir diz icoFoam para começar às startTime = 0, e parar em

endTime = 0,5, com um intervalo de tempo deltaT = 0,005:

startFrom startTime;startTime 0;stopAt endTime;endTime 0.5;deltaT 0.005;

As linhas a seguir diz icoFoam para escrever resultado em diretórios separados (purgeWrite 0;) cada 20 TimeStep, e que eles devem ser escritos em formato ascii descomprimido com writePrecision 6. timeFormat e timePrecision estão as instruções para os nomes dos diretórios de tempo.

WriteControl timeStep;writeInterval 20;purgeWrite 0;writeFormat ascii;writePrecision 6;writeCompression uncompressed;timeFormat general;timePrecision 6;

runTimeModifiable yes; permite que você faça modificações no caso, enquanto ele está sendo executado.

icoFoam tutorial cavidade - Uma dica dicionário

Se você não sabe quais as entradas estão disponíveis para uma palavra chave específica em um dicionário, basta usar um manequim e o solver irá listar as alternativas, por exemplo:

stopAt;dummy;

Ao executar icoFoam você receberá a mensagem:

dummy is not in enumeration (manequim não está na enumeração)4(

nextWrite

Page 7: Tutorial Cavity - OpenFOAM

writeNownoWriteNowendTime

)

e você vai saber as alternativas.

Note-se que:

stopAt;dummy;

só dá a seguinte mensagem sem parar a simulação:

--> FOAM Warning : From function Time::setControls() in file db/Time/Time.C at line 132 expected startTime, firstTime or latestTime \ found ’dummy’ in dictionary controlDict Setting time to 0

e a simulação será iniciada a partir do tempo 0.

Você também pode usar C + + comentando nos dicionários:

// This is my comment/* My comments, line 1My comments, line 2 */

icoFoam tutorial cavidade - O dicionário fvSchemes

O dicionário fvSchemes define os regimes de diferenciação, em particular, o tempo marchando esquema e os esquemas convecções:

ddtSchemes{

default Euler;}divSchemes{

default none;div(phi,U) Gauss linear;

}

Aqui usamos o Euler discretização temoral implícita, eo linear (de diferença central) Regime dos convecção.

default none; significa que os sistemas devem ser especificados explicitamente.

Page 8: Tutorial Cavity - OpenFOAM

Encontre os esquemas de convecção disponíveis utilizando um "boneco" de entrada do dicionário. lá 50 são alternativas, e o número de alternativas estão a aumentar!

icoFoam tutorial cavidade - O dicionário fvSolution

O dicionário fvSolution define o processo de solução.

As soluções dos sistemas de equações lineares p é definido por:

p PCG{

preconditioner DIC;tolerance 1e-06;relTol 0;

};

O sistema de equações p linear é resolvido usando o Gradiente Conjugado solver PCG, com a DIC precondicionador.

A solução é considerada convergente quando o residual tiver alcançado o tolerância(tolerance), ou se tiver sido reduzida por relTol em cada intervalo de tempo.

relTol é aqui definido como zero, uma vez que usar o algoritmo PISO. O algoritmo PISO só resolve cada equação uma vez por passo de tempo, e devemos, portanto, resolver o equações a tolerância (tolerance)1e-06 em cada passo de tempo. relTol 0; desativa relTol.

As soluções dos sistemas de equações lineares U é definida por:

U PBiCG{

preconditioner DILU;tolerance 1e-05;relTol 0;

};

O sistema de equações lineares em U resolvido usando o Gradiente Conjugado solver PBiCG, com o DILU precondicionador.

A solução é considerada convergente quando o residual tiver alcançado o tolerância 1e-05 para cada passo de tempo.

As configurações para o algoritmo PISO são especificados na entrada PISO:

PISO{

nCorrectors 2;nNonOrthogonalCorrectors 0;pRefCell 0;pRefValue 0;

}

Page 9: Tutorial Cavity - OpenFOAM

nCorrectors é o número de corretores PISO. Você pode ver isso no arquivo de log uma vez que a equação p é resolvido por duas vezes, e o acoplamento pressão-velocidade é assim feito duas vezes.

nNonOrthogonalCorrectors adiciona correções para malhas não ortogonais, que, por vezes, pode influenciar a solução.

A pressão é ajustada para pRefValue 0 no número de células pRefCell 0. Isto é suplantada se uma condição de limite de pressão constante é usado para a pressão.

icoFoam tutorial cavidade - O diretório 0

O diretório 0 contém as dimensões e as condições iniciais e de contorno para todas as variáveis primárias, neste caso p e U. U-exemplo:

dimensions [0 1 -1 0 0 0 0];internalField uniform (0 0 0);boundaryField{ movingWall

{type fixedValue;value uniform (1 0 0);

}fixedWalls{

type fixedValue;value uniform (0 0 0);

}frontAndBack{

type empty;}}

dimensions [0 1 -1 0 0 0 0]; Indica que a dimensão de U é m / s. internalField uniform (0 0 0); define U a zero internamente. Os remendos de contorno movingWall e fixedWalls são dadas a digite FixedValue; valor

uniforme (1 0 0); e (0 0 0), respectivamente, ou seja, Ux = 1m / s, e U = 0m / s,respectivamente. O patch frontAndBack está determinado tipo vazio(type empty);, indicando que não há solução

necessário nesse sentido desde que o caso é 2D. Agora você deve ser capaz de entender 0 / p também. Os resultantes 0. * Diretórios são semelhantes, mas o internalField é agora um <scalar> lista

não uniforme contendo os resultados. Há também um ficheiro de phi, contendo os fluxos resultantes de face que são necessários para se obter uma reinicialização perfeito.

Há também algumas informações sobre o tempo em 0. * / Uniforme / hora. O 0. * / Uniforme directório pode ser utilizado para informação uniforme numa simulação paralelo.

icoFoam tutorial cavidade - O arquivo de log

Page 10: Tutorial Cavity - OpenFOAM

Se você seguiu as instruções anteriores, você agora deve ter um arquivo de log. Esse arquivo contém principalmente os números e resíduos Courant em todos os passos de tempo:

Time = 0.09Courant Number mean: 0.116099 max: 0.851428 velocity magnitude: 0.851428PBiCG: Solving for Ux, Initial residual = 0.000443324,

Final residual = 8.45728e-06, No Iterations 2PBiCG: Solving for Uy, Initial residual = 0.000964881,

Final residual = 4.30053e-06, No Iterations 3PCG: Solving for p, Initial residual = 0.000987921,

Final residual = 5.57037e-07, No Iterations 26time step continuity errors : sum local = 4.60522e-09,

global = -4.21779e-19, cumulative = 2.97797e-18PCG: Solving for p, Initial residual = 0.000757589,

Final residual = 3.40873e-07, No Iterations 26time step continuity errors : sum local = 2.81602e-09,

global = -2.29294e-19, cumulative = 2.74868e-18ExecutionTime = 0.11 s ClockTime = 1 s

icoFoam tutorial cavidade - O arquivo de log

Olhando para os resíduos Ux.

PbiCG: Solving for Ux, Initial residual = 0.000443324, Final residual = 8.45728e-06, No Iterations 2

Vemos que foi utilizada a solver PbiCG O residual inicial é calculada antes do sistema de equações lineares é resolvido, e o resíduo final

é calculada em seguida. Vemos que o residual final é menor do que a nossa tolerância em fvSolution (tolerância 1e-05;). O solver PBiCG usado 2 iterações para atingir a convergência. Também se pode ver no arquivo de log que os resíduos de pressão e erros de continuidade

foram relatados duas vezes cada intervalo de tempo. Isso é porque nós especificamos nCorrectors 2; para a entrada em PISO fvSolution.

O ExecutionTime é o tempo decorrido da CPU, e a é o ClockTime decorrido tempo relógio de parede para o último passo do tempo.

tutorial cavidade icoFoam - foamLog

É de interesse que tem uma representação gráfica do desenvolvimento residual.

O utilitário foamLog é basicamente um script usando o grep, awk e sed para extrair valores de um arquivo de log.

foamLog usa um banco de dados (foamLog.db) para saber o que extrair. o banco de dados foamLog.db pode ser modificado se você quer extrair quaisquer outros valores foamLog que não extrai por padrão.

Page 11: Tutorial Cavity - OpenFOAM

foamLog é executado no caso cavidade com log do arquivo de log por:

log foamLog

A logs já foi gerado, com os valores extraídos em formato ASCII em duas colunas. A primeira coluna é o Tempo, ea segunda coluna é o valor no nesse momento.

Digite foamLog-h para obter mais informações. A representação gráfica é então dado por Matlab,

xmgrace -log y Ux_0 p_0 or gnuplot: set logscale y,plot "Ux_0","Uy_0","p_0".

Executar os tutoriais cavidade icoFoam usando o script Allrun

Vamos agora executar os tutoriais icoFoam / cavidade Primeiro, copie o diretório tutoriais icoFoam:

cp -r $FOAM_TUTORIALS/icoFoam $FOAM_RUNcd $FOAM_RUN/icoFoam

se você executar o script Allrun para os tutoriais cavidade icoFoam você realmente primeiro executar o caso de cavidade:

# Correndo blockMesh em cavidade:blockMesh -case cavity#Running icoFoam on cavity:icoFoam -case cavityem seguida, executar o caso cavityFine:#Cloning cavityFine case from cavity:

mkdir cavityFinecp -r cavity/{0,system,constant} cavityFine

[change "20 20 1" in blockMeshDict to "41 41 1"][set startTime in controlDict to 0.5][set endTime in controlDict to 0.7][set deltaT in controlDict to 0.0025][set writeControl in controlDict to runTime][set writeInterval in controlDict to 0.1]

#Running blockMesh on cavityFineblockMesh -case cavityFine

#Running mapFields from cavity to cavityFine (UserGuide, 6.5)mapFields cavity -case cavityFine -sourceTime latestTime \

-consistent#Running icoFoam on cavityFine

icoFoam -case cavityFineem seguida, executar o caso cavityGrade:#Running blockMesh on cavityGrade

blockMesh -case cavityGrade#Running mapFields from cavityFine to cavityGrade

mapFields cavityFine -case cavityGrade \-sourceTime latestTime -consistent

#Running icoFoam on cavityGradeicoFoam -case cavityGrade

Page 12: Tutorial Cavity - OpenFOAM

em seguida, executar o caso cavityHighRe:#Cloning cavityHighRe case from cavity

mkdir cavityHighRecp -r cavity/{0,system,constant} cavityHighRe

#Setting cavityHighRe to generate a secondary vortex[set startFrom in controlDict to latestTime;][set endTime in controlDict to 2.0;][change 0.01 in transportProperties to 0.001]

#Copying cavity/0* directory to cavityHighRecp -r cavity/0* cavityHighRe

#Running blockMesh on cavityHighReblockMesh -case cavityHighRe

#Running icoFoam on cavityHighReicoFoam -case cavityHighRe

em seguida, executar o caso cavityClipped:#Running blockMesh on cavityClipped

blockMesh -case cavityClipped#Running mapFields from cavity to cavityClipped

cp -r cavityClipped/0 cavityClipped/0.5mapFields cavity -case cavityClipped -sourceTime latestTime

(no longer consistent, so it uses system/mapFieldsDict)[Reset the boundary condition for fixedWalls to:]

[ type fixedValue; ][ value uniform (0 0 0); ][ We do this since the fixedWalls got ][ interpolated values by cutting the domain ]#Running icoFoam on cavityClipped

icoFoam -case cavityClippedDepois, há também o caso do cotovelo Fluente, que não vamos discutir agora.

Você pode executar um script semelhante, localizado no diretório de tutoriais, e também chamado Allrun. Este script será executado através de todos os tutoriais (chama Allrun em cada solver diretório).

Você pode usar este script como um tutorial de como gerar as malhas, como executar o solucionadores, como clonar casos, o mapeamento dos resultados entre os diferentes casos etc.

Encontrar tutoriais para os utilitários em OpenFOAM Não há tutoriais para os utilitários, mas podemos procurar exemplos:

find $WM_PROJECT_DIR -name \*Dict | \grep -v blockMeshDict | grep -v controlDictVocê vai ter uma lista de exemplos de dicionários para alguns dos utilitários.

A maioria dos utilitários ter argumentos. Encontre as alternativas digitando (para foamToVTK):foamToVTK -helpobtendo-se:Usage: foamToVTK [-noZero] [-surfaceFields] [-ascii][-region name] [-faceSet faceSet name] [-nearCellValue][-pointSet pointSet name] [-noLinks] [-case dir][-excludePatches patches to exclude] [-allPatches][-cellSet cellSet name] [-parallel] [-noFaceZones]

Page 13: Tutorial Cavity - OpenFOAM

[-fields fields] [-constant] [-noPointValues] [-latestTime][-noInternal] [-time time] [-help] [-doc] [-srcDoc]Agora você deve estar pronto para continuar a explorar as aplicações por si mesmo.