Você está na página 1de 106

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ – UTFPR

DEPARTAMENTO ACADÊMICO DE ENGENHARIA QUÍMICA


CURSO DE ENGENHARIA QUÍMICA

GEAN CARLOS LEANDRO

DESENVOLVIMENTO DE SOFTWARE ACADÊMICO


PARA ENGENHARIA QUÍMICA, UTILIZANDO
LINGUAGEM FORTRAN E PYTHON - CÁLCULO DE
REATORES

TRABALHO DE CONCLUSÃO DE CURSO

FRANCISCO BELTRÃO
2018
GEAN CARLOS LEANDRO

DESENVOLVIMENTO DE SOFTWARE ACADÊMICO


PARA ENGENHARIA QUÍMICA, UTILIZANDO
LINGUAGEM FORTRAN E PYTHON - CÁLCULO DE
REATORES

Trabalho de Conclusão de Curso do Curso de


Engenharia Química da Universidade Tecnoló-
gica Federal do Paraná - UTFPR, como requi-
sito parcial para a obtenção do título de Bacha-
rel.

Orientador: Prof. Dr. Jeconias Rocha Guima-


raes
Coorientador: Prof. Dra. Ana Paula De Oliveira

FRANCISCO BELTRÃO
2018
Ministério da Educação
Universidade Tecnológica Federal do Paraná
Campus Francisco Beltrão
Curso de Engenharia Química
PR
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

TERMO DE APROVAÇÃO
Trabalho de Conclusão de Curso – TCC2

Desenvolvimento De Software Acadêmico Para Engenharia Química, Utilizando


Linguagem Fortran E Python - Cálculo De Reatores
por
Gean Carlos Leandro

Trabalho de Conclusão de Curso 2 apresentado às 14 horas e 30 min., do dia 15 de


junho de 2018, como requisito para aprovação da disciplina Trabalho de Conclusão
de Curso 2, do Curso de Engenharia Química da Universidade Tecnológica Federal
do Paraná, Campus Francisco Beltrão. O candidato foi arguido pela Banca
Avaliadora composta pelos professores abaixo assinados. Após deliberação, a
Banca Avaliadora considerou o trabalho ________ (Aprovado ou Reprovado).

Banca Avaliadora:

Prof. Dr. Andre Zuber Prof. Dr. Jeconias Rocha


Coordenador (a) do Curso Guimaraes
Professor (a) Orientador (a)

Prof. Gustavo Yuji Sato Prof. Dra. Ana Paula De Oliveira


Membro da Banca Professor (a) Coorientador (a)

_________________________________
Prof. Dra. Michele Di Domenico
Professora do TCC2

“A Folha de Aprovação assinada encontra-se na Coordenação do Curso”


Dedico este trabalho à toda minha família, em especial ao meu filho Gael que deu um novo
sentido à minha vida.
Agradecimentos

Agradeço aos meus orientadores Prof. Dr. Jeconias Rocha Guimaraes e Prof. Dra Ana
Paula De Oliveira por todo suporte durante a execução deste projeto, pelos conselhos inspira-
dores e a primorosa atenção para o seu desenvolvimento.
Aos meus queridos supervisores de estágio, Gilmar Antonio Meneghetti e Andrea Bac-
ker que me transmitem diariamente lições importantes sobre a vida e me apoiaram imensamente
durante a produção deste trabalho, permitindo diversas vezes alterações de horário, para que eu
priorizasse esta atividade.
Também gostaria de lembrar do Professor Gustavo Yuji Sato que sempre que possível
me auxiliava em algumas questões bem específicas sobre a área de programação e que foram
cruciais para a finalização deste trabalho.
Gostaria de deixar registrado também, o meu reconhecimento à minha família, pois
acredito que sem o apoio deles seria muito difícil vencer esse desafio.
Enfim, a todos que de algum modo contribuíram para a sua realização.
There are two ways of constructing a software design. One way is to make it so simple that there
are obviously no deficiencies. And the other way is to make it so complicated that there are no
obvious deficiencies. The first method is much more difficult (HOARE, Charles A. R.).
Há duas formas de construir um projeto de software: Uma maneira de fazer isso deve ser tão
simples que, obviamente, não deixem deficiências, e a outra forma é a de torná-lo tão com-
plicado que não percebam as evidentes deficiências. O primeiro método é muito mais difícil
(HOARE, Charles A. R.).
Resumo

LEANDRO, GEAN C. Desenvolvimento de Software Acadêmico Para Engenharia Quí-


mica, Utilizando Linguagem Fortran e Python - Cálculo de Reatores. 2018. 38 f. Traba-
lho de Conclusão de Curso (Graduação) – Engenharia Química. Universidade Tecnológica
Federal do Paraná. Francisco Beltrão, 2018.
Neste trabalho apresentamos o desenvolvimento de uma ferramenta computacional para
demonstração de conceitos de reatores químicos. Recursos educacionais, como o desenvol-
vido aqui, são de extrema relevância no aprendizado. Atualmente existe uma forte demanda
na produção deste tipo de material e os softwares estão em uma das mais linhas de frente.
Neste sentido, utilizamos duas linguagens de programação, que estão entre as mais utili-
zadas: Fortran e Python. A primeira está presente em grande parte dos códigos científicos
enquanto que a última é voltada para o uso geral, desde científico à entretenimento. A fer-
ramenta desenvolvida foca no dimensionamento de reatores químicos e suas propriedades.
O código é estruturado de forma a facilitar o acesso do usuário na inserção dos parâmetros
que caracterizam cada reator. Como resultado, apresentamos não apenas o programa execu-
tável ao usuário final, mas também seu código fonte. Deste modo, serve como um material
didático completo. Esperamos que esta iniciativa propicie aos estudantes de graduação de
engenharia uma visão do emprego de linguagens de programação como uma ferramenta
essencial do desenvolvimento científico.

Palavras-chaves: Software. Aprendizado. Tecnologia. Reatores. Acadêmico.


Abstract

LEANDRO, GEAN C. Development of Academic Software for Chemical Engineering,


Using Fortran and Python Language - Calculation of Reactors. 2018. 38 p. Trabalho de
Conclusão de Curso (Graduação) – Engenharia Química. Universidade Tecnológica Federal
do Paraná. Francisco Beltrão, 2018.
In this work we present the development of a computational tool for demonstration of
chemical reactors concepts. Educational resources, like the one developed here, have a huge
importance on learning process. Thus, nowadays there is a strong demand in producing such
materials and softwares are among the ones in the front edge. In this way, we have used the
most used programming language: Fortran and Python. The former is present in the most
scientific codes while the latter is of general use, ranging from science to entertainment. Our
program focuses on chemical reactors and their properties. It is structured in such a way
that makes easy access by user when inserting parameters that characterizes each reactor.
As result, we present not only the binary program to final user, but also its source code.
Thus, it serves as a complete didatic material. We expect this initiative will allow under
graduate students to have a broad vision in how to employ programing languages as an
essential tool in scientific development.

Key-words: Software. Learning. Technology. Reactors. Academic.


Sumário

1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1 Acessibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Conhecimento Específico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1 Acessibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2 Conhecimento Específico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2 Objetivos Específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

5 Fundamentação Teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.1 Cálculo de Reatores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2 Linguagens de Programação . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2.1 Fortran x Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.1 Estudo Direcionado Sobre Cálculo de Reatores . . . . . . . . . . . . . . . . . 24
6.2 Estudo Direcionado Sobre as Linguagens de Programação . . . . . . . . . . . . 24
6.2.1 Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.2.2 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.3 Construção do Código do Programa . . . . . . . . . . . . . . . . . . . . . . . 27

7 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1 Exemplo de Exercício Para o Programa em Base Fortran . . . . . . . . . . . . 30
7.1.1 Resolução Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1.2 Resolução Pelo Software . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.2 Exemplo de Exercício Para o Programa em Base Python . . . . . . . . . . . . 32
7.2.1 Resolução Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.2.2 Resolução Pelo Software . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.3 Regras de utilização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

8 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Anexos 44
10

1 Introdução

Desde sempre a tecnologia teve como principal objetivo auxiliar e otimizar o trabalho.
Esta não necessariamente se desenvolve de conceitos científicos, mas também através de avali-
ações empíricas e intuitivas (LONGO, 2004). Todavia é interessante notar que esta constante-
mente passa por processos evolutivos que visam facilitar sua utilização. Temos como exemplo
as invenções que são sempre seguidas de inovação, que melhoraram a tecnologia criada (MAR-
CHETTI, 1980).
A produção exponencial de conhecimento científico nas últimas décadas de certa forma
dificultou o seu acesso, devido à falta de ferramentas práticas para sua difusão. Esta realidade
reflete no sistema educacional, principal responsável pela transmissão de conhecimento, que
busca facilitar o acesso à informação através de tecnologias (BENFATTI, 2010). No campo do
ensino, as tecnologias modernas visam sua democratização no aprendizado (MOLINA, 2007).
(KENSKI, 2001) ressalta que assim como a tela da televisão vem sendo substituída pela do
computador, o quadro negro também compete espaço com as novas ”telas” que permitem maior
interação entre professor e aluno, com ferramentas que possibilitam espectros diferentes de
aprendizagem. (CHACÓN, 2010), chama esse processo de quebra de paradigma da transferên-
cia de conhecimento, para criar um novo: facilitador de conhecimento. O foco principal, não é
apenas a transmissão de conhecimento para o aluno, mas facilitar que este conhecimento seja
absorvido ao máximo. (KENSKI, 2001) ainda define com clareza essa transição quando diz que
“o movimento é acelerado. A atualização é permanente. Novas informações derrubam velhas
certezas. ” (KENSKI, 2001).
A engenharia química também é constantemente inovada e acompanha a tendência de
utilização de novas tecnologias. Tem-se como exemplo, o Conselho Regional de Química, res-
ponsável por regulamentar as atividades do engenheiro químico, que indica em suas páginas
web diversos softwares computacionais, tais como ChemCAD, Fness, Fluid Flow3 e Thermo-
flow, como ferramentas essenciais facilitar as atividades envolvidas na execução de projetos
(CRQ, 2018).
É inegável que este processo de mudança impacta na esfera acadêmica, tornando obri-
gatório que o ensino de tais ferramentas seja ministrado pelas instituições de ensino, para que
o profissional formado atenda as demandas de mercado (MELO, 2005). O curso de engenha-
ria possui fundamentos básicos que permanecem intactos, devido sua grande relevância para a
formação do engenheiro, entretanto vem se desenvolvendo ferramentas que facilitam o enten-
dimento e concepção dos estudantes. Atualmente, existem calculadoras científicas e gráficas,
softwares e materiais didáticos interativos, amplamente conhecidos no âmbito acadêmico. Es-
tes recursos, demonstram que o desenvolvimento de ferramentas tecnológicas para auxílio em
disciplinas durante a graduação, é um interessante campo de pesquisa a ser trilhado.
11

2 Problema

Durante a graduação em engenharia química, diversos docentes, visando facilitar o en-


tendimento dos conteúdos aplicados, utilizam de softwares computacionais. De fato, tais ferra-
mentas auxiliam bastante na didática e aprendizado do aluno. Contudo, a utilização desta tec-
nologia em sala de aula pode gerar dois problemas significativos que dificulta a sua aplicação:
a acessibilidade e conhecimento específico do software .

2.1 Acessibilidade

A dificuldade de acesso a um determinado software é influenciada por diversos fatores.


O principal a ser considerado é o tipo de tecnologia utilizada por este. Atualmente a maioria
destes voltados para a área de engenharia possuem seu código de programação fechado e exigem
custos para aquisição. Este fator também limita as possibilidades do usuário em adequar as
funções do programa para casos mais específicos a sua realidade, tornando-o dependente de
atualizações de seu fornecedor.

2.2 Conhecimento Específico

Outro ponto de impacto se refere a demanda de conhecimento para emprego do soft-


ware. Mesmo aqueles que possuem código aberto, encontra-se dificuldade na utilização, pois
possuem uma linguagem distante daquela a qual o estudante está habituado e requer aprendi-
zado prévio da ferramenta. Desta forma, um instrumento que visa facilitar a assimilação do
conteúdo de determinada disciplina, causa um efeito contrário, aumentando a quantidade de
informação a ser transmitida ao estudante.
12

3 Justificativa

A concepção de um software baseado em compiladores livres, visa solucionar os princi-


pais problemas enfrentados na utilização destas ferramentas durante a graduação do engenheiro
químico: a acessibilidade e conhecimento específico do software.

3.1 Acessibilidade

Baseando-se a estrutura do software nas linguagens Fortran e Python, ambas livres, eli-
minamos a necessidade de compra do programa para utilização, ou seja, qualquer usuário pode
obter de forma gratuita a ferramenta, possibilitando o acesso a um número consideravelmente
maior de estudantes e inclusive o uso sem implicações legais para a instituição de ensino. O soft-
ware livre também possibilita ao usuário que tenha acesso ao código fonte do programa, iden-
tificando o modo como este foi construído e permite que este altere sua estrutura, adequando-o
da maneira que lhe for viável e interessante.

3.2 Conhecimento Específico

Estruturar-se-á o programa de maneira simples e didática, de forma que o usuário não


precise de conhecimentos específicos da ferramenta e/ou da programação desta. Com a utili-
zação de uma linguagem mais próxima da realidade do aluno, o software identificará os dados
informados e irá expor os resultados de maneira visual e de fácil assimilação.
13

4 Objetivos

4.1 Objetivo Geral

Desenvolver um software acadêmico para Engenharia Química, voltado para a disci-


plina de cálculo de reatores utilizando as linguagens de programação Fortran e Python.

4.2 Objetivos Específicos

I. Abordar técnicas e procedimentos para resolução de problemas relacionados a disciplina de


cálculo de reatores.
II. Avaliar as principais diferenças entre as linguagens de programação Fortran e Python.
III. Identificar as estruturas de programação das linguagens Fortran e Python.
IV. Desenvolver um código de um programa nas linguagens Fortran e Python que resolva casos
simples de cálculo de reatores.
V. Estruturar o código do programa desenvolvido para fácil visualização e interpretação do
usuário.
14

5 Fundamentação Teórica

Para a elaboração deste projeto de pesquisa buscou-se em literatura referencial teórico


para os dois tópicos centrais. Desta forma a revisão bibliográfica está dividida em três eixos:
cálculo de reatores, linguagens de programação (Fortran e Python) e softwares acadêmicos.

5.1 Cálculo de Reatores

Reatores, são comumente ligados a reações químicas e tal analogia está correta, afinal
é neste onde elas se processam. Um importante parâmetro a ser avaliado na determinação das
propriedades de qualquer reator é o balanço molar, não obstante (FOGLER, 2016) o considera
um dos pilares da engenharia das reações químicas (Figura 1).

Figura 1 – Pilares da Engenharia da Reações Químicas (Balanço Molar). Fonte: Autor.

O balanço molar é a etapa inicial para determinação de um reator, nele se considera


quais os componentes de entrada, saída e geração do sistema a fim de determinar qual o acú-
mulo. Na figura 2 visualiza-se como é realizado o balanço molar e as nomenclaturas usualmente
associadas a cada termo utilizado (FOGLER, 2016).
Os reatores mais conhecidos e utilizados são do tipo: Batelada, reator tanque agitado
contínuo, reator tubular e reator de leito de recheio. Cada um destes possui características e
condições específicas, modificando a equação do balanço molar.
Batelada: No reator batelada não existe entrada nem saída no sistema, pois os reagentes são
colocados em totalidade dentro do reator e retirados após o término da reação de forma que o
Capítulo 5. Fundamentação Teórica 15

Figura 2 – Balanço molar. Fonte: Autor.

termo de acúmulo se igua-la ao termo de geração.


Reator tanque agitado contínuo (CSTR): Para este tipo de reator opera-se em regime esta-
cionário e de mistura perfeita, ou seja, as propriedades no interior do reator não variam com o
tempo e cada ponto deste possui igual característica.
Reator tubular (PFR): Possui funcionamento análogo ao tanque agitado contínuo, entretanto
as propriedades dos reagentes, sendo transformados em produtos ao longo do reator, mudam
conforme o volume deste.
Reator de leito de recheio (PBR): Funciona igualmente ao PFR, entretanto possui seu leito
recheado, de forma que as análises são comumente realizadas em função do catalisador utilizado
e suas propriedades calculadas em funções de unidades mássicas.
Na Tabela 1, apresentam-se as equações algébricas e integrais dos reatores, após a sim-
plificação do balanço molar atraves das condições de cada reator (FOGLER, 2016).
A segunda etapa a ser avaliada para a resolução dos problemas envolvendo casos de
reatores mais simples é a Lei de Velocidade (Figura 3).
O balanço molar de um reator, idependente do seu modelo, e é projetado sempre em
função da taxa de reação, de desaparecimento ou formação de determinado componente (SCH-
MAL, 2017). Esta taxa geralmente é representata como a relação da equação 5.1

Taxa de Formação do Componente j


rj = (5.1)
Unidade de Volume
E nos sistemas heterogêneos (Equação 5.2)

Taxa de Formação do Componente j


r′ j = (5.2)
Unidade de Massa
Para maioria dos casos a análise é feita a partir de um dos reagentes, ou seja, é avaliado
Capítulo 5. Fundamentação Teórica 16

Tabela 1 – Equação dos tipos de reatores analisados.

Balanço Molar na
Reator Comentário Forma Algébrica Forma Integral
Forma Diferencial

dNA R NA0 dNA


Sem variações espaciais dt = rAV t1 = NA1 −rAV

BR

Sem variações espaciais. FA0 −FA


- V= −rA -
Regime estacionário

CSTR

dFA R FA0 dFA


Regime estacionário dV = rA V1 = FA1 −rA
PFR

dFA R FA0 dFA


Regime estacionário dW = rA′ W1 = FA1 −rA
PBR

Figura 3 – Pilares da Engenharia da Reações Químicas (Lei de Velocidade). Fonte: Autor.

a taxa de desaparecimento, adotando-se por conversão o sinal negativo para a velocidade de


Capítulo 5. Fundamentação Teórica 17

reação, conforme (Equação 5.3)

Taxa de Formação do Componente A


−rA = (5.3)
Unidade de Volume
Ordinalmente a determinação da velocidade de reação é obtida através de estudos expe-
rimentais, todavia esta é função da concentração, pressão, temperatura e propriedades estequi-
ométricas entre reagentes e produtos, sendo possível sua determinação analítica (FROMENT,
2017). Para demonstrar a determinação da taxa de velocidade, pode-se utilizar o exemplo gené-
rico da reação da equação 5.4.

aA + bB = cC + dD (5.4)

Desta forma a taxa de velocidade será dada pela equação 5.5.

−rA = kCA aCB b (5.5)

Em que
k = Velocidade específica ou constante cinética;
a, b, c e d representão os coefientes estequiométricos e ordem de reação;
CA e CB = Concentrações dos reagentes A e B, respectivamente.
Dessa maneira, a constante cinética possui unidades de acordo com a ordem de reação.
Para os casos mais simples de determinação do projeto de reator esta constante é fornecida
através de dados experimentais, porém também pode ser determinada através de análise das
propriedades específicas e etapas da reação (SCHMAL, 2017). Ainda utilizando como base a
reação genérica, na tabela 2, apresentam-se exemplos das unidades adotadas para a velocidade
específica de acordo com a ordem de reação (FOGLER, 2016).

Tabela 2 – Unidades adotadas para a velocidade específica.

Ordem da Reação Velocidade da reação Unidades


Ordem zero −rA = kCA 0CB 0 k( mol
Lh )

1a Ordem −rA = kCA k(h− 1)

L
2a Ordem −rA = kCA 2 k( molh )

L 2
3a Ordem −rA = kCA 3 k( mol ) h

A partir do balanço molar e da determinação da taxa de velocidade de reação é possível


projetar o reator e determinar suas características, tais como o volume, conversão alcançada,
Capítulo 5. Fundamentação Teórica 18

tempo de operação, massa de catalisador e consumo do reagente. (LEVENSPIEL, 2000) aborda


alguns parâmetros (com suas unidades usuais) e suas correlações:
Parâmetros -

∙ k = constante cinética (depende da ordem de reação);

∙ k’ = constante cinética para um PBR;


mol
∙ rA = Velocidade de reação ( ) para o componente A;
dm3 s
mol
∙ r’A = Velocidade de reação ( gcats ) para o componente A;
3
∙ v = vazão volumétrica ( dms );
3
∙ v0 = vazão volumétrica inicial ( dms );

∙ V = volume do reator (dm3 );

∙ FA = fluxo molar para o componente A ( mol


s );

∙ FA0 = fluxo molar para o componente A na entrada ( mol


s );

∙ NA = Número de mols do componente A (mols);

∙ NA0 = Número de mols do componente A na entrada (mols);

∙ CA = concentração do componente A ( mol3 );


dm

∙ CA0 = concentração do componente A na entrada ( mol3 );


dm

∙ W = massa de catalizador para um reator PBR (g);

∙ Ci = Concentração de um componente i ( mol3 );


dm

∙ X = Conversão de determinado reagente em produto (admensional).

Correlações -

∙ F A = CA * v ;

∙ F A0 = CA0 * v0 ;
NA
∙ CA = V (nos casos onde não existe variação de volume);

∙ F A = F A0 − (1 − x);

∙ CA = CA0 − (1 − x) (nos casos onde não há variação de volume, temperatura e pressão).


Capítulo 5. Fundamentação Teórica 19

A ultima etapa considerada para desenvolver os cálculos relacionados a propriedades


do reator é a Estequiometria (figura 4). Será esta que irá permear todo os parâmetros a serem
obtidos (FOGLER, 2016). Para uma reação genérica (Equação 5.4) avalia-se as relações entre
o número de mols dos componentes envolvidos:

NA NB NC ND
= = = (5.6)
a b c d

Figura 4 – Pilares da Engenharia da Reações Químicas (Estequiometria). Fonte: Autor.

Onde
NA = Número de mols do componente A;
NB = Número de mols do componente B;
NC = Número de mols do componente C;
ND = Número de mols do componente D.
Utilizando da relação entre os componentes é possível determinar a conversão de cada
componente, baseando-se no número de mols de entrada (Ni0 ) e saída (Ni ), conforme a equação 5.7.

N i0 − N i
Xi = (5.7)
N i0
Comumente se expressa as propriedades reacionais em função da concentração por con-
versão, entretanto como esta depende do volume que é um parâmetro variável, sendo necessário
expressar as correlações de variação para sua estimativa. Quando o volume não se altera no de-
correr do processo reacional podemos ver as relações para determinação da concentração de
cada componente na tabela 3 (FOGLER, 2016).
Capítulo 5. Fundamentação Teórica 20

Tabela 3 – Relação da concentração final para cada espécie sem variação de volume.

Espécie Final da Reação

A CA0 −CA0 X

B CB0 − ab X(CA0 X)

C CC0 + ac X(CA0 X)

D CD0 + da X(CA0 X)

Quando existe variação do volume (Tabela 4) é necessário considerar o fator de ex-


pansão, representado pelo símbolo ξ que é função da estequiometria, variação da pressão e da
temperatura, para determinação da concentração (FOGLER, 2016).

Tabela 4 – Relação da concentração final para cada espécie com variação de volume.

Espécie Final da Reação

(1−X) T0 P
A CA0 (1+ξ X) T P0


CB0
 !
CA0 −( ba )X T
B CA0 0 P
1+ξ X T P0


CC0
 !
CA0 +( ac )X T
C CA0 0 P
1+ξ X T P0


CD0
 !
CA0 +( da )X T
D CA0 0 P
1+ξ X T P0

Em que
CB0 = Concentração inicial da espécie B;
CC0 = Concentração inicial da espécie C;
CD0 = Concentração inicial da espécie D;
P = Pressão final do sistema;
P0 = Pressão inicial do sistema;
T = Temperatura final do sistema;
T0 = Temperatura inicial do sistema.
Capítulo 5. Fundamentação Teórica 21

5.2 Linguagens de Programação

Melhorias voltadas para área computacional, tem beneficiado os mais diversos campos,
possibilitando o desenvolvimento tecnológico e criação de novas técnicas científicas e meto-
dológicas. Entretanto, com as diversas linguagens de programação existentes e suas particu-
laridades, encontra-se dificuldade para a aplicação direta dos profissionais de outra área de
conhecimento, sendo necessário melhor difundilas (FOX, 1990).
Para entender a evolução desta área dinâmica é necessário um breve histórico dos acon-
tecimentos importantes. No período entre 1936 e 1945 o cientista Konrad Zuze, cria a lingua-
gem Plankalkul, todavia a publicação deste importante marco, veio a ocorrer apenas em 1972,
devido ao contexto histórico da época. Após a Plankalkul, outras séries de linguagens foram
criadas, com estrutura de pseudo códigos, códigos curtos e rápidos (SEBESTA, 2006).
A partir da década de 50, ainda que de maneira limitada, os computadores e as lingua-
gens de programação ganharam espaço, passando a serem mais utilizados. Neste período foi
crescente a utilização de liguagens como a C e Fotran denominadas linguagens procedurais e
ainda utilizadas atualmente (GUDWIN, 1997).
Destaca-se o avanço na área da computação, após a criação do IBM 704, possibilitando
a introdução de uma linguagem de alto nível a partir do desenvolvimento do Fortran (formula
translation). Trabalhos anteriores, já haviam integrado a possibilidade de uso de funções algé-
bricas, entretanto após a inserção do Fortran foi possível viabilizar a utilização da programação,
facilitando o trabalho de pesquisadores das mais diversas áreas como por exemplo da engenha-
ria (SEBESTA, 2006).
Após diversas revisões ao longo das décadas de 60 e 70, a estrutura da linguagem For-
tran, permaneceu bem semelhante a suas primeiras versões, fazendo com que programadores
migrassem para linguagens que possuíssem versões mais modernas. Foi então que em 1990 o
Fortran recebe uma estrutura modernizada que possibilitou novamente a exploração mais afinca
desta linguagem (FERNANDES, 2003).
(FERNANDES, 2003), ressalta ainda que a programação em Fortran é simples e que a
dificuldade para um novo usuário, não é o código em si, mas na estruturação do pensamento.
Isso demonstra que a utilização desta linguagem pode ser facilitada, quando o programador
utiliza do pensamento lógico e estrutura as ideias antes de formular seu código. Porém, por ser
considerada antiga e de difícil acesso a materiais atualizados, a utilização da linguagem Fortran
é pouco difundida fora da academia (SILVA, 2008).
Linguagens modernas que facilitam a estrutura de programação têm ganhado espaço
entre os usuários e programadores, pois permitem uma integração maior de profissionais a área
de computação. A exemplo disso pode-se citar a linguagem Python, umas das mais utilizadas
na atualidade.
Capítulo 5. Fundamentação Teórica 22

Criada pelo programador Guido Van Rossumem em 1991 e diferente do Fortran, a lin-
guagem Python é interpretada, ou seja, esta não é diretamente executada pelo computador, como
um código de máquina, ao invés disso é feita a tradução da linguagem utilizada, para a lingua-
gem computacional (ZELLE, 2002). Tal estrutura facilita o uso, pois utiliza de uma linguagem
mais próxima da realidade do usuário e facilita o pensamento lógico. (ZELLE, 2002), explica
de maneira interessante a utilização das linguagens interpretadas:

“Os processos computacionais dentro do computador são como espíritos má-


gicos que podemos aproveitar para os nossos trabalhos. Infelizmente, esses
espíritos só entendem uma linguagem muito complicada que não conhecemos.
O que nós precisamos é um de gênio amigável que pode direcionar os es-
píritos para cumprir nossos desejos. Nosso gênio é um intérprete de Python.
Nós podemos dar instruções ao intérprete de Python e este direciona os es-
píritos subjacentes para realizar nossas demandas. Nos comunicamos com o
gênio através de uma linguagem especial de feitiços e encantamentos (ou seja,
Python). ”

As linguagens interpretadas possibilitaram que uma nova parcela de pessoas tivesse


acesso fácil as estruturas de programação. Esta é a realidade de muitas tecnologias, que possuem
determinada complexidade e desta forma são criadas ferramentas que facilitam seu acesso.

5.2.1 Fortran x Python

Existem diferenças entre as estruturas de cada linguagem, isso ocorre principalmente


pela diferença entre código interpretado e compilado. No compilador gera-se um código de má-
quina a partir do código fonte, carregando todas as instruções do programa. Para o interpretador
ocorre primeiro uma tradução das instruções para a linguagem da máquina, sendo necessário
um tempo de execução. Na figura 5 demonstra-se o funcionamento dos códigos e a tabela 5
compara suas principais vantagens e desvantagens (MEDEIROS, 2015).
Pode-se definir o Fortran como mais explorado, e apesar de pouco uso se comparada
com as existentes, ainda é considerada uma linguagem prática e de grande importância, pois
muitas das linguagens mais modernas, utilizam sua base a partir desta. A linguagem Python em
grande ascendência, estreitou o contato de outras áreas com a computação, todavia essa também
requer certo conhecimento técnico (RITA, 2009).
Capítulo 5. Fundamentação Teórica 23

Figura 5 – Diferenças entre a linguagem interpretada e compilada. Fonte: Autor, 2012.

Tabela 5 – Vantagens e Desvantagens entre a linguagem interpretada e compilada.

Tradutor Vantagens Desvantagens

Execução mais veloz Várias etapas de tradução

Compilador Programas mais complexos, com Maior consumo de memoria para


mais funcionalidades. execução, uma vez que o programa
final é maior.

Permite otimização do código- Processo de depuração de cada li-


fonte. nha é mais demorado.

Depuração mais simples. Execução mais lenta.

Interpretador Menor consumo de memória. Programa mais simples

Resultado imediato da execução É necessário que a maquina possua


das instruções por ser passo passo. o programa fonte.
24

6 Metodologia

Para a elaboração do software foi necessário identificar os métodos existentes para re-
solver problemas envolvendo cálculo de reatores, quais os parâmetros a serem avaliados, quais
as relações entre as grandezas envolvidas e de que forma é possível traduzir essas informações
para as linguagens de programação utilizadas. Para tal, se dividiu o processo em três importan-
tes etapas: estudo direcionado sobre cálculo de reatores, estudo direcionado sobre as linguagens
de programação e construção do código do programa.

6.1 Estudo Direcionado Sobre Cálculo de Reatores

A metodologia utilizada como base na análise do projeto de reatores apresenta-se com-


pilada no fluxograma proposto na figura 6 (FOGLER, 2016). Assim como o método do autor, o
software segue um fluxograma específico para análise dos dados e por fim estima o parâmetro
requerido do reator estudado.
A interação entre o programa e o usuário acontece de maneira fácil, através de pergun-
tas objetivas e manterá a mesma estrutura proposta por (FOGLER, 2016). Assim, possibilita ao
usuário a assimilação do método utilizado pelo programa, com aplicação de exercícios teóricos.
Outra informação importante retirada da literatura são os parâmetros envolvidos na determina-
ção das propriedades de um reator, tais como seu volume, o tipo de reação que irá se processar,
a vazão volumétrica de entrada, o estado físico do material processado, a velocidade de rea-
ção e a estequiometria. Muitos desses parâmetros citados possuem relações entre si, de forma
que em caso de não conhecimento de certa propriedade, esta possa ser estimada com bases nas
demais conhecidas. Inicialmente considerou-se apenas os casos mais simples para estruturação
do programa computacional. Após análise e entendimento dos métodos para estimar as propri-
edades dos reatores estudados, surgiu um novo desafio de introduzir toda essa informação em
uma linguagem de programação, de forma que os dados fornecidos pelo estudante serem reco-
nhecidos, calculados e resultarem na informação correta. Diversas considerações precisam ser
contabilizadas e processadas pelo software de maneira correta, afim de que este esteja coerente
com a literatura. Dessa forma, deu-se prosseguimento do estudo no âmbito da linguagem de
programação.

6.2 Estudo Direcionado Sobre as Linguagens de Programação

Para desenvolvimento do software, utilizou-se duas linguagens de programação, Fortran


e Python. Para cada uma destas foi escrita a mesma estrutura de programa, onde as perguntas fei-
tas ao usuário e o fluxograma de obtenção dos dados são os mesmos. Em ambas as linguagens,
a principal estrutura empregada consiste no recebimento de variáveis seguido de comparação
Capítulo 6. Metodologia 25

Figura 6 – Fluxograma para determinação de propriedades do reator estudado. Fonte: Adaptado


de (FOGLER, 2016).

de valores. Dessa maneira, o programa recebe as informações dadas pelo usuário e as compara
para a próxima tomada de decisão. Todavia, cada linguagem possui uma estrutura diferente da
outra, de maneira que se mostrou necessário um estudo detalhado de cada tipo de linguagem
para elaboração do software. Nos tópicos a seguir mostra-se um detalhamento dos comandos
que foram usados para cada linguagem:

6.2.1 Fortran

∙ real:: - Declara as variáveis inclusas no comando como números reais.

∙ implicit none: - Identifica as variáveis utilizadas na estrutura do programa como sendo


Capítulo 6. Metodologia 26

números reais, inteiros ou caracteres.

∙ print*,’ - Exibe uma mensagem ou variável ao usuário.

∙ read(*,*) – Recebe um valor ou caractere informado pelo usuário associado a uma variá-
vel.

∙ if (.EQ.) then – Compara determinada variável com outra variável, valor ou caractere, de
maneira que se a avaliação for verdadeira executa um tipo de ação, caso contrário executa
outra.

∙ end if – Finaliza a ação de comparação aberta.

∙ open (*,file = ’nome do arquivo.formato do arquivo’) – Cria um documento de texto


em diversos formatos.

∙ write(*,*) – Escreve dentro do arquivo aberto com a função open.

∙ close(*) – Encerra a escrita dentro do arquivo aberto pela função open.

Um fator importante a respeito desta linguagem de programação é a necessidade de se


declarar todas as variáveis utilizadas e o uso correto da estrutura de comparação para que o
código funcione corretamente.

6.2.2 Python

∙ if (==) - Compara determinada variável com outra variável, valor ou caractere, de maneira
que se a avaliação for verdadeira executa um tipo de ação, caso contrário executa outra.

∙ print() - Exibe uma mensagem ou variável ao usuário.

∙ input() - Exibe uma mensagem ao usuário e recebe o valor de uma variável.

∙ from * import * – Importa um módulo específico de uma biblioteca ou script ao qual


este pertença.

∙ import * – Importa uma biblioteca ou um módulo.

∙ While – Comando utilizado para criar laços de repetição, enquanto a condição de uma
variável não se altera.

Para a linguagem Python, não há necessidade de comandos para encerrar os comandos


de comparação, entretanto deve ser respeitada a indentação.
Após compreender a utilização dos comandos das duas linguagens utilizadas e suas
particularidades, partiu-se para a etapa de construção do código do programa.
Capítulo 6. Metodologia 27

6.3 Construção do Código do Programa

Com o conhecimento obtido nos estudos sobre cálculo de reatores e as linguagens de


programação, possibilitou-se enfim estruturar o código do programa. A primeira versão desta
ferramenta, considerou apenas os casos mais simples, de maneira que a determinação das pro-
priedades dos reatores serão limitadas a processos onde as reações são diretas e elementares,
visando simplificar ó codigo estruturado e diminuir o seu tamanho. Para tal empregou-se duas
ferramentas, pertinentes as duas linguagens abordadas: um editor e um compilador. O editor é
a ferramenta utilizada para escrita do programa e o compilador é empregado na execução do
código, transformando este em um programa a ser utilizado pelo usuário. Para a linguagem
Fortran fez-se o uso do programa Plato para edição e g95 para compilação, já para a Python,
o Python 3.6, que exerce ambas as funções, pois já possui um editor próprio chamado IDLE.
O programa desenvolvido seguindo o fluxograma proposto por Folgler (2012), indicado no es-
tudo sobre cálculo de reatores, segue um passo a passo específico. Antes de solicitar os dados
numéricos ao usuário, é necessário entender quais as condições para o caso analisado, de forma
a reduzir as possibilidades existentes e calcular a informação relevante. Estas condições são
constatadas a partir de perguntas simples feitas ao usuário e solicitação de respostas objetivas.
As etapas mostradas na figura 7, requerem do usuário informações que são inerentes
a qualquer tipo de propriedade que se queira calcular. A partir das escolhas definidas, se dá
sequência a um outro conjunto de perguntas mais específicas, para determinar propriedade re-
querida. Nas figuras 8 e 9 indicam-se o fluxograma do código para ambas as linguagens.
Utilizando os comandos referentes a cada linguagem, construiu-se o programa que cal-
cula as propriedades de um reator (Batelada, CSTR e PFR) a partir de uma triagem, para iden-
tificar qual é a de interesse e os dados fornecidos pelo usuário. Utilizando o recurso de edição
de arquivo, após a determinação das propriedades do reator, é criado um arquivo de texto para o
programa estruturado em Fortran, onde se relaciona a propriedade requerida com a conversão.
Para o programa feito com linguagem Python, utilizou-se de uma biblioteca especifica de plo-
tagem de dados, para gerar um gráfico para comparação da propriedade escolhida em relação a
conversão alcançada no reator.
Quando selecionado o reator tanque agitado contínuo ou reator tubular as propriedades
que podem ser estimadas são: o volume, conversão, concentração do componente, vazão molar
do componente A, concentração do componente B (quando existente), vazão molar do com-
ponente B, concentração do componente C (quando existente), vazão molar do componente C,
vazão volumétrica, constante de velocidade. Para o Reator Batelada as propriedades calculadas
são: volume, conversão, concentração do componente, constante de velocidade e o tempo de
operação. Os códigos e suas estruturas, podem ser visualizados nos anexos 1 e 2.
Capítulo 6. Metodologia 28

Figura 7 – Sequência lógica seguida pelo programa em qualquer uma das hipóteses. Fonte:
Autor.

Figura 8 – Fluxograma da estrutura do programa para determinação das propriedades dos rea-
tores escrito em Fortran. Fonte: Autor.
Capítulo 6. Metodologia 29

Figura 9 – Fluxograma da estrutura do programa para determinação das propriedades dos rea-
tores escrito em Python. Fonte: Autor.
30

7 Resultados

Para ambas as linguagens, foi possível estruturar um programa que determinava as pro-
priedades dos reatores batelada, CSTR e PFR para casos amis simples, para as reações ele-
mentares e reversíveis. As informações fornecidas em tela pelo programa foram corretas e a
inserção de dados ocorre de maneira simples. Testou-se os programas com exercícios genéricos
para avaliar a exatidão dos cálculos desenvolvidos e estes mostraram-se coerentes tanto para o
programa em Python quanto para o desenvolvido em Fortran.
Quando digitadas corretamente as informações solicitadas, o programa apresenta bom
funcionamento e retorna ao usuário a resposta ao parâmetro solicitado, caso contrário, este
solicita seu encerramento. Durante a inserção de dados caso o usuário não digite um dado ne-
cessário para a estimativa da propriedade escolhida, ou digite de maneira incorreta o programa
permite a reinserção de um conjunto de dados. É interessante destacar que as relações existentes
entre as propriedades estão inseridas no código, desta forma mesmo que o usuário não possua
ou não coloque um determinado dado necessário para calcular o parâmetro solicitado, é possí-
vel sua determinação a partir de outras propriedades inseridas. Para demonstrar a utilização do
programa, elaborou-se exercícios para os três tipos de reatores trabalhados e também foi feita a
comparação entre a resolução manual e pelo software.

7.1 Exemplo de Exercício Para o Programa em Base Fortran

Para constatar a coesão dos valores calculados pelo programa com base em Fortran,
utilizou-se do exemplo de exercício a seguir:
“ Determine o tempo de processo necessário para se reduzir o número de mols de 10
para 1, de uma espécie em um reator batelada. Onde a reação A → B é irreversível e a constante
1
de velocidade é de 0.023 ( min )”

7.1.1 Resolução Manual

O primeiro passo a ser tomado é identificar o balanço molar para o reator Batelada. No
exercício foi dado o número de mols de entrada e sáida, desta forma podemos calcular o tempo
de operação pela relação disponível na tabela 1.

dNA
= rAV (7.1)
dt
A velocidade de reação pode é descrita pela relação da equação 7.2.

−rA = kCA (7.2)


Capítulo 7. Resultados 31

Lembrando das correlações citadas na fudamentação teórica temos que:

NA
CA = (7.3)
V
Substituindo a equação 7.3 na equação 7.2 obtem-se:

kNA
−rA = (7.4)
V
Substituindo a equação 7.4 no balanço molar:

dNA kNA
= V (7.5)
dt V
Quando resolvido chegamos a seguinte equação:

 
NA0
ln NA1
t= (7.6)
k
Substituindo os valores fornecidos pelo problema na equação 7.6, chegamos na equação
final:

10mols

ln 1mols
t= (min) = 100, 11min (7.7)
0.023
O tempo necessário para reduzir o número de mols de 10 para 1 neste reator batelada é
de aproximadamente 100 min.

7.1.2 Resolução Pelo Software

Ao iniciar o programa, a primeira informação solicitada é a escolha do reator, conforme


a figura 10.

Figura 10 – Solicitação do tipo de reator pelo programa em base Fortran. Fonte: Autor.

Como o exercício é referente a um reator batelada, escolhemos a opção 3. A seguir o


usuário pode escolher qual propriedade deseja-se calcular (Figura 11). A propriedade requerida
pelo exercício é o tempo de operação, desta forma se escolhe a opção 7.
Capítulo 7. Resultados 32

Figura 11 – Solicitação da propriedade a ser estimada pelo programa em base Fortran. Fonte:
Autor.

Figura 12 – Digitação dos dados necessários para calcular a propriedade solicitada no programa
em base Fortran. Fonte: Autor.

Agora é necessário informar os dados do exercicío para que o programa possa estimar
a propriedade requerida (Figura 12).
Após a inserção de dados, o programa solicitará qual o modelo de lei de velocidade,
para este exemplo a reação é de primeira ordem (Figura 13).

Figura 13 – Digitação do modelo de lei de velocidade no programa em base Fortran. Fonte:


Autor.

Ao final o programa informa o valor da variável requisitada pelo usuário conforme


mostra a figura 14.

Figura 14 – Programa em base fortran, informa ao usuário o valor da propriedade solicitada.


Fonte: Autor.

O valor obtido pelo programa está de acordo com o resultado obtido efetuando o cálculo
manualmente que é de aproximadamente 100 min de operação.

7.2 Exemplo de Exercício Para o Programa em Base Python

No programa feito em Python, utilizou-se para exemplo um exercício de estimativa de


volume para um reator CSTR e outro PFR, onde seu enunciado diz:
“ Para uma determinada reação, onde não ocorre variação de volume, a vazão volumé-
trica é de 10 dm3 por min e a concentração inicial do componente A é de 2,0 mols/dm3 . A
Capítulo 7. Resultados 33

reação direta elementar é A → B. Estime o volume para um reator CSTR e depois para um PFR,
1
para atingir uma conversão de 80 %. Dados: k = 0.2( min ).”

7.2.1 Resolução Manual

O primeiro passo a ser tomado é identificar os balanços molares para o reator CSTR e
PFR. No exercício foi dada a conversão, desta forma podemos calcular o volume dos reatores
relações disponíveis na figura 6.
PRF:

dX −rA
= (7.8)
dV FA0
CSTR:

FA0 X
V= (7.9)
−rA
A velocidade de reação pode é descrita pela relação da equação 7.2.
Lembrando das correlações citadas na fudamentação teórica, quando não ocorre varia-
ção de volume dos componentes dentro do reator, temos que:

CA = CA0 (1 − X) (7.10)

Substituindo a equação 7.10 na equação 7.2 obtem-se:

−rA = kCA0 (1 − X) (7.11)

Primeiramente determina-se-á o volume para o reator CSTR


Substituindo a equação 7.11 no balanço molar do CSTR:

FA0 X
V= (7.12)
kCA0 (1 − X)
Temos a seguinte correlação para o fluxo molar:

FA0 = CA0 v0 (7.13)

Substituindo a equação 7.13 na equação 7.12 obtem-se a seguinte expessão para o ba-
lanço molar:

CA0 v0 X v0 X
V= = (7.14)
kCA0 (1 − X) k(1 − X)
Capítulo 7. Resultados 34

Substituindo os valores fornecidos pelo problema na equação 7.14, chegamos na equa-


ção final:

 
dm3
10 * 0.8 min
V= 0.2
= 200dm3 (7.15)
min (1 − 0.8)

O volume do CSTR para atingir a 80 % de conversão é 200 dm3 .


Agora determinado o volume para a mesma conversão em um PFR.
Substituindo a equação 7.11 no balanço molar do PFR:

dX kCA0 (1 − X)
= (7.16)
dV FA0
Substituindo a equação 7.13 que correlaciona o fluxo molar com a concentração, na
equação 7.16 obtem-se a seguinte expessão para o balanço molar:

dX kCA0 (1 − X)
= (7.17)
dV CA0 v0
Resolvendo a equação 7.17:

v0
V= ln(1 − X) (7.18)
k
Substituindo os valores fornecidos pelo problema na equação 7.18, chegamos na equa-
ção final:

 
dm3
10 min
V= 0.2
ln(1 − 0.8) = 80dm3 (7.19)
min

O volume do PFR para atingir essa conversão é de 80 dm3

7.2.2 Resolução Pelo Software

O programa inicia com uma interface gráfica de apresentação, conforme demonstrado


na figura 15
Igualmente ao programa elaborado em linguagem Fortran, a requisição ao usuário é a
escolha do reator (Figura 16).
Assim como no método manual, começaremos pelo reator CSTR. Logo após selecio-
narmos este reator é solicitado os valores dos coeficientes estequiométricos dos reagentes (a,
b e c). Como a reação possui apenas 1 reagente, apenas o coeficiente a possui entrada (Figura
17).
Capítulo 7. Resultados 35

Figura 15 – Interface de apresentação do programa em Python. Fonte: Autor.

Figura 16 – Solicitação do tipo de reator no programa em Python. Fonte: Autor.

Figura 17 – Solicitação dos coeficientes estequiométricos dos reagentes no programa em


Python. Fonte: Autor.

Logo em seguida é solicitado o modelo de lei de velocidade, para esta reação seleciona-
mos o de primeira ordem, conforme demonstrado na figura 18.

Figura 18 – Solicitação do modelo de lei de velocidade no programa em Python. Fonte: Autor.

Não ocorre variação do volume para esta reação, logo podemos considerar que ocorre
no estado líquido (Figura 19).
Solicita-se a variável volume, conforme a figura 20 para determinar a propriedade re-
Capítulo 7. Resultados 36

Figura 19 – Solicitação do estado em que a reação se processa. Fonte: Autor.

querida no exercício. E logo em sequência se adiciona os dados necessários para se efetuar o


cálculo. Como vimos no cálculo manual do exercício, é necessário saber o valor da conversão
para se estimar o volume do reator. Caso uma variável necessária não seja colocada o programa
dá a opção de colocar os dados do grupo (onde aquela variável é solicitada) novamente. Esta
etapa pode ser verificada na figura 21.

Figura 20 – Escolha da propriedade desejada. Fonte: Autor.

Figura 21 – Inserção dos dados necessários para calcular a propriedade solicitada pelo usuário.
Fonte: Autor.

Com a inserção de todos os dados necessário para estimar o parâmetro solicitado o


programa informa o usuário seu valor (Figura 22). Por fim o usuário tem a opção de avaliar
graficamente a variação do volume com a conversão do reator (Figura 23)
O valor de 200 dm3 encontrado pelo programa é igual ao encontrado no método manual.
Na figura 24 visualiza-se um exemplo de um gráfico gerado pelo programa relacionando o
volume do reator com base na conversão.
Capítulo 7. Resultados 37

Figura 22 – Programa em Python informa ao usuário o valor do parâmetro requerido. Fonte:


Autor.

Figura 23 – opção de avaliaçaõ gráfica do volume pela conversão pelo programa em Python.
Fonte: Autor.

Figura 24 – Gráfico plotado pelo programa em base Python, relacionando o volume do reator
CSTR com a conversão. Fonte: Autor.

Para o PRF o procedimento é o mesmo que para o CSTR, apenas o primeiro passo se
difere, pela escolha de outro modelo de reator. A figura 25 mostra o procedimento completo e
a figura 26 o gráfico que avalia o comportamento do volume de um PFR conforme a conversão.
Capítulo 7. Resultados 38

Figura 25 – Procedimento de cálculo para o PFR no programa em Python. Fonte: Autor.

7.3 Regras de utilização

Durante os testes com o programa, percebeu-se a necessidade de informar ao usuário


que a notação decimal está utilizando o símbolo de “ponto”, ao invés de “vírgula”, pois tanto as
linguagens como os programas utilizados em conjunto utilizam o sistema americano de medida,
também existe a necessidade de colocar os dados em notação decimal, mesmo aqueles que são
dados pelo exercício como números naturais, caso contrário em alguns cálculos, em ambas
as linguagens, ocorrem erros, pois o resultado é de um valor em números inteiros e que não
necessariamente está de acordo com o valor correto. Outro fator importante está relacionado as
unidades dos dados inseridos, pois não é feito conversão de sistema de unidades, desta forma
para que o programa estime de forma certa é necessário que todas as unidades sejam baseadas
em mols, decímetros e minutos. A inserção incorreta dos dados nesses aspectos pode causar
erros na execução do programa.
Capítulo 7. Resultados 39

Figura 26 – Gráfico plotado pelo programa em base Python, relacionando o volume do reator
PFR com a conversão. Fonte: Autor.
40

8 Considerações Finais

O desenvolvimento do presente estudo possibilitou uma análise importante sobre o de-


senvolvimento de novas tecnologias voltadas para o meio acadêmico. A utilização de softwares
como ferramentas no auxílio de simulação de processos, desenvolvimento de cálculos e banco
de dados de propriedades de materiais já é uma realidade dentro da engenharia química, tanto
na indústria como na esfera acadêmica. O custo de aquisição e/ou a dificuldade de aprendizado
destas ferramentas costumam inviabilizar o seu uso pelo estudante de graduação, inclusive os
que oferecem licenças promocionais ou sejam livres.
Desenvolver um software acadêmico, com linguagem simples para os usuários que não
tem total domínio na área, revela que novos recursos podem ser criados, visando facilitar o
aprendizado do conteúdo do curso de engenharia química, diminuindo a dificuldade no apren-
dizado de uma matéria específica por dependência de aprendizado de um programa computa-
cional complexo. Em contrapartida, a utilização da tecnologia de linguagem simples, ou seja,
onde o código de programa pode ser acessado e editado, permite aos usuários que possuem in-
teresse na área de programação entender melhor suas funcionalidades e criar novas ferramentas
para demais conteúdos programáticos do curso.
No que se refere ao estudo de cálculo de reatores, não se pretende substituir softwares
já consolidados para determinação de propriedades, mas oferecer uma alternativa de ferramenta
com uma linguagem mais acessível para o aluno. Outro fator importante a ser destacado, é a
base acadêmica do software, sendo este não voltado para utilização industrial, em sua primeira
versão, pois é feito para solucionar casos mais simples usados dentro da academia para o apren-
dizado dos graduandos. Todavia, vale ressaltar que a tecnologia livre do software permite que
propriedades adicionais sejam colocadas neste, incluindo dados experimentais, para torna-lo
mais eficaz e abrangente.
Tendo em vista a estrutura de código criada, o programa apresenta algumas regras para
utilização, tais como unidades fixas e notação decimal para os dados inseridos. Entretanto a
otimização do tempo do usuário, pela possibilidade do programa da resolução de exercícios
complexos, apenas com a informação dos dados informados pelo usuário, supera as eventuais
necessidades para utilização do programa. É importante relembrar que recursos como conversão
de unidades podem ser adicionados ao programa, por qualquer usuário, dado seu código aberto.
Destaca-se que o trabalho conseguiu atender aos seus objetivos gerais e específicos,
desenvolvendo um software com as linguagens de programação propostas e calculando propri-
edades de casos simples de reatores químicos, utilizando de linguagem de fácil compreensão
para o usuário e possibilitando a acessibilidade gratuita para o estudante. Este projeto também
atingiu um objetivo complementar, mas de fato muito interessante, o de integrar áreas do co-
Capítulo 8. Considerações Finais 41

nhecimento importantes como o da engenharia química e informática, demonstrando que estas


se complementam e funcionam muito bem no desenvolvimento de novas tecnologias.
42

Referências

BENFATTI, E. Utilização da tecnologia em Educação a Distância na formação de engenheiros


de produção da Universidade Federal de Itajubá: uma avaliação educacional. São Carlos, SP,
2010. Citado na página 10.
CHACÓN, F. Un nuevo paradigma para la educación corporativa a distancia. en Revista
Asuntos. Caracas, Venezuela, 2010. Citado na página 10.
CRQ. Biblioteca de softwares para Engenharia Química. [S.l.], 2018. Citado na página 10.
FERNANDES, F. A. N. Programação fortran para engenharia. [S.l.], 2003. Citado na página
21.
FOGLER, H. Elements of Chemical Reaction Engineering. [S.l.]: Prentice Hall, 2016. (Prentice
Hall International Series in the Physical and Chemi). Citado 6 vezes nas páginas 14, 15, 17,
19, 20 e 24.
FOX, G. Fortran D Language Specification. Center for Research on Parallel Computation.
Houston, 1990. Citado na página 21.
FROMENT, G. Chemical Reactor Analysis and Design. 3rd Edition. [S.l.], 2017. Citado na
página 17.
GUDWIN, R. R. Linguagens de Programação. Departamento de Engenharia de Computação
e Automação Industrial. Campinas, 1997. Citado na página 21.
KENSKI, V. M. Comunidades de aprendizagem, en direçao a uma nova sociabilidade na
educaçao. [S.l.], 2001. Citado na página 10.
LEVENSPIEL, O. Engenharia das Reações Químicas. 3a ed. São Paulo, SP, 2000. Citado na
página 18.
LONGO, W. P. Ciência e tecnologia: evolução, inter-relação e perspectivas. [S.l.], 2004.
Citado na página 10.
MARCHETTI, C. Society as a learning system: discovery, invention and innovation cycles
revisited. [S.l.], 1980. Citado na página 10.
MEDEIROS, H. Linguagens de programação. [S.l.], 2015. Citado na página 22.
MELO, E. Softwares de simulação no Ensino de Química uma representação social na prática
docente. Campinas, SP, 2005. Citado na página 10.
MOLINA, C. Avaliação do blended learning na disciplina de pesquisa operacional em cursos
de pós-graduação em engenharia de produção. Itajubá, 2007. Citado na página 10.
RITA, S. Treinamento em Lógica de Programação.1a ed. [S.l.], 2009. Citado na página 22.
SCHMAL, M. Cinética e Reatores. 3a ed. [S.l.], 2017. Citado 2 vezes nas páginas 15 e 17.
SEBESTA, R. W. Conceitos de linguagem de programação.5a edição. São Paulo, 2006.
Citado na página 21.
Referências 43

SILVA, W. Um tutorial de programação em visual Fortran. [S.l.], 2008. Citado na página 21.

ZELLE, J. Python Programming: An Introduction to Computer Science. Version 1. [S.l.], 2002.


Citado na página 22.
Anexos
Anexo 1 - Código em Python
easy
# -*- coding: cp1252 -*-
import ANIMACAO

inicio = 1
while (inicio == 1):
Reator = input("Escolha seu reator: PFR (1),CSTR(2) ou BATELADA (3): ")
if (Reator == 1):
import PFR
if (Reator == 2):
import CSTR
if (Reator == 3):
import BATELADA
inicio = input("Deseja determinar outra propriedade? Sim(1) ou Não(2) ")
if (inicio == 2):
exit(0)

Página 1
ANIMACAO
# -*- coding: cp1252 -*-
# encoding: utf-8
# encoding: iso-8859-1
# encoding: win-1252
# ANIMACAO.py
"""Módulo de formatação de strings.
"""

def frmt_bytes(bytes):
"""Formata um inteiro enviado em "bytes" para um
forma mais bonitinha, GB, MB, enfim. [1]
"""
if bytes < 1024:
return '%dB' % (bytes)
elif bytes < (1024 * 1024):
return '%.1fKB' % (bytes / 1024.0)
elif bytes < (1024 * 1024 * 1024):
return '%.1fMB' % (bytes / 1024.0 / 1024.0)
else:
return '%.1fGB' % (bytes / 1024.0 / 1024.0 / 1024.0)

def strip_html(text):
"""Remove todo o html de uma determinada string. [2]
"""
import re
s = re.sub('<[^>]*>', '', text)
return s
from graphics import *
def main():
win = GraphWin("My Window", 700,500)
#win.setBackground(color_rgb(0, 0, 0))

img = Image(Point(370, 270), "imagem3.gif")


img2 = Image(Point(370, 270), "imagem4.gif")
img3 = Image(Point(370, 270), "imagem2.gif")
img4 = Image(Point(370, 270), "imagem35.gif")

img3.draw(win)
time.sleep(1.0)
img.draw(win)
time.sleep(1.0)
img4.draw(win)
time.sleep(0.5)
img2.draw(win)

time.sleep(3.0)
win.close()
main()

Página 1
PFR
# -*- coding: cp1252 -*-
# encoding: utf-8
# encoding: iso-8859-1
# encoding: win-1252
# PFR.py
"""Módulo de formatação de strings.
"""

def frmt_bytes(bytes):
"""Formata um inteiro enviado em "bytes" para um
forma mais bonitinha, GB, MB, enfim. [1]
"""
if bytes < 1024:
return '%dB' % (bytes)
elif bytes < (1024 * 1024):
return '%.1fKB' % (bytes / 1024.0)
elif bytes < (1024 * 1024 * 1024):
return '%.1fMB' % (bytes / 1024.0 / 1024.0)
else:
return '%.1fGB' % (bytes / 1024.0 / 1024.0 / 1024.0)

def strip_html(text):
"""Remove todo o html de uma determinada string. [2]
"""
import re
s = re.sub('<[^>]*>', '', text)
return s

import numpy as np
import matplotlib.pyplot as plt
from sympy import *
init_printing()
X, y = symbols('x y') #define x e y como variáveis simbólicas.

no = 123456
print("Digite os coeficientes estequiométricos dos reagentes")
a = input("a ")
b = input("b ")
c = input("c ")
modelo = input("Escolha o modelo de lei de velocidade: Ordem zero (0), Primeira
ordem(1), Segunda ordem(2) ou Terceira ordem(3) ")
estado = input ("Em qual estado a reação se processa?: Líquido(1) ou Gasoso(2)
")
if(b!=0 and c!=0):
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Volume(1)\n"
"Conversão(2)\n"
"Concentração do Componente A(3)\n"
"Vazão-molar do Componente A(4) \n"
"Concentração do Componente B(5) \n"
"Vazão-molar do Componente B(6) \n"
Página 1
PFR
"Concentração do Componente C(7) \n"
"Vazão-molar do Componente C(8) \n"
"Vazão Volumétrica(9) \n"
"Constante de Velocidade(10) \n"
"Velocidade de Reação (11) \n"
""
)
if(b ==0 and c!=0):
CBo = 0
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Volume(1)\n"
"Conversão(2)\n"
"Concentração do Componente A(3)\n"
"Vazão-molar do Componente A(4) \n"
"Concentração do Componente C(7) \n"
"Vazão-molar do Componente C(8) \n"
"Vazão Volumétrica(9) \n"
"Constante de Velocidade(10) \n"
"Velocidade de Reação (11) \n"
""
)
if(b!=0 and c==0):
CCo = 0
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Volume(1)\n"
"Conversão(2)\n"
"Concentração do Componente A(3)\n"
"Vazão-molar do Componente A(4) \n"
"Concentração do Componente B(5) \n"
"Vazão-molar do Componente B(6) \n"
"Vazão Volumétrica(9) \n"
"Constante de Velocidade(10) \n"
"Velocidade de Reação (11) \n"
""
)
if(b==0 and c==0):
CBo = 0
CCo = 0
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Volume(1)\n"
"Conversão(2)\n"
"Concentração do Componente A(3)\n"
"Vazão-molar do Componente A(4) \n"
"Vazão Volumétrica(9) \n"
"Constante de Velocidade(10) \n"
"Velocidade de Reação (11) \n"
""
)
if(variavel == 1):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
Página 2
PFR
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
CA = input("Digite o valor da Concentração final do Componente
A(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do Componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if(((FAo == no and conco == no and x == no) or ((vo == no) and (conco ==
no and FAo ==no))) or (CA == no and x == no)):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
if(vo == no or FAo == no):
if(CA!=no):
conco = CA/(1-x)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(x == no):
if(CA != no):
if(conco != no):
x = 1-(CA/conco)
else:
if(vo == no or FAo == no):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
x = 1-(CA/conco)
Página 3
PFR
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
repet1 = 1
while(repet1 == 1):
if (modelo == 0):
k = input("Constante de velocidade(mol/dm3/min) ")
if (modelo == 1):
k = input("Constante de velocidade(1/min) ")
if (modelo == 2):
k = input("Constante de velocidade(dm3/mol/min) ")
if (modelo == 3):
k = input("Constante de velocidade(dm3/mol)2 * (1/min) ")
rA = input("Velocidade de Reação (mol/dm3/min) ")
if (k == no and rA == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0
if(estado == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
volume =
integrate((((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**(b
))*((conco*((CCo/conco)-((c/a)*X)))**(c))))),(X,0,x))
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
Página 4
PFR
CC = 0
volume =
integrate((((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**(b
))*((conco*((CCo/conco)-((c/a)*X)))**(c))))),(X,0,x))
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
if(b!=0):
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CB = 0
if(c!=0):
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CC = 0
volume =
integrate(((FAo*X)/(k*((((conco*(1-x)*P*To)/((1+E*X)*Po*T)))**(a))*(((conco*((CB
o/conco)-((b/a)*X))*P*To)/((1+E*X)*(Po*T)))**(b))*(((conco*((CCo/conco)-((c/a)*X
))*P*To)/((1+E*X)*(Po*T)))**(c)))))

print ('O volume do reator é'),volume,("dm3")


print("")
graf = input("Deseja avaliar o Volume conforme a Conversão Sim(1) ou Não(2) ")
if(graf == 1):
conv = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]
if (estado == 1):
vol =
[(integrate((((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**
(b))*((conco*((CCo/conco)-((c/a)*X)))**(c))))),(X,0,xg))) for xg in conv]
else:
if(incomp == 1):
vol =
[(integrate((((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**
Página 5
PFR
(b))*((conco*((CCo/conco)-((c/a)*X)))**(c))))),(X,0,xg))) for xg in conv]
else:
vol =
[(integrate(((FAo*X)/(k*((((conco*(1-x)*P*To)/((1+E*X)*Po*T)))**(a))*(((conco*((
CBo/conco)-((b/a)*X))*P*To)/((1+E*X)*(Po*T)))**(b))*(((conco*((CCo/conco)-((c/a)
*X))*P*To)/((1+E*X)*(Po*T)))**(c)))),(X,0,xg))) for xg in conv]

plt.plot( conv, vol, 'go') # green bolinha


plt.plot( conv, vol, 'k:', color='black') # linha pontilha orange
plt.axis([0, 1, 0, int(volume*1.5)])
plt.title("Volume X Conversao")

plt.grid(True)
plt.xlabel("Conversao")
plt.ylabel("Volume(dm3)")
plt.show()

if(variavel == 2):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
CA = input("Digite o valor da Concentração final do Componente
A(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
FA = input("Vazão molar final do Componente A(mol/min) ")
if((FAo == no and conco == no) or (vo == no and conco == no and FA ==
no) or (FAo == no and vo ==no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no and vo != no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
Página 6
PFR
if(FAo==no):
FAo = conco*vo
if(CA != no):
if(conco != no):
x = 1-(CA/conco)
else:
if((FAo != no and vo != no)):
x = 1-(CA/conco)
else:
if (FA != no and (conco != no or vo != no)):
x = 1 - (FA/FAo)
else:
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
print ('A conversão do Reator é '),x
print("")

graf = input("Deseja avaliar o Volume conforme a Conversão Sim(1) ou Não(2) ")


if(graf == 1):
repet1 = 1
while(repet1 == 1):
if (modelo == 0):
k = input("Constante de velocidade(mol/dm3/min) ")
if (modelo == 1):
k = input("Constante de velocidade(1/min) ")
if (modelo == 2):
k = input("Constante de velocidade(dm3/mol/min) ")
if (modelo == 3):
k = input("Constante de velocidade(dm3/mol)2 * (1/min) ")
rA = input("Velocidade de Reação (mol/dm3/min) ")
if (k == no and rA == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0
if(estado == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
Página 7
PFR
volume =
integrate((((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**(b
))*((conco*((CCo/conco)-((c/a)*X)))**(c))))),(X,0,x))
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou
Não(2) ")
if(incomp == 1):
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
volume =
integrate((((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**(b
))*((conco*((CCo/conco)-((c/a)*X)))**(c))))),(X,0,x))
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
if(b!=0):
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CB = 0
if(c!=0):
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CC = 0
volume =
integrate(((FAo*X)/(k*((((conco*(1-x)*P*To)/((1+E*X)*Po*T)))**(a))*(((conco*((CB
o/conco)-((b/a)*X))*P*To)/((1+E*X)*(Po*T)))**(b))*(((conco*((CCo/conco)-((c/a)*X
))*P*To)/((1+E*X)*(Po*T)))**(c)))))
Página 8
PFR

conv = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]
if (estado == 1):
vol =
[(integrate((((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**
(b))*((conco*((CCo/conco)-((c/a)*X)))**(c))))),(X,0,xg))) for xg in conv]
else:
if(incomp == 1):
vol =
[(integrate((((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**
(b))*((conco*((CCo/conco)-((c/a)*X)))**(c))))),(X,0,xg))) for xg in conv]
else:
vol =
[(integrate(((FAo*X)/(k*((((conco*(1-x)*P*To)/((1+E*X)*Po*T)))**(a))*(((conco*((
CBo/conco)-((b/a)*X))*P*To)/((1+E*X)*(Po*T)))**(b))*(((conco*((CCo/conco)-((c/a)
*X))*P*To)/((1+E*X)*(Po*T)))**(c)))),(X,0,xg))) for xg in conv]

plt.plot( conv, vol, 'go') # green bolinha


plt.plot( conv, vol, 'k:', color='black') # linha pontilha orange
plt.axis([0, 1, 0, int(volume*1.5)])
plt.title("Volume X Conversao")

plt.grid(True)
plt.xlabel("Conversao")
plt.ylabel("Volume(dm3)")
plt.show()

if(variavel == 3):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and conco == no) or x ==
no):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
Página 9
PFR
if(FAo==no):
FAo = conco*vo
if(estado == 1):
CA = conco*(1-x)
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
CA = conco*(1-x)
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
print ('A Concentração final do Componente A é '),CA, ("(mol/dm3)")
print("")

if(variavel == 4):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and FAo == no) or x == no):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
Página 10
PFR
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo

FA = FAo*(1-x)

print ('A Vazão molar final do Componente A é '),FA, ("(mol/s)")


print("")

if(variavel == 5):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
FBo = input("Digite o valor da Vazão molar inicial do Componente
B(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A (mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and conco == no) or x == no
or (CBo == no and FBo == no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(CBo == no):
CBo = FBo/vo
if(estado == 1):
CB = conco*((CBo/conco)-((b/a)*x))
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
Página 11
PFR
")
if(incomp == 1):
CB = conco*((CBo/conco)-((b/a)*x))
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
print ('A Concentração final do Componente B é '),CB, ("(mol/dm3)")
print("")

if(variavel == 6):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
FBo = input("Digite o valor da Vazão molar inicial do Componente
B(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and FAo == no) or x == no or
(vo == no and FBo == no) or (CBo == no and FBo == no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
Página 12
PFR
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(CBo != no):
FB = (FAo*((CBo/conco)-((b/a)*x)))
repet = 0
else:
FB = (FAo*((FBo/FAo)-((b/a)*x)))
repet = 0

print ('A Vazão molar final do Componente B é '),FB, ("(mol/s)")


print("")

if(variavel == 7):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FCo = input("Digite o valor da Vazão molar inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A (mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and conco == no) or x == no
or (CCo == no and FCo == no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(FCo == no):
Página 13
PFR
FCo = CCo*vo
if(CCo == no):
CCo = FCo/vo
if(estado == 1):
CC = conco*((CCo/conco)-((c/a)*x))
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
CC = conco*((CCo/conco)-((c/a)*x))
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
print ('A Concentração final do Componente C é '),CC, ("(mol/dm3)")
print("")

if(variavel == 8):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FCo = input("Digite o valor da Vazão molar inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
Página 14
PFR
if((FAo == no and conco == no) or (vo == no and FAo == no) or x == no or
(vo == no and FBo == no) or (CCo == no and FCo == no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(CCo != no):
FC = (FAo*((CCo/conco)-((c/a)*x)))
repet = 0
else:
FC = (FAo*((FCo/FAo)-((c/a)*x)))
repet = 0

print ('A Vazão molar final do Componente B é '),FC, ("(mol/s)")


print("")

if(variavel == 9):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
if(vo == no):
if(FAo == no or conco == no):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
else:
repet = 0

if(vo == no):
vo = FAo/conco
else:
v = vo
Página 15
PFR

if(estado == 1):
print("A vazão volumétrica final é "),v,("(dm3/s)")
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
print("A vazão volumétrica final é "),v,("(dm3/s)")
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
v = ((vo*(1+E*x)*P*To)/(Po*T))
print("A vazão volumétrica final é "),v,("(dm3/s)")

if(variavel == 10):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
CA = input("Digite o valor da Concentração final do Componente
A(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do Componente A(mol/min) ")
Página 16
PFR
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if(((FAo == no and conco == no and x == no) or ((vo == no) and (conco ==
no and FAo ==no))) or (CA == no and x == no)):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
if(vo == no or FAo == no):
if(CA!=no):
conco = CA/(1-x)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(x == no):
if(CA != no):
if(conco != no):
x = 1-(CA/conco)
else:
if(vo == no or FAo == no):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
x = 1-(CA/conco)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
repet1 = 1
while(repet1 == 1):
rA = input("Velocidade de Reação (mol/dm3/min) ")
if (rA == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
Página 17
PFR
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0
if(estado == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
Página 18
PFR
if(b!=0):
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CB = 0
if(c!=0):
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CC = 0
k = rA/(CA**(a))*(CB**(b))*(CC**(c))
if (modelo == 0):
print("o valor da Constante de velocidade é "),k, ("(mol/dm3/min) ")
if (modelo == 1):
print("o valor da Constante de velocidade é "),k, ("(1/min) ")
if (modelo == 2):
print("o valor da Constante de velocidade é "),k, ("(dm3/mol/min) ")
if (modelo == 3):
print("o valor da Constante de velocidade é "),k, ("(dm3/mol)2 * (1/min) ")
print("")

if(variavel == 11):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
CA = input("Digite o valor da Concentração final do Componente
A(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do Componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if(((FAo == no and conco == no and x == no) or ((vo == no) and (conco ==
no and FAo ==no))) or (CA == no and x == no)):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
if(vo == no or FAo == no):
if(CA!=no):
Página 19
PFR
conco = CA/(1-x)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(x == no):
if(CA != no):
if(conco != no):
x = 1-(CA/conco)
else:
if(vo == no or FAo == no):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
x = 1-(CA/conco)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
repet1 = 1
while(repet1 == 1):
if (modelo == 0):
k = input("Constante de velocidade(mol/dm3/min) ")
if (modelo == 1):
k = input("Constante de velocidade(1/min) ")
if (modelo == 2):
k = input("Constante de velocidade(dm3/mol/min) ")
if (modelo == 3):
k = input("Constante de velocidade(dm3/mol)2 * (1/min) ")
if (k == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0
if(estado == 1):
if(CA == no):
Página 20
PFR
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
if(b!=0):
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CB = 0
if(c!=0):
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
Página 21
PFR
CC = 0
rA = k*(CA**(a))*(CB**(b))*(CC**(c))
print ("A Velocidade de Reação "),rA,("(mol/dm3/min)")
print("")

Página 22
CSTR
# -*- coding: cp1252 -*-
# encoding: utf-8
# encoding: iso-8859-1
# encoding: win-1252
# CSTR.py
"""Módulo de formatação de strings.
"""

def frmt_bytes(bytes):
"""Formata um inteiro enviado em "bytes" para um
forma mais bonitinha, GB, MB, enfim. [1]
"""
if bytes < 1024:
return '%dB' % (bytes)
elif bytes < (1024 * 1024):
return '%.1fKB' % (bytes / 1024.0)
elif bytes < (1024 * 1024 * 1024):
return '%.1fMB' % (bytes / 1024.0 / 1024.0)
else:
return '%.1fGB' % (bytes / 1024.0 / 1024.0 / 1024.0)

def strip_html(text):
"""Remove todo o html de uma determinada string. [2]
"""
import re
s = re.sub('<[^>]*>', '', text)
return s

import numpy as np
import matplotlib.pyplot as plt

no = 123456
print("Digite os coeficientes estequiométricos dos reagentes")
a = input("a ")
b = input("b ")
c = input("c ")
modelo = input("Escolha o modelo de lei de velocidade: Ordem zero (0), Primeira
ordem(1), Segunda ordem(2) ou Terceira ordem(3) ")
estado = input ("Em qual estado a reação se processa?: Líquido(1) ou Gasoso(2)
")
if(b!=0 and c!=0):
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Volume(1)\n"
"Conversão(2)\n"
"Concentração do Componente A(3)\n"
"Vazão-molar do Componente A(4) \n"
"Concentração do Componente B(5) \n"
"Vazão-molar do Componente B(6) \n"
"Concentração do Componente C(7) \n"
"Vazão-molar do Componente C(8) \n"
"Vazão Volumétrica(9) \n"
"Constante de Velocidade(10) \n"
Página 1
CSTR
"Velocidade de Reação (11) \n"
""
)
if(b ==0 and c!=0):
CBo = 0
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Volume(1)\n"
"Conversão(2)\n"
"Concentração do Componente A(3)\n"
"Vazão-molar do Componente A(4) \n"
"Concentração do Componente C(7) \n"
"Vazão-molar do Componente C(8) \n"
"Vazão Volumétrica(9) \n"
"Constante de Velocidade(10) \n"
"Velocidade de Reação (11) \n"
""
)
if(b!=0 and c==0):
CCo = 0
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Volume(1)\n"
"Conversão(2)\n"
"Concentração do Componente A(3)\n"
"Vazão-molar do Componente A(4) \n"
"Concentração do Componente B(5) \n"
"Vazão-molar do Componente B(6) \n"
"Vazão Volumétrica(9) \n"
"Constante de Velocidade(10) \n"
"Velocidade de Reação (11) \n"
""
)
if(b==0 and c==0):
CBo = 0
CCo = 0
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Volume(1)\n"
"Conversão(2)\n"
"Concentração do Componente A(3)\n"
"Vazão-molar do Componente A(4) \n"
"Vazão Volumétrica(9) \n"
"Constante de Velocidade(10) \n"
"Velocidade de Reação (11) \n"
""
)
if(variavel == 1):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
CA = input("Digite o valor da Concentração final do Componente
Página 2
CSTR
A(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do Componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if(((FAo == no and conco == no and x == no) or ((vo == no) and (conco ==
no and FAo ==no))) or (CA == no and x == no)):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
if(vo == no or FAo == no):
if(CA!=no):
conco = CA/(1-x)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(x == no):
if(CA != no):
if(conco != no):
x = 1-(CA/conco)
else:
if(vo == no or FAo == no):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
x = 1-(CA/conco)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
Página 3
CSTR
if(repet == 2):
exit(0)
repet1 = 1
while(repet1 == 1):
if (modelo == 0):
k = input("Constante de velocidade(mol/dm3/min) ")
if (modelo == 1):
k = input("Constante de velocidade(1/min) ")
if (modelo == 2):
k = input("Constante de velocidade(dm3/mol/min) ")
if (modelo == 3):
k = input("Constante de velocidade(dm3/mol)2 * (1/min) ")
rA = input("Velocidade de Reação (mol/dm3/min) ")
if (k == no and rA == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0
if(estado == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
Página 4
CSTR
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
if(b!=0):
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CB = 0
if(c!=0):
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CC = 0
if(rA == no):
rA = k*(CA**(a))*(CB**(b))*(CC**(c))
volume = (FAo*x)/rA
print ('O volume do reator é'),volume,("dm3")
print("")
graf = input("Deseja avaliar o Volume conforme a Conversão Sim(1) ou Não(2) ")
if(graf == 1):
conv = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]
if (estado == 1):
vol =
[((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**(b))*((conco
*((CCo/conco)-((c/a)*X)))**(c)))) for X in conv]
else:
if(incomp == 1):
vol =
[((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**(b))*((conco
*((CCo/conco)-((c/a)*X)))**(c)))) for X in conv]
else:
vol =
[((FAo*X)/(k*((((conco*(1-x)*P*To)/((1+E*X)*Po*T)))**(a))*(((conco*((CBo/conco)-
((b/a)*X))*P*To)/((1+E*X)*(Po*T)))**(b))*(((conco*((CCo/conco)-((c/a)*X))*P*To)/
((1+E*X)*(Po*T)))**(c)))) for X in conv]

plt.plot( conv, vol, 'go') # green bolinha


plt.plot( conv, vol, 'k:', color='black') # linha pontilha orange
plt.axis([0, 1, 0, int(volume*1.5)])
plt.title("Volume X Conversao")
Página 5
CSTR

plt.grid(True)
plt.xlabel("Conversao")
plt.ylabel("Volume(dm3)")
plt.show()
plt.ion()

if(variavel == 2):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
CA = input("Digite o valor da Concentração final do Componente
A(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
FA = input("Vazão molar final do Componente A(mol/min) ")
if((FAo == no and conco == no) or (vo == no and conco == no and FA ==
no) or (FAo == no and vo ==no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no and vo != no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(CA != no):
if(conco != no):
x = 1-(CA/conco)
else:
if((FAo != no and vo != no)):
x = 1-(CA/conco)
else:
if (FA != no and (conco != no or vo != no)):
x = 1 - (FA/FAo)
Página 6
CSTR
else:
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
print ('A conversão do Reator é '),x
print("")

graf = input("Deseja avaliar o Volume conforme a Conversão Sim(1) ou Não(2) ")


if(graf == 1):
repet1 = 1
while(repet1 == 1):
if (modelo == 0):
k = input("Constante de velocidade(mol/dm3/min) ")
if (modelo == 1):
k = input("Constante de velocidade(1/min) ")
if (modelo == 2):
k = input("Constante de velocidade(dm3/mol/min) ")
if (modelo == 3):
k = input("Constante de velocidade(dm3/mol)2 * (1/min) ")
rA = input("Velocidade de Reação (mol/dm3/min) ")
if (k == no and rA == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0
if(estado == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou
Não(2) ")
if(incomp == 1):
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
Página 7
CSTR
CC = 0
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
if(b!=0):
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CB = 0
if(c!=0):
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CC = 0
if(rA == no):
rA = k*(CA**(a))*(CB**(b))*(CC**(c))
volume = (FAo*x)/rA
conv = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]
if (estado == 1):
vol =
[((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**(b))*((conco
*((CCo/conco)-((c/a)*X)))**(c)))) for X in conv]
else:
if(incomp == 1):
vol =
[((FAo*X)/(k*((conco*(1-X))**(a))*((conco*((CBo/conco)-((b/a)*X)))**(b))*((conco
*((CCo/conco)-((c/a)*X)))**(c)))) for X in conv]
else:
vol =
[((FAo*X)/(k*((((conco*(1-x)*P*To)/((1+E*X)*Po*T)))**(a))*(((conco*((CBo/conco)-
((b/a)*X))*P*To)/((1+E*X)*(Po*T)))**(b))*(((conco*((CCo/conco)-((c/a)*X))*P*To)/
((1+E*X)*(Po*T)))**(c)))) for X in conv]

plt.plot( conv, vol, 'go') # green bolinha


Página 8
CSTR
plt.plot( conv, vol, 'k:', color='black') # linha pontilha orange
plt.axis([0, 1, 0, int(volume*1.5)])
plt.title("Volume X Conversao")

plt.grid(True)
plt.xlabel("Conversao")
plt.ylabel("Volume(dm3)")
plt.show()
plt.ion()

if(variavel == 3):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and conco == no) or x ==
no):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(estado == 1):
CA = conco*(1-x)
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
CA = conco*(1-x)
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
Página 9
CSTR
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
print ('A Concentração final do Componente A é '),CA, ("(mol/dm3)")
print("")

if(variavel == 4):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and FAo == no) or x == no):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo

FA = FAo*(1-x)

print ('A Vazão molar final do Componente A é '),FA, ("(mol/s)")


print("")

if(variavel == 5):
repet = 1
Página 10
CSTR
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
FBo = input("Digite o valor da Vazão molar inicial do Componente
B(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A (mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and conco == no) or x == no
or (CBo == no and FBo == no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(CBo == no):
CBo = FBo/vo
if(estado == 1):
CB = conco*((CBo/conco)-((b/a)*x))
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
CB = conco*((CBo/conco)-((b/a)*x))
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
Página 11
CSTR
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
print ('A Concentração final do Componente B é '),CB, ("(mol/dm3)")
print("")

if(variavel == 6):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
FBo = input("Digite o valor da Vazão molar inicial do Componente
B(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and FAo == no) or x == no or
(vo == no and FBo == no) or (CBo == no and FBo == no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(CBo != no):
FB = (FAo*((CBo/conco)-((b/a)*x)))
repet = 0
else:
FB = (FAo*((FBo/FAo)-((b/a)*x)))
repet = 0

print ('A Vazão molar final do Componente B é '),FB, ("(mol/s)")


print("")
Página 12
CSTR

if(variavel == 7):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FCo = input("Digite o valor da Vazão molar inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A (mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and conco == no) or x == no
or (CCo == no and FCo == no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(FCo == no):
FCo = CCo*vo
if(CCo == no):
CCo = FCo/vo
if(estado == 1):
CC = conco*((CCo/conco)-((c/a)*x))
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
CC = conco*((CCo/conco)-((c/a)*x))
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
Página 13
CSTR
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
print ('A Concentração final do Componente C é '),CC, ("(mol/dm3)")
print("")

if(variavel == 8):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FCo = input("Digite o valor da Vazão molar inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if((FAo == no and conco == no) or (vo == no and FAo == no) or x == no or
(vo == no and FBo == no) or (CCo == no and FCo == no)):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(CCo != no):
FC = (FAo*((CCo/conco)-((c/a)*x)))
repet = 0
Página 14
CSTR
else:
FC = (FAo*((FCo/FAo)-((c/a)*x)))
repet = 0

print ('A Vazão molar final do Componente B é '),FC, ("(mol/s)")


print("")

if(variavel == 9):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
FAo = input("Vazão molar inicial do componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
if(vo == no):
if(FAo == no or conco == no):
repet = input("Não existe dados suficientes para estimar a conversão,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
else:
repet = 0

if(vo == no):
vo = FAo/conco
else:
v = vo

if(estado == 1):
print("A vazão volumétrica final é "),v,("(dm3/s)")
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
print("A vazão volumétrica final é "),v,("(dm3/s)")
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
Página 15
CSTR
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
v = ((vo*(1+E*x)*P*To)/(Po*T))
print("A vazão volumétrica final é "),v,("(dm3/s)")

if(variavel == 10):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
CA = input("Digite o valor da Concentração final do Componente
A(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do Componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if(((FAo == no and conco == no and x == no) or ((vo == no) and (conco ==
no and FAo ==no))) or (CA == no and x == no)):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
if(vo == no or FAo == no):
if(CA!=no):
conco = CA/(1-x)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
Página 16
CSTR
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(x == no):
if(CA != no):
if(conco != no):
x = 1-(CA/conco)
else:
if(vo == no or FAo == no):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
x = 1-(CA/conco)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
repet1 = 1
while(repet1 == 1):
rA = input("Velocidade de Reação (mol/dm3/min) ")
if (rA == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0
if(estado == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
Página 17
CSTR
")
if(incomp == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
if(b!=0):
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CB = 0
if(c!=0):
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CC = 0
k = rA/(CA**(a))*(CB**(b))*(CC**(c))
if (modelo == 0):
print("o valor da Constante de velocidade é "),k, ("(mol/dm3/min) ")
if (modelo == 1):
print("o valor da Constante de velocidade é "),k, ("(1/min) ")
if (modelo == 2):
print("o valor da Constante de velocidade é "),k, ("(dm3/mol/min) ")
if (modelo == 3):
print("o valor da Constante de velocidade é "),k, ("(dm3/mol)2 * (1/min) ")
print("")
Página 18
CSTR

if(variavel == 11):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
conco = input("Digite o valor da Concentração inicial do Componente A
(mol/dm3) ")
CA = input("Digite o valor da Concentração final do Componente
A(mol/dm3) ")
if(b!=0):
CBo = input("Digite o valor da Concentração inicial do Componente
B(mol/dm3) ")
if(c!=0):
CCo = input("Digite o valor da Concentração inicial do Componente
C(mol/dm3) ")
FAo = input("Vazão molar inicial do Componente A(mol/min) ")
vo = input("Vazão volumétrica inicial(dm3/min) ")
x = input("Conversão ")
if(((FAo == no and conco == no and x == no) or ((vo == no) and (conco ==
no and FAo ==no))) or (CA == no and x == no)):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0
if(conco == no):
if(vo == no or FAo == no):
if(CA!=no):
conco = CA/(1-x)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
conco = FAo/vo
if(vo == no):
vo = FAo/conco
if(FAo==no):
FAo = conco*vo
if(x == no):
if(CA != no):
if(conco != no):
x = 1-(CA/conco)
else:
Página 19
CSTR
if(vo == no or FAo == no):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
x = 1-(CA/conco)
else:
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
repet1 = 1
while(repet1 == 1):
if (modelo == 0):
k = input("Constante de velocidade(mol/dm3/min) ")
if (modelo == 1):
k = input("Constante de velocidade(1/min) ")
if (modelo == 2):
k = input("Constante de velocidade(dm3/mol/min) ")
if (modelo == 3):
k = input("Constante de velocidade(dm3/mol)2 * (1/min) ")
if (k == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0
if(estado == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
incomp = input("O gás pode ser considerado incompressível? Sim(1) ou Não(2)
")
if(incomp == 1):
if(CA == no):
CA = conco*(1-x)
if(b!=0):
CB = conco*((CBo/conco)-((b/a)*x))
else:
Página 20
CSTR
CB = 0
if(c!=0):
CC = conco*((CCo/conco)-((c/a)*x))
else:
CC = 0
else:
repet2 = 1
while(repet2 == 1):
P = input("Digite a Pressão inicial ")
Po = input("Digite a Pressão final ")
T = input("Digite a Temperatura inicial ")
To = input("Digite a Temperatura final ")
print("Digite os coeficientes estequiométricos dos produtos")
d = input("d ")
e = input("e ")
f = input("f ")
yA = input("Digite a fração molar do Componente A no gás ")
if (P == no or Po == no or T == no or To == no or yA == no):
repet2 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0
E = yA*((d + e + f - a -b - c)/(a))
CA = ((conco*(1-x)*P*To)/((1+E*x)*Po*T))
if(b!=0):
CB = (conco*((CBo/conco)-((b/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CB = 0
if(c!=0):
CC = (conco*((CCo/conco)-((c/a)*x))*P*To)/((1+E*x)*(Po*T))
else:
CC = 0
rA = k*(CA**(a))*(CB**(b))*(CC**(c))
print ("A Velocidade de Reação "),rA,("(mol/dm3/min)")
print("")

Página 21
BATELADA
# -*- coding: cp1252 -*-
# encoding: utf-8
# encoding: iso-8859-1
# encoding: win-1252
# BATELADA.py
"""Módulo de formatação de strings.
"""

def frmt_bytes(bytes):
"""Formata um inteiro enviado em "bytes" para um
forma mais bonitinha, GB, MB, enfim. [1]
"""
if bytes < 1024:
return '%dB' % (bytes)
elif bytes < (1024 * 1024):
return '%.1fKB' % (bytes / 1024.0)
elif bytes < (1024 * 1024 * 1024):
return '%.1fMB' % (bytes / 1024.0 / 1024.0)
else:
return '%.1fGB' % (bytes / 1024.0 / 1024.0 / 1024.0)

def strip_html(text):
"""Remove todo o html de uma determinada string. [2]
"""
import re
s = re.sub('<[^>]*>', '', text)
return s

import numpy as np
import matplotlib.pyplot as plt
from sympy import *
init_printing()
x,y,X,f, xf, z= symbols('x y X f xf z') #define x, y e f como variáveis
simbólicas.

no = 123456
print("Digite os coeficientes estequiométricos dos reagentes")
a = input("a ")
b = input("b ")
c = input("c ")
modelo = input("Escolha o modelo de lei de velocidade: Ordem zero (0), Primeira
ordem(1), Segunda ordem(2) ou Terceira ordem(3) ")
if(b!=0 and c!=0):
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Conversão(1)\n"
"Tempo de operação(2)\n"
"Número de Mols do Componente A(3)\n"
"Número de Mols do Componente B(4) \n"
"Número de Mols do Componente C(5) \n"
"Constante de Velocidade(6) \n"
"Velocidade de Reação (7) \n"
Página 1
BATELADA
""
)
if(b ==0 and c!=0):
NBo = 0
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Conversão(1)\n"
"Tempo de operação(2)\n"
"Número de Mols do Componente A(3)\n"
"Número de Mols do Componente C(5) \n"
"Constante de Velocidade(6) \n"
"Velocidade de Reação (7) \n"
""
)
if(b!=0 and c==0):
NCo = 0
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Conversão(1)\n"
"Tempo de operação(2)\n"
"Número de Mols do Componente A(3)\n"
"Número de Mols do Componente B(4) \n"
"Constante de Velocidade(6) \n"
"Velocidade de Reação (7) \n"
""
)
if(b==0 and c==0):
NBo = 0
NCo = 0
variavel= input("Qual das variaveis a seguir você precisa descobrir?: \n"
"Conversão(1)\n"
"Tempo de operação(2)\n"
"Número de Mols do Componente A(3)\n"
"Constante de Velocidade(6) \n"
"Velocidade de Reação (7) \n"
""
)
if(variavel == 1):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
NAo = input("Digite o valor do Número de Mols inicial do Componente A
(mols) ")
if(b!=0):
NBo = input("Digite o valor do Número de Mols inicial do Componente
B(mols) ")
if(c!=0):
NCo = input("Digite o valor do Número de Mols inicial do Componente
C(mols) ")
t = input("Digite o Tempo de Operação (min) ")
if(t == no):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
Página 2
BATELADA
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
if(a == 1 and b == 0 and c == 0 and NAo == no):
repet = 0
else:
if(NAo == no or (b != 0 and NBo == no) or (c != 0 and NCo == no)):
repet = input("Não existe dados suficientes para estimar o
volume, deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0

repet1 = 1
while(repet1 == 1):
if (modelo == 0):
k = input("Constante de velocidade(mol/dm3/min) ")
if (modelo == 1):
k = input("Constante de velocidade(1/min) ")
if (modelo == 2):
k = input("Constante de velocidade(dm3/mol/min) ")
if (modelo == 3):
k = input("Constante de velocidade(dm3/mol)2 * (1/min) ")
if (k == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0

if(a == 1 and b == 0 and c == 0 and NAo == no):


x = 1 - exp(-t*k)
vol = 1.0
else:
repet2 = 1
vol = input("Digite o Volume do Reator(dm3) ")
if(vol == no):
repet2 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
repet2 = 0

Página 3
BATELADA
fx = (1-x)
df = diff(fx,x)
kt = (k*t/(NAo))*(NAo/vol)**(a)*(NAo/vol)**(b)*(NAo/vol)**(c)*vol
eq =
integrate(((1/(((f))**(a)*((NBo/NAo)+((b/a)*(f-1)))**(b)*(((NCo/NAo)+(c/a)*(f-1)
))**(c)))*df),f )
eq1 = Eq(eq, kt)
eq2 = solve(eq1,f)
eq3 = sum(eq2)

x = 1 - eq3

print ('A conversão do Reator é '),x


print("")
graf = input("Deseja avaliar a Conversão conforme o Tempo Sim(1) ou Não(2) ")
if(graf == 1):
y1 = (np.linspace(0,0.1,10000))
y2 = (np.linspace(0,0.2,10000))
y3 = (np.linspace(0,0.3,10000))
y4 = (np.linspace(0,0.4,10000))
y5 = (np.linspace(0,0.5,10000))
y6 = (np.linspace(0,0.6,10000))
y7 = (np.linspace(0,0.7,10000))
y8 = (np.linspace(0,0.8,10000))
y9 = (np.linspace(0,0.9,10000))
y10 = (np.linspace(0,1.0,10000))

f1 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y1))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y1))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y1))))**(c))))
f2 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y2))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y2))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y2))))**(c))))
f3 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y3))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y3))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y3))))**(c))))
f4 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y4))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y4))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y4))))**(c))))
f5 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y5))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y5))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y5))))**(c))))
f6 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y6))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y6))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y6))))**(c))))
f7 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y7))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y7))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y7))))**(c))))
f8 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y8))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y8))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y8))))**(c))))
Página 4
BATELADA
f9 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y9))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y9))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y9))))**(c))))
f10 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y10))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y10))))**(b))*(((NAo/vol)*((NCo/NAo)-
((c/a)*(y10))))**(c))))

t0 = 0
t1 = sum(f1)*(0.1-0)/10000
t2 = sum(f2)*(0.2-0)/10000
t3 = sum(f3)*(0.3-0)/10000
t4 = sum(f4)*(0.4-0)/10000
t5 = sum(f5)*(0.5-0)/10000
t6 = sum(f6)*(0.6-0)/10000
t7 = sum(f7)*(0.7-0)/10000
t8 = sum(f8)*(0.8-0)/10000
t9 = sum(f9)*(0.9-0)/10000
t10 = sum(f10)*(1.0-0)/10000

conv = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]
tempo = [t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10]

plt.plot( conv, tempo, 'go') # green bolinha


plt.plot( conv, tempo, 'k:', color='black')#linha pontilha orange
plt.axis([0, 1, 0, int(t*1.5)])
plt.title("Tempo X Conversao")

plt.grid(True)
plt.xlabel("Conversao")
plt.ylabel("Tempo(min)")
plt.show()

if(variavel == 2):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
NAo = input("Digite o valor do Número de Mols inicial do Componente A
(mols) ")
NA = input("Digite o valor do Número de Mols final do Componente A
(mols) ")
if(b!=0):
NBo = input("Digite o valor do Número de Mols inicial do Componente
B(mols) ")
NB = input("Digite o valor do Número de Mols final do Componente
B(mols) ")
Página 5
BATELADA
if(c!=0):
NCo = input("Digite o valor do Número de Mols inicial do Componente
C(mols) ")
NC = input("Digite o valor do Número de Mols final do Componente
C(mols) ")
x = input("Digite a Conversão ")
if(x == no and (NAo == no or NA == no)):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
if(a == 1 and b == 0 and c == 0 and NAo == no):
repet = 0
else:
if(NAo == no or (b != 0 and NBo == no) or (c != 0 and NCo == no)):
repet = input("Não existe dados suficientes para estimar o
volume, deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0

if (x == no):
x = 1-(NA/NAo)
repet1 = 1
while(repet1 == 1):
if (modelo == 0):
k = input("Constante de velocidade(mol/dm3/min) ")
if (modelo == 1):
k = input("Constante de velocidade(1/min) ")
if (modelo == 2):
k = input("Constante de velocidade(dm3/mol/min) ")
if (modelo == 3):
k = input("Constante de velocidade(dm3/mol)2 * (1/min) ")
if (k == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0

if(a == 1 and b == 0 and c == 0):


t = (-log(abs(1-x)))/k
vol = 1.0
else:
repet2 = 1
Página 6
BATELADA
vol = input("Digite o Volume do Reator(dm3) ")
conco = input("Digite a Concentração inicial do componente A ")
if(vol == no and conco == no):
repet2 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
if(vol == no):
vol = NAo/conco
repet2 = 0

x1 = (np.linspace(0,x,10000))
eq1 = ((NAo)/(k*vol*(((NAo/vol)*(1-
x1))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(x1))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(x1))))**(c))))
t = sum(eq1)*(x-0)/10000

print ('O Tempo de Operação é '),t,("min")


print("")
graf = input("Deseja avaliar a Conversão conforme o Tempo Sim(1) ou Não(2) ")
if(graf == 1):
y1 = (np.linspace(0,0.1,10000))
y2 = (np.linspace(0,0.2,10000))
y3 = (np.linspace(0,0.3,10000))
y4 = (np.linspace(0,0.4,10000))
y5 = (np.linspace(0,0.5,10000))
y6 = (np.linspace(0,0.6,10000))
y7 = (np.linspace(0,0.7,10000))
y8 = (np.linspace(0,0.8,10000))
y9 = (np.linspace(0,0.9,10000))
y10 = (np.linspace(0,0.999,10000))

f1 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y1))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y1))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y1))))**(c))))
f2 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y2))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y2))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y2))))**(c))))
f3 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y3))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y3))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y3))))**(c))))
f4 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y4))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y4))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y4))))**(c))))
f5 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y5))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y5))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y5))))**(c))))
f6 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y6))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y6))))**(b))*(((NAo/vol)*((NCo/NAo)-((
Página 7
BATELADA
c/a)*(y6))))**(c))))
f7 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y7))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y7))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y7))))**(c))))
f8 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y8))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y8))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y8))))**(c))))
f9 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y9))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y9))))**(b))*(((NAo/vol)*((NCo/NAo)-((
c/a)*(y9))))**(c))))
f10 = ((NAo)/(k*vol*(((NAo/vol)*(1-
y10))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(y10))))**(b))*(((NAo/vol)*((NCo/NAo)-
((c/a)*(y10))))**(c))))

t0 = 0
t1 = sum(f1)*(0.1-0)/10000
t2 = sum(f2)*(0.2-0)/10000
t3 = sum(f3)*(0.3-0)/10000
t4 = sum(f4)*(0.4-0)/10000
t5 = sum(f5)*(0.5-0)/10000
t6 = sum(f6)*(0.6-0)/10000
t7 = sum(f7)*(0.7-0)/10000
t8 = sum(f8)*(0.8-0)/10000
t9 = sum(f9)*(0.9-0)/10000
t10 = sum(f10)*(0.999-0)/10000

conv = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]
tempo = [t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10]

plt.plot( conv, tempo, 'go') # green bolinha


plt.plot( conv, tempo, 'k:', color='black')#linha pontilha orange
plt.axis([0, 1, 0, int(t*1.5)])
plt.title("Tempo X Conversao")

plt.grid(True)
plt.xlabel("Conversao")
plt.ylabel("Tempo(min)")
plt.show()

if(variavel == 3):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
NAo = input("Digite o valor do Número de Mols inicial do Componente A
(mols) ")
x = input("Digite a Conversão ")
if(x == no):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
Página 8
BATELADA
if(repet == 2):
exit(0)
else:
repet = 0

NA = NAo*(1-x)

print ('O Número de mols do componente A é '),NA,("mols")


print("")

if(variavel == 4):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
NAo = input("Digite o valor do Número de Mols inicial do Componente A
(mols) ")
NBo = input("Digite o valor do Número de Mols inicial do Componente B
(mols) ")
x = input("Digite a Conversão ")
if(x == no or NAo == no or NBo == no):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0

NB = NAo*((NBo/NAo)-(b/a)*x)

print ('O Número de mols do componente B é '),NB,("mols")


print("")

if(variavel == 5):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
NAo = input("Digite o valor do Número de Mols inicial do Componente A
(mols) ")
NBo = input("Digite o valor do Número de Mols inicial do Componente B
(mols) ")
x = input("Digite a Conversão ")
if(x == no or NAo == no or NBo == no):
repet = input("Não existe dados suficientes para estimar o volume,
Página 9
BATELADA
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0

NC = NAo*((NCo/NAo)-(c/a)*x)

print ('O Número de mols do componente C é '),NC,("mols")


print("")

if(variavel == 6):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
NAo = input("Digite o valor do Número de Mols inicial do Componente A
(mols) ")
NA = input("Digite o valor do Número de Mols final do Componente A
(mols) ")
if(b!=0):
NBo = input("Digite o valor do Número de Mols inicial do Componente
B(mols) ")
NB = input("Digite o valor do Número de Mols final do Componente
B(mols) ")
if(c!=0):
NCo = input("Digite o valor do Número de Mols inicial do Componente
C(mols) ")
NC = input("Digite o valor do Número de Mols final do Componente
C(mols) ")
x = input("Digite a Conversão ")
if(x == no and (NAo == no or NA == no)):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
if(a == 1 and b == 0 and c == 0 and NAo == no):
repet = 0
else:
if(NAo == no or (b != 0 and NBo == no) or (c != 0 and NCo == no)):
repet = input("Não existe dados suficientes para estimar o
volume, deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
Página 10
BATELADA
repet = 0

if (x == no):
x = 1-(NA/NAo)
if(NAo == no):
NAo = NA/(1-x)
repet1 = 1
while(repet1 == 1):
rA = input("Digite o valor da Velocidade de Reação(mol/dm3/min) ")
if(rA == no):
repet1 = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
exit(0)
else:
repet1 = 0
repet2 = 1
vol = input("Digite o Volume do Reator(dm3) ")
conco = input("Digite a Concentração inicial do componente A ")
if(vol == no and conco == no):
repet2 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
if(vol == no):
vol = NAo/conco
repet2 = 0

k = rA /((((NAo/vol)*(1-
x))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(x))))**(b))*(((NAo/vol)*((NCo/NAo)-((c/
a)*(x))))**(c)))
if (modelo == 0):
print("A Constante de velocidade é "),k,("(mol/dm3/min)")
if (modelo == 1):
print("A Constante de velocidade é "),k,("(1/min) ")
if (modelo == 2):
print("A Constante de velocidade é "),k,("(dm3/mol/min) ")
if (modelo == 3):
print("A Constante de velocidade é "),k,("(dm3/mol)2 * (1/min) ")
print("")

if(variavel == 7):
repet = 1
while(repet == 1):
print("Digite as variáveis solicitadas a seguir com notação decimal,\n"
"(Ex: 2.4, 1.0) caso não possua alguma digite \"no\" ")
NAo = input("Digite o valor do Número de Mols inicial do Componente A
Página 11
BATELADA
(mols) ")
NA = input("Digite o valor do Número de Mols final do Componente A
(mols) ")
if(b!=0):
NBo = input("Digite o valor do Número de Mols inicial do Componente
B(mols) ")
NB = input("Digite o valor do Número de Mols final do Componente
B(mols) ")
if(c!=0):
NCo = input("Digite o valor do Número de Mols inicial do Componente
C(mols) ")
NC = input("Digite o valor do Número de Mols final do Componente
C(mols) ")
x = input("Digite a Conversão ")
if(x == no and (NAo == no or NA == no)):
repet = input("Não existe dados suficientes para estimar o volume,
deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
if(a == 1 and b == 0 and c == 0 and NAo == no):
repet = 0
else:
if(NAo == no or (b != 0 and NBo == no) or (c != 0 and NCo == no)):
repet = input("Não existe dados suficientes para estimar o
volume, deseja colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet == 2):
exit(0)
else:
repet = 0

if (x == no):
x = 1-(NA/NAo)
if(NAo == no):
NAo = NA/(1-x)
repet1 = 1
while(repet1 == 1):
if (modelo == 0):
k = input("Constante de velocidade(mol/dm3/min) ")
if (modelo == 1):
k = input("Constante de velocidade(1/min) ")
if (modelo == 2):
k = input("Constante de velocidade(dm3/mol/min) ")
if (modelo == 3):
k = input("Constante de velocidade(dm3/mol)2 * (1/min) ")
if (k == no):
repet1 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet1 == 2):
Página 12
BATELADA
exit(0)
else:
repet1 = 0
repet2 = 1
vol = input("Digite o Volume do Reator(dm3) ")
conco = input("Digite a Concentração inicial do componente A ")
if(vol == no and conco == no):
repet2 = input("Não existe dados suficientes para estimar o volume, deseja
colocar\n "
"os dados faltantes? Sim(1) ou Não (2) ")
if(repet2 == 2):
exit(0)
else:
if(vol == no):
vol = NAo/conco
repet2 = 0

rA = k*((((NAo/vol)*(1-
x))**(a))*(((NAo/vol)*((NBo/NAo)-((b/a)*(x))))**(b))*(((NAo/vol)*((NCo/NAo)-((c/
a)*(x))))**(c)))

print("A Velocidade de Reação é "),rA,("(mol/dm3/min)")

Página 13
Anexo 2 - Código em Fortran

reatores-programa
program Reatores
implicit none
real::Reator, modelo, variavel, estado, conc, k, x, varvol, FAo, vo, s, conco,
conc, volume, NAo,NA, t, vart,dx, f,n, i, NAf
character:: A
print*,'Escolha seu reator: PFR (1),CSTR(2) ou BATELADA (3)'
read(*,*)Reator
if (Reator.EQ.2) then
print*,'Em qual estado a reação se processa?: Liquido(1) ou Gasoso(2) '
read(*,*)estado
if (estado.EQ.1) then
print*,'Qual das variaveis a seguir você precisa descobrir?: Volume(1),
Conversao(2)' &
& // ' Concentração(3), Vazão-molar(4), Vazão volumétrica(5), constante de
velocidade(6) '
read(*,*)variavel
if (variavel .EQ. 1)then
print*,'O volume será baseado na conversão(1), vazão molar(2) ou
concentração(3)?'
read(*,*)varvol
if (varvol .EQ. 1)then
print*,'Digite o valor da Concentração inicial(mol/dm3), Vazão molar
inicial(mol/min), Constante de velocidade(1/min),' &
& // 'Vazão volumétrica inicial(dm3/min) e Conversão(separados por virgula)-
Caso não possua algum valor, digite "0"'
read(*,*)conco, FAo ,k, vo,x
if (FAo .EQ. 0) then
FAo = conco*vo
end if
if (conco .EQ. 0) then
conco = FAo/vo
end if
print*,'Escolha o modelo de lei de velocidade: Ordem zero (0), Primeira
ordem(1), Segunda ordem(2) ou terceira ordem(3) '
read(*,*)modelo
if (modelo .EQ. 1) then
conc = conco*(1-x)
Volume = (FAo*x)/(k*conc)
print*,'o volume do reator é',volume ,'dm3'
print*,'Deseja avaliar o comportamento do Volume em função da Conversão? Sim
(1)ou Não(2)'
read(*,*)s
if (s .EQ. 1)then
open (9,file = 'dados.m')
write(9,*)'x = 0:0.01:',x,';'
write(9,*)'y=(',FAo,'*x)./(',k,'*',conco,'*(1-x));'
write(9,*)'plot(x,y,',achar(39),'linewidth',achar(39),',4)'

write(9,*)'xlabel(',achar(39),'Conversão',achar(39),',',achar(39),'fontsize',ach
ar(39),',24)'
write(9,*)'ylabel(',achar(39),'Volume
(dm3)',achar(39),',',achar(39),'fontsize',achar(39),',24)'
Página 1
reatores-programa
write(9,*)'set(gca,',achar(39),'fontsize',achar(39),',20)'
close(9)
end if

end if

end if
end if

end if

end if

if (Reator.EQ.3) then
print*,'Qual das variaveis a seguir você precisa descobrir?: Volume(1),
Conversao(2)'
print*, 'Número de mols inicial(3),Número de mols(4), Concentração (5),
Constante de velocidade(6), Tempo de operação (7)'
read(*,*)variavel
if (variavel .EQ. 7)then
print*,'O tempo será baseado no Número de mols(1), Conversão(2) ou
Concentração(3)?'
read(*,*)vart
if (vart .EQ. 1)then
print*,'Digite o número de mols inicial(mols), número de mols final(mols),
constante de velocidade(1/min),'
print*,'Volume do reator(dm3), Concentração inicial (mols/dm3),
Concentração final (mols/dm3)'
print*,' - Caso não possua algum valor, digite "0"'

read(*,*)NAo,NAf, k, volume ,conco, conc


if (NAo .EQ. 0) then
NAo = conco * volume
end if
if (NAf .EQ. 0) then
NAf = conc*volume
end if
print*,'Escolha o modelo de lei de velocidade: Ordem zero (0), Primeira
ordem(1), Segunda ordem(2) ou terceira ordem(3) '
read(*,*)modelo
if (modelo .EQ. 1) then

dx = 0.001
t = 0

n = (NAo-NAf)/dx

Página 2
reatores-programa
do i= 1,n

NA = NAf + dx*i

f = 1/(NA*k)

t = t + f*dx

end do

print*,'O tempo de operação é',t ,'min'


print*,'Deseja avaliar o tempo de operação em função do número de mols? Sim
(1)ou Não(2)'
read(*,*)s
if (s .EQ. 1)then
open (9,file = 'dados.m')
write(9,*)'x = 0:0.01:',NAo-NAf,';'
write(9,*)'y=(1/',k,')*(log (x+',NAf,'));'
write(9,*)'plot(x,y,',achar(39),'linewidth',achar(39),',4)'
write(9,*)'xlabel(',achar(39),'Consumo de NA
(mols)',achar(39),',',achar(39),'fontsize',achar(39),',24)'

write(9,*)'ylabel(',achar(39),'Tempo(min)',achar(39),',',achar(39),'fontsize',ac
har(39),',24)'
write(9,*)'set(gca,',achar(39),'fontsize',achar(39),',20)'
close(9)
end if

end if
end if
end if

end if

print*,'Digite qualquer tecla para fechar o programa'


read(*,*)A
end program Reatores

Página 3

Você também pode gostar