Регулярные выражения в расчетах ядерной трансмутации

от автора

Введение

Процессы ядерных превращений (трансмутаций) в веществе, происходящие под воздействием нейтронного облучения, представляются особенно важными при выборе материалов, которые используют в качестве конструкционных для широкого круга узлов и устройств ядерных реакторов различного типа. Ядерные трансмутации приводят к изменению химического и изотопного состава, происходит накопление радиоактивных и стабильных продуктов, содержание которых определяет времена безопасной эксплуатации устройств в ядерно–энергетических установках с точки зрения как радиационной, так и функциональной [1, 2].

Моделирование ядерного процесса в виде линейной системы обыкновенных дифференциальных уравнений приводит к задаче дискретной оптимизации схемы нуклидных превращений эвристическими алгоритмами из методов дискретной глобальной и локальной оптимизации с элементами математической теории принятия решений и теории искусственного интеллекта [3,4,5].

В качестве инструментального средства пользователя разработана под Windows XP УНИВЕРСАЛЬНАЯ ПРОГРАММА МЕТРОЛОГА (УПМ). Настоящая версия УПМ предназначена для проведения расчётов эффектов ядерной трансмутации, повреждающей дозы в конструкционных материалах при реакторном облучении с использованием данных БД нейтронно-физических характеристик, химического состава материала и схем нуклидных превращений.

Объём нейтронно-физических данных в созданной для УПМ БД занимает 1,1 Мб. Состоит из 162 записей по энергетическим спектрам нейтронов измеренных или рассчитанных для различных точек и конфигураций исследовательских реакторов. Данные по химическому составу конструкционных материалов составлены на основе реально используемых в облучательных устройствах, в конструкторских элементах исследовательских реакторов (чехлы экранных сборок, оболочки тепловыделяющих элементов и т.д.). Данные по разветвлённым блочным схемам нуклидных превращений обновляются на основе проводимых расчётов ядерной трансмутации.
В расчётах ядерной трансмутации и в основе обработки текстов с результатами расчётов приложение широко использует регулярные выражения. Регулярные выражения предоставляют мощный, гибкий и эффективный метод обработки текста. Обширные возможности сопоставления шаблонов, предоставляемые регулярными выражениями, позволяют быстро анализировать большие объемы текста, проверять текст на соответствие определенным заранее шаблонам (например, формату интегрированных библиотек оценённых ядерных данных по сечениям реакций взаимодействия нейтронов с ядрами атомов ADL-3[6], FENDL-2.0[7], ENDF/B-VII.0[8], и JEFF-3.1.1[9] ), извлекать, изменять, заменять или удалять подстроки текста, а также добавлять извлеченные строки в коллекцию для формирования отчетов.

Для создания научной программы использовались возможности класса System.Text.RegularExpressions.Regex в среде разработки Microsoft VISUAL STUDIO .NET.

Применение регулярных выражений в УПМ

Общие сведения об УПМ

Универсальная программа метеоролога – это приложение с графическим интерфейсом пользователя предполагает псевдо/реально-мультизадачный режим выполнения. Программа разработана по принципу модульного проектирования, содержит пакет утилит PREPRO 2007[11] и ряд самостоятельных подпрограмм в виде dll-файлов динамической библиотеки, exe-файлов. Интерфейсная часть УПМ и алгоритмы расчётных процедур написаны на языке VISUAL C++ .NET в среде разработки Microsoft VISUAL STUDIO .NET[12, 13]. Структура БД создана средствами управления базами данных MS SQL Server.2000[14]. В настоящее время тестируется на экспериментальных данных для подтверждения адекватности расчётов и определения поправок.

Пакет утилит PREPRO 2007 используется для предварительной обработки ядерных данных в формате ENDF/B. Это — модульный набор компьютерных кодов, каждый из которых читает и записывает оценённые ядерные данные в формате ENDF. Каждый код исполняет одну или несколько независимых операций над данными. Предварительная обработка ENDF форматированных данных необходима для последующего использования в приложениях. Утилиты пакета PREPRO 2007 являются независимыми и совместимыми с современными операционными системами любого типа компьютера от большого универсального компьютера до маленьких персональных компьютеров, таких как IBM-PC и Power MAC.

Общие сведения о регулярных выражениях[15]

Понятие регулярного языка играет важнейшую роль в современной информатике – причём как в теоретических, так и практических её разделах. Регулярные языки являются важным классом формальных языков. Формальные языки классифицируются в соответствии с типами грамматик, которыми они задаются. Сложность языка определяется его типом. Наиболее сложные — языки с фразовой структурой (сюда можно отнести естественные языки), далее — контекстно-зависимые языки, контекстно-свободные языки и самые простые — регулярные языки.

Удобный и компактный способ конечного описания формального языка — регулярные выражения, — который находит практическое применение во многих компьютерных приложениях, таких как текстовые редакторы, интерпретаторы командной строки и автоматические генераторы лексических анализаторов, информационно-поисковые системы.

Краткие сведения о формате ENDF/B-6

ENDF/B-6 является международным форматом для хранения оцененных ядерных данных (см. приложение 1). Однажды подготовленные в формате ENDF наборы оцененных данных могут преобразовываться в формы, пригодные для тестирования и непосредственных приложений с помощью обрабатывающих программ. Разработаны обрабатывающие программы, которые получают усредненные по группам сечения из библиотеки ENDF для использования в нейтронных расчетах. Эти программы выполняют такие функции как восстановление детального хода сечений по параметрам резонансов, Доплеровское уширение резонансных линий, усреднение по заданным энергетическим группам, и/или перевод в специальные интерфейсные форматы.

Описательная информация даётся в виде серии карточных образов, каждая карта содержит в себе до 66 символов Холлерита [16].
Последняя оценка стандартов была выполнена в 2005 году и в настоящее время включена только в оценку ENDF/B-VII.

Примеры регулярных выражений из УПМ

Подстроки

Класс System.Text.RegularExpressions.Regex [17,18] представляет обработчик регулярных выражений .NET Framework. Объект типа Regex инициализирем передачей строки в конструктор (см. выделенную строку листинга). Тривиальным случаем регулярного выражения является строка, состоящая из одного символа алфавита регулярного языка. Например, "=", "-", "\\n", "\\t". Приведенный ниже пример из УПМ иллюстрирует процесс поиска подстроки «CROSS» в другой строке:

DirectoryInfo* di = new DirectoryInfo(Environment::CurrentDirectory); DirectoryInfo* fi[] = di->GetDirectories(); String* l_strContents; Regex* myDirectory = new Regex(S"CROSS"); for(int i=0;i<fi->Length; i++) { 	l_strContents=String::Copy(fi->GetValue(i)->ToString()); 	if(myDirectory->IsMatch(l_strContents)) break; } 

Метод IsMatch() указывает, обнаружено ли в указанной входной строке соответствие. Приведённый образец поиска относится к простым регулярным выражениям, так как это уровня строчных методов. Приведу примеры других подстрок для организации поиска в строках (см. таб.1).

Таблица 1.
Фрагменты листинга Подстроки

Regex* myEqual = new Regex(S"\\n"); String* sim[]=myEqual->Split(l_strContents);	"\\n" Regex* FirstRegex = new Regex(S"->"); if(FirstRegex->IsMatch(words)){…}	"->" Regex* myOneRegex = new Regex(S"ppm"); if(!myOneRegex->IsMatch(m_ptrLVMaterial->get_Items()-> get_Item(MaterialIndex)->get_SubItems()->get_Item(j)-> get_Text()->ToString())){…}	"ppm" 

Во фрагментах листингов можно встретить применение метода Split(). Метод разделяет входную строку в позициях, которые определяются сопоставлением регулярного выражения. Реализации образцов строк «SKALE», «Chart», «8457» аналогичны. Рассмотрю теперь более сложные образцы для поиска.

Классы символов

Класс символов определяет набор символов, один из которых может возникнуть в строке ввода, чтобы поиск соответствия выполнился успешно. Данный список символов можно задать по отдельности [группа_ символов], где группа_символов — это список отдельных символов, или/и как диапазон [пер-вый_символ — последний_символ], где первый_символ — это символ, с которого начинается диапазон, а последний_символ — это символ, которым заканчивается диапазон.

Классы символов состоят из языковых элементов, примеры перечислены в следующей таблице (таб.2). Класс символов соответствует какому-либо одному набору символов.

Для проверки действительного числа с плавающей точкой УПМ использует регулярное выражение вида: "$[0-9][.]?[0-9]+[eE]?[-+]?[0-9]-$", где знак? имеет смысл «0 или 1», знак + имеет смысл «один или несколько», знак — имеет смысл «0 или более»
Вот в таком виде использовала регулярные выражения для проверки нуклидов.

"[\\w]+[-]{1}[\\d]+[mM]?[\\d]?"
"[0-9]{1,3}-[A-Za-z\\s]{2}-[0-9\\s]{3}[MNO]{0,1}"

Здесь знак перехода \w указывает на любой из символов, составляющих слово, такой как буква, цифра или символ подчеркивания. Предполагаем, что нуклид состоит из одного или двух символов, разделенных одним дефисом, после чего следуют символы десятичных цифр, за которыми может быть знак изомерности данного нуклида в виде символа m или M в первом случае (соответствует формату ENDF/B6 диалект INT для ADL-3), или символа M или N или O во втором случае (соответствует формату ENDF/B-6 для остальных библиотек), да-лее могут следовать символы десятичных цифр, которые указывают на номер уровня изомерности нуклида.
В соответствии с первым определением корректными будут нуклиды: He-4, Co-60, Co-60m, Zn-61m2, Zn-61m3. В соответствии со вторым определением регулярного выражения корректными будут нуклиды: 2-He- 4, 27-Co- 60, 27-Co- 60M, 30-Zn- 61N, 30-Zn- 61O.

Таблица 2.

Регулярные выражения с классами символов
"[ \\b\\n\\t\\r]+"
"[\\d\\.\\w-+]+[\\s\\t]{1}"
"[\\w]+[-]{1}[\\d]+[mM]?[\\d]?"
"[0-9]{1}\\.[0-9]+[-+]{1}[0-9]+"
"[=\\s]+"
"$(?<=\b|v0|=)[\\d\\.+-\\w]{8}[\\s\\t]{1}"
"(?<=\b|~0|=)[\\d\\.+-\\w]{8}[\\s\\t]{1}$"
"[M,m]?"
"$[0-9][.]?[0-9]+[eE]?[-+]?[0-9]-$"
"[\\s\\b\\t]+"
"[\\d\\.\\w-+]+"

Конструкции группирования

Конструкции группирования отображают части выражений с помощью регулярных выражений и обычно захватывают части строки во входной строке. Конструкции группирования состоят из языковых элементов.

Следующая конструкция группирования захватывает соответствующую часть выражения: (часть_выражения), где часть_выражения — это любой допустимый шаблон регулярного выражения. Записывает, что использование скобок нумеруется автоматически слева направо, основываясь на порядке открывающих скобок в регулярном выражении, начиная с 1. Захват с номером 0 – это текст, соответствующий всему шаблону регулярного выражения.

Ранее уже была описана конструкция для проверки действительного числа с плавающей точкой. Покажу второй вариант.

"([\\d\\.\\w-+]+[\\s\\t]{1})"

Образец регулярного выражения захватывает соответствующую часть выражения [\\d\\.\\w-+]+[\\s\\t]{1}, где класс символов [\\d\\.\\w-+] позволяет проверять одно или более стандартных десятичных цифр с возможным вхождением символа экспоненты и знака порядка числа, а класс символов [\\s\\t], позволяет проверять строго один символ пробела или табуляции.

Здесь используется конструкция группирования, так как в обрабатываемом тексте каждая строка представлена двумя действительными значениями, между которыми встречается символ пробела, либо символ табуляции. Значения двумерного массива для описания нейтронного спектра обрабатываются и используются при составлении рабочих файлов пакета утилит PREPRO 2007[11] для предварительной обработки ядерных данных в формате ENDF/B-6. Текстовый формат рабочего файла GROUPIE.LST представлен в виде фрагмента ниже (см. приложение 2).

Перечислим примеры реализованных конструкций группирования в УПМ (см.таб.3).

Таблица 3.

Регулярные выражения с конструкциями группирования
"([ \\b\\n\\t\\r]+)"
"([\\w]+[-]{1}[\\d]+[mM]?[\\d]?)"
"([\\d\\.\\w-+]+[\\s\\t]{1})"
"( \\b)"
"(\\n)"
"(\\t)"
"( )"
"([\\d\\.\\w-+]+)"
"(\\d+)"
"([A-Z,a-z, А-Я, а-я,0-9,\\-,,]+)"
"(\\.\\w+)"
"(\\w+[-\\.]+\\d+)"
"(\\w+[-\\.]?\\d*\\w?[-+]?\\d*)"
"([\\w-]+)$"
"([ \\d]{3}-[ \\w]{2}-[ \\d]{3})"

ЗАКЛЮЧЕНИЕ

Демонстрация некоторых регулярных выражений УПМ показывает гибкие возможности манипулирования произвольным текстовым форматом, предоставляемые инструментарием регулярных выражений. Регулярные выражения позволили реализовать быстрый анализ текста и поиска определенных шаблонов символов, для извлечения, редактирования, замены или удаления текстовых подстрок, а также для добавления извлеченных строк в коллекцию при создании отчета. Особенность эффективного применения регулярных выражений, в отличие от строковых типов, наглядна в реализации к ENDF/B-6 формату оценённых ядерных данных при использовании интегрированных библиотек, таких как ADL-3, FENDL-2.0, ENDF/B-VII.0, JEFF-3.1.1.

Список литературы

1. Конструкционные материалы ядерных реакторов. Часть 2: Структура, свойства, назначение / Под ред. Н.М.Бескоровайного. М.: Атомиздат, 1977, 256 с.
2. Solonin M.I., Chernov V.M., Gorokhov V.A., et al. Present Status and Future Prospect of the Russian Program for Fusion Low-activation Materials // J. Nucl. Ma-ter. 283-287. 2000. 1468-1472.
3. Markina N.V., Shimansky G.A. TRANS_MU computer code for computation of transmutant formation kinetics in advanced structural materials for fusion reactors //Journal of nuclear materials, 271-272, 1999, p.30-34.
4. Белозёрова А.Р., Шиманский Г.А. Оптимизация схемы расчёта трансмутации методом ветвей и границ //Сборник рефератов семинара “Физическое моде-лирование изменения свойств реакторных материалов в номинальных и аварийных условиях”, Димитровград, 5-6 апреля 2004. Димитровград: ФГУП ГНЦ РФ НИИАР, 2005. С.75-77.
5. Белозёрова А.Р., Мельников Б.Ф. Применение комплекса эвристик в задаче составления схемы нуклидных превращений //Сборник трудов Второй Всероссийской научной конференции «Методы и средства обработки информации», Москва, 5-7 октября 2005. Москва: Московский государственный университет им М.В.Ломоносова, 2005. С.208-214.
6. Грудзевич О.Т., Зеленецкий А.В., Игнатюк А.В., Пащенко А.Б. Библиотека ядерно-физических данных для расчётов активации и трансмутации //Атомная энергия, 1994 г., т. 76, вып.2., С. 124-130.
7. International Atomic Energy Agency (http://www.iaea.org/), Division of Physical and Chemical Sciences, Nuclear Data Section, A-1400 AUSTRIA, CD ROM Edition, Request 2378.01, FENDL-2, May 1998 Version, www-nds.iaea.org/fendl/index.html
8. www.nndc.bnl.gov/exfor/endf00.jsp Nuclear Data Sheets, Volume 112, Issue 12, December 2011, Pages 2887–2996, Special Issue on ENDF/B-VII.1 Library
9. www.nea.fr/dbforms/data/eva/evatapes/jeff_31/ J-Ch Sublet, A J Koning1, R A Forrest, J Kopecky The JEFF-3.0/A Neutron Activation File — EAF-2003 into ENDF-6 format, JEFDOC-982, CEA Cadarache, DEN/DER/SPRC 13108 Saint Paul Lez Durance, France, November 2003, p.34.
10. Richard B. Firestone, Table of Isotopes, Office of Energy Research, Office of High Energy and Nuclear Physics, Nuclear Physics Division of the US Department of Energy under contract DE-AC03-76SF00098, subcontract LBL no. 4573810, CD ROM Edition, Version 1.0, March, 1996.
11. www-nds.iaea.org/ndspub/endf/prepro2007/ PREPRO 2007, ENDF/B Pre-processing Codes (ENDF/B-VII Tested) Owned, Maintained and Distributed by The Nuclear Data Section International Atomic Energy Agency P.O. Box 100 A-1400, Vi-enna, Austria
12. Торстеинсон П., Оберг Р. Архитектура .NET и программирование на Visual C++ /Пер. с англ. — М.: Издательский дом «Вильямc», 2002.
13. Саранг П.Г., Корера А., Фрейзер С., Джентайл С., Кумар Н., Маклин С., Ро-бинсон С. Visual C++ .NET: Пособие для разработчиков C++ /Пер. с англ. — М.: Издательство «ЛОРИ», 2003.
14. Артёмов Д.В. Microsoft SQL Server 2000. Новейшие технологии. — М.: Из-дательско-торговый дом «Русская Редакция», 2001.
15. Мельников Б.Ф. Недетерминированные конечные автоматы//Монография. Тольятти, ТГУ, 2009.
16. chernykh.net/content/view/71/127/ Кит С. Рид-Грин История переписи населения в США и обработки ее данных / В мире науки, 1989, N 4. С. 70-76.
17. msdn.microsoft.com/ru-ru/library/system.text.regularexpressions.regex.aspx 2012 Microsoft
18. П.Бекер Регулярные выражения /Журнал для профессионалов. Программирование на C/C++. ООО «Инфопресс», 2006, №10(34). С. 1-7.

Приложение 1

Файл данных по распадам радионуклидов “decay-ENDF-VII0.endf"

…………………первые 53 строки файла вырезаны…………………………
1.001000+3 9.991673-1 -1 0 0 1 2 1451 1
0.000000+0 0.000000+0 0 0 0 6 2 1451 2
0.000000+0 0.000000+0 0 0 4 7 2 1451 3
0.000000+0 0.000000+0 0 0 16 2 2 1451 4
1-H — 1 BNL EVAL-NOV05 A.A. Sonzogni (from NWC) 2 1451 5
/ENSDF/ DIST-DEC06 2 1451 6
—-ENDF/B-VII MATERIAL 2 2 1451 7
——RADIOACTIVE DECAY DATA 2 1451 8
——ENDF-6 FORMAT 2 1451 9
*********************** Begin Description *********************** 2 1451 10
** ENDF/B-VII RADIOACTIVE DECAY DATA FILE ** 2 1451 11
** Produced at the BNL from the Nuclear Wallet Cards database ** 2 1451 12
** Author: J.K. Tuli ** 2 1451 13
** Translated into ENDF format by A.A. Sonzogni, November 2005 ** 2 1451 14
***************************************************************** 2 1451 15
Parent Excitation Energy: 0.0000 2 1451 16
Parent Spin & Parity: 1/2+ 2 1451 17
Parent half-life: STABLE 2 1451 18
Abundance: 99.985% 1 2 1451 19
************************ End Description ************************ 2 1451 20
1 451 22 0 2 1451 21
8 457 5 0 2 1451 22
0.000000+0 0.000000+0 0 0 0 0 2 1 099999
0.000000+0 0.000000+0 0 0 0 0 2 0 0 0
1.001000+3 9.991673-1 0 0 1 0 2 8457 1
0.000000+0 0.000000+0 0 0 6 0 2 8457 2
0.000000+0 0.000000+0 0.000000+0 0.000000+0 0.000000+0 0.000000+0 2 8457 3
5.000000-1 1.000000+0 0 0 6 0 2 8457 4
0.000000+0 0.000000+0 0.000000+0 0.000000+0 0.000000+0 0.000000+0 2 8457 5
0.000000+0 0.000000+0 0 0 0 0 2 8 099999
…………………остальные 450532 строки файла вырезаны…………………………

Приложение 2

Рабочий файл GROUPIE.LST

Multi-Band Library Identification
— Groupie Test Run
— MAT/MF/MT Ranges
— Minimum Maximum
MAT MF MT MAT MF MT
— 1 1 1 9999 99 999
— Group Energy Boundaries
— Energy-eV Energy-eV Energy-eV Energy-eV Energy-eV Energy-eV
— .100000000 .105000000 .110000000 .115000000 .120000000 .127500000
.135000000 .142500000 .150000000 .160000000 .170000000 .180000000
.190000000 .200000000 .210000000 .220000000 .230000000 .240000000
.255000000 .270000000 .280000000 .300000000 .320000000 .340000000
.360000000 .380000000 .400000000 .425000000 .450000000 .475000000
.500000000 .525000000 .550000000 .575000000 .600000000 .630000000
.660000000 .690000000 .720000000 .760000000 .800000000 .840000000
.880000000 .920000000 .960000000 1.00000000 1.05000000 1.10000000
…………………эта часть файла вырезана…………………………
16300000.0 16400000.0 16500000.0 16600000.0 16700000.0 16800000.0
16900000.0 17000000.0 17100000.0 17200000.0 17300000.0 17400000.0
17500000.0 17600000.0 17700000.0 17800000.0 17900000.0 18000000.0
18100000.0 18200000.0 18300000.0 18400000.0 18500000.0 18600000.0
18700000.0 18800000.0 18900000.0 19000000.0
— ENDF/B Tape Label

ссылка на оригинал статьи http://habrahabr.ru/post/188448/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *