CYCAMORE
Loading...
Searching...
No Matches
src/conversion.h
Go to the documentation of this file.
1#ifndef CYCAMORE_SRC_CONVERSION_H_
2#define CYCAMORE_SRC_CONVERSION_H_
3
4#include <algorithm>
5#include <string>
6#include <utility>
7#include <vector>
8
9#include "cyclus.h"
10#include "cycamore_version.h"
11
12// clang-format off
13#pragma cyclus exec from cyclus.system import CY_LARGE_DOUBLE, CY_LARGE_INT, CY_NEAR_ZERO
14// clang-format on
15
16namespace cycamore {
17
18class Context;
19
23class Conversion
24 : public cyclus::Facility,
25 public cyclus::toolkit::Position {
26 public:
27 Conversion(cyclus::Context* ctx);
28
29 virtual ~Conversion();
30
31 virtual std::string version() { return CYCAMORE_VERSION; }
32
33 // clanag-format off
34 #pragma cyclus note { \
35 "doc": \
36 " A conversion facility that accepts materials and products and with a \n"\
37 " fixed throughput (per time step) converts them into its outcommod. " \
38 }
39
40 #pragma cyclus decl
41 // clang-format on
42
43 virtual std::string str();
44
45 virtual void EnterNotify();
46
47 virtual void Tick();
48
49 virtual void Tock();
50
52
53 void Convert();
54
55
57 virtual std::set<cyclus::RequestPortfolio<cyclus::Material>::Ptr>
59
60 virtual std::set<cyclus::BidPortfolio<cyclus::Material>::Ptr>
61 GetMatlBids(cyclus::CommodMap<cyclus::Material>::type&
62 commod_requests);
63
64 virtual void GetMatlTrades(
65 const std::vector< cyclus::Trade<cyclus::Material> >& trades,
66 std::vector<std::pair<cyclus::Trade<cyclus::Material>,
67 cyclus::Material::Ptr> >& responses);
68
70 virtual void AcceptMatlTrades(
71 const std::vector< std::pair<cyclus::Trade<cyclus::Material>,
72 cyclus::Material::Ptr> >& responses);
73
74
75
76 private:
77 // Code Injection:
78 #include "toolkit/position.cycpp.h"
79
80 // clang-format off
82 #pragma cyclus var { \
83 "tooltip": "input commodities", \
84 "doc": "commodities that the conversion facility accepts", \
85 "uilabel": "List of Input Commodities", \
86 "uitype": ["oneormore", "incommodity"] \
87 }
88 std::vector<std::string> incommods;
89
90 #pragma cyclus var { \
91 "tooltip": "output commodity", \
92 "doc": "Output commodity on which the conversion facility offers material.", \
93 "uilabel": "Output Commodity", \
94 "uitype": "outcommodity", \
95 }
96 std::string outcommod;
97
99 #pragma cyclus var { \
100 "default": CY_LARGE_DOUBLE, \
101 "tooltip": "conversion throughput per timestep", \
102 "uilabel": "Maximum conversion throughput", \
103 "uitype": "range", \
104 "range": [0.0, CY_LARGE_DOUBLE], \
105 "doc": "throughput the facility can convert at each time step" \
106 }
107 double throughput;
108
109 #pragma cyclus var { \
110 "default": CY_LARGE_DOUBLE, \
111 "tooltip": "input buffer capacity", \
112 "uilabel": "Maximum Storage of Input Buffer", \
113 "uitype": "range", \
114 "range": [0.0, CY_LARGE_DOUBLE], \
115 "doc": "Total capacity of the input buffer. The amount requested per " \
116 "time step is the minimum the conversion throughput and this capacity " \
117 "minus the amount of material in the input buffer." \
118 }
119 double input_capacity;
120
122 #pragma cyclus var {'capacity': 'input_capacity'}
123 cyclus::toolkit::ResBuf<cyclus::Material> input;
124
126 cyclus::toolkit::ResBuf<cyclus::Material> output;
127 // clang-format on
128
129};
130
131} // namespace cycamore
132
133#endif // CYCAMORE_SRC_CONVERSION_H_
134
#define CYCAMORE_VERSION
This facility acts as a simple conversion facility from its input commodity to its output commodity.
double throughput
Conversion throughput per timestep.
cyclus::toolkit::ResBuf< cyclus::Material > input
this facility holds a certain amount of material
virtual std::string version()
virtual void Tock()
double AvailableFeedstockCapacity()
virtual void Tick()
virtual std::string str()
virtual std::set< cyclus::RequestPortfolio< cyclus::Material >::Ptr > GetMatlRequests()
Conversion Facilities request Materials of their given commodity.
cyclus::toolkit::ResBuf< cyclus::Material > output
a buffer for outgoing material
virtual std::set< cyclus::BidPortfolio< cyclus::Material >::Ptr > GetMatlBids(cyclus::CommodMap< cyclus::Material >::type &commod_requests)
virtual void AcceptMatlTrades(const std::vector< std::pair< cyclus::Trade< cyclus::Material >, cyclus::Material::Ptr > > &responses)
Conversion Facilities place accepted trade Materials in their Inventory.
virtual void GetMatlTrades(const std::vector< cyclus::Trade< cyclus::Material > > &trades, std::vector< std::pair< cyclus::Trade< cyclus::Material >, cyclus::Material::Ptr > > &responses)
virtual void EnterNotify()
Conversion(cyclus::Context *ctx)
std::vector< std::string > incommods
all facilities must have at least one input commodity