def ioneqOne(self):
'''
Provide the ionization equilibrium for the selected ion as a function of temperature.
returned in self.IoneqOne
'''
#
if hasattr(self, 'Temperature'):
temperature = self.Temperature
else:
return
#
if hasattr(self, 'IoneqAll'):
ioneqAll = self.IoneqAll
else:
ioneqAll = io.ioneqRead(ioneqname = self.Defaults['ioneqfile'])
self.ioneqAll = self.IoneqAll
#
ioneqTemperature = ioneqAll['ioneqTemperature']
Z = self.Z
Ion = self.Ion
Dielectronic = self.Dielectronic
ioneqOne = np.zeros_like(temperature)
#
thisIoneq = ioneqAll['ioneqAll'][Z-1,Ion-1 + Dielectronic].squeeze()
gioneq = thisIoneq > 0.
goodt1 = self.Temperature >= ioneqTemperature[gioneq].min()
goodt2 = self.Temperature <= ioneqTemperature[gioneq].max()
goodt = np.logical_and(goodt1,goodt2)
y2 = interpolate.splrep(np.log(ioneqTemperature[gioneq]),np.log(thisIoneq[gioneq]),s=0)
#
if goodt.sum() > 0:
if self.Temperature.size > 1:
gIoneq = interpolate.splev(np.log(self.Temperature[goodt]),y2) #,der=0)
ioneqOne[goodt] = np.exp(gIoneq)
else:
gIoneq = interpolate.splev(np.log(self.Temperature),y2)
ioneqOne = np.exp(gIoneq)*np.ones(self.NTempDen, 'float64')
self.IoneqOne = ioneqOne
else:
self.IoneqOne = np.zeros_like(self.Temperature)
评论列表
文章目录