import numpy as np, sys, operator
load('technocloud_shared_scripts/cartesian.py')
materials_db = np.array([[630, 330, 250, 310, 180],
[650, 350, 260, 320, 185],
[650, 350, 260, 325, 185]])
materials_hheader = ['сталь', 'sigma_в', 'sigma_т', 'sigma_{-1р}', 'sigma_{-1}', 'tau{-1}']
materials_vheader = ['сталь 40Х', 'сталь 45Х', 'сталь 50Х']
F = input_data['F']
k = input_data['k']
d = input_data['d']
material = input_data['material']
errors = []
warnings = []
missing_materials = set(material) - set(materials_vheader)
if missing_materials:
warnings.append("Ошибка 1. Следующие материалы отстутствуют в базе данных: {0}. Пожалуйста, проверьте правильность их написания или сообщите в техподдержку, какие материалы следует добавить. Расчёт будет продолжен для правильно указанных материалов.".format(', '.join(missing_materials)))
for m in copy(material):
if m in missing_materials:
material.remove(m)
if material == []:
errors.append("Ошибка 2. Все материалы написаны неправильно или отсутствуют в базе данных. Пожалуйста, проверьте правильность написания материалов или сообщите в службу поддержки, какие материалы следует добавить.")
sys.exit("Выполнение расчёта прервано")
material_ind = [materials_vheader.index(m) for m in material]
start_ind, end_ind = limits
d_list, F_list, k_list, materials_ind_list = cartesian((d, F, k, material_ind))[start_ind:end_ind].T
count = reduce(operator.mul, [len(el) for el in [d, F, k, material_ind]], 1)
sigma_t_list_part = np.copy(materials_ind_list_part)
sigma_t_ind = hmaterials_db.index('sigma_т')
for m in material:
sigma_t_list_part[np.where(materials_ind_list_part == material.index(m))] = materials_db[sigma_t_ind, vmaterials_db.index(m)]
sigma_lim_list_part = sigma_t_list_part/k_list_part
d_lim_list_part = np.sqrt(4*F_list_part/(np.pi*sigma_lim_list_part))
res = []
tab1 = {
'table': {'head': [], 'body': []},
'errors': [],
'bads': [],
'exports': [],
'count': count
}
tab1['table']['head'] = [
r"Диаметр стержня $d$, мм",
r"Растягивающее усилие $F$, Н",
r"Коэффициент запаса $k$, б/разм",
r"Материал стержня",
r"Предел текучести $\sigma_т$, МПа",
r"Допускаемое напряжение $[\sigma]$, МПа",
r"Минимально допустимый диаметр стержня $[d]$, мм"
]
tab1['errors'] = [
r'$[d]$ > d',
]
tab1['text'] = "Тип нагрузки: растяжение."
sigma_t_list_part = np.around(sigma_t_list_part, decimals=1)
sigma_t_list_part = np.around(sigma_t_list_part, decimals=1)
sigma_lim_list_part = np.around(sigma_lim_list_part, decimals=1)
d_lim_list_part = np.around(d_lim_list_part, decimals=1)
res_table = np.transpose(np.array([d_list_part, F_list_part, k_list_part, materials_ind_list_part, sigma_t_list_part, sigma_lim_list_part, d_lim_list_part]))
res_table = res_table.tolist()
for i in srange(len(res_table)):
res_table[i][3] = material[int(res_table[i][3])]
tab1['table']['body'] = res_table
d_warn = np.where(d_lim_list_part > d_list_part)
tab1['bads'] = [(t,6,0) for t in d_warn[0].tolist()]
tab1['export'] = [
{
'title': '.csv',
'filename': 'barTension.csv',
'header': 'd,F,k,material,sigma_t,[sigma],[d]',
'data': []
},
{
'title': 'T-Flex CAD',
'filename': 'barTension.txt',
'header': 'd,F,k,material,sigma_t,[sigma],[d]',
'data': []
},
]
for row in res_table:
tab1['export'][0]['data'].append(';'.join([str(t) for t in row]))
tab1['export'][1]['data'].append(','.join([str(row[t]) for t in [0,1,2,3,6]]))
if len(tab1['table']['body']) == 0:
tab1['table'] = False
tab1['html'] = '<strong>Не удалось подобрать стержень</strong>'
res.append(tab1)