# Converted from mmseg2cstr.m - maximum mixedness and segregated models for 2 CSTRs# ode15i for mm model → reformulate as standard ODE using a stiff solver# The implicit equation is: dcdz*z^2 + 4*(1-z)/(2-z)*(c-1) + K*c*c = 0# → dcdz = -(4*(1-z)/(2-z)*(c-1) + K*c*c) / z^2importnumpyasnpfromscipy.integrateimportsolve_ivpfrommiscimportsave_asciieps_sq=np.sqrt(np.finfo(float).eps)Kmin=1e-2;Kmax=1e3;nks=40Kseq=np.logspace(np.log10(Kmin),np.log10(Kmax),nks)defmm_ode(z,c,K):ifz==0.orz<1e-12:return[0.]return[-(4.*(1.-z)/(2.-z)*(c[0]-1.)+K*c[0]*c[0])/(z*z)]defseg_ode(z,x,K):c,ctot=xifz<1.:t=z/(1.-z)dcdt=-K*c*c/(1.-z)**2dctot=4.*t*np.exp(-2.*t)/(1.-z)**2*celse:dcdt=0.;dctot=0.return[dcdt,dctot]npts=50z=np.linspace(0.,1.,npts)c0_seg=np.array([1.,0.])cmmfin=np.zeros(nks)csegfin=np.zeros(nks)fori,Kinenumerate(Kseq):cbar=(-1.+np.sqrt(1.+2.*K))/Ksol_mm=solve_ivp(lambdaz,c:mm_ode(z,c,K),[0.,1.],[cbar],method='Radau',t_eval=z,rtol=eps_sq,atol=eps_sq)cmmfin[i]=sol_mm.y[0,-1]sol_seg=solve_ivp(lambdaz,x:seg_ode(z,x,K),[0.,1.],c0_seg,method='Radau',t_eval=z,rtol=eps_sq,atol=eps_sq)csegfin[i]=sol_seg.y[1,-1]# 2 ideal CSTRscbar1=(-1.+np.sqrt(1.+2.*Kseq))/Kseqcbar2=(-1.+np.sqrt(1.+2.*Kseq*cbar1))/Kseqtable=np.column_stack([Kseq,cmmfin,csegfin,cbar2])save_ascii('mmseg2cstr.dat',table)