JAEA-Data/Code 2010-015

次世代炉物理解析システムのためのフレームワーク開発（その４）

日本原子力研究開発機構
原子力基礎工学研究部門
核工学・炉工学ユニット
横山 賢治 平井 康志＊ 巽 雅洋＊（2010 年 8 月 5 日受理）
次世代原子力システムの基礎・基盤研究における革新的な解析手法・モデルの開発を推進し、これらの最新解析手法・モデルを実用化炉の基本設計や発電炉の運転管理等に効率的・効果的に適用し反映していくために、オブジェクト指向技術を採用した次世代解析システム MARBLE の開発を進めている。次世代解析システムは、以下の 4 つの要件、(1)基盤研究のための新モデル・手法を迅速かつ効果的に適用可能な柔軟性・拡張性・ユーザ利便性、(2)設計研究のために予測精度と適用範囲を定量的に保証できること、(3)プラントの合理化及び信頼性向上を目的とした異分
野間の統合解析が可能であること、(4)品質保証・開発効率を目的としたシステムの巨大化に対応
可能な保守性・再利用性、を備える。
上記の次世代解析システムは、熱流動解析、構造解析、炉物理解析等、次世代原子力システムの開発に関わる複数の分野を対象とするが、現在、高速炉の炉物理解析の分野において先行的に研究を進めている。高速炉の炉物理解析手法については、これまでの研究で JUPITER 等の臨界実験結果を用いた検証等を行って JUPITER 標準解析手法として確立してきた。また、この成果を反映した統合炉定数を開発し核設計精度の大幅な向上を達成している。しかしながら、解析対象を変更したり、解析モデルの詳細度を変更したりする場合等においては、解析システムの機能的な制限により解析作業が極めて非効率的になるという問題がある。このため、炉物理分野における次世代解析システムとして、これまでに開発されてきた JUPITER 標準解析手法を再現し、かつ、高速炉実機燃焼解析・設計解析への対応や炉定数調整に関する機能を新たに実現することを目的とした「次世代炉物理解析システム」の開発を進めている。これまでの研究により、臨界実験解析・実機燃焼解析の双方に対して適用可能なフレームワークの開発をした。
本研究では、上記フレームワークを利用する開発者の利便性の向上を目的として、フレームワ
ークのエラー処理機構を整備し、デバッグ処理用の機能を充実させた。またフレームワークに各種の計算手順を定義・拡張できる機構を実装することにより、臨界実験解析などの複雑な補正計
算処理を必要とする解析にも対応できるようにした。

原子力科学研究所（駐在）：〒311-1195 茨城県那珂郡東海村白方白根 2-4＊原子燃料工業（株）
i

JAEA-Data/Code 2010-015
Development of a Framework
for the Neutronics Analysis System for Next Generation (4)Kenji YOKOYAMA, Yasushi HIRAI＊ and Masahiro TATSUMI＊
Division of Nuclear Data and Reactor Engineering
Nuclear Science and Engineering Directorate
Japan Atomic Energy Agency
Tokai-mura, Naka-gun, Ibaraki-ken(Received August 5, 2010). In order to promote development of innovative analysis methods and models in
fundamental studies for next-generation nuclear reactor systems and to efficiently andeffectively reflect the latest analysis methods and models to primary design of prototype
reactor

and/orin-corefuel

management

for

power

reactors,a next-generation analysis system MARBLE has been developed. The next-generation systemprovidessolutionsto thefollowing

requirements:(1)

Flexibility,

extensibility

anduser-friendliness that can apply new methods and models rapidly and effectively for
fundamental studies, (2) quantitative warranty of solution accuracy and adaptive scoping
range for design studies, (3) coupling analysis among different study domains for the purposeof rationalization of plant systems and improvement of reliability, (4) maintainability andreusability for system extensions for the purpose of total quality management anddevelopment efficiency.
The next-generation analysis system supports many fields, such as thermal hydraulics
anlysis, structure analysis, reactor physics etc, and now we are studying reactor physics
analysis system for fast reactor. As for reactor physics analysis methods for FBR, JUPITER
standard analysis methods were developed based on validations by using critical expeirments
such as JUPITER in the past study. In addition, considerable improvement on prediction
accuracy in neutronics design was achieved in the development of the unified cross-section set
But, there has been a problem of extreme inefficiency due to lack of functionality in theanalysis code system when changing analysis targets and/or modeling levels. That is why, we
have developed the next-generation analysis system for reactor physics which reproduces the
JUPITER standard analysis method that has been developed so far and realizes burnup anddesign analysis for fast reactor and a new cross section adjustment.

＊Nuclear Fuel Industries, Ltd.
ii

JAEA-Data/Code 2010-015

In the present study, functionalities for debugging have been enhanced by preparing an error
handling mechanism in order to provide higher level of usability for users of the framework.
Other functionalities have been also developed to deal with complex calculation routes withcorrections such as analysis of critical experiments by introducing a mechanism for flexible
handling of computational procedures.
Keywords: Fast Reactor, Neutronics Design, Analysis Framework, Object-Oriented Technique,
MARBLE, ORPHEUS

iii

This is a blank page.

JAEA-Data/Code 2010-015

目次
1． はじめに .................................................................................................................................... 1
1.1 背景と目的 .............................................................................................................................. 1
1.2 本報告書の内容 ...................................................................................................................... 3
2． 例外・エラー処理 ..................................................................................................................... 4
2.1 概要 ......................................................................................................................................... 4
2.2 例外・エラー処理の基本方針................................................................................................. 4
2.3 例外クラスの設計 ................................................................................................................... 5
2.3.1 MarbleStandardError クラス.......................................................................................... 6
2.3.2 MarbleIndexError クラス ................................................................................................ 6
2.3.3 MarbleKeyError クラス ................................................................................................... 7
2.3.4 MarbleTypeError クラス ................................................................................................. 7
2.3.5 MarbleValueError クラス ................................................................................................ 7
2.4 実装 ......................................................................................................................................... 9
3． デバッグ用機能の整備 .............................................................................................................11
3.1 概要 ........................................................................................................................................11
3.2 設計・実装 .............................................................................................................................11
4． 計算手順拡張機能 ................................................................................................................... 124.1 概要 ....................................................................................................................................... 124.2 設計 ....................................................................................................................................... 12
4.2.1 CellCalculationProcedure クラス.................................................................................. 14
4.2.2 MacroXSCalculationProcedure クラス ......................................................................... 14
4.2.3 CoreCalculationProcedure クラス ................................................................................ 14
4.2.4 BurnupCalculationProcedure クラス ........................................................................... 15
4.2.5 CollapseGroupCalculationProcedure クラス ............................................................... 15
4.2.6 ControlRodOperationProcedure クラス ....................................................................... 16
4.3 利用例 ................................................................................................................................... 18
4.3.1 基準計算シナリオ........................................................................................................... 18
4.3.2 エネルギー群縮約計算シナリオ ..................................................................................... 19
5． フレームワーク概説................................................................................................................ 20
5.1 パッケージ ............................................................................................................................ 20
5.2 coordinates パッケージ ........................................................................................................ 22
5.2.1 概要................................................................................................................................. 22
5.2.2 各種の定義に関して ....................................................................................................... 22
5.2.3 使用例 ............................................................................................................................. 23
5.3 geometry パッケージ ............................................................................................................ 27
5.3.1 概要................................................................................................................................. 27
5.3.2 使用例 ............................................................................................................................. 28
5.4 material パッケージ ............................................................................................................. 33v

JAEA-Data/Code 2010-015

5.4.1 概要................................................................................................................................. 33
5.4.2 使用例 ............................................................................................................................. 33
5.5 pattern パッケージ ............................................................................................................... 36
5.5.1 概要................................................................................................................................. 36
5.5.2 使用例 ............................................................................................................................. 36
5.6 mesh パッケージ ................................................................................................................... 38
5.6.1 概要................................................................................................................................. 38
5.6.2 使用例 ............................................................................................................................. 38
5.7 info パッケージ ..................................................................................................................... 41
5.7.1 概要................................................................................................................................. 41
5.7.2 使用例 ............................................................................................................................. 42
5.8 runner パッケージ ................................................................................................................ 45
5.8.1 概要................................................................................................................................. 45
5.8.2 使用例 ............................................................................................................................. 45
5.9 solver パッケージ.................................................................................................................. 48
5.9.1 概要................................................................................................................................. 48
5.9.2 使用例 ............................................................................................................................. 48
6． おわりに .................................................................................................................................. 50
参考文献 ......................................................................................................................................... 50
付録............................................................................................................................................. 51vi

JAEA-Data/Code 2010-015

Contents
1.Introduction.................................................…………….................................................................1
1.1 Purpose and background of system development.....................................………..................1
1.2 Contents of this report..........................................................................….……...................... 3
2. Handling of exceptions and errors…………………………………………..…….…………...........4
2.1 Overview……………………………………………………….........……….…............................4
2.2 A basic policy of handling of exceptions and errors……..........………….............................4
2.3 Design of exception classes………………………......…………………......................................5
2.3.1 MarbleStandardError class………….....................................................................….......6
2.3.2 MarbleIndexError class…………......................................................................................6
2.3.3 MarbleKeyError class……………….................................................................................7
2.3.4 MarbleTypeError class………………………………………...............................................7
2.3.5 MarbleValueError class………………………………………………...................................7
2.4 Implementation…………………..……………............………………......................................9
3. Preparation of features for debugging…………………………………………….…………..........11
3.1 Overview……………………………………………………….........……………..........................11
3.2 Design and implementation…………………………………......……………..........................11
4. Computational procedure management mechanism……………..…………….………….........12
4.1 Overview………………………………………………………...........…………..........................12
4.2 Design…………………………….………………………………....……………..........................124.2.1 CellCalculationProcedure class…………….........................................................….......144.2.2 MacroXSCalculationProcedure class……............................................................….......144.2.3 CoreCalculationProcedure class….................................................................................144.2.4 BurnupCalculationProcedure class.....................................................................….......15
4.2.5 CollapseGroupCalculationProcedure class ........................................................….......15
4.2.6 ControlrodOperationProcedure class……......................................................................16
4.3 Application examples……….………………………………....…………….............................18
4.3.1 Base calculation scenario……….………..............................................................….......18
4.3.2 Energy collapse scenario………………................................................................….......19
5. Outline of the MARBLE framework……………………………………….…….………….........20
5.1 Packages……………………………………………………….........……………..........................20
5.2 coodinates package………….………………………………....……………................................225.2.1Overview……………..............................................................................................….......22
5.2.2 Definitions…………………………………….........................................................….......22
5.2.3 Application example……………….................................................................................23
5.3 geometry package…………….……………………………....……………...........................27
5.3.1Overview……………..............................................................................................….......27
5.3.2 Application example………………..................................................................................28
5.4 material package…………….………………………………....…………….............................33
5.4.1Overview……………..............................................................................................….......33vii

JAEA-Data/Code 2010-015

5.4.2 Application example………………..................................................................................33
5.5 pattern package…………….……………………………..…....……………...........................36
5.5.1Overview……………..............................................................................................….......36
5.5.2 Application example………………..................................................................................36
5.6 mesh package………………………………………………....……………...........................38
5.6.1Overview…………….............................................................................................….......38
5.6.2 Application example………………..................................................................................38
5.7 info package………………………..…………………………....……………...........................41
5.7.1Overview……………..............................................................................................….......41
5.7.2 Application example……………………………...........................................................42
5.8 runner package…………….…………………………………………………...........................45
5.8.1Overview…………….............................................................................................….......45
5.8.2 Application example………………..................................................................................45
5.9 solver package………………………….……………………....……………...........................48
5.9.1Overview…………….............................................................................................….......48
5.9.2 Application example………………..................................................................................48
6. Summary............….....……………….................................................................................……...50
Reference……...................................................................................................................…............50
Appendix……...................................................................................................................…............51

viii

JAEA-Data/Code 2010-015

表リスト

表 1 例外クラス一覧 .......................................................................................................... 6
表 2 Procedure クラスの一覧 ........................................................................................... 13
表 3 CellCalculationProcedure オブジェクトに与える情報 ............................................. 14
表 4 MacroXSCalculationProcedure オブジェクトに与える情報 .................................... 14
表 5 CoreCalculationProcedure オブジェクトに与える情報 ............................................ 15
表 6 BurnupCalculationProcedure オブジェクトに与える情報 ....................................... 15
表 7 CollapseGroupCalculationProcedure オブジェクトに与える情報 ........................... 16
表 8 ControlRodOperationProcedure オブジェクトに与える情報 ................................... 16
表 9 パッケージ一覧 ........................................................................................................ 20
表 10 coordinates パッケージの代表的なクラス .............................................................. 22
表 11 位置・アドレス・プレーン・メッシュ番号 ............................................................ 23
表 12 geometry パッケージの代表的なクラス .................................................................. 27
表 13 material パッケージの代表的なクラス ................................................................... 33
表 14 pattern パッケージのクラス ................................................................................... 36
表 15 mesh パッケージの代表的なクラス ........................................................................ 38
表 16 info パッケージの代表的なクラス ........................................................................... 41
表 17 runner パッケージの代表的なクラス ...................................................................... 45
表 18 solver パッケージのクラス...................................................................................... 48ix

JAEA-Data/Code 2010-015

図リスト

図 1 例外クラス図 .............................................................................................................. 8
図 2 例外クラス階層図 ....................................................................................................... 8
図 3 MARBLE フレームワーク例外クラスの実装 ............................................................ 10
図 4 procedure パッケージのクラス図 ............................................................................. 17
図 5 基準計算シナリオの実装例 ....................................................................................... 18
図 6 エネルギー群縮約計算シナリオの実装例.................................................................. 19
図 7 パッケージの依存関係 .............................................................................................. 21
図 8 coordinates パッケージのクラス図 ........................................................................... 26
図 9 geometry パッケージのクラス図............................................................................... 31
図 10 material パッケージのクラス図 .............................................................................. 35
図 11 pattern パッケージのクラス図 ................................................................................ 37
図 12 mesh パッケージのクラス図 ................................................................................... 40
図 13 info パッケージのクラス図...................................................................................... 43
図 14 runner パッケージのクラス図 ................................................................................ 47
図 15 solver パッケージのクラス図 .................................................................................. 49x

JAEA-Data/Code 2010-015

1． はじめに1.1 背景と目的
次世代原子力システムの基礎・基盤研究における革新的な解析手法・モデルの開発を推進し、これらの最新解析手法・モデルを実用化炉の基本設計や発電炉の運転管理等に効率的・効果的に適用し反映していくために、オブジェクト指向技術を採用した次世代解析システムの開発を進めている。次世代解析システムは、以下の 4 つの要件、(1)基盤研究のための新モデル・手法を迅速かつ効果的に適用可能な柔軟性・拡張性・ユーザ利便性、(2)設計研究のために予測精度と適用範囲を定量的に保証できること、(3)プラントの合理化及び信頼性向上を目的とした異分野間の統合解析が可能であること、(4)品質保証・開発効率を目的としたシステムの巨大化に対応可能な保守性・再利用性、を備える。
高速炉の炉物理解析については JUPITER 標準解析手法として確立された手法に基づくシス
テムが存在するが、従来の炉物理解析システムには、(a)臨界実験体系を想定しているため、高速炉実機の燃焼解析に対応するための拡張が困難である、(b)解析対象を変更したり解析モ
デルの詳細度を変更したりする場合等に解析システムの機能的な制限により解析作業が極めて非効率的になる、という問題がある。そこで現在研究・開発中の「次世代炉物理解析システ
ム」では、これまで開発されてきた JUPITER 標準手法を再現し、かつ、高速炉実機燃焼解析・設計解析への対応や炉定数調整に関する機能を新たに実現することを目的としている。
これまでの研究において、上述の問題点を解決する次世代炉物理解析システムのためのフレームワークを開発し1、その最初のアプリケーションとして高速炉実機燃焼解析システムを開発した2。また同フレームワークを用いて ZPPR 臨界実験体系の解析システムを構築可能であることを確認した。
このようにフレームワークの基本的機能についてはほぼ必要十分な実装が整いつつあるが、フレームワークの利便性の観点からはまだ幾つかの課題が存在する。一つには、現在までに開発したフレームワークにはエラー・例外処理に対する統一された取り扱い方針が決められていなかったため、これらの処理が十分に実装されていないという点である。またフレームワーク
は様々な計算コードを実行する機構を有するが、実行されたコードの生の計算結果リスト等へ容易にアクセスする手段が提供されていないため、フレームワークを利用した開発におけるデバッグの際に余計な労力が発生しているという問題がある。そこで本研究開発では、フレーム
ワークのエラー処理・デバッグ機能を拡充させることにより、フレームワークを用いた開発における利便性の向上を目指す。
フレームワークへの機能追加として、様々な計算手順を定義・拡張できる仕組みを設計・実装する。これは特に臨界実験解析などで必要となる複雑な補正計算手順を実現するためのものである。すなわち炉心計算・燃焼計算といった予め定義された代表的な計算手順を適宜組み合わせることで、様々な計算シーケンスに対応可能な仕組みを構築する。なお、様々な計算手順を実装するに当たっては、フレームワークに対する十分な理解が必要となる。そこでフレーム

12

参考文献[8]
参考文献[4]－1－

JAEA-Data/Code 2010-015

ワークのソースコードドキュメント及びテストコードを整備し、アプリケーション開発者によるフレームワーク利用を支援する。

－2－

JAEA-Data/Code 2010-015

1.2 本報告書の内容
本研究開発として、(1)フレームワークの例外・エラー処理の設計と実装、(2)開発者に資するデバッグ機能の整備、(3)様々な計算手順の定義・拡張機能の設計と実装、を実施し、さらにフレームワークのソースコードドキュメント及びテストコードの整備を実施した。
本報告書の構成は、まず第 2 章において例外・エラー処理の設計・実装について詳細を示す。
第 3 章において新たに実装したデバッグ支援機能について示し、第 4 章において、各種の計算手順を定義・拡張する仕組みについての設計と実装に関して、その詳細を議論する。第 5 章では、これまでの開発内容を含んだまとめとして、フレームワークで実装した各種モデルについてその概要を示す。なお実装の詳細に関しては付録として示す。最後に、第 6 章において本報告書を総括した。

－3－

JAEA-Data/Code 2010-015

2． 例外・エラー処理
2.1 概要これまでに実装したフレームワークにおいては、例外・エラー発生時の処理に対する指針が定められていなかったため、場所によって処理方針が異なり、上位のアプリケーション層での取り扱いが困難であった。そこで MARBLE フレームワーク層において統一された例外・エラ
ー処理のための方針を策定し、その枠組を設計・実装する。さらに既存のフレームワークのソースコードを精査し、必要に応じて例外・エラー処理を組み込んだ。

2.2 例外・エラー処理の基本方針
MARBLE フレームワークにおいて発生しうる例外・エラー状況としては、大きく分けて次の 3 種類が想定される。
① モデルオブジェクトを構築する際に、根本的に間違った情報が与えられたために発生するエラー② 構築された各モデルオブジェクト単体としては正しいものの、複数のオブジェクトが相互に論理的に整合していないために発生するエラー③ ファイルの I/O 処理に失敗した場合等、フレームワークを実行する外部環境の異常に起因するエラー①は、例えば幾何形状モデルオブジェクトを構築する際に長さの情報として負の値が与えられた場合など、そもそもモデルの構築・初期化を正常に完了することができないようなケースである。
②は、例えば幾何形状モデルで定義された集合体の軸方向有効長とメッシュモデルにて定義された各計算メッシュの軸方向長の積算値が一致していない場合などである。集合体幾何形状
モデルと計算メッシュモデルのそれぞれのみを見れば問題ないが、これらを組み合わせて一つの計算体系を構築しようとすると不整合が発生する。
③は、例えばソルバーを実行する際に計算入力ファイルの出力に何らかの原因で失敗した場合などである。
ここで上記の 3 ケースのそれぞれについて、MARBLE フレームワークにおける対処方針を検討する。
①に関しては、基本的には各モデルの生成時にエラーチェックを行い、不正なデータがある
場合には、フレームワークにて明示的に適当な例外を発生させることとする。③に関しては、ファイル I/O エラーやメモリエラーのような実行環境の異常に起因するものについては、通常、Python インタープリタによって実行時に所定の例外が発生させられるため、フレームワ－4－

JAEA-Data/Code 2010-015

ークでは特に対処を行わないものとする3。②については、各モデルの実行時にモデル間の不整合に起因するエラーが生じるような場合（例えばあるモデルから得られた情報を引数として別のモデルのメソッドを発行した際に、存在するはずのデータが存在しない等の矛盾が発生するケース）、①と同様にフレームワークにて所定の例外を発生させる。
なおフレームワークにて発生した例外は、通常、フレームワーク内部では処理されずに、フレームワークを利用する上位のアプリケーション層4にて補足され、必要に応じた処理がなされる。

2.3 例外クラスの設計
MARBLE フレ ーム ワー クか ら例 外を 発生 させる際 には 、Python 標準 の例 外ク ラス
StandardError を拡張したフレームワーク独自の例外クラスを用いる。これは、①例外を捕捉した側が例外の発生状況や発生原因に関する十分な情報を得られるように例外クラスに必要なインターフェイスを定義できるようにするためであり、②フレームワークが明示的に発生させた例外と Python インタープリタが発生させた例外を識別可能とするためである。
①に関しては、MARBLE フレームワーク独自の例外クラスには、例外発生時の情報として例外発生元パッケージ名・クラス名・メソッド名およびエラーメッセージを与えられる（保持できる）ようにする。例外を捕捉した側ではこれらの情報をもとに例外が発生した状況を把握する。なお各例外クラスに与えるエラーメッセージはフリーフォーマットの文字列であり、書式について特に制約は設けないが、エラーの発生状況を類推しやすいように可能な限り十分な情報を与えるものとする。
②に関しては、これによりフレームワークを利用するアプリケーション側にて例外を補足した際に、それがフレームワークの不適切な利用によって生じたものなのか、それともフレームワーク自体のバグによって発生したものなのかを判断する一助になるものと期待される。特に将来現れると想像される、フレームワークの詳細については関知せずにフレームワークを利用したアプリケーションの設計・実装に注力する開発者を考えた場合、例外が発生した状況を推測できる情報となるので殊に有用であると考えられる。
MARBLE フレームワークにて定義される例外クラスのクラス図とクラス階層図をそれぞれ
図 1および図 2に、各々のクラスの一覧を表 1に示す。以下、各例外クラスに関して具体的な例を挙げて説明する。

3

なお計算コードの未収束などについてはフレームワーク内部で制御可能な事項であり、例外処
理としては取り扱わないことに注意が必要である。
4 実機燃焼解析システム ORPHEUS や核特性解析システム SCHEME などを指す。

－5－

JAEA-Data/Code 2010-015

表 1 例外クラス一覧
例外クラス名MarbleStandardError

MarbleIndexError

MarbleKeyError

MarbleTypeError
MarbleValueError

意味
Python 標準の例外クラス StandardError のサブクラス。他のMARBLE フレームワーク固有の例外クラス群のスーパークラ
スとなる。
サブクラスが適用される事象に合致しない例外が発生した場
合に本クラスの例外オブジェクトが送出される。
MarbleStandardError のサブクラス。
本来ならばシーケンス内に収まるはずのインデックス指定が範囲超過した場合に送出される。
MarbleStandardError のサブクラス。
本来ならば辞書（ディクショナリ）に存在するはずのキーが見つからない場合に送出される。
MarbleStandardError のサブクラス。
不適切な型のオブジェクトが使用された場合に送出される。
MarbleStandardError のサブクラス。
正しい型ではあるが適切ではない値が使用された場合に送出される。

2.3.1 MarbleStandardError クラス
Python 標準の例外クラスである StandardError クラスを継承したクラスであり、MARBLE
フレームワークにて定義される全ての例外クラスの親クラスとなる。
通常の例外・エラーに対しては、本クラスのサブクラスである例外クラスが使用される。但しそれらのサブクラスを用いるのが適当ではない種類の例外・エラーに対しては、本クラスをインスタンス化したオブジェクトが送出される。例えば三角メッシュ体系と六角メッシュ体系という 2 つの異なる計算体系間でメッシュ番号を変換する処理を考えた場合、正常に番号変換を行うには各メッシュ体系における径方向メッシュ長に一定の関係が成り立つ必要があるが、これが満たされない状態でメッシュ番号変換が実行された場合、本クラスのオブジェクトが送出される。

2.3.2 MarbleIndexError クラス
MarbleStandardError クラスのサブクラス。Python 標準の例外クラスである IndexErrorと同様に、シーケンスのインデックス指定がシーケンスの範囲を超えている場合に送出される。例えば、対象とする体系の軸方向プレーン数を超えるプレーン番号を指定するケースなど
である。

－6－

JAEA-Data/Code 2010-015

2.3.3 MarbleKeyError クラス
MarbleStandardError クラスのサブクラス。Python 標準の例外クラスである KeyError と同様に、辞書のキーとして与えられた値がキー集合内に見つからなかった場合に送出される。
例えば中性子束メッシュ／マテリアルメッシュはメッシュ番号をキーとした辞書にて管理されているが、これらのメッシュ情報を取得する際の操作で計算体系に存在しないメッシュ番号を指定したなどである。

2.3.4 MarbleTypeError クラス
MarbleStandardError クラスのサブクラス。Python 標準の例外クラスである TypeErrorと同様に、各操作が適切でない型のデータに対して実行された場合に送出される。すなわち各メソッドに想定されていない型のデータが引数として与えられた場合に、本例外が送出される。ただし C/C++等のようにコンパイル時に厳格な型チェックが行われる言語と異なり、実行
時に型チェックを行う必要がある Python で全てのメソッドの引数の型情報を逐一チェックするコードを実装するのは現実的ではない。また大半のメソッドでは引数として与えるべき値の型は明らかであり、仮に誤った型を引渡してエラーが発生した場合でも容易に気づくものである。したがって、ここでは引数として与える値の型について、直感的とは言い難い制約が存在するようなメソッドに対してのみ、本例外を送出するためのコードを実装する。
例えば geometry パッケージの Region クラスは幾何形状における任意の領域を模擬するものであるが、その生成の際に与える 3 つの GeomComponent オブジェクトについては、代わりに‘None’を与えることが可能なものとそうでないものとがある5。そこで与えられた 3 つの引数をチェックし、正しく制約を満たしていないケースがあれば、本例外クラスのオブジェ
クトを送出する。

2.3.5 MarbleValueError クラス
MarbleStandardError クラスのサブクラス。Python 標準の例外クラスである ValueErrorと同様に、各操作が正しい型だが適切でない値を受け取った際に送出される。例えば座標系クラス SystemCoordinates のオブジェクトを生成する際には、HEXZ，TRIZ 等の対象とする座標系を表すキーワードを指定するが、同クラスがサポートしていないキーワードが指定された場合等に本例外クラスのオブジェクトが送出される。

例えば領域の外側境界を定義する GeomComponent は必須であるが、内側領域の定義については省略可能（‘None’指定が可能）である。

5－7－

JAEA-Data/Code 2010-015

c d e x c e p t ion

StandardError
Ma rbleS t a nd a rd E rro r++++

module_name: Stringclass_name: String
method_name: String
message: String+__str__() : String

Ma rb le In d e x E rror

Ma rb le K e y E rror

Ma rb le T y p e E rror

Ma rb le Va lu e E rro r

+

+

+

+

__str__() : String__str__() : String__str__() : String__str__() : String

図 1 例外クラス図

BaseException+--- Exception+--- StandardError+--- LookupError|+--- IndexError|+--- KeyError+--- TypeError+--- ValueError+--- 略||+--- MarbleStandardError+--- MarbleIndexError+--- MarbleKeyError+--- MarbleTypeError+--- MarbleValueError
図 2 例外クラス階層図（Python 標準の例外クラス階層における位置づけ）－8－

JAEA-Data/Code 2010-015

2.4 実装MARBLE フレームワーク独自の例外クラスは、marble.util.exception.MarbleException モ
ジュールにて定義する。実装コードを図 3に示す。一般に例外クラスは幾つかの属性だけを定義したシンプルなものとし、例外ハンドラ側で必要な情報を取り出せるようにしておく。本例
外クラスは、先述したとおり、例外が発生したときの状況や原因に関する情報を提供できるよ
うに、パッケージ名・クラス名・メソッド名とエラーメッセージを属性として保持する。

－9－

JAEA-Data/Code 2010-015

class MarbleStandardError(StandardError):def __init__(self, package_name, class_name, method_name, message):
self.package_name = package_nameself.class_name = class_nameself.method_name = method_nameself.message = message
def __str__(self):
return "in %s.%s.%s: %s" % (self.package_name, self.class_name, self.method_name,self.message)class MarbleIndexError(MarbleStandardError):def __init__(self, package_name, class_name, method_name, message):
MarbleStandardError.__init__(self, package_name, class_name, method_name, message)
def __str__(self):
return "in %s.%s.%s: %s" % (self.package_name, self.class_name, self.method_name,self.message)class MarbleKeyError(MarbleStandardError):def __init__(self, package_name, class_name, method_name, message):
MarbleStandardError.__init__(self, package_name, class_name, method_name, message)
def __str__(self):
return "in %s.%s.%s: %s" % (self.package_name, self.class_name, self.method_name,self.message)class MarbleTypeError(MarbleStandardError):def __init__(self, package_name, class_name, method_name, message):
MarbleStandardError.__init__(self, package_name, class_name, method_name, message)
def __str__(self):
return "in %s.%s.%s: %s" % (self.package_name, self.class_name, self.method_name,self.message)class MarbleValueError(MarbleStandardError):def __init__(self, package_name, class_name, method_name, message):
MarbleStandardError.__init__(self, package_name, class_name, method_name, message)
def __str__(self):
return "in %s.%s.%s: %s" % (self.package_name, self.class_name, self.method_name,self.message)

図 3 MARBLE フレームワーク例外クラスの実装－10－

JAEA-Data/Code 2010-015

3． デバッグ用機能の整備
3.1 概要MARBLE フレームワークでは多くの従来コードをカプセル化してソルバーとして利用している。フレームワーク外部からはこれらの計算コードの詳細は隠蔽されており、通常、コードの入出力ファイル等に直接アクセスするようなケースは想定されていない。フレームワークを利用する「完成された」上位アプリケーションの観点からはこの仕様で問題ないが、開発途上の段階においては、様々な理由により、計算コードの入出力ファイルを直接参照する必要が生じる。また計算コードの入出力ファイルをフレームワーク外部で再利用できた方が便利であるという場面も存在する。そこで、必要に応じて各計算コードの入出力ファイルを容易に取り出し可能とする仕組みを整備する。

3.2 設計・実装
現在の MARBLE フレームワークでは、計算コードの実行時にワークディレクトリに入出力
用ファイルを生成するが、これらは永続的に存在することが保証されているわけではない。またファイル・ディレクトリ名もフレームワークによって自動作成された分かりにくいものとなっているため、デバッグの際はファイルのタイムスタンプ等を参考にしつつ目的のファイルを探すという面倒な作業が必要となっている。そこで計算入出力ファイルの永続性を保証しつつ、必要に応じて簡単にアクセスできるようにする方法として、ここではファイルを何らかの
データベースに登録することで対応する。すなわち計算処理が終了した段階で、ワークディレ
クトリに存在する各種ファイルをコピーし、データベースに適切なキーワードとともに保存する。ユーザは必要に応じてデータベースからファイルを直接取り出すことが可能となる。
データベースについては、MARBLE フレームワークを利用する上位アプリケーション側で用意し、ファイルの保存・取り出しのためのインターフェイスも上位アプリケーション側で用意する。フレームワーク自体にはこれらのファイルを管理する機能は持たせない。例えば実機
燃焼解析システム ORPHEUS の場合、ORPHEUS が計算結果等を保存するために使用するデータベースファイルに、合わせて上記の計算結果ファイルを保存するものとする。
実機燃焼解析システム ORPHEUS におけるデータベースファイルの管理方法、及び計算入
出力ファイルの取り扱い方法や詳細な設計・実装に関しては、参考文献[5]を参照のこと。

－11－

JAEA-Data/Code 2010-015

4． 計算手順拡張機能
4.1 概要基準計算で必要な計算手順は、臨界実験解析では定数計算と炉心計算であり、実機燃焼解析
ではこれらに燃焼計算が加わる。昨年度までのフレームワークの実装で、これら 3 つの計算手
順を連携させて解析を行うことが可能となっている。しかしながら、実際の解析ではこれらの基本計算シナリオに加えて、摂動計算・感度係数計算・反応率分布計算等を実行できる必要がある。さらに、特に臨界実験解析で必要となる各種の補正係数を計算するためには、複数の異なる計算シナリオから得られる結果を処理する必要があるが、このような計算シナリオは多種多様であり、また状況に応じて変更させる必要もあるため、あらかじめシステム化しておくことは現実的ではない。
そこで計算手順自体を新たに定義したり拡張したりできる仕組みをフレームワーク側に準備し、上位システム側でこれらの計算手順を適宜組み合わせて一連の解析シナリオを実現するようにする。

4.2 設計必要に応じて様々な解析シナリオを容易に組み立てることができるようにするため、定数計
算・炉心計算・燃焼計算といった各種の計算手順をカプセル化し、上位システム側ではこれら任意の計算手順オブジェクトを組み合わせた処理を実装できるようにする。ここで計算手順オ
ブジェクトは、計算体系に対して作用し、一連の処理を行って計算体系の状態を変更するものである。すなわち、計算メッシュや実効断面積オブジェクトを管理する CoreInfo オブジェク
トに対して作用し、所定の処理を行って CoreInfo オブジェクトの状態だけを変更する。（正確には、それぞれ、CoreFluxInfo オブジェクトが中性子束メッシュを、CoreMaterialInfo オ
ブジェクトがマテリアルメッシュを、CrossSectionInfo オブジェクトが実効断面積を、管理しており、CoreInfo オブジェクトはこれらのオブジェクト群を管理している。）計算体系の状
態は全て CoreInfo 及びその関連するオブジェクトによって管理され、計算手順オブジェクト
自体は計算体系に関する状態を保持しないため、計算手順オブジェクトの組み合わせに制約が生じることもなく、任意の計算手順オブジェクトを自由に組み合わせた計算シナリオを定義することが可能となる。
計算手順を表すクラスとして Procedure クラスを定義する。このクラスは抽象クラスとし、表現する計算手順の内容に応じて、具体的なサブクラスを実装する。サブクラスとしては、定数計算・炉心計算・燃焼計算等の手順をカプセル化したものや、実効断面積のエネルギー群縮約処理をカプセル化したもの等が定義される。現時点で実装した Procedure クラス群の一覧を
表 2に示す（摂動計算に関する手順はまだ実装されていない）。またクラス図を図 4に示す。
これらの Procedure クラス群はひとつにまとめて procedure パッケージとする。

－12－

JAEA-Data/Code 2010-015

表 2 Procedure クラスの一覧
クラス名
Procedure機能
抽象クラス。
各 Procedure クラスに共通するインターフェイスを定義したもの。
セル計算処理を実装した Procedure クラス。

CellCalculationProcedure
MacroXSCalculationProcedure
CoreCalculationProcedure

マクロ断面積生成処理を実装した Procedure ク
ラス。
炉心計算処理を実装した Procedure クラス。

BurnupCalculationProcedure

燃焼計算処理を実装した Procedure クラス。

CollapseGroupCalculationProcedure

エネルギー群縮約処理を実装した Procedure クラス。
制 御棒 操 作 に お け る 一 連 の 処 理 を 実 装 し た
Procedure クラス。

ControlRodOperationProcedure

Procedure クラスには、適切なサブクラスのインスタンス化を行う機能をもつクラスメソッ
ド create と全てのサブクラスに共通するインターフェイスとして run メソッドが定義される。
ceate メソッドでは、引数として与えられるタイプ名に応じた Procedure サブクラスからオブジェクトを生成する。Procedure クラスの run メソッドは抽象メソッドであり、サブクラスにて必要とされる機能に応じたロジックが実装される。run メソッドの引数には、実装された手続きを実施するために必要なデータがディクショナリとして与えられる。
Procedure オブジェクトは、coordinates パッケージの CoreProperty オブジェクト及び
ZoneSet オブジェクト、pattern パッケージの Pattern オブジェクト、info パッケージのCoreInfo オブジェクトそれぞれに対する参照を保持する。これらのオブジェクトから計算体系に関する必要な情報を取得し6、各種の計算処理を実施した上で、最終的に CoreInfo オブジェクト（及びその関連オブジェクト）の情報を更新する。
以降では各 Procedure サブクラスについて、その処理の概要を示す。

6

Procedure オブジェクトによっては、これらのオブジェクトの一部のみが使用される。

－13－

JAEA-Data/Code 2010-015

4.2.1 CellCalculationProcedure クラス
本サブクラスはセル計算手順をカプセル化したものである。
本サブクラスでは、run メソッドの引数として与えられた条件の下で適当なセル計算コード
による計算を実行し、算出された実効ミクロ断面積を CrossSectionInfo オブジェクトにセットする。run メソッドで与えるディクショナリのキーとその値は以下のとおりである。

表 3 CellCalculationProcedure オブジェクトに与える情報
キー
zoneNumberSet

備考
省略可。省略した場合、全ゾーンが対象となる。

ng

値
セル計算の実行対象となるゾーンを表す
ゾーン番号の集合（リスト）。
エネルギー群数。

solverName

セル計算ソルバー名。

現在、“slarom_uf”のみ指定可。

上記は使用するセル計算ソルバーの種類に依らない情報である。上記以外にソルバーに固有の情報を追加で与えることができる。ソルバー固有のオプションについては、付録の solver
パッケージの説明を参照することができる。

4.2.2 MacroXSCalculationProcedure クラス
本サブクラスはマクロ定数計算手順をカプセル化したものである。
本サブクラスでは、run メソッドの引数として与えられた条件の下でマクロ定数作成を行い、生成された実効マクロ断面積オブジェクトを CrossSectionInfo オブジェクトにセットする。
run メソッドで与えるディクショナリのキーとその値は以下のとおりである。

表 4 MacroXSCalculationProcedure オブジェクトに与える情報
キー
materialNumberSetmaterialInfoID値
備考
マクロ定数作成の対象となるマテリ
省略可。省略した場合、全アル番号の集合（リスト）。
マテリアルが対象となる。
CoreMaterialInfo オブジェクト ID。

4.2.3 CoreCalculationProcedure クラス
本サブクラスは炉心計算手順をカプセル化したものである。
本サブクラスでは、run メソッドの引数として与えられた条件の下で炉心計算を行い、算出された中性子束分布を CoreFluxInfo オブジェクトに反映する。run メソッドで与えるディク
ショナリのキーとその値は以下のとおりである。

－14－

JAEA-Data/Code 2010-015

表 5 CoreCalculationProcedure オブジェクトに与える情報
キー
fluxInfoID

値
CoreFluxInfo オブジェクト ID。

備考

materialInfoID

CoreMaterialInfo オブジェクト ID。

summaryInfoID

CoreSummaryInfo オブジェクト ID。

solverName

炉心計算ソルバー名。

“marble_citation”等。

relpow

炉心相対出力（0.0～1.0）。

省略可。省略した場合、規格化が実施されない。

上記は使用する炉心計算ソルバーの種類に依らない情報である。上記以外にソルバーに固有の情報を追加で与えることができる。ソルバー固有のオプションについては、solver パッケージの説明を参照することができる。

4.2.4 BurnupCalculationProcedure クラス
本サブクラスは燃焼計算手順をカプセル化したものである。
本サブクラスでは、run メソッドの引数として与えられた条件の下で燃焼計算を行い、CoreMaterialInfo オブジェクトが管理する各マテリアルメッシュの数密度を更新する。run
メソッドで与えるディクショナリのキーとその値は以下のとおりである。

表 6 BurnupCalculationProcedure オブジェクトに与える情報
キー
fluxInfoID

値
CoreFluxInfo オブジェクト ID。

備考

materialInfoID

CoreMaterialInfo オブジェクト ID。

period

燃焼期間。

単位：日。

solverName

燃焼計算ソルバー名。

“burnup”等。

上記は使用する燃焼計算ソルバーの種類に依らない情報である。上記以外にソルバーに固有の情報を追加で与えることができる。ソルバー固有のオプションについては、solver パッケージの説明を参照することができる。

4.2.5 CollapseGroupCalculationProcedure クラス
本サブクラスはエネルギー群縮約処理手順をカプセル化したものである。

－15－

JAEA-Data/Code 2010-015

本サブクラスでは、run メソッドの引数として与えられた条件の下でエネルギー群縮約計算を行い、縮約された実効ミクロ断面積を CrossSectionInfo オブジェクトにセットする。run
メソッドで与えるディクショナリのキーとその値は以下のとおりである。

表 7 CollapseGroupCalculationProcedure オブジェクトに与える情報
キー
fluxInfoID

値
CoreFluxInfo オブジェクト ID。

備考

boundary

縮約するエネルギー群構造。

EnergyBoundary オブジェクト。

4.2.6 ControlRodOperationProcedure クラス
本サブクラスは制御棒操作に関する一連の処理をカプセル化したものである。
制御棒を上下動させる場合、制御棒集合体が含まれるゾーン及びマテリアルメッシュでは、制御棒の移動位置に応じてゾーン毎の実効ミクロ断面積及びマテリアルメッシュ毎の数密度を更新する必要がある。本サブクラスはそのような実効ミクロ断面積及び数密度の更新処理を行うものである。
制御棒操作に関する処理では、制御棒の全挿入状態を起点とし、そこから制御棒を引き抜いた際の制御棒下端位置をもとに各ゾーン及びマテリアルメッシュの断面積・数密度を更新する。すなわち、本操作は、①計算体系を制御棒全挿入状態にリセットする、②計算体系を制御
棒操作後の状態に更新する、という 2 つの工程から構成される。したがって、run メソッドを発行して処理を実施する際には、オプションによって 2 つの工程のどちらを行うかを明示する必要がある。本 Procedure オブジェクトは例外的に状態を有し、使用する場合は「制御棒引き抜き」「全挿入状態へのリセット」の 2 つの工程をセットにして実施する。具体的には、まず制御棒全挿入状態で計算体系を構築しておき、各計算ステップの最初に「制御棒引き抜き」、最後に「全挿入状態へのリセット」を実行する。
run メソッドで与えるディクショナリのキーとその値は以下のとおりである。

表 8 ControlRodOperationProcedure オブジェクトに与える情報
キー
materialInfoID

値
CoreMaterialInfo オブジェクト ID。

bottomPositions

制御棒下端位置を与えるディクショナリ。
｛セルアドレス：下端位置｝と表す。
True もしくは False。
制御棒状態をリセット
する。

reset

－16－

備考

create(int) : CoreProperty
getCoreProperty(str) : instance
getCellAddressSet(int) : int[]
getNumOfCells(int) : int
getCellCategory(int) : int
includeAddress(int, int) : bool
includeAddressSet(list, int) : bool

+
+
+
+
+
+
+
#

+

1

+
+
+
+
+
+

－17－

run(dict) : void

coordina t es :: Z oneSet

run(dict) : voidrun(dict) : void+run(dict) : voidrun(dict) : void

図 4 procedure パッケージのクラス図

run(dict) : void

+

+

1

+
+
+
+
+
+
+
+
+
+
+
+

-

pa t t ern: :Pa t t ern

makePattern(dict, str, int, list, list) : Pattern
getCycleName() : str
getCycleNumber() : int
getCellGeometryTypeSet() : str[]
getCellGeometryType(int) : str
getCellLabel(int) : str
getPreCycleNumber(int) : int
getPreCellAddress(int) : int
getCellRotation(int) : int
newCell(int) : bool
findCellAddressByLabel(str) : inthas(int) : bool

cycleName: str
cycleNumber: int

BurnupC a lcula t ionProcedure+run(dict) : void

C oreC a lcula t ionProcedure1buildCrossSectionInfo(int) : voidbuildCoreFluxInfo(int, MeshGeometry) : intbuildCoreMaterialInfo(int, MeshGeometry, ZoneSet) : int
getCrossSectionInfo() : CrossSectionInfo
getInfo(int) : instance
getGlobalConverter(int, int) : MeshNumberGlobalConverter
normalizeFlux(float, int, int) : void
getMaterialRegionAveragedFlux(int, int, int) : float[]

info: :C oreInfo

C olla ps eG roupC a lcula t ionProcedure+

Procedure

+
+
+
+
+
+
+
+

id_counter: int

create(String, CoreProperty, ZoneSet, Pattern, CoreInfo) : Procedure

Ma croXSC a lcula t ionProcedure++

1

updateZoneSet(dict) : void
getZoneNumberSet() : int[]
getZone(int) : Zone
getZoneIncludes(int, int) : Zone
getZoneNumber(int, int) : inthas(int) : bool-

C ont rolRodOpera t ionProcedure

C ellC a lcula t ionProcedure

setupCorePropertyData() : void

elements: instance (dict)#coordina t es ::C orePropert y

cd procedure

JAEA-Data/Code 2010-015

JAEA-Data/Code 2010-015

4.3 利用例
4.3.1 基準計算シナリオ
procedure パッケージのクラスを用いて、定数計算・炉心計算・燃焼計算の各計算ステップを 繰 り 返 す 基 準 計 算 シ ナ リ オ を 実 現 す る 。 こ の 場 合 、 CellCalculationProcedure ，MacroXSCalculationProcedure，CoreCalculationProcedure，BurnupCalculationProcedure
クラスのオブジェクトを生成し、計算ステップのループの中で各オブジェクトに対して順番に
run メソッドを発行していく。run メソッドが完了すると、呼び出した Procedure に応じて、計算体系を表す CoreInfo オブジェクトのデータが適切に更新されていくため、呼び出し側ではデータ更新処理等を考慮する必要はない。
処理フロー図と対応する Python コードイメージを図 5に示す。（コードはあくまでイメージであり、メソッドの引数等は省略している。）

処理フロー

セル計算
マクロ定数計算

炉心計算

燃焼計算

最終ステップ？

コード（イメージ）# Procedureオブジェクトの生成
cellProc = Procedure.create("cell")macroProc = Procedure.create("macro")coreProc = Procedure.create("core")burnupProc = Procedure.create("burnup")
for step_no in [...]:# セル計算cellProc.run(options)# マクロ定数計算
macroProc.run(options)# 炉心計算coreProc.run(options)# 燃焼計算burnupProc.run(options)

図 5 基準計算シナリオの実装例－18－

JAEA-Data/Code 2010-015

4.3.2 エネルギー群縮約計算シナリオ
基準計算シナリオと同様に、procedure パッケージのクラスを用いて、少数群へのエネルギ
ー群縮約処理を含む燃焼計算フローを実現する。この場合基準計算シナリオで使用したクラスに加えて CollapseGroupCalculationProcedure クラスを使用する。基準計算シナリオの場合のように、各 Procedure オブジェクトの run メソッドを順番に呼び出していくことで適切な計算処理が実行され、CoreInfo オブジェクトのデータが更新される。
処理フロー図と対応する Python コードイメージを図 6に示す。

コード（イメージ）

処理フロー# Procedureオブジェクトの生成
cellProc = Procedure.create("cell")macroProc = Procedure.create("macro")coreProc = Procedure.create("core")burnupProc = Procedure.create("burnup")collapseProc = Procedure.create("collapse")

セル計算

マクロ定数計算for step_no in [...]:
if microUpdate[step_no] == True:# セル計算cellProc.run(options)

炉心体系
スペクトル計算# マクロ定数計算
macroProc.run(options)

エネルギー群縮約

少数群マクロ
定数計算

炉心計算

燃焼計算

Yes

# 炉心体系スペクトル計算
coreProc.run(options)

ミクロ定数
更新？

# エネルギー群縮約
collapseProc.run(options)# 少数群マクロ定数計算
macroProc.run(options)# 炉心計算coreProc.run(options)# 燃焼計算burnupProc.run(options)

最終ステップ？
Yes

図 6 エネルギー群縮約計算シナリオの実装例－19－

JAEA-Data/Code 2010-015

5． フレームワーク概説
本節では MARBLE フレームワーク開発のまとめとして、フレームワークにて定義される各種のモデルオブジェクト群に関して、その概要を示す。

5.1 パッケージ
MARBLE フレームワークには、物質組成をモデル化したクラス／幾何形状を表すクラス／
既存の計算コードをカプセル化したクラス等、様々なクラスがシステムを構成するための部品として定義されている。これらのクラスは、用途の類似性及び他のクラスへの依存関係の観点から幾つかの「パッケージ」に分類される。パッケージの一覧を表 9に示す7。

表 9 パッケージ一覧
パッケージ名coordinates
geometrymaterial
patternmesh
info
runnersolverprocedure概要
集合体やメッシュの位置を指定するために使用する様々な座標系をモデル化したクラスを含む。
集合体等の 3 次元詳細幾何形状や計算メッシュの幾何形状をモデ
ル化する際に使用する。
実効断面積や組成、核種毎の物理データやライブラリに関する情報等をモデル化したクラスから成る。
集合体装荷パターンをモデル化したクラス。
計算メッシュ体系の 3 次元幾何構造をモデル化したクラスから成る。
計算メッシュの情報を管理する一連のクラスを含む。
計算コードに対する低レベル API を提供するラッパークラスをまとめたもの。
計算コードに対する高レベル API を提供するラッパークラスをまとめたもの。
定数計算・炉心計算等の計算処理全体をカプセル化したクラスをまとめたもの。

パッケージの依存関係を図 7に示す。各パッケージの依存関係は一方向であり、相互依存す
ることはないように組み立てられている。

他に、物理量の単位の取り扱いを簡便化するための quantity パッケージが存在するが、ここでは割愛する。また procedure パッケージについては、4．を参照されたい。

7

－20－

JAEA-Data/Code 2010-015

pd パッケー ジ図
coord inat es

mes hg eomet ry

p a t t ern

i nfo

mat eria ls ol verrunnerp roced ure

図 7 パッケージの依存関係－21－

JAEA-Data/Code 2010-015

5.2 coordinates パッケージ
5.2.1 概要
coordinates パッケージには計算体系における集合体や計算メッシュの「場所」を指定するために使用する座標系をモデル化した一連のクラスが含まれる。具体的には、Hexagonal 座
標系・Triangular 座標系・XYZ 座標系など様々な座標系をモデル化したものであり、座標位
置情報の取り扱いを容易にするための種々のメソッドが定義されている。他に、ゾーン8を定義するためのクラスや炉心（計算体系）の形状等の情報を管理するクラスが含まれる。本パッ
ケージに含まれる代表的なクラスの一覧を表 10に示す。クラス図を図 8に示す。

表 10 coordinates パッケージの代表的なクラス
クラス名
SystemCoordinates

Zone

説明
各種の座標系を表すクラス。抽象クラスであり、対象とする座
標系毎のサブクラスが存在する。
炉心（計算体系）の形状、燃料・反射体等の配置情報、種々の炉心特性を管理するクラス
ゾーンをモデル化したクラス。

ZoneSetゾーンオブジェクトの集合。

AssemblyAddress

実炉心体系における集合体位置情報を取り扱う際に便利なメソッドを集めたユーティリティクラス。

CoreProperty

5.2.2 各種の定義に関して
MARBLE フレームワークでは、計算体系における集合体や計算メッシュの「場所」を表すにあたって、表 11に示したように、位置・アドレス・プレーン・メッシュ番号という用語を定義している。coordinates パッケージを始めとするフレームワークの各クラスでは、ここで与えられた定義が使用されているため、これらの内容を理解しておくことが重要である。（実装コードにて使用されている位置（position）、アドレス（address）、プレーン（plane）といった用語は全てここでの定義に準拠している。）アドレスについては、炉内については 1 以
上の整数値とし、炉外領域は全て 0 とする。またメッシュ番号についても、炉外領域は全て 0である。ここで「炉内」とは計算コードによる計算対象領域のことであり、ブランケット燃料や径方向反射体も含む。「炉外」は径方向反射体の外側領域である。なお各座標系における位
置・アドレス等の定義の詳細に関しては、参考文献[7]を参照のこと。
SystemCoordinates クラスのサブクラスによって表される各種の座標系オブジェクトでは、これらの位置／アドレス／プレーン／メッシュ番号を相互に変換するためのメソッドが定義される。なおフレームワークに新たな座標系を定義する必要が生じた場合は、
8

同一の実効ミクロ断面積を有する領域。

－22－

JAEA-Data/Code 2010-015

SystemCoordinates クラスにて定義されたインターフェイスを実装するサブクラスを作成すれば良い。
ゾーンはセルアドレスとプレーン番号の対（タプル）の集合として定義される。ゾーンもまた一意の正数（ゾーン番号）によって識別される。なお炉外領域を表すゾーンの番号は 0 とする。

表 11 位置・アドレス・プレーン・メッシュ番号
用語
位置（position）

定義「場所」を指定するための値の組み合わせ。2 次元 XY 座標系であれば、X 及び Y 座標値を組み合わせたもの。実装上は、Position2D クラスもしくは Position3D クラスのオブジェクトとして表される。

アドレス（address）「場所」を識別するために、所定のルールに従って与えられた整数値。
2 次元座標系に対してのみ定義される。特に集合体に対して与えられたアドレスを「セルアドレス」と呼称する。

プレーン（plane）

計算体系を Z 軸方向に垂直に複数に分割した際の各分割領域。各プレーンは番号で識別される。計算体系の最上部プレーンを 0 とし、下側に向かって増加するものとする。

メッシュ番号計算体系におけるメッシュの「場所」を表す整数値。アドレスとプレー
ン番号の組から一定の規則によって変換される。（アドレスとプレーン
番号の組は、すなわち 3 次元メッシュ位置である。アドレス・プレーン⇔メッシュ番号⇔3 次元メッシュ位置が相互に変換される。）

5.2.3 使用例
(1) SystemCoordiantes クラス
オブジェクトを生成する際には、対象とする座標タイプ名（HEXZ/TRIZ/XYZ/P_XYZ）と、座標系毎に異なる初期化情報を収めたディクショナリを引数として、クラスメソッ
ド create を呼び出す。Hexagonal 座標系を表すオブジェクトを生成する例を、以下に示す。
【例：SystemCoordinates の初期化】# 初期化用ディクショナリ
data = {}data[“NumLayers”] = 10

# 集合体の層数data[“CellAddressSet”] = [1, 2, 3, 4, ..., 330]－23－

# セルアドレスのリスト

JAEA-Data/Code 2010-015# オブジェクトの生成
coordinates = SystemCoordinates.create(HEXZ, data)
生成された SystemCoordinates オブジェクトを用いることで、先に定義した位置・ア
ドレス等の様々な変換が可能となる。変換処理の例を以下に示す。
【例】# 座標系は TRIZ
cellAddress = 1# セルアドレス 1plane = 3

# プレーン番号 3# セルアドレスを位置に変換。返値は Position2D オブジェクトのリスト
for pos in coordinates.convertCellAddressToPosition(cellAddress):# 位置をアドレスに変換（一対一変換）
address = coordinates.convertPositionToAddress(pos)# アドレスとプレーン番号をメッシュ番号に変換（一対一変換）
meshNum = coordinates.convertAddressAndPlaneToMeshNum(address, plane)# メッシュ番号をメッシュ位置 Position3D に変換（一対一変換）
meshPos = coordinates.convertMeshNumToMeshPos(meshNum)(2) CoreProperty クラス
CoreProperty クラスは炉心の形状（燃料・反射体等の配置情報）や炉心出力等の炉心特性情報を管理するためのクラスである。オブジェクトを生成する際には、対象とする
炉心タイプ名（FastReactorCore/MatrixCore）と初期化情報を収めたディクショナリ9を引数として、クラスメソッド create を呼び出す。
【例：CoreProperty の初期化】# 初期化用ディクショナリ
data = {}data[“CoreName”] = “TestCore”
data[“Power”] = 50.0

# 炉心名

# 炉心出力(MWth)data[“CellAddressSet”] = [1, 2, 3, 4, ......, 330]
data[“FuelAddressSet”] = [1, 2, 3, 4, ...]
data[“ReflectorAddressSet”] = [218, 227, ...]
9

ディクショナリの構造は炉心タイプ毎に異なる。

－24－# 炉心全体のセルアドレス# 燃料集合体のセルアドレス# 反射体のセルアドレス

JAEA-Data/Code 2010-015

data[“ControlRodAddressSet”] = [22, 25, .....]
data[“NeutronSourceAddressSet”] = [73]# 制御棒のセルアドレス# 中性子源のセルアドレス# オブジェクトの生成
coreProperty = CoreProperty.create(“FastReactorCore”, data)(3) ZoneSet／Zone クラス
ゾーンを生成 する際には、各ゾーン の情報をまとめたディ クショナリを用い てZoneSet クラスのコンストラクタを呼び出し、Zone 及び ZoneSet オブジェクトをまとめて構築する。各ゾーンには、自身が含むセルアドレスとプレーン番号の集合、燃焼の有無、セル計算の際のモデル化タイプを与える。
【例：ZoneSet の初期化】
data = {}data[1] = {}# ゾーン番号をキーとする

data[1][“area”] = [(0, 0), (1, 0),..., (330, 0)]data[1][“burnable”] = False
data[1][“cell”] = “homo”# セルアドレスとプレーンのタプル# 燃焼の有無（True の場合、燃焼ゾーン）# セル計算の際のモデルタイプ（必要なゾーン番号について同様に定義）
zoneSet = ZoneSet(data)

－25－

－26－

+
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+

He x z C oordina t es

getSystemSize() : (int, int)
getParam(str) : object
convertCellAddressToPosition(int) : Position2D[]
convertPositionToCellAddress(Position2D) : int
convertPositionToLocalAddress(Position2D) : int
convertPositionToAddress(Position2D) : int
convertAddressToPosition(int) : Position2D
convertPositionAndPlaneToMeshPos(Position2D, int) : Position3D
convertMeshPosToPositionAndPlane(Position3D) : (Position2D, int)
convertMeshPosToMeshNum(Position3D) : int
convertMeshNumToMeshPos(int) : Position3D
convertMeshNumByCellRotation(int, int) : int

Xy z C o ord ina t es

getSystemSize() : (int, int)
getParam(str) : object
convertCellAddressToPosition(int) : Position2D[]
convertPositionToCellAddress(Position2D) : int
convertPositionToLocalAddress(Position2D) : int
convertPositionToAddress(Position2D) : int
convertAddressToPosition(int) : Position2D
convertPositionAndPlaneToMeshPos(Position2D, int) : Position3D
convertMeshPosToPositionAndPlane(Position3D) : (Position2D, int)
convertMeshPosToMeshNum(Position3D) : int
convertMeshNumToMeshPos(int) : Position3D
convertMeshNumByCellRotation(int, int) : int

T riz C oordina t es

getSystemSize() : (int, int)
getParam(str) : object
convertCellAddressToPosition(int) : Position2D[]
convertPositionToCellAddress(Position2D) : int
convertPositionToLocalAddress(Position2D) : int
convertPositionToAddress(Position2D) : int
convertAddressToPosition(int) : Position2D
convertPositionAndPlaneToMeshPos(Position2D, int) : Position3D
convertMeshPosToPositionAndPlane(Position3D) : (Position2D, int)
convertMeshPosToMeshNum(Position3D) : int
convertMeshNumToMeshPos(int) : Position3D
convertMeshNumByCellRotation(int, int) : int

c d c oordina t es

create(int, dict) : SystemCoordinates
getCoordinatesType() : int

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

0..*

create(int, dict) : CoreProperty
getCoreProperty(str) : object

+
+
+
+
+
+
+
#

図 8 coordinates パッケージのクラス図_setupCorePropertyData() : void

includeAddress(int, int) : bool
includeAddressSet(list, int) : bool

getCellAddressSet(int) : int[]
getNumOfCells(int) : int
getCellCategory(int) : int

elements: Object (dict)#

C orePrope rt yconvertPositionAndPlaneToMeshPos(Position2D, int) : Position3D
convertMeshPosToPositionAndPlane(Position3D) : (Position2D, int)
convertMeshPosToMeshNum(Position3D) : int
convertMeshNumToMeshPos(int) : Position3D
convertMeshNumByCellRotation(int, int) : int

convertAddressAndPlaneToMeshNum(int, int) : int
convertMeshNumToAddressAndPlane(int) : (int, int)

getSystemSize() : (int, int)
getParam(str) : object
convertCellAddressToPosition(int) : Position2D[]
convertPositionToCellAddress(Position2D) : int
convertPositionToLocalAddress(Position2D) : int
convertPositionToAddress(Position2D) : int
convertAddressToPosition(int) : Position2D

coordinatesType: int-

Sy s t emC o ordi na t es

getZoneNumber() : int
getCellAddressAndPlaneSet() : (int,int)[]
getCellAddressSet() : int[]
getPlaneSet() : int[]
cellType() : str
burnable(bool) : bool

+
+
+
+
+
+

Z one
zoneNumber: int
addressAndPlaneSet: (int,int) [0..*]cellType: str
burnable: bool

1

+
+
+
#

+
+
+
#

updateZoneSet(dict) : void
getZoneNumberSet() : int[]
getZone(int) : Zone
getZoneIncludes(int, int) : Zone
getZoneNumber(int, int) : inthas(int) : bool

getCellAddressSet(int) : int[]
getNumOfCells(int) : int
getCellCategory(int) : int_setupCorePropertyData() : void

Ma t rix C ore Pro pert y

getCellAddressSet(int) : int[]
getNumOfCells(int) : int
getCellCategory(int) : int_setupCorePropertyData() : voidF a s t Re a ct orC ore Pro pert y+zoneNumber +++++Z on eSe t

JAEA-Data/Code 2010-015

JAEA-Data/Code 2010-015

5.3 geometry パッケージ
5.3.1 概要
geometry パッケージには集合体の 3 次元詳細幾何形状やメッシュの幾何形状をモデル化したものである。本パッケージに含まれる代表的なクラスの一覧を表 12に示す。クラス図を図 9に示す。
本パッケージでは、三角形・六角形等の単純な形状を組み合わせることで 2 次元詳細幾何形
状をモデル化し、さらにそれを軸方向に積み重ねることによって 3 次元詳細幾何形状を表現する。構築された幾何形状に対してレイトレース処理を行うことにより、詳細幾何形状の任意の領域の全体に対する面積比を把握することができる。（ここで各領域は一意の番号によって識別される。）

表 12 geometry パッケージの代表的なクラス
クラス名
Shape
GeomComponent
GeomComponentFactory
SegmentSetGeometry
SegmentSetGeometryPool
RegionRegionFactory
GeometryBuildContext
OverlapRegion
OverlapRegionSet
RayTracer

説明
三角形・六角形等の基本的な幾何形状を表現するクラス。
抽象クラス。
Shape オブジェクトを組み合わせて複雑な 2 次元幾何形状を表すクラス。
GeomComponent の生成・管理を行う。シングルトン。
GeomComponent オブジェクトを軸方向に組み合わせて、3 次
元幾何形状を表すクラス。
SegmentSetGeometry オブジェクトの生成・管理を行う。
任意の領域を表すクラス。GeomComponent オブジェクトの組によって定義される。
Region オブジェクトの生成・管理を行う。シングルトン。
SegmentSetGeometry 及び Region オブジェクト生成のための情報を管理する。
幾何形状の重ね合わせによって形成される領域を表すクラス。
領域番号と領域面積を保持する。
レイトレース処理を実行し、OverlapRegion オブジェクトを生成・管理する。
幾何形状のレイトレース処理を行うクラス。

－27－

JAEA-Data/Code 2010-015

5.3.2 使用例
(1) 幾何形状オブジェクトの構築
集合体詳細幾何形状を geometry パッケージで表す場合、Shape オブジェクトや
GeomComponent オブジェクト等を複雑に組み合わせることが必要になる。そこで幾何形状構築処理を簡易に行うために、本パッケージでは、必要な情報をGeometryBuildContext オブジェクトに集約し、これを基に幾何形状オブジェクトのセ
ットアップを半自動的に行うことができる。具体的には GeometryBuildContext オブジ
ェクトを所定のデータをもつディクショナリを用いて初期化し、生成されたオブジェク
トを用いて SegmentSetGeometryPool オブジェクトに依頼する。以下に例を示す。
【例：GeometryBuildContext の初期化】# 初期化用ディクショナリ
shape = {}shape[‘hex1’] = {‘type’: ‘HEX’, ‘angle’: 0.0, ‘value’: 7.470}
shape[‘circle1’] = {‘type’: ‘CIRCLE’, ‘angle’: 0.0, ‘value’: 0.355}
・・・
component = {}component[‘pellet’] = {‘shape’: ‘circle1’}component[‘pin’] = {‘shape’: ‘circle2’, ‘composition’: [(0.0, 0.0, ‘pellet’)]}component[‘lattice’] = {‘shape’: ‘hex1’, ‘composition’: [(0.0, ‘pin’)...]}
component[‘segment1’] = {‘shape’: ‘hex2’, ‘composition’: [(0.0, 0.0, ‘lattice’)...]}
・・・
segmentSet = {}segmentSet[‘assembly1’] = [(0.0, 20.0, ‘segment1’), (20.0, 80.0, ‘segment2’)...]
・・・
region = [{‘region’: ’fuel’, ‘boundary’: ’pin’, ‘outer’: ’pellet’},{‘region’: ’sus’, ‘boundary’: ’pin’, ‘outer’: ’pin’, ‘inner’: ’pellet’},・・・]
data = {‘ShapeSection’: shape, ‘ComponentSection’: component,‘SegmentSetSection’: segmentSet, ‘RegionSection’: region}# オブジェクトの生成
context = GeometryBuildContext(data)【例：幾何形状オブジェクトの生成】
pool = SegmentSetGeometryPool()
pool.buildSegmentSetGeoemtry(context)－28－# GeometryBuildContext を使用

JAEA-Data/Code 2010-015# 以降、pool から構築済みの SegmentSetGeometry オブジェクトが得られる
segmentSet = pool.getSegmentSetGeometry(‘assembly1’)(2) レイトレース処理
OverlapRegionSet クラスを用いることで、生成された詳細幾何形状に対してレイトレース処理を行うことができる。集合体詳細幾何形状（六角形）に対して三角メッシュによるマスクをかけた領域のみを対象にレイトレース処理を行うケースの実装サンプルを以下に示す。
【例 1】# 集合体詳細幾何形状断面を表す GeomComponent を segment，# 三角メッシュの幾何形状を表す GeomComponent を mesh，# 集合体にメッシュをマスクする際のメッシュの配置座標を meshPos とする
overlapRegionSet = OverlapRegionSet()
overlapRegionSet.create(segment, mesh, meshPos)# レイトレースを実行# 以降、OverlapRegionSet クラスのメソッドを用いて結果を取り扱う【例 2】# 同じ処理を OverlapRegionSet クラスを用いずに実施する場合
raytraceContext = OverlapRegionRayTraceContext()
raytraceContext.setBaseComponent(segment)
raytraceContext.setClipComponent(mesh)raytracer = RayTracer()
raytracer.setRaytTaceContext(raytraceContext)
raytracer.setRayTraceBaseGeometry(segment)
raytracer.setRayTraceClippingGeometry(mesh, meshPos)
vec = Vector(0.0, 1.0)

# レイトレース方向を定める方向ベクトル

result = raytracer.rayTrace(vec)# レイトレース実行# 結果は領域番号をキーとするディクショナリとして得られる－29－

This is a blank page.

JAEA-Data/Code 2010-015
cd g eomet ry
Ov e rla p Reg ion+++

Reg io n

Ov erla pReg ionS et

overlapRegionNumber: int
overlapArea: float
overlapRegionName: str*

getOverlapRegionNumber() : int
getOverlapRegionName() : str
getOverlapRegionArea() : float

1
create+overlapRegionNumber ++++create(GeomComponent, GeomComponent, Point) : void
getOverlapRegionNumberSet() : int[]
getOverlapRegionName(int) : str
getOverlapRegionArea(int) : float
totalArea() : float-

regionName: str

+
+
+
+

getRegionName() : str
getBoundaryComponent() : GeomComponent
getOuterComponent() : GeomComponent
getInnerComponent() : GeomComponent

1

1

*

*
create

use

use
1
1

Ov erla pReg ionRa y T ra ce C ont ex t

Ra y T ra c er++++

setRayTraceBaseGeometry(GeomComponent) : void
setRayTraceClippingGeometry(GeomComponent, Point) : void
setRayTraceContext(OverlapRegionRayTraceContext) : void
rayTrace(Vector) : dictboundaryComponent, outerComponent, innerComponent

use
1

1

+
+
+
+

<<singleton>>
Re g ionF a c t ory

1

setBaseComponent(GeomComponent) : void
setClipComponent(GeomComponent) : void
getRayTraceAreaNumber(Point) : int
getRegion(int) : Region
11-

instance: RegionFactory

+
+
+
+

registerRegion(str, GeomComponent, GeomComponent, GeomComponent) : Region
hasRegion(GeomComponent, GeomComponent, GeomComponent) : bool
getRegion(GeomComponent, GeomComponent, GeomComponent) : Region
claer() : void1
G eomC omp onentG e omet ry Build C ont ex t-context: (dict)

+
+
+
+
+
+
+

getShapeType(str) : str
getShapeAngle(str) : float
getShapeValule(str) : float
getComponentInfo(str) : dictgetRegionInfo() : (str, str, str)[]
getSegmentSetInfo(str) : (Zrange, str)[]
getSegmentSetNameList() : str[]

1..2

Seg ment Set G eomet ry
+
+
+
+
+
+
+
+
+
+
+
+
+

use

append(Zrange, GeomComponent) : void
getNumOfPlanes() : int
getZranges() : Zrange[]
getSegments() : GeomComponent[]
getZrangeByPlane(int) : Zrange
getSegmentByPlane(int) : GeomComponent
getSegmentByZrange(Zrange) : GeomComponent
getSegmentByZposition(float, float) : GeomComponent
getSegmentContainZrange(Zrange, float) : GeomComponent
getZrangesMaskedWithZrange(Zrange, float) : (int, Zrange)[]
getPlanesMaskedWithZrange(Zrange, float) : (int, float)[]getTop() : float
getBottom() : float

zrange1*1segmentNamebuildSegmentSetGeometry(GeometryBuildContext, list) : void
getSegmentSetGeometry(str) : SegmentSetGeometry**

createS eg ment S et G eomet ry Poo l++*create1-indexMap: (dict)parent: GeomComponent
frozen: bool

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

addComponent(Point, GeomComponent) : void
freeze() : void
hasChild() : bool
hasPoint(Point) : bool
getName() : str
getValue(int) : float
getEquivalentRadius() : float
getAngle() : float
getArea() : float
getMaxSize() : float
getMinSize() : float
getProjectionPoints(Line) : Point[]
intersect(Line) : boolean
getInterSections(Line) : Point[]
getEdges() : Point[]
getWidth(Vector) : float
getChildComponents() : (Point, GeomComponent)[]
getNumberOfComponents(bool) : int
getComponentAll(bool) : (Point, GeomComponent)[]
getComponentAtPosition(Point) : (Point, GeomComponent)[]
getComponentIncludes(Point) : (Point, GeomComponent)[]
getIndex(Point, GeomComponent) : int
inquireBoundaryComponent(Point) : (Point, GeomComponent)
inquireOuterComponent(Point) : (Point, GeomComponent)
inquireInnerComponent(Point) : (Point, GeomComponent)
includeComponent(Point, GeomComponent) : bool
isLattice() : bool
getLattice() : GeomComponent
getComponentOutsideLattice() : (Point, GeomComponent)[]
getLatticeArrayComponents() : dictgetLatticeArrayPitch() : float

3

1..2

name
<<singleton>>
G eomC omp on ent F a ct ory-

instance: GeomComponentFactory

+
+
+
+
+

registerGeomComponent(str, str, float, float, float) : GeomComponent
find(str) : bool
getGeomComponent(str) : GeomComponent
getNumOfGeomComponents() : int
clear() : voidSha pe11-name: str
value: float [1..2] {ordered}angle: float

+
+
+
+
+
+
+
+
+
+
+
+
+

create(str, str, float, float, float) : Shape
getName() : str
getValue(int) : float

getEquivalentRadius() : float

getAngle() : float

getArea() : float
hasPoint(Point) : bool
getMaxSize() : float
getMinSize() : float
getProjectionPoints(Line) : Point[]
intersect(Line) : bool
getInterSections(Line) : Point[]
getEdges() : Point[]

He x Sha p e

T ri a ng leSh a p e-lines: Line [1..6]-

lines: Line [1..3]

+
+
+
+
+
+
+
+
+

getEquivalentRadius() : float
getArea() : float
hasPoint(Point) : boolean
getMaxSize() : float
getMinSize() : float
getProjectionPoints(Line) : Point[]
intersect(Line) : boolean
getInterSections(Line) : Point[]
getEdges() : Point[]

+
+
+
+
+
+
+
+
+

getEquivalentRadius() : float
getArea() : float
hasPoint(Point) : boolean
getMaxSize() : float
getMinSize() : float
getProjectionPoints(Line) : Point[]
intersect(Line) : boolean
getInterSections(Line) : Point[]
getEdges() : Point[]-lines: Line [1..4]

+
+
+
+
+
+
+
+
+

getEquivalentRadius() : float
getArea() : float
hasPoint(Point) : boolean
getMaxSize() : float
getMinSize() : float
getProjectionPoints(Line) : Point[]
intersect(Line) : boolean
getInterSections(Line) : Point[]
getEdges() : Point[]

Sq u a reSha p e

C ircleSha p e
+
+
+
+
+
+
+
+
+

getEquivalentRadius() : float
getArea() : float
hasPoint(Point) : boolean
getMaxSize() : float
getMinSize() : void
getProjectionPoints(Line) : Point[]
intersect(Line) : boolean
getInterSections(Line) : Point[]
getEdges() : Point[]

図 9 geometry パッケージのクラス図－31～32－

JAEA-Data/Code 2010-015

5.4 material パッケージ
5.4.1 概要
material パッケージは、実効ミクロ／マクロ断面積や組成、核種毎の様々な物理データ等を管理するものである。本パッケージに含まれる代表的なクラスの一覧を表 13に示す。クラス
図を図 10に示す。

表 13 material パッケージの代表的なクラス
クラス名
EffectiveCrossSection
MicroscopicEffectiveCrossSectionSet
Material

説明
実効ミクロ／マクロ断面積をモデル化したクラス。
ミクロ用・マクロ用のそれぞれのサブクラスが存在する。
核種毎の実効ミクロ断面積オブジェクトを管理する。
物質組成をモデル化したクラス。

MaterialSet

Material オブジェクトの集合。

Nuclide

核種をモデル化したクラス。

5.4.2 使用例
MARBLE フレームワークでは、既存システムで使用されている断面積ファイル（PDS ファイル）が隠蔽され、実効ミクロ／マクロ断面積を EffectiveCrossSection クラスのオブジェク
トとして取り扱うことができる。また数密度をモデル化した Material クラスのオブジェクトと実効ミクロ断面積オブジェクト MicroscopicEffectiveCrossSectionSet の積算から、簡易にマクロ断面積オブジェクトを生成するインターフェイスが用意されている。これらのオブジェ
クト操作のサンプルを以下に示す。
【例】# pdsfile: PDS ファイルをカプセル化した PDSFile クラスのオブジェクト# 実効ミクロ断面積オブジェクトの生成
microxs = MicroscopicEffectiveCrossSection()
microxs.load_pdsfile(pdsfile, nuclde=“Pu-239”, code=“SLAROM-UF”, icase=1)# 実効マクロ断面積オブジェクトの生成
macroxs = MacroscopicEffectiveCrossSection()
macroxs.load_pdsfile(pdsfile, code=“SLAROM-UF”, icase=1)－33－

JAEA-Data/Code 2010-015# 断面積データの取得
fission = macroxs.get(“fission”)
capture = macroxs.get(“capture”)# 複数核種の実効ミクロ断面積オブジェクト
microxss = MicroscopicEffectiveCrossSectionSet()
for nuclideid in [942390, 942420, 942419, ....]:
xs = MicroscopicEffectiveCrossSection()xs.load_pdsfile(pdsfile, nuclide=nuclideid, code=”SLAROM-UF”, icase=1)
microxss[nuclideid] = xs
# mat: Material クラスのオブジェクト
macroxs = microxss * mat# 実効ミクロ断面積と数密度の積算－34－

JAEA-Data/Code 2010-015

cd ma t eria lE ffect iv eC ros s Se ct ion

E nerg y Boun da ry
use++energygroup() : int
boundary() : list-

name: streg: int
dtype: dtype
data: float (dict)

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

set_name(str) : void
set_energygroup(int) : void
name() : str
energygroup() : int
dtype() : dtype
condense(list, list, list) : EffectiveCrossSection
condensed_array(str, list, list, list) : list

load_pdsfile(PDSFile, str, int, int) : void
load_newpdsfile(NewPDSFile, int) : void

rtypeids() : str[]get(str) : object
set(str, object) : void
unset(str) : voidhas(str) : bool
convert_dtype(dtype) : EffectiveCrossSection

Micros c opic E ffect iv eC ro s s Se ct io n
Ma cros c opicE ffect iv eC ro s s Se ct io n
+
+

+
+
+
+
+
+

load_pdsfile(PDSFile, str, int, int) : void
load_newpdsfile(NewPDSFile, int) : void1

set_nuclide(Nuclide) : void
nuclide() : Nuclide
load_pdsfile(PDSFile, str, int, int) : void
load_newpdsfile(NewPDSFile, int) : void
condense(list, list, list) : EffectiveCrossSection
convert_dtype(dtype) : EffectiveCrossSection
1..*

create11nuclideID

Micros copicE ffect iv eC ros s S ect ionSe t
+
+
+
+
+
+
+
+
+

__setitem__(int, MicroscopicEffectiveCrossSection) : void__getitem__(int) : MicroscopicEffectiveCrossSection
set_energygroup(int) : void
energygroup() : int
set_macroxs(MacroscopicEffectiveCrossSection) : void
macroxs() : MacroscopicEffectiveCrossSection
nuclideids() : int[]
rtypeids() : str[]__mul__(Material) : MacroscopicEffectiveCrossSection
1

multiply

1
Ma t e ria l

Ma t eria lS et+++

getMaterialNames() : str[]
register(str, dict) : void
getMaterial(str) : Material

name
1

1..*

+
+
+
+
+
+
+
+
+
+
+
+

図 10 material パッケージのクラス図－35－

set_name(str) : void
name() : str
set_type(int) : voidtype() : int
date() : str
set_date(str) : voidset(Nuclide, float) : void
nuclides() : Nuclide[]
nuclideids() : int[]
density(Nuclide) : float
reduce() : void
decay_to(str) : Material

JAEA-Data/Code 2010-015

5.5 pattern パッケージ
5.5.1 概要
pattern パッケージは、集合体装荷パターン（ZPPR 臨界実験解析体系をモデル化する場合
であれば、ドロワー配置パターン）をモデル化したものである。本パッケージに含まれるクラス一覧を表 14に示す。クラス図を図 11に示す。
Pattern オブジェクトは任意のサイクルの装荷パターンをモデル化したものであり、各集合体について、集合体ラベル名や前装荷サイクル数・前装荷位置等の情報を管理している。そのため Pattern オブジェクトの生成の際には、今サイクルの装荷パターン情報に加えて、過去サイクルの Pattern オブジェクトの集合を与える必要がある。

表 14 pattern パッケージのクラス
クラス名
Pattern
CellData

説明
集合体装荷パターンをモデル化したクラス。セルアドレスをキーとして、CellData オブジェクトを保持する。
ラベル名、集合体タイプ名、前サイクル装荷アドレス等の情報をカプセル化したクラス。

5.5.2 使用例
Pattern オブジェクトの生成は、Pattern クラスのクラスメソッド makePattern を用いて行う。引数として、サイクル数・サイクル名・装荷パターン情報・過去サイクルの Pattern オブジェクトのリストを与える。装荷パターン情報は所定のデータを収めたディクショナリである。オブジェクト生成処理の実装サンプルを以下に示す。
【例】# サイクル 4# oldPatterns は過去 3 サイクルの Pattern オブジェクトを含むリスト
data = {}data[1] = {‘preCyc’: 2, ‘preAdd’: 7, ‘maxKeyPosition’: 0}data[2] = {‘label’: ‘PFD008’, ‘maxKeyPosition’: 0}# from CY-2

# from CY-3（ラベル名指定）

data[3] = {‘label’: ‘PFD017’, ‘type’: ‘assembly2’, ‘maxKeyPosition’: 0}

# 新燃料

・・・
pattern = Pattern.makePattern(cycleName = ’4’, cycleNumber = 4,
patternData = data, patternList = oldPatterns)－36－

JAEA-Data/Code 2010-015

c d pa t t e rn
Pa t t e rn-

cycleName: str
cycleNumber: int

+
+
+
+
+
+
+
+
+
+
+
+

makePattern(dict, str, int, list, list) : Pattern
getCycleName() : str
getCycleNumber() : int
getCellGeometryTypeSet() : str[]
getCellGeometryType(int) : str
getCellLabel(int) : str
getPreCycleNumber(int) : int
getPreCellAddress(int) : int
getCellRotation(int) : int
newCell(int) : bool
findCellAddressByLabel(str) : inthas(int) : bool
cellAddress
1

1..*
C ellDa t a
+
+
+
+
+
+
+

cellGeometryType: str
cellLabel: str
maxKeyPosition: int
preAddress: int
preCycleNumber: int
preMaxKeyPosition: int
axialOffset: float+

getCellRotation() : int

図 11 pattern パッケージのクラス図－37－

JAEA-Data/Code 2010-015

5.6 mesh パッケージ
5.6.1 概要
mesh パッケージは計算体系全体の 3 次元メッシュ幾何構造をモデル化したものである。
cooridnates パッケージと geometry パッケージの双方に依存する。すなわち、coordinates パ
ッケージにて定義される 3 次元座標系情報と geometry パッケージによって定義されるメッシ
ュの幾何形状を組み合わせて構築される。本パッケージに含まれる代表的なクラスの一覧を表15に示す。クラス図を図 12に示す。
mesh パッケージの機能は大きく分けて以下の 2 つである。
・ 3 次元メッシュの幾何形状情報（各メッシュの軸方向長・径方向長、各メッシュの体積等）を管理する機能
・ 異なるメッシュ座標系間でメッシュ番号の変換を行う機能
上記 2 つの機能は、それぞれ MeshGeometry クラスと MeshNumberGlobalConverter クラスで制御される。これらは抽象クラスであり、対象とするメッシュ体系のベースとなる座標系に応じて異なるサブクラスが実装される。

表 15 mesh パッケージの代表的なクラス
クラス名
MeshGeometry
MeshNumberGlobalConverter

説明
3 次元メッシュ幾何構造を表す抽象クラス。表現するメッシュの幾何形状に応じて、様々なサブクラスが存在する。
異なるメッシュ体系の間で、メッシュ番号の変換を行う機能を有する抽象クラス。変換前後のメッシュ体系に応じて、様々なサブクラスが存在する。

5.6.2 使用例
(1) MeshGeometry オブジェクトの初期化
MeshGeometry クラスの create メソッドに、メッシュ体系のベースとなる座標系を表す SystemCoordinates オブジェクトを渡すことでインスタンスが生成される。さらに軸方向メッシュ分割長等の情報を与えて初期化を行う。軸方向分割長は、各プレーンの軸長によるリストとして与える。（リストへのデータの登録順はプレーン番号の昇順である。）また、あわせて集合体幾何形状の 2 次元断面を表す GeomComponent オブジェク
トが与えられる。これは径方向メッシュ長を決定するために用いられる。オブジェクト
生成処理の実装のサンプルを以下に示す。
【例】# coordinates は Hexagonal 座標系を表す SystemCoordinates オブジェクト# pool は SegmentSetGeometryPool オブジェクト－38－

JAEA-Data/Code 2010-015# cellSegment は集合体 2 次元断面を表す GeomComponent オブジェクト
axialMeshDiv = [20.0, 5.0, 5.0, ....., 5.0, 5.0, 20.0]# 軸方向メッシュ長

meshGeometry = MeshGeometry.create(coordinates)
meshGeometry.buildMeshGeometry(pool, cellSegment, axialMeshDiv)(2) メッシュ番号変換
メッシュ番号変換を行う際には、変換前後それぞれのメッシュ体系を表す
MeshGeometry オ ブ ジ ェ ク ト を 用 意 し 、 そ れ ら の オ ブ ジ ェ ク ト を 基 に し て
MeshNumberGlobalConverter オブジェクトを生成する。オブジェクトの生成及びメッ
シュ番号変換処理のサンプルを以下に示す。
【例】# HEXZ メッシュ体系から TRIZ メッシュ体系へのメッシュ番号変換# hexMesh: HEXZ 体系の MeshGeometry オブジェクト# triMesh: TRIZ 体系の MeshGeometry オブジェクト# オブジェクトの生成
converter = MeshNumberGlobalConverter.create(hexMesh, triMesh)# メッシュ番号変換処理# HEXZ メッシュ体系でのメッシュ番号で表されるメッシュが占める空間を、# TRIZ メッシュ体系では何番のメッシュが占めるかを算出する# 返値は、「(メッシュ番号，ウエイト)」のタプルによるリストとなる
result = converter.convertFrom(hexzMeshNum)

－39－

+
+
+

－40－

T riz T oT riz C onv ert e r

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+

+
+

2

1

getAxialMeshPitchSet(bool) : Zrange[]
getMeshVolume(int) : float
getAxialPlaneNumber(float) : int
setBottomPosition(int, float) : void
getBottomPosition(int) : float

getRadialMeshPitch(str) : float

1

1

1..*

+
+
+
+
+
+
+
+
+
+
+
+
+

append(Zrange, GeomComponent) : void
getNumOfPlanes() : int
getZranges() : Zrange[]
getSegments() : GeomComponent[]
getZrangeByPlane(int) : Zrange
getSegmentByPlane(int) : GeomComponent
getSegmentByZrange(Zrange) : GeomComponent
getSegmentByZposition(float, float) : GeomComponent
getSegmentContainZrange(Zrange, float) : GeomComponent
getZrangesMaskedWithZrange(Zrange, float) : (int, Zrange)[]
getPlanesMaskedWithZrange(Zrange, float) : (int, float)[]getTop() : float
getBottom() : floatg e omet ry ::S eg me nt Se t G e omet ry

convertPositionAndPlaneToMeshPos(Position2D, int) : Position3D
convertMeshPosToPositionAndPlane(Position3D) : (Position2D, int)
convertMeshPosToMeshNum(Position3D) : int
convertMeshNumToMeshPos(int) : Position3D
convertMeshNumByCellRotation(int, int) : int

convertAddressAndPlaneToMeshNum(int, int) : int
convertMeshNumToAddressAndPlane(int) : (int, int)

getSystemSize() : (int, int)
getParam(str) : object
convertCellAddressToPosition(int) : Position2D[]
convertPositionToCellAddress(Position2D) : int
convertPositionToLocalAddress(Position2D) : int
convertPositionToAddress(Position2D) : int
convertAddressToPosition(int) : Position2D

create(int, dict) : SystemCoordinates
getCoordinatesType() : int

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

coo rdina t es : :Sy s t emC oord ina t e scoordinatesType: int-buildMeshGeometry(SegmentSetGeometryPool, GeomComponent, list, float) : void
getPositionInGeometryCoordinates(int) : Point
getRadialMeshPitch(str) : float

T ri z Mes hG e omet ry

address

図 12 mesh パッケージのクラス図+++

getSystemCoordinates() : SystemCoordinates
getAddressAll() : int[]
getNumOfPlanes() : int
getPlaneNumberSet() : int[]

getPositionInGeometryCoordinates(int) : Point

setAddressScope(list) : void
setPlaneScope(list) : void
getSegmentSetGeometry(int) : SegmentSetGeometry

1checkConversion() : bool
convertFrom(int) : (int, float)[]Hex z T oT riz C o nv ert erbuildMeshGeometry(SegmentSetGeometryPool, GeomComponent, list, float) : void

Mes hG eo met ry

checkConversion() : bool
convertFrom(int) : (int, float)[]T riz T oHex z C o nv ert er
checkConversion() : bool
convertFrom(int) : (int, float)[]create(MeshGeometry, MeshGeometry) : MeshNumberGlobalConverter

Me s hNu mberG lob a lC o nv ert er

create(SystemCoordinates) : MeshGeometry+++

checkConversion() : bool
convertFrom(int) : (int, float)[]Hex z T oHe x z C o nv ert er

checkConversion() : bool
convertFrom(int) : (int, float)[]Hex z Mes hG eo met ry

+
+

+
+

buildMeshGeometry(SegmentSetGeometryPool, GeomComponent, list, float) : void
getPositionInGeometryCoordinates(int) : Point
getRadialMeshPitch(str) : floatc d me s h

JAEA-Data/Code 2010-015

JAEA-Data/Code 2010-015

5.7 info パッケージ
5.7.1 概要
info パッケージには計算体系全体の中性子束メッシュ・マテリアルメッシュ及び実効断面積を管理する一連のクラスが含まれる。本パッケージに含まれる代表的なクラスの一覧を表 16に示す。クラス図を図 13に示す。
中性子束メッシュ及びマテリアルメッシュはそれぞれオブジェクトとして表され、これらメッシュオブジェクトの集合はそれぞれ CoreFluxInfo，CoreMaterialInfo オブジェクトで管理される。MARBLE フレームワークでは中性子束メッシュとマテリアルメッシュそれぞれにおいて異なるメッシュ体系の利用が可能であり、CoreFluxInfo，CoreMaterialInfo オブジェク
トはそれぞれ異なるメッシュ体系を管理する。
CoreFluxInfo オブジェクトではメッシュ番号をキーとして中性子束メッシュが管理される
一方、CoreMaterialInfo オブジェクトではメッシュ番号の他にマテリアル番号が用いられる。
マテリアル番号は異なるマテリアルに対して割り当てられた正数である。（非燃焼メッシュでは、同一ゾーンに含まれる異なるメッシュのマテリアルは同一となる。）CoreMaterialInfo
オブジェクトでは、メッシュ番号・マテリアル番号及びゾーン番号の相互変換を行うためのテーブルが管理される。
実効ミクロ・マクロ断面積は、CrossSectionInfo オブジェクトにて、それぞれゾーン番号及びマテリアル番号をキーとして管理される。

表 16 info パッケージの代表的なクラス
クラス名
CoreInfo
CoreFluxInfo
FluxRegionInfo
CoreMateialInfo
MaterialRegionInfo
CrossSectionInfo
InitialComposition
CellModelConverter

説明
CoreFluxInfo/CoreMaterialInfo/CrossSectionInfo オブジェク
トを管理し、計算体系全体の情報を取り扱うクラス。
全中性子束メッシュを管理する。メッシュ番号毎にFluxRegionInfo オブジェクトを保持する。
中性子束メッシュをモデル化したクラス。
全マテリアルメッシュを管理する。マテリアル番号毎にMaterialRegionInfo オブジェクトを保持する。
マテリアルメッシュをモデル化したクラス。
ミクロ／マクロ断面積を管理する。ゾーン番号及びマテリアル
番号毎に EffectiveCrossSection オブジェクトを保持する。
マテリアルメッシュの初期組成を管理するクラス。
セル計算用の集合体モデルを表すクラス。モデルのタイプ毎にサブクラスが存在する。

－41－

JAEA-Data/Code 2010-015

5.7.2 使用例
CoreFluxInfo，CoreMaterialInfo オブジェクトを生成する際は、それぞれのメッシュ構造を表す MeshGeometry オブジェクトが与えられる。CoreMaterialInfo に対しては、さらにゾーンの情報を与えるために ZoneSet オブジェクトが使用される。
CoreInfo オブジェクトでは、CoreFluxInfo，CoreMaterialInfo 及び CrossSectionInfo オブ
ジェクトが管理される。特に CoreFluxInfo，CoreMaterialInfo オブジェクトは ID 番号によっ て 取 り 扱 わ れ る 。 こ れ は 、 異 な る メ ッ シ ュ 体 系 を 持 つ 複 数 の CoreFluxInfo ／CoreMaterialInfo オブジェクトの取り扱うケースを想定するためである。CoreInfo オブジェ
クトを介してこれらの Info オブジェクトを生成する処理のサンプルを以下に示す。
【例】# 中性子束メッシュ体系を表すオブジェクトを fluxMeshGeometry，# マテリアルメッシュ体系を表すオブジェクトを materialMeshGeometry，# ZoneSet オブジェクトを zoneSet とする
ng = 70# エネルギー群数

coreInfo = CoreInfo()# CrossSectionInfo オブジェクトの生成
coreInfo.buildCrossSectionInfo(ng)# CoreFluxInfo オブジェクトの生成（返値は ID 番号）
fluxID = coreInfo.buildCoreFluxInfo(ng, fluxMeshGeometry)# CoreMaterialInfo オブジェクトの生成（返値は ID 番号）
materialID = coreInfo.buildCoreMaterialInfo(materialMeshGeometry, zoneSet)# CoreFluxInfo，CoreMaterialInfo オブジェクトを得る際は、ID 番号を指定する
coreFluxInfo = coreInfo.getInfo(fluxID)
coreMaterialInfo = coreInfo.getInfo(materialID)－42－

JAEA-Data/Code 2010-015
cd info

EffectiveCrossSection
ma t eria l::
Ma cros copicE ffect iv eC ros s Sect ion
C oreF lux Info
+
+
+
+
+
+
+
+

2

mes h::Mes hG eomet ry
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

create(SystemCoordinates) : MeshGeometry

11materialNum

mes h::Mes hNumberG loba lC onvert er

getPositionInGeometryCoordinates(int) : Point

+
+
+

1..*

checkConversion() : bool
convertFrom(int) : (int, float)[]

1

*

-

fluxVector: array

+
+
+
+

setFlux(int, float) : voidflux(int) : float
fluxVector() : arraynormalize(float) : void1

1

Init ia lC omp os it ion

usebuildOverlapRegionSetPool(SegmentSetGeometryPool, float, int) : void
addOverlapRegionSetPool(Dictionary) : void
getOverlapRegionSetPool() : Dictionary
buildInitialComposition(SegmentSetGeometryPool, MaterialSet) : void
getNuclideDensitySetByMeshNumber(MeshNum) : Material
getNuclideDensitySetByZoneNumber(int) : Material
baseComponent, clipComponent, point

1

1
infoID

C oreMa t eria lInfo

+
+
+
+
+
+

1

1

1

1

assemblyType, localAddress, plane1

C ros s Sect ionInfo

create(MeshGeometry, MeshGeometry) : MeshNumberGlobalConverter

F lux Reg ionInfo

getRadialMeshPitch(str) : float

getAxialMeshPitchSet(bool) : Zrange[]
getMeshVolume(int) : float
getAxialPlaneNumber(float) : int
setBottomPosition(int, float) : void
getBottomPosition(int) : float

1-materialNumberSet: int (dict)meshNumberSet: int (dict)zoneNumberSet: int (dict)

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

initialize(ZoneSet) : void
initializeByExsitingData(dict, dict, dict, dict) : voidbuildNuclideDensitySet(InitialComposition, Pattern, dict) : void
getMaterialMeshTable() : dictgetMeshGeometry() : MeshGeometry
getRegionInfoSet() : MaterialRegionInfo[]
getRegionInfoByMeshNum(int) : MaterialRegionInfo
getRegionInfoByMaterialNum(int) : MaterialRegionInfo
getMeshNumberList(int) : int[]
getNumOfMaterials() : int
getMaterialNumber(int) : int
getMaterialNumberList() : int[]
getZoneNumber(int) : int
getMaterialVolume(int) : float
getZoneAveragedMaterial(int) : Material

fromID, toID

1

-

*

1

1

+
+
+
infoID ++++++buildCrossSectionInfo(int) : voidbuildCoreSummaryInfo() : intbuildCoreFluxInfo(int, MeshGeometry) : intbuildCoreMaterialInfo(MeshGeometry, ZoneSet) : int
getCrossSectionInfo() : CrossSectionInfo
getInfo(int) : object
getGlobalConverter(int, int) : MeshNumberGlobalConverter
normalizeFlux(float, int, int) : void
getMaterialRegionAveragedFlux(int, int, int) : array[]

1

+
+
+
+
+

create(GeomComponent, GeomComponent, Point) : void
getOverlapRegionNumberSet() : int[]
getOverlapRegionName(int) : str
getOverlapRegionArea(int) : float
totalArea() : float

+
+
+

-

getMaterialNames() : str[]
register(str, dict) : void
getMaterial(str) : Material

+
+
+

name

setNg(int) : void
getNg() : int
setFissionSpectrum(int, array) : void
getFissionSpectrum(int) : array
hasMicroXSSet(int) : bool
setMicroXSSet(int, MicroscopicEffectiveCrossSectionSet) : void
getMicroXSSet(int) : MicroscopicEffectiveCrossSectionSet
hasMacroXS(int) : boolbuildMacroXS(int, int, Material) : void
getMacroXS(int) : MacroscopicEffectiveCrossSection
setCellModelConverter(int, CellModelConverter) : void
getCellModelConverter(int) : CellModelConverter
updateCellModelConverter(int, Material, list) : void

createzoneNum

1

1..*
ma t erial::Micros copicE ffect iv eC ros s Sect ionSet
+
+
+
+
+
+
+
+
+

__setitem__(int, MicroscopicEffectiveCrossSection) : void__getitem__(int) : MicroscopicEffectiveCrossSection
set_energygroup(int) : void
energygroup() : int
set_macroxs(MacroscopicEffectiveCrossSection) : void
macroxs() : MacroscopicEffectiveCrossSection
nuclideids() : int[]
rtypeids() : str[]__mul__(Material) : MacroscopicEffectiveCrossSection

1

1

Ma t eria lReg ionInfo

ma t eria l::Ma t eria lSet

+
+
+
+
+
+
+
+
+
+
+
+
+

1

1..*

1

ng: int
fissionSpectrum: dict

id_counter: int

1

1..*

-

C oreInfomaterialNumg eomet ry ::Ov erla p Reg ionSet

1

1

*

1

getSystemCoordinates() : SystemCoordinates
getAddressAll() : int[]
getNumOfPlanes() : int
getPlaneNumberSet() : int[]

load_pdsfile(PDSFile, str, int, int) : void
load_newpdsfile(NewPDSFile, int) : void*

meshNumbuildMeshGeometry(SegmentSetGeometryPool, GeomComponent, list, float) : void

setAddressScope(list) : void
setPlaneScope(list) : void
getSegmentSetGeometry(int) : SegmentSetGeometry++

initialize(int) : void
initializeByExistingData(dict) : void
getNg() : int
getMeshGeometry() : MeshGeometry
getRegionInfoSet() : FluxRegionInfo[]
getRegionInfo(int) : FluxRegionInfo
getMeshNumberList() : int[]
normalize(float) : void

coordinat es ::Z oneSet

burnable: bool
+
+
+
+
+
+

setNuclideDensitySet(Material) : void
getNuclideDensitySet() : Material
burnable() : boolean
1

updateZoneSet(dict) : void
getZoneNumberSet() : int[]
getZone(int) : Zone
getZoneIncludes(int, int) : Zone
getZoneNumber(int, int) : inthas(int) : bool

1
1
ma t eria l::Ma t eria l1..*create
*

+
+
+
+
+
+
+
+
+
+
+
+

set_name(str) : void
name() : str
set_type(int) : voidtype() : int
date() : str
set_date(str) : voidset(Nuclide, float) : void
nuclides() : Nuclide[]
nuclideids() : int[]
density(Nuclide) : float
reduce() : void
decay_to(str) : Material

multiply1
1

p a t t ern::Pa t t ern

1-cycleName: str
cycleNumber: int

+
+
+
+
+
+
+
+
+
+
+
+

makePattern(dict, str, int, list, list) : Pattern
getCycleName() : str
getCycleNumber() : int
getCellGeometryTypeSet() : str[]
getCellGeometryType(int) : str
getCellLabel(int) : str
getPreCycleNumber(int) : int
getPreCellAddress(int) : int
getCellRotation(int) : int
newCell(int) : bool
findCellAddressByLabel(str) : inthas(int) : bool

図 13 info パッケージのクラス図－43～44－

JAEA-Data/Code 2010-015

5.8 runner パッケージ
5.8.1 概要
runner パッケージは Fortran や C/C++で記述された既存の計算コードをカプセル化し、Python オブジェクトとして取り扱える用にするものである。
既存の解析コードの多くは、入出力にファイルを用い、実行制御にシェルスクリプトを用いる。runner パッケージのクラス群は、これらの入出力ファイルやシェルスクリプトを模擬することで計算コードのカプセル化を実現する。本パッケージでのカプセル化は、既存の入出力
ファイルのデータ構造をそのまま実装し、シェルスクリプトの動作をそのまま模擬する。（後述の solver パッケージでは、さらに高度な抽象化が行われる。）
本パッケージに含まれる代表的なクラスの一覧を表 17に示す。クラス図を図 14に示す。各
計算コードの取り扱いのうち共通化可能な箇所についてはスーパークラスにて統一し、コード毎に固有の処理をサブクラスにて実装するように設計されている。

表 17 runner パッケージの代表的なクラス
クラス名
ConventionalCode
ConventionalCodeRunnerConventionalCodeFile

説明
既存の計算コードをカプセル化する抽象クラス。
計算コード毎にサブクラスを実装する。
既存コードを実行するシェルスクリプトをカプセル化したクラス。計算コード毎にサブクラスを実装する。
計算コードの入出力ファイルをカプセル化する抽象クラス。
計算
コード毎にサブクラスを実装する。

5.8.2 使用例
runner パッケージでは、コード毎に上述のクラスのサブクラスが存在し、実際の計算コー
ドの取り扱いには、それらが用いられる。利用する際は、計算コードの入力ファイルをカプセ
ル化した ConventionalCodeFile オブジェクトに適切なデータを設定し、ConventionalCode
オブジェクトにそれらを与えて、計算コードを実行する。なお ConventionalCode クラスによる計算コード実行では、対象コードが終了するまで処理がリターンしない同期実行方式がとられる。以下、CITATION コードを対象としてサンプルを示す。
【例】# Citation: ConventionalCode クラスのサブクラス# CitationFort5: ConventionalCodeFile クラスのサブクラス# CitationFort31: ConventionalCodeFile クラスのサブクラス# CitationFort9: ConventionalCodeFile クラスのサブクラス－45－

JAEA-Data/Code 2010-015# fort5 入力データの作成
fort5 = CitationFort5()# fort5 ファイル

fort5.set_ngc(ngc)
fort5.set_iedg(iedg)
・・・# fort31 入力データの作成
fort31 = CitationFort31()# fort31 ファイル

fort31.set_t1(t1)fort31.set_t2(t2)・・・# CITATION の実行
citation = Citation()# CITATION コード

citation.set_inputcard(fort5)
citation.set_macroxs(fort31)
citation.run()# CITATION の実行

flux = citation.flux()# 計算結果（中性子束分布）を取得# CitationFort9 クラスのオブジェクト－46－

JAEA-Data/Code 2010-015

cd run ne r
C on v e nt io na lC o de F ile Ac ce s s orMix in++get(str) : object
set(str, object) : void<<mixin>>C on v e nt iona lC od eF ile
+
+
#
+
+
#
#

C onv en t ion a lC ode

handler() : object
strio() : object_initialize() : void
read_file(File) : void
write_file(File) : void

#
+
+
+

1

_read_file(File) : void
_write_file(File) : void

_work_root_dir(str) : str

set_inputcard(object) : voidrun(bool) : int
outlist() : object<<use>>

S ub s t a nt ia ble St rin g IO

C on v e nt iona lC ode Run ne r
#
#
+
+
+
+
+
+
+
+
+
+
+
+
+

_link_mode() : str_mkdir(str) : void
get_dirname() : str
getvalue() : object
tell() : object
seek() : object
read() : object
write() : void
readline() : object
readlines() : object
writelines() : voidstrio() : object
create() : void
purge() : void
is_exist() : boolean

use

#
#
+
#
#
#
+
+
#
+
#
+

_initialize(ConventionalCodeFile) : void

_mkdir() : void__getitem__(int) : SubstantiableStringIO_get_input_units() : int[]_get_output_units() : int[]_get_scratch_units() : int[]
defineio(int, str) : void
set_file(int, File) : void

_pre_run() : voidrun(bool, str) : int_post_run() : void

get_files() : Dictionary

図 14 runner パッケージのクラス図－47－

JAEA-Data/Code 2010-015

5.9 solver パッケージ
5.9.1 概要
solver パッケージは計算コードを高度に抽象化したパッケージである。異なる計算コードは
全て Solver クラスのサブクラスとしてカプセル化され、同一のインターフェイスを有するラッパーとして取り扱われる。各計算コードを表すサブクラスは、より“薄い（複雑な処理をしない）”ラッパーである runner パッケージのクラス群を用いて実装される。本パッケージのクラス図を図 15に示す。
Solver オブジェクトで処理された結果は、最終的に CoreFluxInfo／CoreMaterialInfo／
CrossSectionInfo オブジェクトに反映される。

表 18 solver パッケージのクラス
クラス名Solver

説明
計算コードの入力作成・実行・結果の取得という一連の処理をカプセル化した抽象クラス。計算コード毎のサブクラスが存在する。

5.9.2 使用例
Solver オブジェクトは計算コード名を引数として create クラスメソッドを呼び出すことで生成される。Solver クラスに定義されているインターフェイスのうち代表的なものはinitialize，run，updateCalculationResult の 3 つであり、それぞれ初期化・計算実行・計算
結果の Info オブジェクトへの反映を行う。initialize メソッド及び run メソッドの引数には、オプションとしてディクショナリが渡される。計算コードに固有の情報は、このディクショナ
リを用いて与えられる。
以下に、実装のサンプルを示す。
【例】
options = {}# CITATION に固有の計算オプションの指定

options[“itmx”] = [900, 900]
options[“isodf”] = 1・・・
solver = Solver.create(“marble_citation”)# CITATION

solver.initialize(coreInfo, summaryID, fluxID, materialID, options)solver.run()# 計算実行

solver.updateCalculationResult()# 計算結果の反映

－48－

# 初期化

JAEA-Data/Code 2010-015

cd s olv er

Solv er
+
+
+
+
+
+

initialize(CoreInfo, int, int, int, dict) : boolrun(dict) : int
isStatus() : int
updateCalculationResult() : void
getErrorInfo() : object

C it a t ionSolv er

Sla romUfSolv er
+
+
+
+
+

create(str) : Solver

initialize(CoreInfo, int, int, int, dict) : boolrun(dict) : int
isStatus() : int
updateCalculationResult() : void
getErrorInfo() : object

+
+
+
+
+

initialize(CoreInfo, int, int, int, dict) : boolrun(dict) : int
isStatus() : int
updateCalculationResult() : void
getErrorInfo() : object

BurnupS olv er
+
+
+
+
+

図 15 solver パッケージのクラス図－49－

initialize(CoreInfo, int, int, int, dict) : boolrun(dict) : int
isStatus() : int
updateCalculationResult() : void
getErrorInfo() : object

JAEA-Data/Code 2010-015

6． おわりに本研究ではこれまでに開発してきた次世代炉物理解析システムに関して、そのフレームワー
クとしての利便性を高めるために、統一された例外・エラー処理の設計・実装やデバッグ支援機能の実装を行った。また、フレームワークを用いて様々な計算処理を実装できるようにする
ため、一定の計算処理を計算手順オブジェクトとしてカプセル化し、それらのオブジェクトを組み合わせることで複雑な計算シナリオを実現する仕組みを設計・実装した。今後、摂動計算・感度係数計算等の新たな計算処理が必要になった場合、対応する新たな計算手順オブジェクトを定義することにより、フレームワークにて実現可能な計算シナリオを拡張していくことが可
能となる。

参考文献
1.

兵頭 秀昭，巽 雅洋：「高速炉実機燃焼解析システムの開発」，JAEA-Data/Code
2006-018 (2006)2.

平井 康志，兵頭 秀昭，巽 雅洋：「高速炉実機燃焼解析システムの開発（その２）」，
JAEA-Data/Code 2007-019 (2007)3.

平井 康志，兵頭 秀昭，巽 雅洋，横山 賢治：「高速炉実機燃焼解析システムの開発（その３）」，JAEA-Data/Code 2008-021 (2008)4.

横山 賢治，平井 康志，兵頭 秀昭，巽 雅洋：「高速炉実機燃焼解析システムの高度化」，
JAEA-Data/Code 2009-016（2010）5.

横山 賢治，平井 康志，巽 雅洋：「高速炉実機燃焼解析システムの高度化（その２）」
JAEA-Data/Code 2010-016（2010）[To be published]6.

巽 雅洋，横山 賢治：「次世代炉物理解析システムのためのフレームワーク開発」，
JAEA-Data/Code 2007-020 (2007)7.

平井 康志，兵頭 秀昭，巽 雅洋，神 智之，横山 賢治：「次世代炉物理解析システムのためのフレームワーク開発（その２）」，JAEA-Data/Code 2008-020 (2008)8.

横山 賢治，平井 康志，兵頭 秀昭，巽 雅洋：「次世代炉物理解析システムのためのフ
レームワーク開発（その３）」，JAEA-Data/Code 2009-012（2010）－50－

JAEA-Data/Code 2010-015

付録
A． モジュール一覧 ...................................................................................................................... 53
A.1 coordinates パッケージ ........................................................................................................ 53
A.2 geometry パッケージ............................................................................................................ 54
A.3 material パッケージ ............................................................................................................. 55
A.4 pattern パッケージ............................................................................................................... 55
A.5 mesh パッケージ .................................................................................................................. 56
A.6 info パッケージ ..................................................................................................................... 57
A.7 runner パッケージ ............................................................................................................... 57
A.8 solver パッケージ ................................................................................................................. 58
A.9 procedure パッケージ .......................................................................................................... 58
B． 実装の詳細.............................................................................................................................. 59－51－

This is a blank page.

JAEA-Data/Code 2010-015

A． モジュール一覧
MARBLE フレームワークに含まれる各モデルパッケージの詳細について示す。

A.1 coordinates パッケージ
本パッケージに含まれる Python モジュールの一覧は以下のとおりである。
・ AssemblyAddress
・ CoreProperty
・ FastReactorCoreProperty
・ MatrixCoreProperty
・ SystemCoordinates・ HexzCoordinates
・ TrizCoordinates
・ XyzCoordinates
・ PseudoXyzCoordinates
・ Zone・ ZoneSet
実装の詳細については後述する。

－53－

JAEA-Data/Code 2010-015

A.2 geometry パッケージ
本パッケージに含まれる Python モジュールの一覧は以下のとおりである。
・ Shape・ HexShape・ TriangleShape・ CircleShape・ SquareShape・ RectangleShape・ HalfHexShape・ GeomComponent
・ GeomComponentFactory
・ Region・ RegionFactory・ SegmentSetGeometry・ SegmentSetGeometryPool
・ GeometryBuildContext
・ OverlapRegion
・ OverlapRegionRayTraceContext
・ OverlapRegionSet
・ RayTracer
・ GaussQuadratureWeightFactor
・ Point
・ Line・ Zrange
実装の詳細については後述する。

－54－

JAEA-Data/Code 2010-015

A.3 material パッケージ
本パッケージに含まれる Python モジュールの一覧は以下のとおりである。
・ Nuclide・ NuclideProperty
・ NuclidePropertyDB・ ReactionType
・ Material・ MaterialSet
・ EffectiveCrossSection
実装の詳細については後述する。

A.4 pattern パッケージ
本パッケージに含まれる Python モジュールの一覧は以下のとおりである。
・ Pattern・ CellData
実装の詳細については後述する。

－55－

JAEA-Data/Code 2010-015

A.5 mesh パッケージ
本パッケージに含まれる Python モジュールの一覧は以下のとおりである。
・ MeshGeometry・ HexzMeshGeometry
・ TrizMeshGeometry・ XyzMeshGeometry
・ PseudoXyzMeshGeometry・ MeshNumberGlobalConverter・ HexzToHexzConverter・ HexzToTrizConverter・ HexzToPseudoXyzConverter
・ TrizToTrizConverter
・ TrizToHexzConverter
・ TrizToPseudoXyzConverter・ XyzToXyzConverter
・ PseudoXyzToPseudoXyzConverter
・ PseudoXyzToHexzConverter
・ PseudoXyzToTrizConverter
実装の詳細については後述する。

－56－

JAEA-Data/Code 2010-015

A.6 info パッケージ
本パッケージに含まれる Python モジュールの一覧は以下のとおりである。
・ CoreInfo
・ CrossSectionInfo
・ CoreFluxInfo
・ CoreMaterialInfo
・ CoreSummaryInfo
・ FluxRegionInfo
・ MaterialRegionInfo
・ InitialComposition
・ CellModelConverter・ HomoModelConverter
・ RingModelConverter
・ RccModelConverter
・ ZpprPlateStretchModelConverter
実装の詳細については後述する。

A.7 runner パッケージ
本パッケージに含まれる Python モジュールの一覧は以下のとおりである。
・ ConventionalCodeRunner・ ConventionalCodeFile
・ ConventionalCodeReactionType
・ SubstantiatableStringIO
実装の詳細については後述する。

－57－

JAEA-Data/Code 2010-015

A.8 solver パッケージ
本パッケージに含まれる Python モジュールの一覧は以下のとおりである。
・ Solver・ SlaromUfSolver・ CitationSolver
・ TritacSolver
・ BurnupSolver
実装の詳細については後述する。

A.9 procedure パッケージ
本パッケージに含まれる Python モジュールの一覧は以下のとおりである。
・ Procedure
・ CellCalculationProcedure
・ MacroXSCalculationProcedure
・ CoreCalculationProcedure
・ BurnupCalculationProcedure
・ CollapseGroupCalculationProcedure
・ ControlRodOperationProcedure
実装の詳細については後述する。

－58－

JAEA-Data/Code 2010-015

B． 実装の詳細
実装の詳細を次頁以降に示す。

－59－

This is a blank page.

JAEA-Data/Code 2010-015－61－

JAEA-Data/Code 2010-015－62－

JAEA-Data/Code 2010-015－63－

JAEA-Data/Code 2010-015－64－

JAEA-Data/Code 2010-015－65－

JAEA-Data/Code 2010-015－66－

JAEA-Data/Code 2010-015－67－

JAEA-Data/Code 2010-015－68－

JAEA-Data/Code 2010-015－69－

JAEA-Data/Code 2010-015－70－

JAEA-Data/Code 2010-015－71－

JAEA-Data/Code 2010-015－72－

JAEA-Data/Code 2010-015－73－

JAEA-Data/Code 2010-015－74－

JAEA-Data/Code 2010-015－75－

JAEA-Data/Code 2010-015－76－

JAEA-Data/Code 2010-015－77－

JAEA-Data/Code 2010-015－78－

JAEA-Data/Code 2010-015－79－

JAEA-Data/Code 2010-015－80－

JAEA-Data/Code 2010-015－81－

JAEA-Data/Code 2010-015－82－

JAEA-Data/Code 2010-015－83－

JAEA-Data/Code 2010-015－84－

JAEA-Data/Code 2010-015－85－

JAEA-Data/Code 2010-015－86－

JAEA-Data/Code 2010-015－87－

JAEA-Data/Code 2010-015－88－

JAEA-Data/Code 2010-015－89－

JAEA-Data/Code 2010-015－90－

JAEA-Data/Code 2010-015－91－

JAEA-Data/Code 2010-015－92－

JAEA-Data/Code 2010-015－93－

JAEA-Data/Code 2010-015－94－

JAEA-Data/Code 2010-015－95－

JAEA-Data/Code 2010-015－96－

JAEA-Data/Code 2010-015－97－

JAEA-Data/Code 2010-015－98－

JAEA-Data/Code 2010-015－99－

JAEA-Data/Code 2010-015－100－

JAEA-Data/Code 2010-015－101－

JAEA-Data/Code 2010-015－102－

JAEA-Data/Code 2010-015－103－

JAEA-Data/Code 2010-015－104－

JAEA-Data/Code 2010-015－105－

JAEA-Data/Code 2010-015－106－

JAEA-Data/Code 2010-015－107－

JAEA-Data/Code 2010-015－108－

JAEA-Data/Code 2010-015－109－

JAEA-Data/Code 2010-015－110－

JAEA-Data/Code 2010-015－111－

JAEA-Data/Code 2010-015－112－

JAEA-Data/Code 2010-015－113－

JAEA-Data/Code 2010-015－114－

JAEA-Data/Code 2010-015－115－

JAEA-Data/Code 2010-015－116－

JAEA-Data/Code 2010-015－117－

JAEA-Data/Code 2010-015－118－

JAEA-Data/Code 2010-015－119－

JAEA-Data/Code 2010-015－120－

JAEA-Data/Code 2010-015－121－

JAEA-Data/Code 2010-015－122－

JAEA-Data/Code 2010-015－123－

JAEA-Data/Code 2010-015－124－

JAEA-Data/Code 2010-015－125－

JAEA-Data/Code 2010-015－126－

JAEA-Data/Code 2010-015－127－

JAEA-Data/Code 2010-015－128－

JAEA-Data/Code 2010-015－129－

JAEA-Data/Code 2010-015－130－JAEA-Data/Code 2010-015－131－

JAEA-Data/Code 2010-015－132－

JAEA-Data/Code 2010-015－133－

JAEA-Data/Code 2010-015－134－

JAEA-Data/Code 2010-015－135－

JAEA-Data/Code 2010-015－136－

JAEA-Data/Code 2010-015－137－

JAEA-Data/Code 2010-015－138－

JAEA-Data/Code 2010-015－139－

JAEA-Data/Code 2010-015－140－

JAEA-Data/Code 2010-015－141－

JAEA-Data/Code 2010-015－142－

JAEA-Data/Code 2010-015－143－

JAEA-Data/Code 2010-015－144－

JAEA-Data/Code 2010-015－145－

JAEA-Data/Code 2010-015－146－

JAEA-Data/Code 2010-015－147－

JAEA-Data/Code 2010-015－148－

JAEA-Data/Code 2010-015－149－

JAEA-Data/Code 2010-015－150－

JAEA-Data/Code 2010-015－151－

JAEA-Data/Code 2010-015－152－

JAEA-Data/Code 2010-015－153－

JAEA-Data/Code 2010-015－154－

JAEA-Data/Code 2010-015－155－

JAEA-Data/Code 2010-015－156－

JAEA-Data/Code 2010-015－157－

JAEA-Data/Code 2010-015－158－

JAEA-Data/Code 2010-015－159－

JAEA-Data/Code 2010-015－160－

JAEA-Data/Code 2010-015－161－

JAEA-Data/Code 2010-015－162－

JAEA-Data/Code 2010-015－163－

JAEA-Data/Code 2010-015－164－

JAEA-Data/Code 2010-015－165－

JAEA-Data/Code 2010-015－166－

JAEA-Data/Code 2010-015－167－

JAEA-Data/Code 2010-015－168－

JAEA-Data/Code 2010-015－169－

JAEA-Data/Code 2010-015－170－

JAEA-Data/Code 2010-015－171－

JAEA-Data/Code 2010-015－172－

JAEA-Data/Code 2010-015－173－

JAEA-Data/Code 2010-015－174－

JAEA-Data/Code 2010-015－175－

JAEA-Data/Code 2010-015－176－

JAEA-Data/Code 2010-015－177－

JAEA-Data/Code 2010-015－178－

JAEA-Data/Code 2010-015－179－

JAEA-Data/Code 2010-015－180－

JAEA-Data/Code 2010-015－181－

JAEA-Data/Code 2010-015－182－

JAEA-Data/Code 2010-015－183－

JAEA-Data/Code 2010-015－184－

JAEA-Data/Code 2010-015－185－

JAEA-Data/Code 2010-015－186－

JAEA-Data/Code 2010-015－187－

JAEA-Data/Code 2010-015－188－

JAEA-Data/Code 2010-015－189－

JAEA-Data/Code 2010-015－190－

JAEA-Data/Code 2010-015－191－

JAEA-Data/Code 2010-015－192－

JAEA-Data/Code 2010-015－193－

JAEA-Data/Code 2010-015－194－

JAEA-Data/Code 2010-015－195－

JAEA-Data/Code 2010-015－196－

JAEA-Data/Code 2010-015－197－

JAEA-Data/Code 2010-015－198－

JAEA-Data/Code 2010-015－199－

JAEA-Data/Code 2010-015－200－

JAEA-Data/Code 2010-015－201－

JAEA-Data/Code 2010-015－202－

JAEA-Data/Code 2010-015－203－

JAEA-Data/Code 2010-015－204－

JAEA-Data/Code 2010-015－205－

JAEA-Data/Code 2010-015－206－

JAEA-Data/Code 2010-015－207－

JAEA-Data/Code 2010-015－208－

JAEA-Data/Code 2010-015－209－

JAEA-Data/Code 2010-015－210－

JAEA-Data/Code 2010-015－211－

JAEA-Data/Code 2010-015－212－

JAEA-Data/Code 2010-015－213－

JAEA-Data/Code 2010-015－214－

JAEA-Data/Code 2010-015－215－

JAEA-Data/Code 2010-015－216－

JAEA-Data/Code 2010-015－217－

JAEA-Data/Code 2010-015－218－国際単位系（SI）
表１．SI 基本単位
SI 基本単位

基本量

名称
記号
長
さメ ートル m
質
量 キログラム kg
時
間
秒
s
電
流ア ンペア A
熱力学温度 ケ ル ビ ン K
物 質 量モル mol
光度 カ ン デ ラ cd

表２．基本単位を用いて表されるSI組立単位の例
SI 基本単位
組立量
名称
記号
面
積 平方メートルm2
体
積 立法メートルm3
速 さ ， 速 度 メートル毎秒m/s
加速度 メートル毎秒毎秒
m/s2
波
数 毎メートルm-1
密 度 ， 質 量 密 度 キログラム毎立方メートル
kg/m3
面
積
密
度 キログラム毎平方メートル
kg/m2
比
体
積 立方メートル毎キログラム
m3/kg
電
流
密
度 アンペア毎平方メートル
A/m2
磁 界 の 強 さ アンペア毎メートル
A/m
(a)
量 濃度
， 濃 度 モル毎立方メートル
mol/m3
質量
濃度 キログラム毎立法メートル
kg/m3
輝
度 カンデラ毎平方メートル
cd/m2
1
屈
折
率 (b) （数字の） １(b)（数字の） １1
比 透 磁 率

乗数
1024
1021
1018
1015
1012
109
106
103
102
101

活

性 カタール

kat

d

Ｚ
Ｅ

10-2

セ ン チ
ミ
リ

c
m

ペ
テ

タ
ラ

Ｐ
Ｔ

µ
n

ギ
メ

ガ
ガ

Ｇ
Ｍ

マイクロ
ノ
10-9 ナコ
10-12 ピ
10-15 フェムト

キ
ロ
ヘ ク ト
デ
カ

ｋ
ｈ

ト
10-18 ア
10-21 ゼ プ ト
10-24 ヨ ク ト

a
z
y

da

d
°
’

10-3
10-6

p
f

1 d=24 h=86 400 s
1°=(π/180) rad1’=(1/60)°=(π/10800) rad”1”=(1/60)’=(π/648000) radha 1ha=1hm2=104m2
L，l 1L=11=1dm3=103cm3=10-3m3t
1t=103 kg

秒
ヘクタール
リットル
トン

表７．SIに属さないが、SIと併用される単位で、SI単位で表される数値が実験的に得られるもの
名称
記号
SI 単位で表される数値
1eV=1.602 176 53(14)×10-19J

電 子 ボ ル ト
ダ ル ト ン
統一原子質量単位eVDa
u

1Da=1.660 538 86(28)×10-27kg
1u=1 Da天

ua

1ua=1.495 978 706 91(6)×1011m

文

単

位

表８．SIに属さないが、SIと併用されるその他の単位
名称
記号
SI 単位で表される数値
バー
ル bar １bar=0.1MPa=100kPa=105Pa
水銀柱ミリメートル mmHg 1mmHg=133.322Pa

s-1 mol(a)SI接頭語は固有の名称と記号を持つ組立単位と組み合わせても使用できる。しかし接頭語を付した単位はもはや
コヒーレントではない。
(b)ラジアンとステラジアンは数字の１に対する単位の特別な名称で、量についての情報をつたえるために使われる。
実際には、使用する時には記号rad及びsrが用いられるが、習慣として組立単位としての記号である数字の１は明示されない。
(c)測光学ではステラジアンという名称と記号srを単位の表し方の中に、そのまま維持している。
(d)ヘルツは周期現象についてのみ、ベクレルは放射性核種の統計的過程についてのみ使用される。
(e)セルシウス度はケルビンの特別な名称で、セルシウス温度を表すために使用される。セルシウス度とケルビンの単位の大きさは同一である。したがって、温度差や温度間隔を表す数値はどちらの単位で表しても同じである。
(f)放射性核種の放射能（activity referred to a radionuclide）は、しばしば誤った用語で”radioactivity”と記される。
(g)単位シーベルト（PV,2002,70,205）についてはCIPM勧告2（CI-2002）を参照。

表４．単位の中に固有の名称と記号を含むSI組立単位の例
SI 組立単位
組立量
SI 基本単位による
名称
記号
表し方
-1
粘
度 パスカル秒
Pa s
m kg s-1
力 の モ ー メ ン ト ニュートンメートル
Nm
m2 kg s-2
表面
張力 ニュートン毎メートル
N/m
kg s-2角
速度 ラジアン毎秒
rad/s
m m-1 s-1=s-1
角
加速度 ラジアン毎秒毎秒
rad/s2
m m-1 s-2=s-2
熱 流 密 度 , 放 射 照 度 ワット毎平方メートル
kg s-3
W/m2
熱 容 量 , エ ン ト ロ ピ ー ジュール毎ケルビン
J/K
m2 kg s-2 K-1
比 熱 容 量 ， 比 エ ン ト ロ ピ ー ジュール毎キログラム毎ケルビン J/(kg K)
m2 s-2 K-1
比 エ ネ ルギ ー ジュール毎キログラム
J/kg
m2 s-2
熱伝
導率 ワット毎メートル毎ケルビン W/(m K) m kg s-3 K-1
体 積 エ ネ ル ギ ー ジュール毎立方メートル J/m3
m-1 kg s-2
電界の強さ ボルト毎メートル
V/m
m kg s-3 A-1
電荷密
度 クーロン毎立方メートル C/m3
m-3 sA
表面
電
荷 クーロン毎平方メートル C/m2
m-2 sA
電 束 密 度 ， 電 気 変 位 クーロン毎平方メートル C/m2
m-2 sA誘
電率 ファラド毎メートル
F/m
m-3 kg-1 s4 A2
透磁率 ヘンリー毎メートル
H/m
m kg s-2 A-2
モ ル エ ネ ル ギ ー ジュール毎モル
J/mol
m2 kg s-2 mol-1
モルエントロピー, モル熱容量 ジュール毎モル毎ケルビン J/(mol K) m2 kg s-2 K-1 mol-1
照 射 線 量 （ Ｘ 線 及 び γ 線 ） クーロン毎キログラム
C/kg
kg-1 sA
吸収線
量率 グレイ毎秒
Gy/s
m2 s-3放射
強度 ワット毎ステラジアン
W/srm4 m-2 kg s-3=m2 kg s-3
放射輝
度 ワット毎平方メートル毎ステラジアン W/(m2 sr) m2 m-2 kg s-3=kg s-3
酵 素 活 性濃 度 カタール毎立方メートル kat/m3
m-3 s-1 mol

記号

ゼ
タ
エ ク サ

日
度
分

表３．固有の名称と記号で表されるSI組立単位
SI 組立単位
組立量
他のSI単位による SI基本単位による
名称
記号
表し方
表し方
（ｂ）
平
面
角 ラジアン(ｂ)
rad
m/m
1
（ｂ）
2/ 2
立
体
角 ステラジアン(ｂ) sr(c)
1
m m
周
波
数 ヘルツ（ｄ）
Hz
s-1
力
ニュートン
N
m kg s-2
圧力
応
力 パスカル,Pa
m-1 kg s-2
N/m2
エ ネ ル ギ ー , 仕 事 , 熱 量 ジュールJNm
m2 kg s-2
仕 事 率 ， 工 率 ， 放 射 束 ワット
WJ/s
m2 kg s-3
電
荷
電気量 クーロン,
CsA
電 位 差 （ 電 圧 ） , 起 電 力 ボルト
VW/A
m2 kg s-3 A-1
静電
容量 ファラドF
C/V
m-2 kg-1 s4 A2
電
気
抵
抗 オーム
Ω
V/A
m2 kg s-3 A-2
コ ン ダ ク タ ン ス ジーメンス
S
A/V
m-2 kg-1 s3 A2
磁
束 ウエーバWb
Vs
m2 kg s-2 A-1
磁
束
密
度 テスラ
T
Wb/m2
kg s-2 A-1
イ ン ダ ク タ ン ス ヘンリーH
Wb/A
m2 kg s-2 A-2
セ ル シ ウ ス 温 度 セルシウス度(ｅ)℃K
光
束 ルーメンlm
cd
cd sr(c)
2
照
度 ルクス
lx
lm/m
m-2 cdBqs-1
放 射 性 核 種 の 放 射 能 （ ｆ ） ベクレル（ｄ）
吸収線量, 比エネルギー分与,
グレイ
Gy
J/kg
m2 s-2カーマ
線量当量, 周辺線量当量, 方向
Sv
J/kg
m2 s-2シーベルト（ｇ）
性線量当量, 個人線量当量
素

表５．SI 接頭語
記号 乗数
接頭語
Ｙ
シ
10-1 デ

表６．SIに属さないが、SIと併用される単位
名称
記号
SI 単位による値
分
min 1 min=60s
時h
1h =60 min=3600 s（a）量濃度（amount concentration）は臨床化学の分野では物質濃度（substance concentration）ともよばれる。
（b）これらは無次元量あるいは次元１をもつ量であるが、そのことを表す単位記号である数字の１は通常は表記しない。

酸

接頭語
ヨ
タ

オングストローム
海
里
バ
ー
ン

Å
Ｍ

１Å=0.1nm=100pm=10-10m
１M=1852m

b

ノ
ネ
ベ

ト
パ
ル

kn
Np
Ｂ

１b=100fm2=(10-12cm)2=10-28m2
１kn=(1852/3600)m/s

ル

dB

ッ
ー

デ

ジ

ベ

SI単位との数値的な関係は、対数量の定義に依存。

エ

表９．固有の名称をもつCGS組立単位
名称
記号
SI 単位で表される数値
ル
グ erg 1 erg=10-7 J

ダ
ポ

イ
ア

ス
ス

ト ー ク
チ
ル

フ
ガ

ォ

ン dyn 1 dyn=10-5N
ズ P 1 P=1 dyn s cm-2=0.1Pa s
ス St 1 St =1cm2 s-1=10-4m2 s-1
ブ sb 1 sb =1cd cm-2=104cd m-2
ト ph 1 ph=1cd sr cm-2 104lx
ル Gal 1 Gal =1cm s-2=10-2ms-2

マ ク ス ウ ｪ ルガ
ウス
エルステッド（ ｃ）

Mx
G
Oe

1 Mx = 1G cm2=10-8Wb
1 G =1Mx cm-2 =10-4T
1 Oe (103/4π)A m-1（c）３元系のCGS単位系とSIでは直接比較できないため、等号「は対応関係を示すものである。

キ
レ
ラ

名称
ュ
リ
ン

レ
ガ

ト

表10．SIに属さないその他の単位の例
記号
SI 単位で表される数値
ー Ci 1 Ci=3.7×1010Bq

ゲ

ン

ン R
ド rad
ム rem
マ γ

1 R = 2.58×10-4C/kg
1 rad=1cGy=10-2Gy
1 rem=1 cSv=10-2Sv
1γ=1 nT=10-9T
1フェルミ=1 fm=10-15m

フェルミ
メートル系カラット

1メートル系カラット = 200 mg = 2×10-4kg

気

ル Torr 1 Torr = (101 325/760) Pa
圧 atm 1 atm = 101 325 Pa

ロ

リ

ー

cal

ク

ロ

ン

µ

ト
標

準

カ
ミ

大

」

1cal=4.1858J（｢15℃｣カロリー），4.1868J（｢IT｣カロリー）4.184J（｢熱化学｣カロリー）

1 µ =1µm=10-6m（第8版，2006年改訂）

この印刷物は再生紙を使用しています