# Проверка момента на уточнённой сетке. Запуск внутри FEMM 5.
# Положите рядом эту программу, файл FEM и одноимённый ANS.
# False: прочитать проверенное решение. True: заново построить сетку и решить.
import os
RECOMPUTE = False
try:
    script_path = __file__.replace(chr(92), '/')
    folder = script_path.rsplit('/', 1)[0] if '/' in script_path else os.getcwd()
except NameError:
    folder = os.getcwd()
opendocument(folder + '/' + 'Поверхностные-магниты-Уточнённая-сетка.fem')
if RECOMPUTE:
    mi_analyze()
mi_loadsolution()
mo_clearblock()
mo_groupselectblock(2)
moment = complex(mo_blockintegral(22)).real
mo_clearblock()
mo_groupselectblock()
coenergy = complex(mo_blockintegral(17)).real
mo_clearblock()
torque_result = {'torque_Nm': moment, 'coenergy_J': coenergy,
                'nodes': int(mo_numnodes()), 'elements': int(mo_numelements())}
print('Момент относительно (0, 0), Н·м:', moment)
print('Коэнергия всего поля, Дж:', coenergy)
print('Узлов:', torque_result['nodes'], 'Элементов:', torque_result['elements'])
# Для радиальной SPM интеграл энергии 2 этой сборки имеет известную ошибку.
# Здесь используется коэнергия 17; коррекция энергии описана в шаге 11 примера.
mo_zoomnatural()
