kСобственный параметр (eigenvalue) MET1000

Этот пример демонстрирует возможность анализа TAR. Для начала необходимо импортировать пакет, а также импортируются два дополнительных пакета для анализа.

import sauna
import pandas as pd
import numpy as np

Далее необходимо импортировать ковариации и чувствительности в качестве основы для оптимизации.

covariances = sauna.Covariances()
covariances.library = 'ENDF-B-VII.1'
covariances.group_structure = sauna.GROUP_STRUCTURES['WPEC-SG46']
covariances.from_excels(f'../../covariances/{covariances.library}-7/')
sensitivities = sauna.Sensitivities()
sensitivities.group_structure = sauna.GROUP_STRUCTURES['WPEC-SG46']
sensitivities.from_serpent('../../models/MET1000_FC_7_sens0.m') 

Следующим шагом является создание словаря с функционалами и соответствующими требованиями к целевой точности. Хотя SAUNA позволяет решать задачу TAR с несколькими функционалами и моделями, в этом примере рассматривается только собственное значение MET1000, поэтому словарь содержит только один элемент, установленный на 0.3%.

tars = {'Eigenvalue' : 0.003}

Для быстрой демонстрации рекомендуется задать небольшое количество реакций при вызове функции TAR. Нижняя граница установлена на 0.5%, хотя это может быть все еще слишком оптимистично.

target_covariances = sauna.Analysis.tars([sensitivities], covariances, tars, number_of_reactions=5, lower_boundary=5e-3, method='trust-constr')

После сходимости решения можно оценить, как изменяется влияние неопределенности. Следующий код распространяет неопределенность для базовых ковариаций и целевых ковариаций соответственно, экспортируя в Excel для дальнейшего анализа или используя пакет pandas. Следует отметить, что результат распространения будет отличаться, потому что оптимизация здесь выполнена только для пяти основных ковариаций и соответствующих канал-канал ковариаций, в то время как существенный вклад также вносят другие реакции.

dfs     = sauna.Analysis.get_breakdown(sensitivities, covariances)
new_dfs = sauna.Analysis.get_breakdown(sensitivities, target_covariances)

df1 = dfs['Eigenvalue'].copy(deep=True)
df2 = new_dfs['Eigenvalue'].copy(deep=True)
df2 = df2.drop(columns=['Statistical Uncertainty [%]'])
df1 = df1.drop(columns=['Statistical Uncertainty [%]'])

Чтобы получить сравнение с помощью возможностей pandas, merge() функция может быть использована.

Неизменившиеся значения можно удалить, чтобы упростить сравнение.

Ожидаемый результат выглядит так, как показано на Рис. 1.

Рисунок 1. Требования к целевой точности для собственных значений MET1000 с использованием пяти матриц ковариаций

Чтобы яснее увидеть, какие энергетические диапазоны испытали наибольшее изменение, распространение неопределенности можно выполнить по группам.

Более глубокий анализ потребует сортировки с различной логикой для выделения значений с наибольшим влиянием в зависимости от цели пользователя.

Последнее обновление