public Variable ActivityCoefficient(ThermodynamicSystem system, Variable g, Variable T, List <Variable> x, int index) { Expression liquidPart = null; switch (system.EquilibriumMethod.EquilibriumApproach) { case EquilibriumApproach.GammaPhi: switch (system.EquilibriumMethod.Activity) { case ActivityMethod.UNIQUAC: { var gamma = new ActivityCoefficientUNIQUAC(system, T, x, index); liquidPart = gamma; break; } case ActivityMethod.NRTL: { var gamma = new ActivityCoefficientNRTL(system, T, x, index); liquidPart = gamma; break; } case ActivityMethod.Wilson: { var gamma = new ActivityCoefficientWilson(system, T, x, index); liquidPart = gamma; break; } default: liquidPart = 1.0; break; } break; case EquilibriumApproach.PhiPhi: { switch (system.EquilibriumMethod.EquationOfState) { case EquationOfState.SoaveRedlichKwong: liquidPart = 1.0; break; default: throw new NotSupportedException("Only SoaveRedlichKwong allowed"); } break; } } g.Subscript = system.Components[index].ID; g.BindTo(liquidPart); return(g); }
public Variable EquilibriumCoefficient(ThermodynamicSystem system, Variable K, Variable T, Variable p, List <Variable> x, List <Variable> y, int index) { Expression liquidPart = null; Expression vaporPart = p; var currentComponent = system.Components[index]; if (String.IsNullOrEmpty(K.Subscript)) { K.Subscript = system.Components[index].ID; } switch (system.EquilibriumMethod.EquilibriumApproach) { case EquilibriumApproach.GammaPhi: switch (system.EquilibriumMethod.Activity) { case ActivityMethod.UNIQUAC: { var gamma = new ActivityCoefficientUNIQUAC(system, T, x, index); if (currentComponent.IsInert) { liquidPart = new MixtureHenryCoefficient(system, T, x, index); } else { liquidPart = gamma * GetVaporPressure(system, currentComponent, T); } K.BindTo(liquidPart / vaporPart); break; } case ActivityMethod.NRTL: { var gamma = new ActivityCoefficientNRTL(system, T, x, index); if (currentComponent.IsInert) { liquidPart = new MixtureHenryCoefficient(system, T, x, index); } else { liquidPart = gamma * GetVaporPressure(system, currentComponent, T); } K.BindTo(liquidPart / vaporPart); break; } case ActivityMethod.Wilson: { var gamma = new ActivityCoefficientWilson(system, T, x, index); liquidPart = gamma * GetVaporPressure(system, currentComponent, T); K.BindTo(liquidPart / vaporPart); break; } default: //liquidPart = GetVaporPressure(system, currentComponent, T); if (currentComponent.IsInert) { liquidPart = new MixtureHenryCoefficient(system, T, x, index); } else { liquidPart = GetVaporPressure(system, currentComponent, T); } K.BindTo(liquidPart / vaporPart); break; } break; case EquilibriumApproach.PhiPhi: { switch (system.EquilibriumMethod.EquationOfState) { case EquationOfState.SoaveRedlichKwong: var eos = new K_EOS_SRK(system, T, p, x, y, index); K.BindTo(eos); break; default: throw new NotSupportedException("Only SoaveRedlichKwong allowed"); } break; } } return(K); }