Code Monkey home page Code Monkey logo

remind's Introduction

The REMIND R Package

R package remind, version 36.185.2

CRAN status r-universe

Purpose and Functionality

Contains the REMIND-specific routines for data and model output manipulation.

Installation

For installation of the most recent package version an additional repository has to be added in R:

options(repos = c(CRAN = "@CRAN@", pik = "https://rse.pik-potsdam.de/r/packages"))

The additional repository can be made available permanently by adding the line above to a file called .Rprofile stored in the home folder of your system (Sys.glob("~") in R returns the home directory).

After that the most recent version of the package can be installed using install.packages:

install.packages("remind")

Package updates can be installed using update.packages (make sure that the additional repository has been added before running that command):

update.packages()

Tutorial

The package comes with a vignette describing the basic functionality of the package and how to use it. You can load it with the following command (the package needs to be installed):

vignette("remind_summary") # Adding plots to the REMIND_summary.pdf

Questions / Problems

In case of questions / problems please contact Anastasis Giannousakis [email protected].

Citation

To cite package remind in publications use:

Giannousakis A, Pehl M (2021). remind: The REMIND R Package. R package version 36.185.2.

A BibTeX entry for LaTeX users is

@Manual{,
 title = {remind: The REMIND R Package},
 author = {Anastasis Giannousakis and Michaja Pehl},
 year = {2021},
 note = {R package version 36.185.2},
}

remind's People

Contributors

0umfhxcvx5j7joaohfss5mncnistjj6q avatar amnmalik avatar bs538 avatar christophbertram avatar dklein-pik avatar fbenke-pik avatar fschreyer avatar giannou avatar jhilaire avatar johanneskoch94 avatar laviniabaumstark avatar loisel avatar mariannar avatar merfort avatar pfuehrlich-pik avatar piklev avatar silviamade avatar strefler avatar tscheypidi avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

remind's Issues

unit format US$2005/(tCO2/yr) does not conform to magclass unit format

remind/R/reportTechnology.R

Lines 233 to 238 in 6dad76d

if(CDR_mod != "off"){
unit <- "US$2005/(tCO2/yr)"
factor <- 1000/3.6
tmp <- bind_category(tmp, v_investcost, category, unit, factor, cdrmap)
int2ext <- c(int2ext, get_global_mapping(category, unit, cdrmap))
}

The unit US$2005/(tCO2/yr) breaks the magclass unit convention, which does not support nested parentheses. Specifically

library(remind)
library(quitte)

a <- convGDX2MIF(gdx = './tests/testgdxs/fulldata.gdx')

as.quitte(a)
Error in magclass::`getNames<-`(`*tmp*`, value = sub(" \\(([^\\()]*)\\)($|\\.)",  : 
  Inconsistent names! Number of dots per name has always to be the same as it is separating different data dimensions
In addition: There were 21 warnings (use warnings() to see them)

as.quitte(a[,,'(US$2005/(tCO2/yr))', pmatch = TRUE, invert = TRUE])
# A tibble: 371,241 x 7
   model  scenario region variable    unit               period value
   <fct>  <fct>    <fct>  <fct>       <fct>               <int> <dbl>
 1 REMIND default  CAZ    Consumption billion US$2005/yr   2005 1123.
 2 REMIND default  CHA    Consumption billion US$2005/yr   2005 1625.
 3 REMIND default  EUR    Consumption billion US$2005/yr   2005 8759.
 4 REMIND default  IND    Consumption billion US$2005/yr   2005  520.
 5 REMIND default  JPN    Consumption billion US$2005/yr   2005 3031.
 6 REMIND default  LAM    Consumption billion US$2005/yr   2005 1867.
 7 REMIND default  MEA    Consumption billion US$2005/yr   2005  985.
 8 REMIND default  NEU    Consumption billion US$2005/yr   2005  942.
 9 REMIND default  OAS    Consumption billion US$2005/yr   2005 1324.
10 REMIND default  REF    Consumption billion US$2005/yr   2005  597.
# … with 371,231 more rows

FE level reporting is not accurately describing REMIND behavior

By leaving the paradigm of SE level pooling by state of matter (solid, liquid, gas) with the updates by Renato (fossil and bio distinction on SE level), a lot of FE level reporting does anymore correctly reflect what REMIND is doing.

The reason for this is, that FE distinction by PE carrier (e.g, FE|Transport|Liquids|Biomass) is based on SE level pools that do not exist anymore. An example from the reporting (reportCrossVariables.R):

tmp <- mbind(tmp,setNames(
                   output[r,,"FE|Transport|Liquids (EJ/yr)"] 
                 * output[r,,"SE|Liquids|Biomass (EJ/yr)"]
                 / output[r,,"SE|Liquids (EJ/yr)"],  "FE|Transport|Liquids|Biomass (EJ/yr)"))

If REMIND decides to supply all bioliquids to FE buildings or industry, which it can do now (since the link seliqbio to fehoi is explicit), this will not correctly be reflected in the reporting anymore.

The same issue shows up for all various combinations of carriers and sectors. Possible problems that come to my mind:

  • bounds on shares that are defined on the FE level are not in line with the reporting variables (that's how I ran into this issue).
  • FE price signals are more difficult to interpret from the reporting.
  • Actual tech investments and capacities are not in line with produced amounts.l

One of the reasons why this might be difficult to fix is backward compatibility. In the end, if backward compatibility is to be kept, FE reporting by PE carrier has to be split into the old (seliq, sega, seso) variables and a new one which correctly calculates shares on the basis of the new pools, i.e., seliqfos, seliqbio, sesofos, sesobio, segafos, segabio.

Policy cost reporting sanity check

Hi,
I put this in after discussions with Lavinia and Björn, so that automatic policy cost reporting only happens when the the gdp_scenarios are the same between policy and reference runs. This was done so that policy cost weren't reported for nonsensical policy-reference pairs.
The output.R script policyCosts.R was supposed to be used to create specific policy costs reportings.
Should this be changed? What should to be done instead? @fbenke-pik @LaviniaBaumstark @bs538 @strefler

remind/R/convGDX2MIF.R

Lines 57 to 74 in fed4b48

# Report policy costs, iif possible and sensible
if(!is.null(gdx_ref)) {
if (file.exists(gdx_ref)) {
gdp_scen <- try(readGDX(gdx,"cm_GDPscen",react ="error"),silent=T)
gdp_scen_ref <- try(readGDX(gdx_ref,"cm_GDPscen",react = "error"),silent=T)
if(!inherits(gdp_scen,"try-error") && !inherits(gdp_scen_ref,"try-error")){
if(gdp_scen[1]==gdp_scen_ref[1]){
output <- mbind(output,reportPolicyCosts(gdx,gdx_ref,regionSubsetList)[,t,])
} else {
warning(paste0("The GDP scenario differs from that of the reference run. Did not execute 'reportPolicyCosts'! If a policy costs reporting is desired, please use the 'policyCosts' output.R script."))
}
} else {
warning(paste0("A comparison of the GDP scenarios between this run and its reference run wasn't possible (old remind version). Therefore to avoid reporting unsensible policy costs, 'reportPolicyCosts' was not executed. If a policy costs reporting is required, please use the 'policyCosts' output.R script."))
}
} else {
warning(paste0("File ",gdx_ref," not found. Did not execute 'reportPolicyCosts'! If a policy costs reporting is desired, please use the 'policyCosts' output.R script."))
}
}

Rename Transport UE

"Useful Energy" in the transport sector is not consistent with the common understanding of this term. Instead, UE in the REMIND transport sector is a combustion car equivalent, i.e., from one unit of fepet, apCarPeT produces one unit of UE, while apCarElT produces around 3 units of UE etc.

I tried to fix it once but it proved more difficult than expected (as almost always). Please contact me if you care to fix this. Maybe also a thing for remind2 @Renato-Rodrigues

Reporting is broken, crippled MIFs are produced

reporting.R quits early with:

[1] "Executing reporting.R"
Error in setNames(pric_emu_base * bio_tax_factor * tdptwyr2dpgj, "Price|Biomass|Bioenergy tax (US$2005/GJ)") :
  dims [product 19] do not match the length of object [0]
> traceback()
6: setNames(pric_emu_base * bio_tax_factor * tdptwyr2dpgj, "Price|Biomass|Bioenergy tax (US$2005/GJ)")
5: setNames(pric_emu_base * bio_tax_factor * tdptwyr2dpgj, "Price|Biomass|Bioenergy tax (US$2005/GJ)")
4: mbind(tmp, setNames(pric_emu_base * bio_tax_factor * tdptwyr2dpgj, 
       "Price|Biomass|Bioenergy tax (US$2005/GJ)")) at reportPrices.R#312
3: reportPrices(gdx, output, regionSubsetList)
2: mbind(output, reportPrices(gdx, output, regionSubsetList)[, t, 
       ]) at convGDX2MIF.R#51
1: convGDX2MIF(infile, file = outfile)

on REMIND 779c113d using REMIND library version 36.147.1.
Therefore the MIF file produced only contains a couple of lines.

v_co2capturevalve values calculated but ignored

remind/R/reportEmi.R

Lines 781 to 797 in bf6b1c4

mbind(
lapply(
sub(paste0('^Emi\\|CO2\\|Carbon Capture and Storage\\|IndustryCCS',
'(\\|?.*) \\(Mt CO2/yr\\)$'), '\\1', getNames(tmp2)),
function(x) {
a <- paste0('Emi|CO2|Carbon Capture and Storage|IndustryCCS', x,
' (Mt CO2/yr)')
b <- paste0('Emi|CO2|Carbon Capture|IndustryCCS', x, ' (Mt CO2/yr)')
mbind(
setNames(tmp2[,,a] * dimSums(p_share_carbonCapture_stor, dim = 3), a),
setNames(tmp2[,,a], b)
)
}
)
)
tmp <- mbind(tmp, tmp2)

inconsistent treatment of subset regions in reportEmi()

remind/R/reportEmi.R

Lines 29 to 33 in 997f830

if(is.null(output)){
output <- reportFE(gdx,regionSubsetList)["GLO",,invert = T]
} else {
output <- output[c("GLO",names(regionSubsetList)),,invert = T]
}

If output is NULL to begin with (i.e., the function is run alone), it will contain names(regionSubsetList) afterwards (e.g., EUR and NEU). If it is not NULL, however, (i.e., the function is run from convGDX2MIX()), it won't.
Shouldn't there be a consistent way to handle this?

(Traces back to https://redmine.pik-potsdam.de/projects/mo/repository/16/revisions/13975/diff/remind/R/reportEmi.R)

Add industry variables missing for SHAPE

Carbon Intensity|Production|Cement (Mt CO2-equiv/Mt)
Carbon Intensity|Production|Cement|Fossil|Energy|Demand|Industry (Mt CO2-equiv/Mt)
Carbon Intensity|Production|Cement|Industrial Processes (Mt CO2-equiv/Mt)
Carbon Intensity|Production|Steel (Mt CO2-equiv/Mt)
Carbon Intensity|Production|Steel|Fossil|Energy|Demand|Industry (Mt CO2-equiv/Mt)
Carbon Intensity|Production|Steel|Industrial Processes (Mt CO2-equiv/Mt)
Specific Energy Consumption|Production|Cement (MJ/t)
Specific Energy Consumption|Production|Steel (MJ/t)

duplicate variable names

Variable Intensity|Final Energy|CO2 is reported twice, with differing units and content.

tmp <- mbind(tmp,setNames(
(output[,,"Emi|CO2|Fossil Fuels and Industry (Mt CO2/yr)"] - output[,,"Emi|CO2|Fossil Fuels and Industry|Cement process (Mt CO2/yr)"])
/ output[,,"FE (EJ/yr)"], "Intensity|Final Energy|CO2 (Mt CO2/EJ)"))
tmp <- mbind(tmp,setNames(
output[,,"Emi|GHGtot (Mt CO2-equiv/yr)"]
/ output[,,"GDP|MER (billion US$2005/yr)"], "Intensity|GDP|CO2 (Mt CO2-equiv/US$2005)"))
tmp <- mbind(tmp,setNames(
output[,,"Emi|GHGtot (Mt CO2-equiv/yr)"]
/ output[,,"FE (EJ/yr)"], "Intensity|Final Energy|CO2 (Mt CO2-equiv/EJ)"))

This will break quitte::calc_addVariable() when it is interacting with these variables, but more importantly is very unclear.

Levelized Costs of average Energy Services for the Transport Sector

From EDGE-T there are levelized cost markups provided to REMIND to reflect the total costs of transportation. Although very aggregated (passenger long distance, short-to-medium distance and the same for freight), the information might be interesting for the reporting.

Building the library fails after DESCRIPTION update

Build summary:

── R CMD check results ──────────────────────────────────── remind 36.171.2 ────
Duration: 2m 10.7s

0 errors ✔ | 0 warnings ✔ | 0 notes ✔
Package check successful! Please choose an update type :
1: major revision (for major rewrite of the whole package)
2: minor revision (for new features or improvements)
3: patch (for bugfixes and corrections)
4: only for packages in development stage
0: no version increment (only to use if version is already incremented!)

Number: 0
Updated .zenodo.json file
Error: $ operator is invalid for atomic vectors

Trace:

> traceback()
5: citation(package = d$get("Package"))
4: format(citation(package = d$get("Package")), style = "text")
3: fillCite(d)
2: package2readme(".")
1: lucode2::buildLibrary()

with lucode2 0.4.3 on R 3.6.3

SE|Gases lower that FE|Gases

This is at least the case in the USA in 2100, for a budget 600 scenario (e.g. /p/projects/remind/runs/sspsdp_validation/remind-standalone/output/SSP2-Budg600_2019-09-16_01.43.03)
Not fully clear whether this is a reporting issue or a model issue.
This may also impact the emissions accounting.

Library can not be built because of deprecated dependency lucode

Warning by lucode2::buildLibrary:

W  checking whether package ‘remind’ can be installed (19.7s)
   Found the following significant warnings:
     Warning: Package 'lucode' is deprecated.
   See ‘/tmp/Rtmp4Ejs2U/remind.Rcheck/00install.out’ for details.

At the moment, this inhibits updating DESCRIPTION. lucode2 version 0.1.0

compareScenarios does not support starting years > 2005

When using years > 2005 for the y parameter in compareScenarios, the script fails without a readable traceback.

> compareScenarios(
+   def_mifs,
+   "~/git/REMIND/core/input/historical/historical.mif", y=seq(2015, 2055, 5), y_bar = c(2015, 2030, 2050),
+   fileName="compareScenarioDefault_shortTerm.pdf")
Error in if (magclass::getNames(data_new, fulldim = TRUE)[["scenario"]] %in%  (from compareScenarios.R#163) : 
  argument is of length zero
> traceback()
1: compareScenarios(def_mifs, "~/git/REMIND/core/input/historical/historical.mif", 
       y = seq(2015, 2055, 5), y_bar = c(2015, 2030, 2050), fileName = "compareScenarioDefault_shortTerm.pdf")

error running reportTechnology()

I receive the following error while running reportTechnology()
a <- reportTechnology("inst/extdata/old.gdx")
Error in .dimextract(x, k, 3, pmatch = pmatch, invert = invert) :
subscript out of bounds ("FE|Transport|Pass|Road|LDV|Liquids (EJ/yr)")
In addition: Warning message:
In readGDX(gdx, name = c("v32_storloss", "v_storloss"), field = "l", :
v32_storloss not found in GDX! v_storloss returned
Called from: .dimextract(x, k, 3, pmatch = pmatch, invert = invert)

Warning-Spam due to ill-constructed comparison

This

# use pm_inco0_t for v_investcost for REMIND 1.6 where it was 0 for all non-learning technologies
for (te in getNames(v_investcost)) {
for (t in getYears(v_investcost)) {
if(v_investcost[,t,te] == 0) {
v_investcost[,t,te] <- pm_inco0_t[,t,te]
}
}
}

causes a whole lot (5280, to be exact) of

Warning messages:
In if (v_investcost[, t, te] == 0) { ... :
  the condition has length > 1 and only the first element will be used

I suggest either explicitly testing only the first region, if that is intended

if (v_investcost[1, t, te] == 0) {

or if it is not, testing if all regions have 0 data

if (all(v_investcost[1, t, te] == 0)) {

or at least one region has 0 data

if (any(v_investcost[1, t, te] == 0)) {

depending on what makes sense for this comparison.

lucode2::buildlibrary("remind") throws notes with R>4

The problem is the existence of 28 non-default packages in the Imports list. People who run R>4 can use the cluster to build the package, or have a colleague do it for them. As a permanent solution we can either remove dependencies, or allow a few notes. This has to be discussed and decided upon collectively.

over-reporting of FEs that have non-zero offset_quantity

Silvia discovered a discrepancy in the .mif files between FE|Buildings|Hydrogen + FE|CDR|Hydrogen + FE|Industry|Hydrogen + FE|Transport|Hydrogen and FE|Hydrogen. Turns out this is exactly 0.000315 EJ/yr or 1e-5 TWa.

# A tibble: 13 x 11
   scenario       period region Buildings     CDR Industry Transport    Total reported      diff
   <fct>           <int> <fct>      <dbl>   <dbl>    <dbl>     <dbl>    <dbl>    <dbl>     <dbl>
 1 SSP2-PkBudg900   2005 CAZ     0.000315 0        0.0112   0         0.0115   0.0112  -0.000315
 2 SSP2-PkBudg900   2005 CHA     0.000315 0        0.0551   0         0.0554   0.0551  -0.000315
 3 SSP2-PkBudg900   2005 EUR     0.000315 0        0.0561   0         0.0564   0.0561  -0.000315
 4 SSP2-PkBudg900   2005 IND     0.000315 0        0.0154   0         0.0157   0.0154  -0.000315
 5 SSP2-PkBudg900   2005 JPN     0.000315 0        0.0152   0         0.0155   0.0152  -0.000315
 6 SSP2-PkBudg900   2005 LAM     0.000315 0        0.0220   0         0.0223   0.0220  -0.000315
 7 SSP2-PkBudg900   2005 MEA     0.000315 0        0.0213   0         0.0216   0.0213  -0.000315
 8 SSP2-PkBudg900   2005 NEU     0.000315 0        0.00920  0         0.00951  0.00920 -0.000315
 9 SSP2-PkBudg900   2005 OAS     0.000315 0        0.0262   0         0.0265   0.0262  -0.000315
10 SSP2-PkBudg900   2005 REF     0.000315 0        0.0200   0         0.0203   0.0200  -0.000315
11 SSP2-PkBudg900   2005 SSA     0.000315 0        0.0131   0         0.0134   0.0131  -0.000315
12 SSP2-PkBudg900   2005 USA     0.000315 0        0.0678   0         0.0681   0.0678  -0.000315
13 SSP2-PkBudg900   2005 World   0.00378  0        0.333    0         0.336    0.333   -0.00378

Shouldn't

remind/R/reportFE.R

Lines 147 to 153 in b4934ef

setNames(dimSums(vm_cesIO[,,"feelb"],dim=3), "FE|Buildings|Electricity (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"fegab"],dim=3), "FE|Buildings|Gases (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"fesob"],dim=3), "FE|Buildings|Solids (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"fehob"],dim=3), "FE|Buildings|Liquids (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"feh2b"],dim=3), "FE|Buildings|Hydrogen (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"feheb"],dim=3), "FE|Buildings|Heat (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,ppfen_build],dim=3), "FE|Buildings (EJ/yr)")
account for pm_cesdata(t,regi,ppfen,"offset_quantity")? Probably

remind/R/reportFE.R

Lines 279 to 284 in b4934ef

setNames(dimSums(vm_cesIO[,,"feeli"],dim=3), "FE|Industry|Electricity (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"fegai"],dim=3), "FE|Industry|Gases (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"fesoi"],dim=3), "FE|Industry|Solids (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"fehoi"],dim=3), "FE|Industry|Liquids (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"feh2i"],dim=3), "FE|Industry|Hydrogen (EJ/yr)"),
setNames(dimSums(vm_cesIO[,,"fehei"],dim=3), "FE|Industry|Heat (EJ/yr)")
and

remind/R/reportFE.R

Lines 482 to 497 in b4934ef

setNames(dimSums(prodFE[,,se_Solids],dim=3), "FE|+|Solids (EJ/yr)"),
setNames(dimSums(prodFE[,,se_Liq],dim=3), "FE|+|Liquids (EJ/yr)"),
setNames(dimSums(prodFE[,,se_Gas],dim=3), "FE|+|Gases (EJ/yr)"),
setNames(dimSums(prodFE[,,FE_Elec_fety35],dim=3), "FE|+|Electricity (EJ/yr)"),
setNames(dimSums(prodFE[,,FE_H2_fety],dim=3), "FE|+|Hydrogen (EJ/yr)"),
setNames(dimSums(prodFE[,,"sehe.fehes.tdhes"],dim=3), "FE|+|Heat (EJ/yr)"),
setNames(dimSums(prodFE[,,FE_Transp_fety35],dim=3) - vm_otherFEdemand[,,'fedie'], "FE|Transport (EJ/yr)"),
setNames(dimSums(prodFE[,,"seel.feelt.tdelt"],dim=3), "FE|Transport|Electricity (EJ/yr)"),
setNames(dimSums(prodFE[,,"seh2.feh2t.tdh2t"],dim=3), "FE|Transport|Hydrogen (EJ/yr)"),
setNames(dimSums(prodFE[,,c("fedie","fepet")],dim=3) - vm_otherFEdemand[,,'fedie'], "FE|Transport|Liquids (EJ/yr)"),
setNames(dimSums(prodFE[,,"fedie"],dim=3)- vm_otherFEdemand[,,'fedie'], "FE|Transport|Diesel (EJ/yr)"),
setNames(dimSums(prodFE[,,"fepet"],dim=3), "FE|Transport|Petrol (EJ/yr)"),
setNames(p_eta_conv[,t2100,intersect(c("tdsos", "tdbiosos"),getNames(p_eta_conv))] * dimSums(prodSE[setSolBio][,t2100,], dim = 3), "FE|Solids|Biomass (EJ/yr)"),
setNames(p_eta_conv[,t2100,intersect(c("tdsos", "tdbiosos"),getNames(p_eta_conv))] * dimSums(prodSE[,t2100,"biotrmod"], dim = 3), "FE|Solids|Biomass|Modern (EJ/yr)"),
setNames(p_eta_conv[,t2100,intersect(c("tdsos", "tdbiosos"),getNames(p_eta_conv))] * dimSums(prodSE[,t2100,"biotr"], dim = 3), "FE|Solids|Biomass|Traditional (EJ/yr)"),
setNames(p_eta_conv[,t2100,intersect(c("tdsos", "tdfossos"),getNames(p_eta_conv))] * dimSums(prodSE[,t2100,"coaltr"], dim = 3), "FE|Solids|Coal (EJ/yr)")
too. Same for the other realisations of modules 36, 37, and 38.

problem with reporting of Technology costs

the reporting of

"Tech|Electricity|Storage|Battery|For Wind"
"Tech|Electricity|Storage|Battery|For PV"
"Tech|Electricity|Storage|Battery|For CSP
Tech|Transport|Pass|Road|LDV|ICE|Capital Costs
Tech|Transport|Pass|Road|LDV|EV|Capital Costs
Tech|Transport|Pass|Road|LDV|H2|Capital Costs
Tech|Transport|Pass|Road|LDV|ICEH2|Op Costs
Tech|Transport|Pass|Road|LDV|EV|Op Costs
Tech|Transport|Pass|Road|LDV|H2|Op Costs

in reportTech needs to be changed.

Currently they report the REMIND-internal values for mix technologies (for storspv/storwind) or a fraction of a vehicle (for LDV), so they should not be reported like "real values", and never uploaded in project reports.

Solution:

  1. change the existing names to:
    "Tech|Electricity|Storage|StorWind"
    "Tech|Electricity|Storage|StorSPV"
    "Tech|Electricity|Storage|StorCSP"
    Tech|Transport|Pass|Road|LDV|0.65 of an ICE|Capital Costs
    Tech|Transport|Pass|Road|LDV|0.65 of an ICEEV|Capital Costs
    Tech|Transport|Pass|Road|LDV|0.65 of an ICEH2|Capital Costs
    Tech|Transport|Pass|Road|LDV|0.65 of an ICEH2|Op Costs
    Tech|Transport|Pass|Road|LDV|0.65 of an ICEEV|Op Costs
    Tech|Transport|Pass|Road|LDV|0.65 of an ICEH2|Op Costs

  2. upscale the LDV costs by dividing by 0.65

  3. Calculate actual battery costs from the

  4. Implement seperate battery technology, H2 electrolysis technology and H2 turbine technology that are required in different parts from storspv, storwind and storcsp

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.