Conversation
patrickbrown4
left a comment
There was a problem hiding this comment.
Thanks! Sorry about all the minor formatting stuff; just trying to avoid conflicts since a few other open PRs touch these same files. Happy to discuss the transmission FOM stuff if helpful.
Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com>
Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com>
bsergi
left a comment
There was a problem hiding this comment.
One question on the transmission jobs reporting but otherwise looks pretty good to me. Once you address that one it's good from my end so approving.
Also, I think the PR text about the assumption of 50% employment factors for CCS is out of date--if that's correct can you update it?
|
|
||
| ## Power sector employment | ||
|
|
||
| Employment factors for biopower, solar PV, hydropower, pumped storage, and land-based wind are derived respectively from the Jobs and Economic Development Impact (JEDI) models {cite}`JobsEconomicDevelopment` of individual technologies, all of which are publicly available. Employment factors for battery storage, coal, natural gas, geothermal, offshore wind, and transmission lines are derived respectively from the Workforce Impacts and Regional Economic Development (WIRED) models of individual technologies, all of which are not yet publicly available but are based on publicly available data inputs. | |
There was a problem hiding this comment.
Why only reference JEDI instead of all three option?
There was a problem hiding this comment.
I added references for the papers now.
There was a problem hiding this comment.
Corrected PR text for upgraded techs as well
| file = {Jobs and Economic Development Impact Models | NLR:files/8170/jedi.html:text/html}, | ||
| } | ||
|
|
||
| @article{asuegaTechnoeconomicAnalysisAdvanced2023, |
There was a problem hiding this comment.
Are the other references added here part of the employment factors or were they just swept up in an update? It might be cleaner to revert any additions that aren't new citations related to this PR but it doesn't matter too much.
There was a problem hiding this comment.
I just realized these come in with the README in the employment folder so you can ignore this comment.
There was a problem hiding this comment.
FWIW I always just take the results of the direct Zotero dump, even if there are new records unrelated to the PR. My impression is that the large majority of records aren't actually cited in the docs. We could implement a two-step process where we add a script to downselect to the actually cited references, but that should be its own PR.
| } | ||
| ; | ||
| * Assign to regions evenly across each interface | ||
| employment_transmission(jtype,r,t) = sum{rr, employment_transmission_interface(jtype,r,rr,t) / 2 } ; |
There was a problem hiding this comment.
Since the AC portion is only defined for r < rr I think this would result in no jobs from AC being assigned to the rr regions. Maybe that's the intention here, but if not you might need something like sum{rr, (employment_transmission_interface(jtype,r,rr,t) + employment_transmission_interface(jtype,rr,r,t) ) / 2 }. I'm not sure the DC lines would still be correct with that approach though; another option might be to repeat the AC transmission calculation for TRAN_CAPEX_BINS.l(rr,r) and then include the same division by 2 term as the DC approach.
There was a problem hiding this comment.
Ah good call, thanks a lot for the catch. These are so easy (for me at least) to mess up. So I think the transmission construction parameter above would be changed to:
employment_transmission_interface("construction",r,rr,t) =
employment_factor_inter_transmission("construction")
* trans_cost_cap_fin_mult(t)
* (
* AC: TRAN_CAPEX_BINS is only defined for r < rr, so add the reverse direction
sum{tscbin$[routes_inv(r,rr,"AC",t)$tsc_binwidth(r,rr,tscbin)],
TRAN_CAPEX_BINS.l(r,rr,tscbin,t) - sum{tt$tprev(t,tt), TRAN_CAPEX_BINS.l(r,rr,tscbin,tt)}
}
+ sum{tscbin$[routes_inv(rr,r,"AC",t)$tsc_binwidth(rr,r,tscbin)],
TRAN_CAPEX_BINS.l(rr,r,tscbin,t) - sum{tt$tprev(t,tt), TRAN_CAPEX_BINS.l(rr,r,tscbin,tt)}
}
* DC: INVTRAN is already defined in both directions
+ sum{trtype$[routes_inv(r,rr,trtype,t)$(not aclike(trtype))],
transmission_cost_nonac(r,rr,trtype) * INVTRAN.l(r,rr,trtype,t)
}
* Since we now have both AC and DC in both directions, divide everything by 2
) / 2
;
There was a problem hiding this comment.
that looks good to me. I like that approach since it makes everything consistent downstream from that point too.
Co-authored-by: Brian Sergi <bsergi@nlr.gov>
Co-authored-by: Brian Sergi <bsergi@nlr.gov>
Co-authored-by: Brian Sergi <bsergi@nlr.gov>
patrickbrown4
left a comment
There was a problem hiding this comment.
Looks good to me after these last few changes. Thanks (and sorry for all the back and forth on the transmission calculations)!
| } | ||
| ; | ||
| * Assign to regions evenly across each interface | ||
| employment_transmission(jtype,r,t) = sum{rr, employment_transmission_interface(jtype,r,rr,t) / 2 } ; |
There was a problem hiding this comment.
Ah good call, thanks a lot for the catch. These are so easy (for me at least) to mess up. So I think the transmission construction parameter above would be changed to:
employment_transmission_interface("construction",r,rr,t) =
employment_factor_inter_transmission("construction")
* trans_cost_cap_fin_mult(t)
* (
* AC: TRAN_CAPEX_BINS is only defined for r < rr, so add the reverse direction
sum{tscbin$[routes_inv(r,rr,"AC",t)$tsc_binwidth(r,rr,tscbin)],
TRAN_CAPEX_BINS.l(r,rr,tscbin,t) - sum{tt$tprev(t,tt), TRAN_CAPEX_BINS.l(r,rr,tscbin,tt)}
}
+ sum{tscbin$[routes_inv(rr,r,"AC",t)$tsc_binwidth(rr,r,tscbin)],
TRAN_CAPEX_BINS.l(rr,r,tscbin,t) - sum{tt$tprev(t,tt), TRAN_CAPEX_BINS.l(rr,r,tscbin,tt)}
}
* DC: INVTRAN is already defined in both directions
+ sum{trtype$[routes_inv(r,rr,trtype,t)$(not aclike(trtype))],
transmission_cost_nonac(r,rr,trtype) * INVTRAN.l(r,rr,trtype,t)
}
* Since we now have both AC and DC in both directions, divide everything by 2
) / 2
;
Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com>
Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com>
Summary
This PR adds some updates to MGA, cplex settings for national MGA runs, and employment outputs using employment factors from JEDI/WIRED and literature.
Technical details
Implementation notes
inputs/employmentfolder.b_inputs.gms: Read in employment factors input (from JEDI/WIRED, Mayfield et al. (2023), Rutovitz et al, (2024), or Ram et al. (2020)).d_mga.gms: Add option to run MGA max/min for all capacity, generation, and employment (sum of construction, FOM, and VOM jobs-years for power plants and transmission lines).e_report.gms: Add employment outputs.cplex.op3andcplex.op4. Default setting iscplex.op3. Users can switch tocplex.op4if runs still hang withcplex.op3settings:cplex.op3andcplex.op4are specifically for MGA runs which have difficulties withcplex.optandcplex.op2. They differ from cplex.opt and cplex.op2 in that they set predual = -1, which does not send dual to optimizer to reduce time; sets barcrossalg = 1, which only performs primal crossover; and sets baralg = 3 (cplex.op3).trans_fom_frac.Switches added/removed/changed
GSw_EmploymentFactor: Employment factor by technologies, options includingjedi, and recent literature includingmayfield,rutovitz, andram. Default isjedi.GSw_gopt_mga: cplex opt file for MGA run. Default is 3 (cplex.op3).GSw_MGA_Objective: Addgenerationandemploymentoptions.GSw_MGA_SubObjective: Addgentechoption to maximize/minimize all generating capacities.Issues resolved
Known incompatibilities
Relevant sources or documentation
Charge code for review
GDOP.12495.25.01.01
Validation, testing, and comparison report(s)
There's no changes in the USA default case
MGA runs which max/min employment (Pacific and Western Interconnection):
Checklist for author
Details to double-check
hourlize/resource.pywas rerun to regenerate the existing/prescribed VRE capacity dataGeneral information to guide review
Did you use LLM tools (chatbot or copilot) in the preparation of this PR? If so, describe how
No
Tag points of contact here if you would like additional review of the relevant parts of the model