# -*- coding: utf-8 -*-
"""변위가 커진 자리가 '다리로 붙인 덩어리' 인지 실측한다(global_g.pkl 캐시 사용).
추측 금지 — 부품별 최대 변위를 그대로 적는다."""
import os, pickle
import numpy as np
import fea_server as F
D = pickle.load(open(os.path.join(F.WORK_ROOT, 'global_g.pkl'), 'rb'))
g = D['g']; nd = g['nodes']; mag = np.linalg.norm(g['disp'], axis=1); parts = g['parts']
i = int(np.argmax(mag))
print('전체 최대 변위 %.4fmm @ (%.0f, %.0f, %.0f)' % (mag[i], *nd[i]))
C = {90, 115, 117, 118, 119, 120, 121}      # 다리(90↔91) 로 붙은 덩어리
rows = sorted(((float(mag[p['n0']:p['n1']].max()), int(p['no']), str(p['name'])) for p in parts),
              reverse=True)
for v, no, nm in rows[:10]:
    print('  %4d번 %-26s %8.4fmm %s' % (no, nm[:26], v, '← 다리 덩어리' if no in C else ''))
cm = max(r[0] for r in rows if r[1] in C); om = max(r[0] for r in rows if r[1] not in C)
print('덩어리 C 최대 %.4fmm / 나머지 최대 %.4fmm → 전체 최대는 %s 쪽'
      % (cm, om, 'C' if cm > om else '나머지'))
