6 #include <boost/lexical_cast.hpp> 11 : cyclus::Facility(ctx),
12 throughput(std::numeric_limits<double>::max()),
13 inventory_size(std::numeric_limits<double>::max()),
21 #pragma cyclus impl initfromcopy cycamore::Source 22 cyclus::toolkit::CommodityProducer::Copy(m);
27 #pragma cyclus impl initfromdb cycamore::Source 28 namespace tk = cyclus::toolkit;
29 tk::CommodityProducer::Add(tk::Commodity(
outcommod),
35 namespace tk = cyclus::toolkit;
38 if (cyclus::toolkit::CommodityProducer::Produces(
44 ss << cyclus::Facility::str() <<
" supplies commodity '" <<
outcommod 45 <<
"' with recipe '" <<
outrecipe <<
"' at a throughput of " 47 <<
" commod producer members: " 48 <<
" produces " <<
outcommod <<
"?: " << ans
49 <<
" throughput: " << cyclus::toolkit::CommodityProducer::Capacity(
outcommod)
50 <<
" cost: " << cyclus::toolkit::CommodityProducer::Cost(
outcommod);
55 cyclus::CommodMap<cyclus::Material>::type& commod_requests) {
57 using cyclus::BidPortfolio;
58 using cyclus::CapacityConstraint;
59 using cyclus::Material;
60 using cyclus::Request;
63 cyclus::toolkit::RecordTimeSeries<double>(
"supply"+
outcommod,
this,
65 LOG(cyclus::LEV_INFO3,
"Source") << prototype() <<
" is bidding up to " 67 LOG(cyclus::LEV_INFO5,
"Source") <<
"stats: " <<
str();
69 std::set<BidPortfolio<Material>::Ptr> ports;
70 if (max_qty < cyclus::eps()) {
72 }
else if (commod_requests.count(outcommod) == 0) {
76 BidPortfolio<Material>::Ptr port(
new BidPortfolio<Material>());
77 std::vector<Request<Material>*>& requests = commod_requests[
outcommod];
78 std::vector<Request<Material>*>::iterator it;
79 for (it = requests.begin(); it != requests.end(); ++it) {
80 Request<Material>* req = *it;
81 Material::Ptr target = req->target();
82 double qty = std::min(target->quantity(), max_qty);
83 Material::Ptr m = Material::CreateUntracked(qty, target->comp());
85 m = Material::CreateUntracked(qty, context()->GetRecipe(
outrecipe));
87 port->AddBid(req, m,
this);
90 CapacityConstraint<Material> cc(max_qty);
91 port->AddConstraint(cc);
97 const std::vector<cyclus::Trade<cyclus::Material> >& trades,
98 std::vector<std::pair<cyclus::Trade<cyclus::Material>,
99 cyclus::Material::Ptr> >& responses) {
100 using cyclus::Material;
103 std::vector<cyclus::Trade<cyclus::Material> >::const_iterator it;
104 for (it = trades.begin(); it != trades.end(); ++it) {
105 double qty = it->amt;
108 Material::Ptr response;
110 response = Material::Create(
this, qty, context()->GetRecipe(
outrecipe));
112 response = Material::Create(
this, qty, it->request->target()->comp());
114 responses.push_back(std::make_pair(*it, response));
115 LOG(cyclus::LEV_INFO5,
"Source") << prototype() <<
" sent an order" 116 <<
" for " << qty <<
" of " <<
outcommod;
123 ->NewDatum(
"AgentPosition")
124 ->AddVal(
"Spec", specification)
125 ->AddVal(
"Prototype", this->prototype())
126 ->AddVal(
"AgentId",
id())
cyclus::Agent * ConstructSource(cyclus::Context *ctx)
virtual std::set< cyclus::BidPortfolio< cyclus::Material >::Ptr > GetMatlBids(cyclus::CommodMap< cyclus::Material >::type &commod_requests)
cycamore::GrowthRegion string
virtual std::string str()
virtual void InitFrom(Source *m)
cyclus::toolkit::Position coordinates
Source(cyclus::Context *ctx)
virtual void GetMatlTrades(const std::vector< cyclus::Trade< cyclus::Material > > &trades, std::vector< std::pair< cyclus::Trade< cyclus::Material >, cyclus::Material::Ptr > > &responses)