5 #include <boost/lexical_cast.hpp> 13 : cyclus::Facility(ctx),
14 capacity(std::numeric_limits<double>::max()),
18 SetMaxInventorySize(std::numeric_limits<double>::max());}
23 #pragma cyclus def schema cycamore::Sink 25 #pragma cyclus def annotations cycamore::Sink 27 #pragma cyclus def infiletodb cycamore::Sink 29 #pragma cyclus def snapshot cycamore::Sink 31 #pragma cyclus def snapshotinv cycamore::Sink 33 #pragma cyclus def initinv cycamore::Sink 35 #pragma cyclus def clone cycamore::Sink 37 #pragma cyclus def initfromdb cycamore::Sink 39 #pragma cyclus def initfromcopy cycamore::Sink 43 cyclus::Facility::EnterNotify();
53 throw cyclus::ValueError(ss.str());
63 ss << cyclus::Facility::str();
66 msg +=
"accepts commodities ";
67 for (vector<string>::iterator commod =
in_commods.begin();
70 msg += (commod ==
in_commods.begin() ?
"{" :
", ");
73 msg +=
"} until its inventory is full at ";
74 ss << msg <<
inventory.capacity() <<
" kg.";
79 std::set<cyclus::RequestPortfolio<cyclus::Material>::Ptr>
81 using cyclus::Material;
82 using cyclus::RequestPortfolio;
83 using cyclus::Request;
84 using cyclus::Composition;
86 std::set<RequestPortfolio<Material>::Ptr> ports;
87 RequestPortfolio<Material>::Ptr port(
new RequestPortfolio<Material>());
92 mat = cyclus::NewBlankMaterial(amt);
94 Composition::Ptr rec = this->context()->GetRecipe(
recipe_name);
95 mat = cyclus::Material::CreateUntracked(amt, rec);
98 if (amt > cyclus::eps()) {
99 std::vector<Request<Material>*> mutuals;
104 port->AddMutualReqs(mutuals);
111 std::set<cyclus::RequestPortfolio<cyclus::Product>::Ptr>
113 using cyclus::CapacityConstraint;
114 using cyclus::Product;
115 using cyclus::RequestPortfolio;
116 using cyclus::Request;
118 std::set<RequestPortfolio<Product>::Ptr> ports;
119 RequestPortfolio<Product>::Ptr
120 port(
new RequestPortfolio<Product>());
123 if (amt > cyclus::eps()) {
124 CapacityConstraint<Product> cc(amt);
125 port->AddConstraint(cc);
127 std::vector<std::string>::const_iterator it;
130 Product::Ptr rsrc = Product::CreateUntracked(amt, quality);
131 port->AddRequest(rsrc,
this, *it);
141 const std::vector< std::pair<cyclus::Trade<cyclus::Material>,
142 cyclus::Material::Ptr> >& responses) {
143 std::vector< std::pair<cyclus::Trade<cyclus::Material>,
144 cyclus::Material::Ptr> >::const_iterator it;
145 for (it = responses.begin(); it != responses.end(); ++it) {
152 const std::vector< std::pair<cyclus::Trade<cyclus::Product>,
153 cyclus::Product::Ptr> >& responses) {
154 std::vector< std::pair<cyclus::Trade<cyclus::Product>,
155 cyclus::Product::Ptr> >::const_iterator it;
156 for (it = responses.begin(); it != responses.end(); ++it) {
165 LOG(cyclus::LEV_INFO3,
"SnkFac") << prototype() <<
" is ticking {";
169 if (requestAmt > cyclus::eps()) {
170 for (vector<string>::iterator commod =
in_commods.begin();
173 LOG(cyclus::LEV_INFO4,
"SnkFac") <<
" will request " << requestAmt
174 <<
" kg of " << *commod <<
".";
175 cyclus::toolkit::RecordTimeSeries<double>(
"demand"+*commod,
this,
179 LOG(cyclus::LEV_INFO3,
"SnkFac") <<
"}";
184 LOG(cyclus::LEV_INFO3,
"SnkFac") << prototype() <<
" is tocking {";
189 LOG(cyclus::LEV_INFO4,
"SnkFac") <<
"Sink " << this->id()
190 <<
" is holding " <<
inventory.quantity()
191 <<
" units of material at the close of month " 192 << context()->time() <<
".";
193 LOG(cyclus::LEV_INFO3,
"SnkFac") <<
"}";
199 ->NewDatum(
"AgentPosition")
200 ->AddVal(
"Spec", specification)
201 ->AddVal(
"Prototype", this->prototype())
202 ->AddVal(
"AgentId",
id())
209 extern "C" cyclus::Agent*
ConstructSink(cyclus::Context* ctx) {
210 return new Sink(ctx);
virtual std::set< cyclus::RequestPortfolio< cyclus::Material >::Ptr > GetMatlRequests()
SinkFacilities request Materials of their given commodity.
cyclus::toolkit::ResBuf< cyclus::Resource > inventory
this facility holds material in storage.
cyclus::Agent * ConstructSink(cyclus::Context *ctx)
double RequestAmt() const
determines the amount to request
Sink(cyclus::Context *ctx)
virtual void EnterNotify()
virtual void AcceptGenRsrcTrades(const std::vector< std::pair< cyclus::Trade< cyclus::Product >, cyclus::Product::Ptr > > &responses)
SinkFacilities place accepted trade Materials in their Inventory.
cycamore::GrowthRegion string
virtual std::set< cyclus::RequestPortfolio< cyclus::Product >::Ptr > GetGenRsrcRequests()
SinkFacilities request Products of their given commodity.
cyclus::toolkit::Position coordinates
std::vector< double > in_commod_prefs
virtual void AcceptMatlTrades(const std::vector< std::pair< cyclus::Trade< cyclus::Material >, cyclus::Material::Ptr > > &responses)
SinkFacilities place accepted trade Materials in their Inventory.
std::vector< std::string > in_commods
all facilities must have at least one input commodity
virtual std::string str()