Как решить "Runtimewarning: недопустимое значение, встречающееся в double_scalars" и "Runtimewarning: деление на ноль, встречающееся по мощности"? - PullRequest
0 голосов
/ 22 мая 2019

Я получаю сообщение об ошибке

RuntimeWarning: деление на ноль, обнаруженное в мощности

и

RuntimeWarning: недопустимое значение, обнаруженное вdouble_scalars

последовательно для одного из вычислений для двух значений в цикле my.Это два значения: Tu и n_u_com, но оно не соответствует тому, из-за чего возникает ошибка.

Я попытался напечатать все значения в расчете, чтобы увидеть, присутствуют ли какие-либо "0" или "nan", и ничего не нашел.

import numpy as np
import matplotlib.pyplot as plt
import csv

#Constants specific to problem
del_e = 0.4      
m_e = 9.10938356*10**-31  #[kg]
m_i = 3.34449439655*10**-27  #deutrium [kg]
ko_e = 2000       #stangeby page 394      [Electron conduction coefficient
ko_i = 58.9         #Ion conduction coefficient
k_b = 1.381e-23 #Boltzmans constant [J/K]
K_ev = 11604.525    #ev to kelvin conversion factor
e = 1.6e-19         #coulombs

def main():
Ti_Te_ratio = int(input("Select Ti/Te ratio: \n[1]-Ti/Te=1 \n[2]-Ti/Te=2 \n[3]-Ti/Te=3 \n[4]-Ti/Te=4 \n[5]-Ti/Te=5\n"))
y = int(input("1.Complex gamma \n2.gamma = 7\n"))

Te_t=np.zeros(26,dtype=float)
Ti_t=np.zeros(26,dtype=float)
n_t=np.zeros(26,dtype=float)
L=np.zeros(26,dtype=float)
gamma=np.zeros(26,dtype=float)
c_s=np.zeros(26,dtype=float)
Tu=np.zeros(26,dtype=float)
q_par=np.zeros(26,dtype=float)
n_u_simp=np.zeros(26,dtype=float)
n_u_com=np.zeros(26,dtype=float)
Te_u_div=np.zeros(26,dtype=float)
Ti_u_div=np.zeros(26,dtype=float)
n_u_div=np.zeros(26,dtype=float)
q_par_div=np.zeros(26,dtype=float)
Tu_div=np.zeros(26,dtype=float)
c_s_div=np.zeros(26,dtype=float)

test=np.zeros(10,dtype=float)
s=0
#factor={}
#print(Ti_Te_ratio)
i=0
#z=0    


if (Ti_Te_ratio == 1):
    data_file = open('Ti=Te.csv')
    csv_f = csv.reader(data_file)

if (Ti_Te_ratio == 2):
    data_file = open('Ti=2Te.csv')
    csv_f = csv.reader(data_file)

if (Ti_Te_ratio == 3):
    data_file = open('Ti=3Te.csv')
    csv_f = csv.reader(data_file)

if (Ti_Te_ratio == 4):
    data_file = open('Ti=4Te.csv')
    csv_f = csv.reader(data_file)

if (Ti_Te_ratio == 5):
    data_file = open('Ti=5Te.csv')
    csv_f = csv.reader(data_file)

for row in csv_f:

    if i == 26:
        #print("end")
        break
    else:
        #print(i)
        Te_t[i] = float(row[3])
        Ti_t[i] = float(row[4])
        n_t[i] = float(row[5])
        L[i] = float(row[10])
        Te_u_div[i] = float(row[6])
        Ti_u_div[i] =  float(row[7])
        n_u_div[i] = float(row[8])
        q_par_div[i] = float(row[9])
        Tu_div[i] = float(Te_u_div[i]+Ti_u_div[i])
        c_s_div[i] = float(row[11])
        #print(Ti_t[i])
        i = i+1


f_cond=np.linspace(.1,.9,9)     
f_pow=np.linspace(.1,.9,9)
f_mom=np.linspace(.1,.9,9)

for a in f_cond:
    s=s+1
    for b in f_pow:
        for c in f_mom:
            #factor[z]=[a,b,c]
            #print(factor[z])
            #z=z+1  

            if y ==1:      
                for x in range(0, len(Te_t)):
                    gamma[x] = 2.5*Ti_t[x]/Te_t[x]+2/(1-del_e)-0.5*np.log((2*np.pi*m_e/m_i)*(1+Ti_t[x]/Te_t[x])*(1-del_e)**-2)+.05        #[int] Sheath heat transmission coefficient Stangeby pg. 649
                    #print(gamma[x])
                    c_s[x] = np.power([k_b*(Ti_t[x]+Te_t[x])*K_ev/(m_e+m_i)] , 0.5)
                    #print(c_s[x])
                    q_par[x] = gamma[x]*n_t[x]*k_b*K_ev*(Ti_t[x]+Te_t[x])*c_s[x]*(1-b)
                    #print("x=",x,"Ti_t=",Ti_t[x],"Te_t=",Te_t[x],"f_cond=",a,"q_par=",q_par[x],"L=",L[x])
                    Tu[x] = np.power(np.power(Ti_t[x]+Te_t[x], (7/2))+(7/2)*a*q_par[x]*L[x]/ko_e , (2/7))
                    test[s]=Tu[0]
                    #print("a=",a,"b=",b,"c=",c)
                    #print("x=",x)
                    #print(Tu[x])
                    n_u_simp[x] = 2*n_t[x]*(Ti_t[x]+Te_t[x])/(c*Tu[x])
                    n_u_com[x] = np.power(m_i/(2*e*(Ti_t[x]+Te_t[x]))*4*np.power(q_par[x], 2)*np.power((7/2)*q_par[x]*L[x]/ko_e, (-4/7))/(np.power(gamma[x], 2)*e**2), 0.5)/c

Ниже приведена копияодной из ошибок для n_u_comp.

a= 0.1 b= 0.1 c= 0.1
x= 19
10.326673193174681
a= 0.1 b= 0.1C:/.AA_UT Skewl/Plasma Work/Masters Thesis-Two Point Model/TPM with DIVIMP input wtih correction factors.py:120: RuntimeWarning: divide by zero encountered in power
  n_u_com[x] = np.power(m_i/(2*e*(Ti_t[x]+Te_t[x]))*4*np.power(q_par[x], 2)*np.power((7/2)*q_par[x]*L[x]/ko_e, (-4/7))/(np.power(gamma[x], 2)*e**2), 0.5)/c
C:/.AA_UT Skewl/Plasma Work/Masters Thesis-Two Point Model/TPM with DIVIMP input wtih correction factors.py:120: RuntimeWarning: invalid value encountered in double_scalars
  n_u_com[x] = np.power(m_i/(2*e*(Ti_t[x]+Te_t[x]))*4*np.power(q_par[x], 2)*np.power((7/2)*q_par[x]*L[x]/ko_e, (-4/7))/(np.power(gamma[x], 2)*e**2), 0.5)/c
 c= 0.1
x= 20
12.535269603652413
a= 0.1 b= 0.1 c= 0.1

Я распечатал тестовый массив, который хранит все значения для Tu каждый раз, когда меняется «a» (0.1,0.2,0.3 и т. д.) с b = 0,9 и c= 0,9 и получил следующие результаты: [0. 70,930719 71,83187034 72,70561282 73,55386582 74,37834424 75,18058716 75,96198164 76,72378251 77,46712907] Так что Ту равен нулю в первый раз, что для меня не имеет смысла

...