Sumário
CAPÍTULO 3 PACOTE CFD OPENFOAM
7 Intensidade luminosa Candela cd
4.3 Software PyCFD-O
4.3.1 Estrutura do programa
Como descrito na seção 2.4, a fim de realizar a otimização automatizada utilizando um software CFD é necessário o desenvolvimento de um script. Este script tem a função de realizar a junção entre o método de otimização e o software CFD e automatizar o processo de pré-processamento, chamada do solver e pós-processamento realizado pelo CFD. Nesta seção será descrita a metodologia, os softwares e os códigos utilizados para realização desta tarefa.
O PyCFD-O é um conjunto de códigos orientado a objetos em python e C++ para sistemas Unix / Linux desenvolvido para acoplar ferramentas de engenharia/desenho assistida por computador (CAD/CAE), otimização multiobjetivo e dinâmica dos fluidos computacional (CFD). O software foi totalmente desenvolvido no Núcleo de Engenharia Térmica e Fluidos – NETeF/USP, como parte da presente pesquisa. O PyCFD-O pode ser resumido em seis etapas, como mostrado na Figura 4.19:
1. Parâmetros geométricos - CAD: Nesta etapa as variáveis de projeto iniciais são configuradas ou os valores obtidos do método de otimização são atualizados para geração da geometria (preparação CAD). Nesta etapa é possível utilizar um software CAD (SALOME15) (OPEN-CASCADE, 2012) para a criação
15 SALOME é um software de código aberto desenvolvido pela OpenCASCADE que fornece uma
inicial da geometria base. Após a execução inicial temos acesso ao código fonte que gera a geometria e a partir daí são criadas rotinas que possibilitam a automatização do processo de criação das geometrias.
2. Geração da malha: Com a geometria definida a geração da malha é iniciada. O PyCFD-O permite a utilização de softwares de geração nativos do OpenFOAM (blockMesh, snappyHexMesh) (OPENCFD, 2013) e o uso de geradores externos como os utilizados no SALOME. A qualidade da malha gerada é verificada ao final de todo o processo. A malha em questão deve respeitar certas qualidades previamente definidas no código, como por exemplo, não ortogonalidade, máximo skewness, entre outras. Se a malha gerada não obtiver sucesso uma nova malha é gerada com os parâmetros dos métodos de geração de malha refinados. Esse processo é realizado com o auxílio da função checkMesh do OpenFOAM e um conjunto com códigos desenvolvidos para o PyCFD-O.
3. Pré-processamento: O estágio de pré-processamento é responsável pela configuração do solver CFD com as especificações do fluido, condições de contorno e métodos e modelos utilizados. Nesta etapa também é realizada a configuração e preparação para a execução em paralelo do solver CFD. Os métodos de decomposição de malha são os disponibilizados pelo OpenFOAM e a execução em paralelo utiliza roteiros em bash para o PBS (Portable Batch System).
4. Execução de solver CFD: Execução do OpenFOAM para simulação computacional do escoamento previamente configurado.
5. Pós-processamento: Após a execução do solver CFD a correta execução e convergência da simulação são verificadas. Se a execução ocorreu perfeitamente o software executa a extração dos dados e calcula os parâmetros de otimização que serão utilizados no método de otimização. No entanto, se ocorrer algum problema na execução do solver, a mesma geometria é executada novamente, com algum parâmetro de geração de malha refinado. O processo se repetirá até a execução retornar sucesso.
6. Método de otimização: Os parâmetros de otimização são exportados e o método de otimização completa a execução e retorna, se necessário, uma nova população com os parâmetros geométricos para as novas geometrias que serão avaliadas. No PyCFD-O foram implementados até o momento dois métodos de
otimização estocástica: NSGA-II (DEB, 2001; DEB et al., 2002) e um algoritmos genérico de otimização multiobjetivo evolutiva. No entanto, o software permite a implementação e integração com outros métodos de otimização. Outra característica do software é a possibilidade da avaliação de cada individuo da população em paralelo. O PyCFD-O trabalha com processamento paralelo em clusters com o PBS para realizar o agendamento de tarefas. Também é possível avaliar várias geometrias em paralelo em computadores comuns (multicores) sem a utilização do PBS. O software salva um arquivo de saída com todos os parâmetros avaliados no processo de otimização, possibilitando a criação de um banco de dados para futuras verificações e análise.
4.3.2 Métodos de otimização multiobjetivo implementados
Como descrito na Seção 2.3 o algoritmo NSGA-II apresenta-se como um dos métodos de otimização multiobjetivo mais eficientes na atualidade. O NSGA-II difere de um algoritmo genético simples apenas na forma como é executada a seleção, uma vez que os operadores genéticos de recombinação e mutação permanecem os mesmos. Assim, a vantagem do NSGA-II é sua capacidade de a cada geração, utilizar uma trajetória diferenciada de busca, devido ao fato de que novos indivíduos sempre são obtidos por meio de combinações das populações anteriores. Esta estratégia diferenciada de busca permite explorar várias regiões do espaço de soluções. Deste modo, o algoritmo do NSGA-II foi totalmente implementado em python e disponibilizado para utilização no software PyCFD-O.
A fim de verificar o correto funcionamento do algoritmo implementado NSGA-II, utilizou-se outro algoritmo denominado EMOO (Evolutionary Multi-Objective Optimization) (BAHL et al., 2012). O algoritmo EMOO também é um modelo elitista baseado no próprio NSGA-II e é disponibilizado para download em www.g-node.org/emoo. O uso de ferramentas de otimização já desenvolvidas permitiu a verificação dos métodos implementados diretamente no PyCFD-O.
Deste modo, foi verificado primeiramente o correto funcionamento de ambos os códigos em um problema de otimização multiobjetivo teste como descrito no APÊNDICE A Em seguida, os métodos foram acoplados no processo de otimização com CFD no software PyCFD-O.
4.3.3 Paralelização
Como mencionado anteriormente, um fator importante relacionado aos algoritmos genéticos (AG) é o alto esforço computacional necessário para realizar as avaliações dos objetivos associados com a população. A avaliação de um grande número de indivíduos durante muitas gerações pode conduzir a tempos de processamento impraticáveis em casos práticos de engenharia. Por outro lado, devido à sua característica intrínseca, os AGs são facilmente e eficientemente paralelizáveis. Em cada geração, todos os N indivíduos da população podem ser avaliados de forma independente em diferentes processadores, uma vez que o algoritmo principal requer somente os valores dos objetivos para iterar.
Aproveitando esta característica inerente dos algoritmos genéticos e o alto custo computacional associado com as avaliações CFD, um paradigma mestre-escravo
(GOLDBERG, 1989) de paralelização foi implementado no software PyCFD-O. O padrão de comunicação de dados MPI (Message Passing Interface) foi utilizado.
A Figura 4.20 apresenta um diagrama esquemático da utilização do paradigma mestre- escravo. Como pode ser observado na figura, o paradigma mestre-escravo envolve dois conjuntos de processadores: o mestre e o escravo. O mestre é responsável pelo pré- e pós- processamento da ordem de serviço; o escravo é responsável pela execução/processamento das ordens de serviço (execução do solver CFD). A Figura 4.21 ilustra a aplicação do paradigma mestre-escravo no processo de otimização multiobjetivo no PyCFD-O. Inicialmente, com a população inicial gerada verificam-se os indivíduos/geometrias dessa população serão executados em paralelo. Se esta opção estiver habilitada, o processamento de cada geometria é realizado em paralelo na estação de trabalho, de acordo com as especificações previamente configuradas. A alocação dos processos entre os recursos computacionais disponíveis são realizados através da utilização do programa PBS Professional (Portable Bach System) disponível na estação de trabalho. Ao executar o processamento em paralelo utiliza-se uma barreira de sincronização para garantir que todos os indivíduos da população do ciclo de otimização foram processados.
Usualmente no PyCFD-O, cada indivíduo/geometria da população é resolvido em um único nó de processamento da estação de trabalho. E este indivíduo/geometria é resolvido em paralelo dentro desse nó de processamento de acordo com os recursos computacionais disponíveis. Ou seja, o domínio da malha computacional da geometria é decomposto e o solver CFD é resolvido em paralelo. Esta divisão de recursos onde cada geometria é processada em paralelo em um nó garante um baixo nível de comunicação entre os nós.
Figura 4.21: Processamento paralelo do método de otimização no PyCFD-O.
Para o processamento das simulações, a estação de trabalho dedicada Monalisa do Núcleo de Engenharia Térmica e Fluidos foi utilizada. A estação de trabalho Monalisa possui o sistema operacional SUSE Linux Enterprise Server 11, juntamente com os softwares e respectivas licenças (se aplicável) para: PBS Pro 12.0, ANSYS CFX/Fluent, modeFrontier, OpenFOAM 2.0.1 e Salome Meca 2011.2. As especificações de hardware da estação de trabalho são apresentadas na Tabela 4.3:
Tabela 4.3: Especificações da estação de trabalho Monalisa.
SGI Altix XE 1300: 10 nós de processamento
6 compute nodes (3 servers Altix XE 340) Intel Xeon X5650, 2.4GHz, 12M cache, RAM 24GB 4 compute nodes (2 servers SGI C2112) Intel Xeon E5-2660, 2.2GHz, 20M cache RAM 32GB
Head node: Intel Xeon E5620, 2.4GHz, 12M cache Total de cores de processamento: 136