-
Notifications
You must be signed in to change notification settings - Fork 57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Unify costing packages #1134
Comments
Regarding " |
I think the thing to do here would be to let Generally speaking I don't want to have too many |
I like this proposal. In general, I think the better approach is the basic mode (so I'd vote making that the default if the user doesn't specify detailed). Why include expressions for the other factors that aren't needed for the basic mode (e.g. |
I think this is a good solution. Well wait, I think its possible people would want to use basic mode and want to set wacc and plant_lifetime. So maybe we provide a configuration argument for whether the capital_recovery_factor being calculated or not. |
Sure, the more flexibility we give the user the more options we have to allow, document, and test against. So I guess the question is if allowing |
Following how some of our previous work was conducted, I think we'd want to keep the option open for setting capital recovery factor directly although choosing wacc and lifetime is the more common approach. For example, in one of Tim's papers, he set capital recovery factor directly. In one of mine I also set capital recovery factor directly, but in other papers I calculated it based on wacc and lifetime. I think we could document this and let the user know that they'd need to fix 2 out of 3 of those (and maybe we have 2 out of 3 already fixed by default). |
I am near ready to open a PR for this issue. I have a final question: what do we think of the following APIs for differentiating Option 1:from watertap.costing import WaterTAPCosting, WaterTAPCostingDetailed
costing_basic = WaterTAPCosting()
costing_detailed = WaterTAPCostingDetailed() Option 2:from watertap.costing import WaterTAPCosting
costing_basic = WaterTAPCosting(detailed=False) #default
costing_detailed = WaterTAPCosting(detailed=True) Option 3:from watertap.costing import WaterTAPCosting
costing_basic = WaterTAPCosting(mode="basic") #default
costing_detailed = WaterTAPCosting(mode="detailed") I have Option 1 already implemented. To maintain compatibility with the ZeroOrderCosting package the implementation of options 2 or 3 would probably return a different class, e.g., I am strongly leaning towards Option 1 because I think it is the most straightforward and transparent. |
Based on offline discussion, here is the proposal to unify the costing packages:
Changes to WaterTAPCosting Package:
factor_capital_annualization
will go away and be replaced bywacc
andplant_lifetime
.No changes to ZeroOrderCosting Package.
The unified costing package will have two build modes
detailed
andbasic
.basic
mode:factor_total_investment
will be aVar
factor_maintenance_labor_chemical
will be aVar
land_cost_percent_FCI
,salaries_percent_FCI
will be defined asExpression
s with offsets based onfactor_total_investment
andfactor_maintenance_labor_chemical
. I.e., such that adjusting the high-level factors will automatically adjust the low-level factors.detailed
mode:Var
factor_total_investment
will be anExpression
factor_maintenance_labor_chemical
will be anExpression
The text was updated successfully, but these errors were encountered: