owls_ion_tables.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:yt 作者: yt-project 项目源码 文件源码
def interp( self, nH, T ):

        nH = np.array( nH )
        T  = np.array( T )

        if nH.size != T.size:
            raise ValueError(' owls_ion_tables: array size mismatch !!! ')

        # field discovery will have nH.size == 1 and T.size == 1
        # in that case we simply return 1.0

        if nH.size == 1 and T.size == 1:
            ionfrac = 1.0
            return ionfrac


        # find inH and fnH
        #-----------------------------------------------------
        x_nH = ( nH - self.nH[0] ) / self.DELTA_nH
        x_nH_clip = np.clip( x_nH, 0.0, self.nH.size-1.001 )
        fnH,inH = np.modf( x_nH_clip )
        inH = inH.astype( np.int32 )


        # find iT and fT
        #-----------------------------------------------------
        x_T = ( T - self.T[0] ) / self.DELTA_T
        x_T_clip = np.clip( x_T, 0.0, self.T.size-1.001 )
        fT,iT = np.modf( x_T_clip )
        iT = iT.astype( np.int32 )


        # short names for previously calculated iz and fz
        #-----------------------------------------------------
        iz = self.iz
        fz = self.fz


        # calculate interpolated value
        # use tri-linear interpolation on the log values
        #-----------------------------------------------------

        ionfrac = self.ionbal[inH,   iT,   iz  ] * (1-fnH) * (1-fT) * (1-fz) + \
                  self.ionbal[inH+1, iT,   iz  ] * (fnH)   * (1-fT) * (1-fz) + \
                  self.ionbal[inH,   iT+1, iz  ] * (1-fnH) * (fT)   * (1-fz) + \
                  self.ionbal[inH,   iT,   iz+1] * (1-fnH) * (1-fT) * (fz)   + \
                  self.ionbal[inH+1, iT,   iz+1] * (fnH)   * (1-fT) * (fz)   + \
                  self.ionbal[inH,   iT+1, iz+1] * (1-fnH) * (fT)   * (fz)   + \
                  self.ionbal[inH+1, iT+1, iz]   * (fnH)   * (fT)   * (1-fz) + \
                  self.ionbal[inH+1, iT+1, iz+1] * (fnH)   * (fT)   * (fz)

        return 10**ionfrac
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号