CYCLUS
src
material.h
Go to the documentation of this file.
1
#ifndef CYCLUS_SRC_MATERIAL_H_
2
#define CYCLUS_SRC_MATERIAL_H_
3
4
#include <list>
5
#include <boost/shared_ptr.hpp>
6
7
#include "
composition.h
"
8
#include "
cyc_limits.h
"
9
#include "
resource.h
"
10
#include "
res_tracker.h
"
11
12
namespace
cyclus
{
13
14
class
Context;
15
16
namespace
units {
17
const
double
kg
= 1.0;
18
const
double
g
= kg* .001;
19
const
double
mg
= kg* .000001;
20
const
double
ug
= kg* .000000001;
21
}
// namespace units
22
23
/// The material class is primarily responsible for enabling basic material
24
/// manipulation while helping enforce mass conservation. It also provides the
25
/// ability to easily decay a material up to the current simulation time; it
26
/// does not perform any decay related logic itself.
27
///
28
/// There are four basic operations that can be performed on materials: create,
29
/// transmute (change material composition - e.g. fission by reactor), absorb
30
/// (combine materials), extract (split a material). All material
31
/// handling/manipulation will be performed using these operations - and all
32
/// operations performed will be tracked and recorded. Usage examples:
33
///
34
/// * A mining facility that "creates" new material
35
///
36
/// @code
37
/// Composition::Ptr nat_u = ...
38
/// double qty = 10.0;
39
///
40
/// Material::Ptr m = Material::Create(qty, nat_u, ctx);
41
/// @endcode
42
///
43
/// * A conversion facility mixing uranium and flourine:
44
///
45
/// @code
46
/// Material::Ptr uf6 = uranium_buf.Pop();
47
/// Material::Ptr f = flourine_buf.Pop();
48
///
49
/// uf6.Absorb(f);
50
/// @endcode
51
///
52
/// * A reactor transmuting fuel:
53
///
54
/// @code
55
/// Composition::Ptr burned_comp = ... // fancy code to calculate burned nuclides
56
/// Material::Ptr assembly = core_fuel.Pop();
57
///
58
/// assembly.Transmute(burned_comp);
59
/// @endcode
60
///
61
/// * A separations plant extracting stuff from spent fuel:
62
///
63
/// @code
64
/// Composition::Ptr comp = ... // fancy code to calculate extracted nuclides
65
/// Material::Ptr bucket = spent_fuel.Pop();
66
/// double qty = 3.0;
67
///
68
/// Material::Ptr mox = bucket.ExtractComp(qty, comp);
69
/// @endcode
70
///
71
class
Material
:
public
Resource
{
72
friend
class
SimInit
;
73
74
public
:
75
typedef
boost::shared_ptr<Material>
Ptr
;
76
static
const
ResourceType
kType
;
77
78
virtual
~
Material
();
79
80
/// Creates a new material resource that is "live" and tracked. creator is a
81
/// pointer to the agent creating the resource (usually will be the caller's
82
/// "this" pointer). All future output data recorded will be done using the
83
/// creator's context.
84
static
Ptr Create(
Agent
* creator,
double
quantity,
Composition::Ptr
c);
85
86
/// Creates a new material resource that does not actually exist as part of
87
/// the simulation and is untracked.
88
static
Ptr CreateUntracked(
double
quantity,
Composition::Ptr
c);
89
90
/// Returns the id of the material's internal nuclide composition.
91
virtual
int
qual_id()
const
;
92
93
/// Returns Material::kType.
94
virtual
const
ResourceType
type()
const
;
95
96
/// Creates an untracked copy of this material object.
97
virtual
Resource::Ptr
Clone()
const
;
98
99
/// Records the internal nuclide composition of this resource.
100
virtual
void
Record(
Context
* ctx)
const
;
101
102
/// Returns "kg"
103
virtual
std::string
units()
const
;
104
105
/// Returns the mass of this material in kg.
106
virtual
double
quantity()
const
;
107
108
virtual
Resource::Ptr
ExtractRes(
double
qty);
109
110
/// Same as ExtractComp with c = this->comp().
111
Ptr ExtractQty(
double
qty);
112
113
/// Creates a new material by extracting from this one.
114
///
115
/// @param qty the mass quantity to extract
116
/// @param c the composition the extracted/returned material
117
/// @param threshold an absolute mass cutoff below which constituent nuclide
118
/// quantities of the remaining unextracted material are set to zero.
119
/// @return a new material with quantity qty and composition c
120
Ptr ExtractComp(
double
qty,
Composition::Ptr
c,
121
double
threshold =
eps_rsrc
());
122
123
/// Combines material mat with this one. mat's quantity becomes zero.
124
void
Absorb(Ptr mat);
125
126
/// Changes the material's composition to c without changing its mass. Use
127
/// this method for things like converting fresh to spent fuel via burning in
128
/// a reactor.
129
void
Transmute(
Composition::Ptr
c);
130
131
/// Updates the material's composition by performing a decay calculation.
132
/// This is a special case of Transmute where the new composition is
133
/// calculated automatically. The time delta is calculated as the difference
134
/// between curr_time and the last time the material's composition was
135
/// updated with a decay calculation (i.e. prev_decay_time). This may or may
136
/// not result in an updated material composition. Does nothing if the
137
/// simulation decay mode is set to "never" or none of the nuclides' decay
138
/// constants are significant with respect to the time delta.
139
void
Decay(
int
curr_time);
140
141
/// Returns the last time step on which a decay calculation was performed
142
/// for the material. This is not necessarily synonymous with the last time
143
/// step the material's Decay function was called.
144
int
prev_decay_time
() {
return
prev_decay_time_; }
145
146
/// Returns a double with the decay heat of the material in units of
147
/// W/kg.
148
double
DecayHeat();
149
150
/// Returns the nuclide composition of this material.
151
Composition::Ptr
comp();
152
153
/// DEPRECATED - use non-const comp() function.
154
Composition::Ptr
comp()
const
;
155
156
protected
:
157
Material
(
Context
* ctx,
double
quantity,
Composition::Ptr
c);
158
159
private
:
160
Context
* ctx_;
161
double
qty_;
162
Composition::Ptr
comp_;
163
int
prev_decay_time_;
164
ResTracker
tracker_;
165
};
166
167
/// Creates and returns a new material with the specified quantity and a
168
/// default, meaningless composition. This is intended only for testing
169
/// purposes.
170
Material::Ptr
NewBlankMaterial
(
double
qty);
171
172
}
// namespace cyclus
173
174
#endif // CYCLUS_SRC_MATERIAL_H_
cyclus::units::mg
const double mg
Definition:
material.h:19
composition.h
cyclus::Composition::Ptr
boost::shared_ptr< Composition > Ptr
Definition:
composition.h:43
hdf5_back_gen.string
def string(s)
Definition:
hdf5_back_gen.py:1705
cyclus::Material::prev_decay_time
int prev_decay_time()
Returns the last time step on which a decay calculation was performed for the material.
Definition:
material.h:144
cyclus::Material::Ptr
boost::shared_ptr< Material > Ptr
Definition:
material.h:75
cyclus::Material::kType
static const ResourceType kType
Definition:
material.h:76
cyclus::ResourceType
std::string ResourceType
Definition:
resource.h:12
cyc_limits.h
cyclus::ResTracker
Tracks and records the state and parent-child relationships of resources as they are changed...
Definition:
res_tracker.h:22
cyclus::Resource
Resource defines an abstract interface implemented by types that are offered, requested, and transferred between simulation agents.
Definition:
resource.h:19
resource.h
cyclus::eps_rsrc
double eps_rsrc()
an epsilon value to be used by resources
Definition:
cyc_limits.h:19
cyclus::units::g
const double g
Definition:
material.h:18
cyclus::units::kg
const double kg
Definition:
material.h:17
cyclus::units::ug
const double ug
Definition:
material.h:20
res_tracker.h
cyclus::NewBlankMaterial
Material::Ptr NewBlankMaterial(double quantity)
Creates and returns a new material with the specified quantity and a default, meaningless composition...
Definition:
material.cc:234
cyclus::Context
A simulation context provides access to necessary simulation-global functions and state...
Definition:
context.h:130
cyclus::Resource::Ptr
boost::shared_ptr< Resource > Ptr
Definition:
resource.h:24
cyclus::Agent
The abstract base class used by all types of agents that live and interact in a simulation.
Definition:
agent.h:51
cyclus
taken directly from OsiSolverInterface.cpp on 2/17/14 from https://projects.coin-or.org/Osi/browser/trunk.
Definition:
agent.cc:14
cyclus::Material
The material class is primarily responsible for enabling basic material manipulation while helping en...
Definition:
material.h:71
cyclus::SimInit
Handles initialization of a simulation from the output database.
Definition:
sim_init.h:24
Generated by
1.8.13