Battery Calculation Using VASP: Time & Cost Estimator
Utilize this calculator to estimate the computational time and cost for your battery material simulations using VASP (Vienna Ab initio Simulation Package). Understand the impact of key parameters like atom count, k-points, and energy cutoff on your research budget and timeline for battery calculation using VASP.
VASP Battery Simulation Calculator
Total number of atoms in your VASP unit cell. Affects computational complexity significantly.
Total number of k-points (e.g., 3x3x3 = 27). Higher values increase accuracy and computational cost.
Plane-wave energy cutoff in electron volts. Higher ENCUT means more basis functions and higher cost.
Number of steps for structural relaxation or molecular dynamics.
Average number of SCF iterations required for convergence at each ionic step.
Number of CPU cores allocated for a single VASP job.
Empirical estimate of time taken for one electronic SCF iteration on your hardware. This is highly system-dependent.
Cost of using one CPU core for one hour on your computing cluster or cloud service.
Simulation Time & Cost vs. CPU Cores
This chart illustrates how the estimated total simulation time and cost change with varying numbers of CPU cores, based on your current input parameters for battery calculation using VASP.
Impact of Key Parameters on VASP Simulation Time
| Scenario | Atoms | K-points | ENCUT (eV) | Relative Time Factor | Notes |
|---|---|---|---|---|---|
| Small Unit Cell | 20 | 8 | 300 | 1x | Basic relaxation, small system. |
| Medium Unit Cell | 50 | 27 | 400 | ~10-15x | Common for many battery materials. |
| Large Unit Cell | 100 | 64 | 500 | ~50-100x | Supercells, complex interfaces. |
| High Accuracy | 50 | 64 | 500 | ~30-40x | Increased k-points and ENCUT for precision. |
| Molecular Dynamics | 100 | 1 | 350 | ~20-30x (per step) | Gamma-point only, but many ionic steps. |
What is Battery Calculation Using VASP?
Battery calculation using VASP refers to the application of the Vienna Ab initio Simulation Package (VASP) for simulating and understanding the properties of battery materials at the atomic and electronic level. VASP is a powerful first-principles density functional theory (DFT) code widely used in condensed matter physics and materials science. For battery research, VASP enables scientists to investigate critical aspects such as:
- Electrode Materials: Studying the electronic structure, stability, and ion diffusion pathways in cathode and anode materials.
- Electrolyte Properties: Analyzing ion transport mechanisms, solvation energies, and interface phenomena.
- Interfacial Reactions: Modeling the complex interactions at electrode-electrolyte interfaces, including solid-electrolyte interphase (SEI) formation.
- Voltage and Capacity: Predicting theoretical open-circuit voltages and capacities based on reaction energies.
- Defect Chemistry: Understanding the role of defects in material performance and degradation.
Who should use battery calculation using VASP? Researchers in academia and industry involved in battery material discovery, optimization, and failure analysis will find VASP indispensable. This includes materials scientists, chemists, physicists, and engineers working on next-generation energy storage solutions. Anyone seeking to gain fundamental insights into battery mechanisms beyond experimental observation can benefit from VASP simulations.
Common misconceptions about battery calculation using VASP:
- It’s a black box: While VASP is complex, it’s based on well-established quantum mechanics. Understanding the underlying physics and input parameters is crucial, not just running a script.
- It replaces experiments: VASP simulations complement, rather than replace, experimental work. They provide atomic-level insights that are difficult to obtain experimentally and can guide experimental design.
- It’s always accurate: DFT calculations have inherent approximations (e.g., exchange-correlation functionals). The accuracy depends on the chosen parameters, pseudopotentials, and the system’s complexity. Careful validation against experimental data is often necessary.
- It’s only for small systems: While computationally intensive, VASP can handle systems with hundreds of atoms using high-performance computing resources and parallelization techniques.
Battery Calculation Using VASP: Formula and Mathematical Explanation
The calculator above estimates the computational resources for a battery calculation using VASP by focusing on the primary drivers of simulation time and cost. While VASP’s internal algorithms are highly complex, the external factors influencing resource consumption can be approximated. The core idea is to quantify the total “work” done by the CPU cores.
Step-by-step Derivation of Calculator Logic:
- Total Electronic Steps: Each ionic step (e.g., during structural relaxation or molecular dynamics) requires multiple electronic self-consistent field (SCF) iterations to converge the electronic ground state.
Total Electronic Steps = Number of Ionic Steps × Average Electronic Steps per Ionic Step - Computational Complexity Factor (Heuristic): This is a simplified, non-rigorous metric to give a sense of how “hard” a single electronic step is. It’s based on common scaling trends.
- Number of Atoms (N_atoms): Computational cost scales roughly as N_atoms^3 to N_atoms^4 for dense matrix operations, but often closer to N_atoms^2 or N_atoms for sparse operations in VASP. We use a linear scaling for simplicity in this heuristic.
- Number of K-points (N_kpoints): Directly scales the number of independent calculations.
- Energy Cutoff (ENCUT): The number of plane waves scales roughly as ENCUT^(3/2). The cost per plane wave operation can be approximated by (ENCUT/100)^2 for a rough heuristic.
Computational Complexity Factor = Number of Atoms × Number of K-points × (Energy Cutoff / 100)^2 - Total Simulation Time (seconds): This is the total wall-clock time if run on a single core, before parallelization.
Total Simulation Time (seconds) = Total Electronic Steps × Estimated Time per Electronic Step - Total Simulation Time (hours): Converting the total time to a more practical unit.
Total Simulation Time (hours) = Total Simulation Time (seconds) / 3600 - Total CPU Core-Hours: This metric represents the total amount of computational work done, regardless of parallelization. It’s a standard unit for billing on HPC clusters.
Total CPU Core-Hours = Total Simulation Time (hours) × Number of CPU Cores per Job - Estimated Total Cost: The financial expenditure based on the core-hour usage.
Estimated Total Cost = Total CPU Core-Hours × Cost per CPU Core-Hour
Variable Explanations and Typical Ranges:
| Variable | Meaning | Unit | Typical Range |
|---|---|---|---|
Number of Atoms |
Total atoms in the simulation cell. | dimensionless | 10 – 500 |
Number of K-points |
Total k-points in the irreducible Brillouin zone. | dimensionless | 1 – 125 (e.g., 1x1x1 to 5x5x5) |
Energy Cutoff (ENCUT) |
Kinetic energy cutoff for plane-wave basis set. | eV | 250 – 600 |
Number of Ionic Steps |
Steps for geometry optimization or MD. | dimensionless | 10 – 5000 (for MD) |
Avg. Electronic Steps |
SCF iterations per ionic step. | dimensionless | 5 – 20 |
Number of CPU Cores |
Parallelization factor for the job. | dimensionless | 1 – 256+ |
Time per Elec. Step |
Empirical time for one SCF iteration. | seconds | 0.1 – 5.0 (highly hardware dependent) |
Cost per Core-Hour |
Cost of using one CPU core for one hour. | $/hour | $0.01 – $0.10 (for academic/cloud HPC) |
Practical Examples: Battery Calculation Using VASP
Example 1: Structural Relaxation of a Li-ion Cathode Material
A researcher wants to optimize the structure of a small unit cell of LiCoO2, a common cathode material, using battery calculation using VASP.
- Inputs:
- Number of Atoms in Unit Cell: 12 (e.g., 3 Li, 3 Co, 6 O)
- Number of K-points (Total): 8 (e.g., 2x2x2 mesh)
- Energy Cutoff (ENCUT): 450 eV
- Number of Ionic Steps: 30 (for relaxation)
- Average Electronic Steps per Ionic Step: 12
- Number of CPU Cores per Job: 16
- Estimated Time per Electronic Step: 0.3 seconds
- Cost per CPU Core-Hour: $0.04
- Outputs (using the calculator):
- Total Electronic Steps: 30 * 12 = 360
- Computational Complexity Factor: 12 * 8 * (450/100)^2 = 12 * 8 * 20.25 = 1944
- Total Estimated Simulation Time: (360 * 0.3) / 3600 = 0.03 hours
- Total CPU Core-Hours: 0.03 * 16 = 0.48 core-hours
- Estimated Total Cost: 0.48 * $0.04 = $0.0192
Interpretation: This small calculation is very quick and inexpensive, suitable for initial tests or small systems. The low cost makes it feasible for many such optimizations.
Example 2: Simulating Li-ion Diffusion in a Supercell
Another researcher is studying Li-ion diffusion pathways in a larger supercell of a solid-state electrolyte, requiring more extensive battery calculation using VASP.
- Inputs:
- Number of Atoms in Unit Cell: 150
- Number of K-points (Total): 4 (e.g., Gamma-point only for MD, or 2x2x1 for specific systems)
- Energy Cutoff (ENCUT): 350 eV
- Number of Ionic Steps: 1000 (for a short molecular dynamics run)
- Average Electronic Steps per Ionic Step: 8
- Number of CPU Cores per Job: 64
- Estimated Time per Electronic Step: 1.5 seconds
- Cost per CPU Core-Hour: $0.06
- Outputs (using the calculator):
- Total Electronic Steps: 1000 * 8 = 8000
- Computational Complexity Factor: 150 * 4 * (350/100)^2 = 150 * 4 * 12.25 = 7350
- Total Estimated Simulation Time: (8000 * 1.5) / 3600 = 3.33 hours
- Total CPU Core-Hours: 3.33 * 64 = 213.12 core-hours
- Estimated Total Cost: 213.12 * $0.06 = $12.79
Interpretation: This larger simulation, even with fewer k-points, takes significantly more time and costs more due to the increased number of atoms and ionic steps. Careful planning of resources is essential for such studies involving extensive battery calculation using VASP.
How to Use This Battery Calculation Using VASP Calculator
This calculator is designed to provide a quick estimate of the computational resources needed for your battery calculation using VASP. Follow these steps to get your results:
- Input Your Parameters:
- Number of Atoms in Unit Cell: Enter the total count of atoms in your VASP simulation cell.
- Number of K-points (Total): Provide the total number of k-points in your k-mesh (e.g., for a 3x3x3 mesh, enter 27).
- Energy Cutoff (ENCUT in eV): Input the plane-wave energy cutoff you plan to use.
- Number of Ionic Steps: Specify how many ionic steps your simulation will run for (e.g., for relaxation or MD).
- Average Electronic Steps per Ionic Step: Estimate the average number of SCF iterations VASP takes to converge at each ionic step.
- Number of CPU Cores per Job: Enter the number of CPU cores you will allocate to this specific VASP job.
- Estimated Time per Electronic Step (seconds): This is a crucial empirical value. If unsure, start with the default or run a small test calculation on your system to get an average SCF step time.
- Cost per CPU Core-Hour ($): Input the cost charged by your HPC cluster or cloud provider per CPU core-hour.
- Real-time Calculation: The calculator updates results in real-time as you adjust any input field. There’s no need to click a separate “Calculate” button.
- Read the Results:
- Total Estimated Simulation Time (hours): This is the primary result, highlighted for easy visibility. It tells you the wall-clock time your job is expected to run.
- Total Electronic Steps: An intermediate value showing the total number of SCF iterations.
- Computational Complexity Factor (Heuristic): A simplified metric indicating the relative “heaviness” of your calculation.
- Total CPU Core-Hours: The total computational work, useful for understanding resource consumption.
- Estimated Total Cost: The projected financial cost of your simulation.
- Understand the Formulas: A brief explanation of the formulas used is provided below the results for transparency.
- Use the Chart: The dynamic chart visualizes how simulation time and cost change with varying CPU cores, helping you make parallelization decisions for your battery calculation using VASP.
- Reset and Copy: Use the “Reset” button to restore default values or “Copy Results” to quickly save the output.
Decision-making guidance: Use these estimates to plan your computational budget, allocate resources efficiently, and compare the impact of different simulation parameters before committing to long, expensive runs. This tool is invaluable for optimizing your battery calculation using VASP workflow.
Key Factors That Affect Battery Calculation Using VASP Results
The accuracy and efficiency of a battery calculation using VASP are influenced by numerous factors. Understanding these is crucial for obtaining reliable results and managing computational resources effectively.
- Number of Atoms in the Unit Cell: This is perhaps the most significant factor. Computational cost scales non-linearly with the number of atoms (often N^2 to N^3 or even N^4 for certain algorithms). Larger supercells, necessary for studying defects, interfaces, or amorphous structures, dramatically increase simulation time and memory requirements.
- K-point Sampling: The density of the k-point mesh (controlled by KPOINTS file) directly impacts the accuracy of Brillouin zone integration. More k-points lead to better convergence for metallic or small band gap systems but linearly increase computational cost. Insulators often require fewer k-points.
- Energy Cutoff (ENCUT): This parameter determines the size of the plane-wave basis set. A higher ENCUT leads to a more accurate representation of wavefunctions but increases the number of plane waves, significantly raising computational cost (roughly ENCUT^(3/2) to ENCUT^2). Proper convergence testing for ENCUT is essential.
- Number of Ionic Steps: For structural relaxations, the number of ionic steps determines how many times the atomic positions are updated. For molecular dynamics (MD) simulations, this corresponds to the total number of time steps. More steps mean longer simulations, directly proportional to the total time.
- Average Electronic Steps per Ionic Step: At each ionic step, VASP performs an SCF loop to find the electronic ground state. The number of iterations required for convergence varies. Complex systems, metals, or systems far from equilibrium might require more SCF steps, increasing the time per ionic step.
- Number of CPU Cores and Parallelization Efficiency: While more CPU cores can reduce wall-clock time, VASP’s parallelization efficiency is not always perfect. There’s a sweet spot where adding more cores yields diminishing returns due to communication overhead. Optimal core allocation is system- and hardware-dependent.
- Choice of Pseudopotentials (POTCAR): The type of pseudopotential (e.g., PAW, USPP) and the specific version (e.g., PBE, GGA, LDA) can affect the required ENCUT and the overall computational stability. Harder pseudopotentials often require higher ENCUT.
- Exchange-Correlation Functional: The choice of DFT functional (e.g., LDA, PBE, SCAN, hybrid functionals like HSE06) impacts accuracy and computational cost. Hybrid functionals are significantly more expensive than standard GGA functionals.
- Hardware Specifications: The underlying CPU speed, memory bandwidth, and interconnect speed of the High-Performance Computing (HPC) cluster significantly influence the “Estimated Time per Electronic Step” and overall performance of any battery calculation using VASP.
Frequently Asked Questions about Battery Calculation Using VASP
Q1: What is VASP and why is it used for battery calculations?
A1: VASP (Vienna Ab initio Simulation Package) is a quantum mechanics-based program that performs ab initio electronic structure calculations. It’s used for battery calculations because it can accurately model the behavior of electrons and atoms in materials, allowing researchers to predict properties like voltage, ion diffusion, and material stability crucial for battery performance.
Q2: How accurate are VASP calculations for battery materials?
A2: VASP calculations can be highly accurate, but their precision depends on the chosen approximations (e.g., exchange-correlation functional, pseudopotentials, k-point mesh, energy cutoff) and the complexity of the system. Careful convergence testing and validation against experimental data are essential to ensure reliable results for battery calculation using VASP.
Q3: Can VASP simulate an entire battery cell?
A3: No, VASP typically simulates small, periodic unit cells or supercells (up to a few hundred atoms) of specific battery components (e.g., cathode material, electrolyte, interface). Simulating an entire battery cell with VASP is computationally intractable due to the vast number of atoms involved. Multi-scale modeling approaches combine VASP with other methods for larger systems.
Q4: What are the main computational challenges in battery calculation using VASP?
A4: The main challenges include the high computational cost for large systems or complex functionals, the need for extensive convergence testing, and the difficulty in accurately modeling long-range interactions or highly disordered systems. Simulating dynamic processes like ion diffusion over long timescales also requires significant resources.
Q5: How can I reduce the computational cost of my VASP battery simulations?
A5: You can reduce cost by: using smaller unit cells, optimizing k-point meshes, performing careful ENCUT convergence tests, choosing less expensive DFT functionals (e.g., GGA over hybrid), and optimizing parallelization for your specific hardware. Sometimes, simplifying the system or using a coarser initial relaxation can also help.
Q6: What is the role of pseudopotentials in battery calculation using VASP?
A6: Pseudopotentials (in VASP’s POTCAR files) simplify calculations by replacing the core electrons and the strong nuclear potential with an effective potential. This allows VASP to focus only on the valence electrons, significantly reducing computational cost while maintaining accuracy for chemical bonding and material properties relevant to battery calculation using VASP.
Q7: What kind of properties can I predict for battery materials using VASP?
A7: VASP can predict a wide range of properties, including: formation energies, reaction energies (for voltage prediction), diffusion barriers for ions, electronic band structure, density of states, elastic constants, phonon spectra, and surface energies. These are all critical for understanding and designing new battery materials.
Q8: Is this calculator suitable for all types of VASP calculations?
A8: This calculator provides a general estimation framework for typical VASP calculations involving structural relaxation or short molecular dynamics runs. It might not perfectly capture the nuances of highly specialized calculations (e.g., GW, RPA, or very long MD simulations) but offers a good starting point for understanding the resource demands of battery calculation using VASP.
Related Tools and Internal Resources
Explore more tools and guides to enhance your understanding and efficiency in computational materials science and battery calculation using VASP:
- DFT Simulation Guide for Beginners: A comprehensive introduction to Density Functional Theory and its applications.
- VASP K-point Optimization Tool: Optimize your k-point mesh for various crystal structures to save computational time.
- Energy Cutoff Best Practices in VASP: Learn how to properly converge your ENCUT for accurate VASP results.
- Molecular Dynamics with VASP Tutorial: A step-by-step guide to setting up and running MD simulations using VASP.
- Battery Materials Properties Database: Access a curated database of computational and experimental properties for battery materials.
- High-Performance Computing Tips for Researchers: Maximize your efficiency on HPC clusters for demanding simulations.
// For strict “no external libraries” rule, I will implement a very basic SVG chart instead.
// Re-evaluating the chart requirement: “NO external chart libraries”.
// This means I cannot use Chart.js. I need to implement a pure SVG chart.
// — SVG Chart Implementation —
var svgChartElement; // Global variable for the SVG element
function createSVGChart(canvasId, data) {
var container = document.getElementById(canvasId).parentNode;
var existingSvg = document.getElementById(‘vaspSvgChart’);
if (existingSvg) {
existingSvg.parentNode.removeChild(existingSvg);
}
var width = container.offsetWidth > 800 ? 800 : container.offsetWidth – 40; // Max 800px, or container width
var height = 400;
var padding = 60;
svgChartElement = document.createElementNS(“http://www.w3.org/2000/svg”, “svg”);
svgChartElement.setAttribute(“id”, “vaspSvgChart”);
svgChartElement.setAttribute(“width”, width);
svgChartElement.setAttribute(“height”, height);
svgChartElement.setAttribute(“viewBox”, “0 0 ” + width + ” ” + height);
svgChartElement.setAttribute(“style”, “border: 1px solid #e0e0e0; background-color: #fff;”);
// Append to container, replacing the canvas
container.insertBefore(svgChartElement, document.getElementById(canvasId));
document.getElementById(canvasId).style.display = ‘none’; // Hide canvas
var xLabels = data.labels;
var yData1 = data.datasets[0].data;
var yData2 = data.datasets[1].data;
var maxX = xLabels[xLabels.length – 1];
var maxY1 = Math.max.apply(null, yData1);
var maxY2 = Math.max.apply(null, yData2);
var maxY = Math.max(maxY1, maxY2);
// Scale functions
var xScale = function(val) { return padding + (val / maxX) * (width – 2 * padding); };
var yScale = function(val) { return height – padding – (val / maxY) * (height – 2 * padding); };
// Draw X-axis
var xAxis = document.createElementNS(“http://www.w3.org/2000/svg”, “line”);
xAxis.setAttribute(“x1”, padding);
xAxis.setAttribute(“y1”, height – padding);
xAxis.setAttribute(“x2”, width – padding);
xAxis.setAttribute(“y2”, height – padding);
xAxis.setAttribute(“stroke”, “#333”);
svgChartElement.appendChild(xAxis);
// Draw Y-axis
var yAxis = document.createElementNS(“http://www.w3.org/2000/svg”, “line”);
yAxis.setAttribute(“x1”, padding);
yAxis.setAttribute(“y1”, height – padding);
yAxis.setAttribute(“x2”, padding);
yAxis.setAttribute(“y2”, padding);
yAxis.setAttribute(“stroke”, “#333”);
svgChartElement.appendChild(yAxis);
// X-axis labels
for (var i = 0; i < xLabels.length; i++) {
var x = xScale(xLabels[i]);
var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
text.setAttribute("x", x);
text.setAttribute("y", height - padding + 20);
text.setAttribute("text-anchor", "middle");
text.setAttribute("font-size", "10");
text.textContent = xLabels[i];
svgChartElement.appendChild(text);
}
var xTitle = document.createElementNS("http://www.w3.org/2000/svg", "text");
xTitle.setAttribute("x", width / 2);
xTitle.setAttribute("y", height - 10);
xTitle.setAttribute("text-anchor", "middle");
xTitle.setAttribute("font-weight", "bold");
xTitle.textContent = "Number of CPU Cores";
svgChartElement.appendChild(xTitle);
// Y-axis labels
var numYLabels = 5;
for (var i = 0; i <= numYLabels; i++) {
var yVal = (maxY / numYLabels) * i;
var y = yScale(yVal);
var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
text.setAttribute("x", padding - 10);
text.setAttribute("y", y + 5);
text.setAttribute("text-anchor", "end");
text.setAttribute("font-size", "10");
text.textContent = yVal.toFixed(1);
svgChartElement.appendChild(text);
}
var yTitle = document.createElementNS("http://www.w3.org/2000/svg", "text");
yTitle.setAttribute("x", padding - 30);
yTitle.setAttribute("y", height / 2);
yTitle.setAttribute("transform", "rotate(-90 " + (padding - 30) + " " + (height / 2) + ")");
yTitle.setAttribute("text-anchor", "middle");
yTitle.setAttribute("font-weight", "bold");
yTitle.textContent = "Value";
svgChartElement.appendChild(yTitle);
// Draw data lines
function drawLine(dataPoints, color) {
var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
var d = "M";
for (var i = 0; i < xLabels.length; i++) {
var x = xScale(xLabels[i]);
var y = yScale(dataPoints[i]);
d += x + "," + y + (i === xLabels.length - 1 ? "" : "L");
}
path.setAttribute("d", d);
path.setAttribute("stroke", color);
path.setAttribute("stroke-width", "2");
path.setAttribute("fill", "none");
svgChartElement.appendChild(path);
}
drawLine(yData1, data.datasets[0].borderColor);
drawLine(yData2, data.datasets[1].borderColor);
// Legend
var legendX = width - padding - 150;
var legendY = padding + 10;
var legendRectSize = 10;
var legendSpacing = 5;
for (var i = 0; i < data.datasets.length; i++) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
rect.setAttribute("x", legendX);
rect.setAttribute("y", legendY + i * (legendRectSize + legendSpacing));
rect.setAttribute("width", legendRectSize);
rect.setAttribute("height", legendRectSize);
rect.setAttribute("fill", data.datasets[i].borderColor);
svgChartElement.appendChild(rect);
var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
text.setAttribute("x", legendX + legendRectSize + legendSpacing);
text.setAttribute("y", legendY + i * (legendRectSize + legendSpacing) + legendRectSize / 2 + 3);
text.setAttribute("font-size", "12");
text.textContent = data.datasets[i].label;
svgChartElement.appendChild(text);
}
}
// Initial calculation and chart draw on page load
window.onload = function() {
resetCalculator(); // This will also call calculateVASP()
// Initial SVG chart draw
createSVGChart('vaspChart', chartData);
};
// Update SVG chart function
function updateChart(numAtoms, numKPoints, encutValue, numIonicSteps, avgElecSteps, timePerElecStep, costPerCoreHour) {
var coreRange = [];
var timeData = [];
var costData = [];
var minCores = 1;
var maxCores = 128;
var stepCores = 8;
if (numCores > maxCores) {
maxCores = numCores + 32;
}
for (var cores = minCores; cores <= maxCores; cores += stepCores) {
coreRange.push(cores);
var totalElecSteps = numIonicSteps * avgElecSteps;
var totalSimTimeSeconds = totalElecSteps * timePerElecStep;
var totalSimTimeHours = totalSimTimeSeconds / 3600;
var actualSimTimeHours = totalSimTimeHours / cores;
var actualCPUCoreHours = totalSimTimeHours;
var actualEstimatedCost = actualCPUCoreHours * costPerCoreHour;
timeData.push(actualSimTimeHours); // Keep as number for SVG scaling
costData.push(actualEstimatedCost);
}
chartData.labels = coreRange;
chartData.datasets[0].data = timeData;
chartData.datasets[1].data = costData;
createSVGChart('vaspChart', chartData); // Re-draw the SVG chart
}