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.
There was a problem hiding this comment.
Can you add an inputs/employment/README.md file describing the sources (with links) and explicit units for each of the files in this folder?
There was a problem hiding this comment.
We should also add a section on the employment calculations to the docs.
There was a problem hiding this comment.
I'd suggest transposing this file (construction/fom as columns and sources as rows); then it would match the format of the other files, and you could add new sources without every line showing up as changed. And I guess you could add a vom column (all zero values) to exactly match the format of the others.
| electrolyzer,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,YES | ||
| smr,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,,,YES | ||
| smr_ccs,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,,,YES | ||
| dac,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,,,YES | ||
| dac_gas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,,,YES |
There was a problem hiding this comment.
I think electrolyzer, SMR, and DAC should be excluded from GENTECH
| battery_li,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES | ||
| dr_shed_1*dr_shed_2,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES, | ||
| evmc_storage_1*evmc_storage_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,, | ||
| evmc_shape_1*evmc_shape_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,, | ||
| pumped-hydro,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,YES,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES | ||
| pumped-hydro-flex,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES |
There was a problem hiding this comment.
Should we exclude all the storage technologies from GENTECH too?
There was a problem hiding this comment.
(nitpick/optional) Could revert the rest of the changes to this file since it didn't end up being changed
| trans_cost_cap_fin_mult(t) | ||
| * ((TRAN_CAPEX_BINS(r,rr,tscbin,t)) | ||
| * pvf_capital(t) | ||
| * employment_factor_inter_transmission("construction"))} |
There was a problem hiding this comment.
| * employment_factor_inter_transmission("construction"))} | |
| * TRAN_CAPEX_BINS is only defined for r < rr so is not divided by 2 | |
| * employment_factor_inter_transmission("construction"))} |
| $routes(r,rr,trtype,t)], | ||
| CAPTRAN_ENERGY(r,rr,trtype,t) | ||
| * pvf_onm(t) | ||
| * employment_factor_inter_transmission("fom") } |
There was a problem hiding this comment.
Sorry I missed this earlier but it seems like there should be a / 2 here
| * employment_factor_inter_transmission("fom") } | |
| * CAPTRAN_ENERGY is defined in both directions so needs to be divided by 2 | |
| * employment_factor_inter_transmission("fom") / 2 } |
There was a problem hiding this comment.
Actually it looks like we're high by a factor of 2 in the objective function too (so it makes sense why it's not included here):
Line 180 in 13224b8
Let's do the fix for that in a separate PR though
There was a problem hiding this comment.
Thinking about it more, I'm not sure I understand how a transmission employment factor in terms of [job-years/MW] would work, so maybe best to discuss. The alternative would be to keep it in [job-years/$] and use equations similar to the transmission FOM calculation (with interface-dependent costs) in the objective function:
Lines 178 to 188 in 13224b8
| $offempty | ||
|
|
||
| * Employment factors of transmission deployment and flow | ||
| parameter employment_factor_inter_transmission(jtype) "--job-years/MW or job-years/$M-- employment factors of transmission lines by job type (construction or o&m jobs)" |
There was a problem hiding this comment.
Sorry, I think we discused this but am forgetting the details. How does it work to have job-years/MW for transmission FOM? I would think that 1000 MW on a 100-mile path would have more O&M requirements than 1000 MW on a 1-mile path, but if the units are [job-years/MW], they'd come out the same.
Also can you specify the units used for each jtype as noted above?
| *==================================== | ||
| * Employment factors of construction and operation of power plants | ||
| $onempty | ||
| Table employment_factor_plant(i,jtype) "--job-years/MW or job-years/MWh-- employment factors of power plants by technology and job type (construction and o&m jobs)" |
There was a problem hiding this comment.
For all of these comments, can you specify the jtype that each set of units applies to? Like --job-years/MW (construction & fom), job-years/MWh (vom)--
| employment_transmission_fom(r,rr,t) = sum{trtype | ||
| $[routes(r,rr,trtype,t)], | ||
| CAPTRAN_ENERGY.l(r,rr,trtype,t) | ||
| * employment_factor_inter_transmission("fom") } ; |
There was a problem hiding this comment.
I think the transmission FOM treatment might need to be adjusted (see comments on c_mga.gms); just a flag that if we change it there we'd need to change it here too.
Summary
This PR adds some updates to MGA, cplex settings for national MGA runs, and employment outputs using employment factors from JEDI and literature.
Technical details
Implementation notes
inputs/employmentfolder.b_inputs.gms: Read in employment factors input (from JEDI, Mayfield et al. (2023), Rutovitz et al, (2024), or Ram et al. (2020)).c_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.compare_cases.pyandreedsplots.py: Add employment outputs to comparison report.log.py: For some reason runtimes are not read properly from gamslog.txt when usingcplex.op3andcplex.op4, so add encoding to fix this issue.Switches added/removed/changed
GSw_EmploymentFactor: Employment factor by technologies, options including JEDI, and recent literature includingMayfield_et_al,Rutovitz_et_al, andRam_et_al. Default is JEDI.GSw_gopt_mga: cplex opt file for MGA run. Default is 3.GSw_MGA_Objective: Addgenerationandemploymentoptions.GSw_MGA_SubObjective: Addalloption to maximize/minimize all capacity.Issues resolved
Known incompatibilities
Relevant sources or documentation
Charge code for review
GDOP.12495.25.01.01
Validation, testing, and comparison report(s)
Comparison reports pending.
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
Tag points of contact here if you would like additional review of the relevant parts of the model