[docs]@dataclassclassSOLSolution:"""Two-point SOL solution: upstream/target conditions and heat-flux width."""T_upstream_eV:floatT_target_eV:floatn_target_19:floatq_parallel_MW_m2:floatlambda_q_mm:float
[docs]classTwoPointSOL:"""Spitzer-Harm two-point model with Eich heat-flux width scaling."""def__init__(self,R0:float,a:float,q95:float,B_pol:float,kappa:float=1.0):self.R0=R0self.a=aself.q95=q95self.B_pol=B_polself.kappa=kappaself.epsilon=a/R0self.L_par=np.pi*q95*R0
[docs]defsolve(self,P_SOL_MW:float,n_u_19:float,f_rad:float=0.0)->SOLSolution:"""Solve for target temperature, density, and parallel heat flux."""lambda_q_mm=eich_heat_flux_width(P_SOL_MW,self.R0,self.B_pol,self.epsilon)lambda_q_m=lambda_q_mm*1e-3B_ratio=self.q95/self.epsilonq_par_u_W_m2=(P_SOL_MW*1e6)/(4.0*np.pi*self.R0*lambda_q_m)*B_ratio# Spitzer-Harm conduction: T_u = (7/2 L q / kappa0)^(2/7)kappa_0=2000.0T_u=((3.5*self.L_par*q_par_u_W_m2)/kappa_0)**(2.0/7.0)q_par_t_W_m2=max(q_par_u_W_m2*(1.0-f_rad),1e3)gamma_sh=7.0e_charge=1.602e-19m_i=2.0*1.6726e-27# Deuteriumn_u=n_u_19*1e19denom=n_u*T_u*gamma_sh*e_charge*np.sqrt(2.0*e_charge/m_i)ifdenom<=0.0:T_t=0.1else:sqrt_Tt=2.0*q_par_t_W_m2/denomT_t=sqrt_Tt**2T_t=min(T_t,T_u)n_t=n_u*T_u/(2.0*max(T_t,0.1))returnSOLSolution(T_upstream_eV=float(T_u),T_target_eV=float(T_t),n_target_19=float(n_t/1e19),q_parallel_MW_m2=float(q_par_u_W_m2/1e6),lambda_q_mm=float(lambda_q_mm),)