# Converted from st_st_osc.m - Full S+upper branch with eigenvalues (limit cycle params)importnumpyasnpfromscipy.optimizeimportfsolvefrommiscimportsave_asciip=dict(k_m=0.004,T_m=298.,E=15000.,c_Af=2.,C_p=4.,rho=1000.,T_f=298.,T_a=298.,DeltaH_R=-2.2e5,U=340.,theta=35.,T_set=321.53,c_set=0.48995,T_fs=298.,Kc=0.,)p['C_ps']=p['C_p']*p['rho']defst_st_cA(x,c_A,p):theta=x[0];T=x[1]k=p['k_m']*np.exp(-p['E']*(1./T-1./p['T_m']))return[p['c_Af']-(1+k*theta)*c_A,p['U']*theta*(p['T_a']-T)+p['C_ps']*(p['T_f']-T)-k*theta*c_A*p['DeltaH_R']]defst_st_theta(x,theta,p):c_A=x[0];T=x[1]k=p['k_m']*np.exp(-p['E']*(1./T-1./p['T_m']))return[p['c_Af']-(1+k*theta)*c_A,p['U']*theta*(p['T_a']-T)+p['C_ps']*(p['T_f']-T)-k*theta*c_A*p['DeltaH_R']]defcompute_lamrow(k,c_A,T,theta,p):Jac=np.array([[-1./theta-k,-k*c_A*p['E']/(T*T)],[-k*p['DeltaH_R']/p['C_ps'],-p['U']/p['C_ps']-1./theta-k*c_A*p['DeltaH_R']/p['C_ps']*p['E']/(T*T)]])lam=np.linalg.eigvals(Jac)a=lam[0].real;b=lam[0].imagc=lam[1].real;d=lam[1].imagifa>=c:return[a,b,c,d]return[c,d,a,b]# Lower branch (c_A as independent)x0=[1.,p['T_f']]nc_As=200c_Avect=np.linspace(0.9999*p['c_Af'],0.005*p['c_Af'],nc_As)table=[]forc_Ainc_Avect:X,info_d,ier,msg=fsolve(lambdax:st_st_cA(x,c_A,p),x0,full_output=True)theta=X[0];T=X[1]conv=(p['c_Af']-c_A)/p['c_Af']k=p['k_m']*np.exp(-p['E']*(1./T-1./p['T_m']))lamrow=compute_lamrow(k,c_A,T,theta,p)table.append([theta,T,conv]+lamrow+[float(ier)])x0=X# Remember corner pointc_A_corner=c_A;T_corner=Ttheta_corner=theta# Upper branch (theta as independent, turn the corner)x0=[c_A_corner,T_corner]nthetas=100theta_vect=np.logspace(np.log10(theta_corner),np.log10(500.),nthetas)tmp_table2=[]forthetaintheta_vect:X,info_d,ier,msg=fsolve(lambdax:st_st_theta(x,theta,p),x0,full_output=True)c_A=X[0];T=X[1]conv=(p['c_Af']-c_A)/p['c_Af']k=p['k_m']*np.exp(-p['E']*(1./T-1./p['T_m']))lamrow=compute_lamrow(k,c_A,T,theta,p)tmp_table2.append([theta,T,conv]+lamrow+[float(ier)])x0=Xtable=np.array(table+tmp_table2)save_ascii('st_st_osc.dat',table)