Casimir Force Calculator
Ideal Parallel Plates
Finite Conductivity
Thermal Effect
Note: Force is negative indicating attraction between plates.
`; } function generatePDF(forceN, inputs, tabName) { // Use jsPDF from CDN for PDF generation (loaded dynamically) if(typeof window.jspdf === "undefined") { let script = document.createElement('script'); script.src = "https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"; script.onload = () => createAndDownloadPDF(forceN, inputs, tabName); document.body.appendChild(script); } else { createAndDownloadPDF(forceN, inputs, tabName); } } function createAndDownloadPDF(forceN, inputs, tabName) { const { jsPDF } = window.jspdf; const doc = new jsPDF(); doc.setFontSize(18); doc.setTextColor('#0d47a1'); doc.text('Casimir Force Calculation Report', 14, 20); doc.setFontSize(12); doc.setTextColor('#222'); const startY = 30; const lineHeight = 10; let y = startY; const d_nm = inputs[0]; const A_cm2 = inputs[1]; const extraParam = inputs.length > 2 ? inputs[2] : null; doc.text(`Calculation Mode: ${tabName}`, 14, y); y+=lineHeight; doc.text(`Plate Separation (nm): ${d_nm}`, 14, y); y+=lineHeight; doc.text(`Plate Area (cm²): ${A_cm2}`, 14, y); y+=lineHeight; if(tabName === "Finite Conductivity") { doc.text(`Conductivity (MS/m): ${extraParam}`, 14, y); y+=lineHeight; } else if(tabName === "Thermal Effect") { doc.text(`Temperature (K): ${extraParam}`, 14, y); y+=lineHeight; } doc.text(`Calculated Force: ${(forceN * 1e9).toFixed(6)} nN (attractive)`, 14, y); y+=lineHeight; doc.setTextColor('#555'); doc.setFontSize(10); doc.text('Note: Force is negative indicating attraction between plates.', 14, y+5); doc.save('Casimir_Force_Calculation.pdf'); } calculateBtn.addEventListener('click', () => { let inputs = getInputsForTab(currentTab); if (!validateInputs(inputs)) { resultSection.textContent = 'Please enter valid positive numbers for all input fields.'; downloadPdfBtn.style.display = 'none'; return; } const d_m = nmToMeters(inputs[0]); const A_m2 = cm2ToMeters2(inputs[1]); let force = 0; let tabName = tabs[currentTab].textContent.trim(); if(currentTab === 0) { force = calculateIdealCasimirForce(d_m, A_m2); } else if(currentTab === 1) { force = calculateFiniteConductivityForce(d_m, A_m2, inputs[2]); } else if(currentTab === 2) { force = calculateThermalCasimirForce(d_m, A_m2, inputs[2]); } const forceNanoNewton = (force * 1e9).toFixed(3); resultSection.textContent = `Calculated Casimir Force: ${forceNanoNewton} nN (negative means attraction)`; downloadPdfBtn.style.display = 'inline-block'; downloadPdfBtn.onclick = () => { generatePDF(force, inputs, tabName); }; }); // Initialize activateTab(currentTab); });