Loops de Reciclo¶
Neste tutorial você construirá um flowsheet com uma corrente de reciclo na GUI Clássica do DWSIM, em que parte da saída do processo é realimentada para a entrada. Loops de reciclo são fundamentais na engenharia química: alimentação não reagida, solventes e catalisadores são rotineiramente reciclados para melhorar a eficiência.
O que você vai aprender
- Como construir um flowsheet em malha fechada usando Mixer, Splitter e a operação lógica Recycle
- Como o DWSIM detecta tear streams e itera até a convergência
- Como especificar razões de divisão e inspecionar a convergência no Console Output
Pré-requisitos
- Ter completado Sistemas de Reação
- Conceito de tear streams: o solver "rasga" um loop de reciclo, faz uma estimativa inicial das condições da tear stream, resolve para frente e itera até a convergência
Visão Geral do Processo¶
Um loop de reciclo simples:
- Mixer combina a alimentação fresca com a corrente de reciclo
- Unidade de processo (aqui um aquecedor que simula qualquer etapa de processamento)
- Splitter divide a saída em uma corrente de produto e uma corrente de reciclo
- Recycle (operação lógica) fecha o loop e dispara o solver iterativo
Diagrama de Fluxo do Processo¶
graph LR
FF["Fresh Feed<br/>300 K, 1 atm<br/>1 kg/s Water"] --> MIX["MIX-1"]
MIX --> H["H-1<br/>(Heater)<br/>350 K"]
H --> SP["SP-1<br/>(Splitter)"]
SP -->|70%| PROD["Product"]
SP -->|30%| REC["Recycle"]
REC --> RC["RC-1<br/>(Recycle)"]
RC --> MIX
Parâmetros de Projeto¶
| Parâmetro | Valor | Unidade |
|---|---|---|
| Composto | Water | - |
| Pacote Termodinâmico | Steam Tables | - |
| Temperatura da alimentação fresca | 300 | K |
| Pressão da alimentação fresca | 1 atm | Pa |
| Vazão mássica da alimentação fresca | 1,0 | kg/s |
| Temperatura de saída do aquecedor | 350 | K |
| Razão de divisão (produto) | 0,70 (70% para o produto) | - |
Passo a Passo na GUI Clássica¶
1. Configurar a simulação¶
File > New Chemical Process Model:
- Compounds:
Water - Property Package:
Steam Tables - Clique em Finish
2. Criar as correntes¶
Arraste cinco Material Streams para o canvas:
- Fresh-Feed (T = 300 K, P = 1 atm, m = 1 kg/s, Water = 1.0)
- Mixed (vazia)
- Heated (vazia)
- Product (vazia)
- Recycle (vazia)
- Recycle-Return (vazia)
Sim, são seis. A corrente Recycle-Return representa a saída da operação lógica Recycle de volta para o Mixer.
3. Inserir o Mixer¶
Arraste um Mixer para o canvas, nomeie como MIX-1. No painel Connections:
- Inlet 1:
Fresh-Feed - Inlet 2:
Recycle-Return - Outlet:
Mixed
4. Inserir o Heater¶
Arraste um Heater chamado H-1:
- Outlet Temperature:
350 K, ΔP: 0, Efficiency: 100% - Inlet:
Mixed, Outlet:Heated, Energy: criar nova
5. Inserir o Splitter¶
Arraste um Splitter da Object Palette, nomeie como SP-1. No editor:
- Splitting Mode:
Split Ratios - Outlet 1 Ratio:
0.70 - Outlet 2 Ratio:
0.30
Conexões:
- Inlet:
Heated - Outlet 1:
Product - Outlet 2:
Recycle

6. Inserir o Recycle (operação lógica)¶
Arraste um objeto Recycle da Object Palette para o canvas (na categoria Logical Operations). Nomeie como RC-1. No editor:
- Inlet:
Recycle - Outlet:
Recycle-Return - Convergence Tolerance: deixe no padrão (por exemplo, 0,01%)
- Maximum Iterations: 50

7. Resolver¶
F6 LIGADO → Solve. O solver detecta o ciclo, escolhe uma tear stream, faz uma estimativa inicial e itera. Observe o painel Console Output para mensagens como "Recycle iteration 1, convergence error 5.2%, tolerance 0.01%". Após várias iterações, o loop converge.
8. Inspecionar o estado estacionário¶
Abra as abas Results:
- Vazão mássica de Product: deve ser igual a
1,0 kg/s(= alimentação fresca; conservação de massa) - Vazão mássica de Mixed: ~
1,43 kg/s(= 1,0 / 0,70 porque 30% é reciclado) - Vazão mássica de Recycle: ~
0,43 kg/s(= 1,43 × 0,30)

Resultados e Validação¶
| Variável | Esperado | Unidade |
|---|---|---|
| Vazão mássica de Product | ~1,0 | kg/s |
| Vazão mássica de Recycle | ~0,43 | kg/s |
| Vazão da corrente Mixed | ~1,43 | kg/s |
Resultados esperados
No estado estacionário, a vazão de produto é igual à alimentação fresca (conservação de massa: tudo que entra como alimentação fresca deve sair como produto). O reciclo divide o fluxo interno: 30% de reciclo significa fluxo interno = 1,0 / 0,70 = 1,43 kg/s.
Entendendo os Resultados¶
O loop de reciclo amplifica a vazão interna. Com divisão 70/30, o misturador vê 43% mais vazão do que apenas a alimentação fresca. Isso é útil em processos reais:
- Aumenta a conversão por passe em um reator
- Ajuda a controlar temperaturas e concentrações internas
O solver do DWSIM lida com a dependência circular por iteração: ele estima as condições da corrente de reciclo, resolve todas as unidades em sequência, compara as condições calculadas do reciclo com a estimativa, e ajusta usando aceleração de Wegstein até que coincidam.
Por que aceleração de Wegstein?
Wegstein detecta padrões de oscilação em iterações sucessivas do reciclo e amortece os overshoots, convergindo em muito menos iterações do que substituição direta. Também é mais simples de configurar do que Newton-Raphson completo, que exigiria um Jacobiano de todo o flowsheet. Para a maioria dos reciclos bem-postos, Wegstein converge à tolerância padrão de 0,01% em 5-15 iterações.
Automatizando Este Tutorial¶
Arquivos neste repositório
- Script Python:
examples/intermediate/04_recycle_loops.py - Simulação pré-construída:
examples/saved/recycle_loop.dwxmz
from DWSIM.Automation.FluentAPI import Flowsheet, PropertyPackages, Q
from DWSIM.Interfaces.Enums.GraphicObjects import ObjectType
fs = (Flowsheet.Create("RecycleTutorial")
.WithCompound("Water")
.WithPropertyPackage(PropertyPackages.SteamTables))
fresh = (fs.AddMaterialStream("Fresh-Feed")
.At(Q.Kelvin(300.0), Q.Pascal(101325.0))
.WithMassFlow(Q.KgPerSecond(1.0)))
mixed = fs.AddMaterialStream("Mixed")
heated = fs.AddMaterialStream("Heated")
product = fs.AddMaterialStream("Product")
recycle = fs.AddMaterialStream("Recycle")
recycle_return = fs.AddMaterialStream("Recycle-Return")
(fs.AddMixer("MIX-1")
.ConnectFeed(fresh, 0)
.ConnectFeed(recycle_return, 1)
.ConnectProduct(mixed, 0))
(fs.AddHeater("H-1")
.WithOutletTemperature(350.0.Kelvin())
.WithPressureDrop(0.0.Pascal())
.WithEfficiencyPercent(100.0)
.ConnectFeed(mixed, 0)
.ConnectProduct(heated, 0))
(fs.AddSplitter("SP-1")
.WithSplitRatios([0.70, 0.30])
.ConnectFeed(heated, 0)
.ConnectProduct(product, 0)
.ConnectProduct(recycle, 1))
fs.AddUnitOperation(ObjectType.Recycle, "RC-1") \
.ConnectFeed(recycle, 0) \
.ConnectProduct(recycle_return, 0)
fs.AutoLayout()
fs.Solve()
print(f"Product = {product.MassFlowKgPerSecond:.4f} kg/s")
print(f"Recycle = {recycle.MassFlowKgPerSecond:.4f} kg/s")
Construa com dwsim.unitop.add para Mixer, Heater, Splitter e Recycle, conecte-os via dwsim.unitop.connect, depois dwsim.solve.run.
O resultado pode variar
O resultado depende da capacidade de raciocínio e do uso correto de ferramentas pelo LLM. Sempre verifique se a simulação corresponde à sua intenção antes de confiar nos números.
Use o DWSIM (via servidor MCP) para construir a seguinte simulação:
- Crie um flowsheet chamado "RecycleTutorial"
- Adicione Water como único composto; configure o pacote
termodinâmico como "SteamTables"
- Adicione uma corrente material chamada "Fresh-Feed" a 300 K e
101325 Pa com vazão mássica de 1,0 kg/s (Water = 1,0)
- Adicione correntes materiais vazias "Mixed", "Heated", "Product",
"Recycle" e "Recycle-Return"
- Adicione um Mixer chamado "MIX-1"; conecte Fresh-Feed e
Recycle-Return como entradas e Mixed como produto
- Adicione um Heater chamado "H-1" com temperatura de saída 350 K,
queda de pressão 0 Pa e eficiência 100 %; alimente a partir de
Mixed e produza Heated
- Adicione um Splitter chamado "SP-1" com razões de divisão 0,70 /
0,30; alimente a partir de Heated; saída 1 = Product, saída 2 =
Recycle
- Adicione uma operação lógica Recycle chamada "RC-1"; alimente a
partir de Recycle e produza Recycle-Return (fechando o loop)
- Resolva o flowsheet (o solver irá iterar até a convergência)
- Reporte a vazão mássica convergida de Product (kg/s) e a vazão
mássica de Recycle (kg/s)
Exercícios
- Mude a razão de divisão para 50/50. Como muda a vazão interna?
- Substitua o Heater por um Conversion Reactor (defina uma reação fictícia A → B). O reciclo agora aumenta a conversão global de A não reagido.
- O que acontece com 100% de reciclo (split 0/1)? Por que o solver não consegue convergir?
Leitura Complementar¶
Referências selecionadas da bibliografia técnica do DWSIM. Clique no link DOI para acessar cada artigo.
- A. Wächter & L. T. Biegler. (2006). On the Implementation of an Interior-Point Filter Line-Search Algorithm for Large-Scale Nonlinear Programming. Mathematical Programming. doi:10.1007/s10107-004-0559-y
- Michael Michelsen & Jorgen Mollerup. (2007). Thermodynamic Models: Fundamentals and Computational Aspects. Tie-Line Publications
- K. Thomsen. (1997). Aqueous electrolytes: model parameters and process simulation
Próximos Passos¶
Em Envelope de Fases, você aprenderá como gerar diagramas de fases pressão-temperatura para misturas multicomponentes usando o menu Utilities.