Source code for PDSim.scroll.scroll_geo
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from .common_scroll_geo import *
from .symm_scroll_geo import *
from math import pi
# If scipy is available, use its interpolation and optimization functions, otherwise,
# use our implementation (for packaging purposes mostly)
try:
from scipy.optimize import fsolve
except ImportError:
from PDSim.misc.solvers import MultiDimNewtRaph as fsolve
[docs]
def set_scroll_geo(Vdisp,Vratio,Thickness,OrbitingRadius,phi_i0=0.0,phi_os=0.3, phi_is = pi, geo = None):
"""
Provide the following parameters. The rest will be calculated by the geometry code
============== ===================================================================================
Vdisp Displacement in compressor mode [m^3]
Vratio Volume ratio (compression chambers at discharge angle / displacement volume) [-]
Thickness Thickness of scroll wrap [m]
OrbitingRadius Orbiting radius of the orbiting scroll [m]
============== ===================================================================================
Optional parameters are
phi_i0
phi_os
phi_is
"""
## Determine the geometry by using the imposed parameters for the scroll wraps
def f(x,phi_i0,phi_os,Vdisp_goal,Vratio_goal,t_goal,ro_goal):
phi_ie=x[0]
phi_o0=x[1]
hs=x[2]
rb=x[3]
t=rb*(phi_i0-phi_o0)
ro=rb*pi-t
Vdisp=-2*pi*hs*rb*ro*(3*pi-2*phi_ie+phi_i0+phi_o0)
Vratio=(3*pi-2*phi_ie+phi_i0+phi_o0)/(-2*phi_os-3*pi+phi_i0+phi_o0)
r1=Vdisp-Vdisp_goal
r2=Vratio-Vratio_goal
r3=t-t_goal
r4=ro-ro_goal
return [r1,r2,r3,r4]
phi_ie,phi_o0,hs,rb = fsolve(f,np.array([20,1.3,0.03,0.003]),args=(phi_i0,phi_os,Vdisp,Vratio,Thickness,OrbitingRadius))
phi_oe=phi_ie
# Return the values
if geo is None:
geo = geoVals()
geo.h=hs
geo.rb=rb
geo.phi_oi0=geo.phi_fi0=phi_i0
geo.phi_ois=geo.phi_fis=phi_is
geo.phi_oie=geo.phi_fie=phi_ie
geo.phi_oo0=geo.phi_fo0=phi_o0
geo.phi_oos=geo.phi_fos=phi_os
geo.phi_ooe=geo.phi_foe=phi_oe
geo.ro=rb*pi-Thickness
geo.t=Thickness
return geo