{"id":100257,"date":"2026-02-15T20:30:09","date_gmt":"2026-02-15T20:30:09","guid":{"rendered":"https:\/\/vibromera.eu\/?post_type=calculator&#038;p=100257"},"modified":"2026-07-15T19:33:57","modified_gmt":"2026-07-15T19:33:57","slug":"thermal-stress-calculator","status":"publish","type":"calculator","link":"https:\/\/vibromera.eu\/da\/calculators\/thermal-stress-calculator\/","title":{"rendered":"Controlled 1D Thermoelastic Stress Check"},"content":{"rendered":"\n<style>\n#ts-tool{--ink:#17212b;--muted:#526170;--line:#d9e0e6;--soft:#f5f8fa;--accent:#8d351f;--accent-soft:#fff2ed;--ok:#17633a;--bad:#a12828;max-width:980px;margin:0 auto;padding:24px 16px 44px;color:var(--ink);font:15px\/1.6 system-ui,-apple-system,\"Segoe UI\",sans-serif}#ts-tool *{box-sizing:border-box}#ts-tool h1,#ts-tool h2,#ts-tool h3{line-height:1.22;margin-top:0}#ts-tool h1{font-size:clamp(28px,5vw,42px);margin-bottom:12px}#ts-tool h2{font-size:23px}#ts-tool h3{font-size:17px;margin-bottom:8px}#ts-tool p{margin:0 0 12px}.ts-hero{text-align:center;padding:30px 18px}.ts-eyebrow{font-size:12px;font-weight:750;letter-spacing:.12em;text-transform:uppercase;color:var(--accent)}.ts-sub{max-width:760px;margin:0 auto 18px!important;color:var(--muted);font-size:16px}.ts-badges{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}.ts-badge{border:1px solid var(--line);border-radius:999px;padding:4px 10px;background:#fff;font-size:12px;font-weight:650}.ts-card{border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:0 8px 24px rgba(20,35,50,.06);padding:24px;margin:20px 0}.ts-warning{border-left:5px solid var(--accent);background:var(--accent-soft);padding:16px 18px;border-radius:8px;margin-bottom:20px}.ts-warning strong{color:#6f2717}.ts-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.ts-field{display:flex;flex-direction:column;min-width:0}.ts-full{grid-column:1\/-1}.ts-label{font-size:13px;font-weight:720;margin-bottom:6px}.ts-hint{display:block;color:var(--muted);font-size:12px;font-weight:400}.ts-input{width:100%;border:1px solid #aeb9c3;border-radius:8px;background:#fff;color:var(--ink);font:inherit;padding:10px 12px}.ts-input:focus{outline:3px solid rgba(141,53,31,.14);border-color:var(--accent)}textarea.ts-input{min-height:78px;resize:vertical}.ts-check{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:9px;background:var(--soft);padding:12px}.ts-check input{margin-top:5px;flex:0 0 auto}.ts-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}.ts-btn{appearance:none;border:1px solid var(--accent);border-radius:8px;padding:10px 17px;font:inherit;font-weight:750;cursor:pointer}.ts-primary{background:var(--accent);color:#fff}.ts-secondary{background:#fff;color:var(--accent)}.ts-status{min-height:25px;margin-top:15px!important;font-weight:700}.ts-status[data-kind=\"error\"]{color:var(--bad)}.ts-status[data-kind=\"ok\"]{color:var(--ok)}.ts-output{display:none;margin-top:20px;border-top:1px solid var(--line);padding-top:20px}.ts-output[data-visible=\"true\"]{display:block}.ts-result-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.ts-result{border:1px solid var(--line);border-radius:10px;background:var(--soft);padding:15px;min-width:0}.ts-result strong{display:block;font-size:19px;overflow-wrap:anywhere}.ts-result span{display:block;color:var(--muted);font-size:12px}.ts-primary-result{border:2px solid var(--accent);background:var(--accent-soft)}.ts-primary-result strong{color:#6f2717;font-size:23px}.ts-note{margin-top:14px;border:1px solid var(--line);border-radius:9px;padding:13px;background:#fff;overflow-wrap:anywhere}.ts-formula{border:1px solid var(--line);border-radius:10px;background:var(--soft);padding:14px 18px;margin:12px 0;font:600 16px\/1.6 ui-monospace,SFMono-Regular,Consolas,monospace;overflow-x:auto}.ts-columns{display:grid;grid-template-columns:1fr 1fr;gap:20px}.ts-list{padding-left:21px;margin:8px 0}.ts-list li{margin-bottom:7px}.ts-source{border-top:1px solid var(--line);padding:12px 0}.ts-source:first-child{border-top:0}.ts-source a{color:#74402f;font-weight:700}.ts-small{color:var(--muted);font-size:13px}.ts-footer{text-align:center;color:var(--muted);font-size:13px;padding:18px}.ts-visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}@media(max-width:700px){.ts-grid,.ts-columns{grid-template-columns:1fr}.ts-full{grid-column:auto}.ts-card{padding:18px}.ts-hero{padding:20px 6px}}@media(max-width:430px){.ts-result-grid{grid-template-columns:1fr}}\n<\/style>\n<main id=\"ts-tool\">\n  <header class=\"ts-hero\">\n    <p class=\"ts-eyebrow\">Controlled engineering arithmetic<\/p>\n    <h1>Idealized 1D Thermoelastic Stress Check<\/h1>\n    <p class=\"ts-sub\">Evaluate the signed uniaxial linear-thermoelastic relation from controlled modulus, mean CTE, temperature change and imposed total axial strain. This is not a piping-code, pressure-vessel, rail, joint or component acceptance calculation.<\/p>\n    <div class=\"ts-badges\"><span class=\"ts-badge\">Tension positive<\/span><span class=\"ts-badge\">Signed strain<\/span><span class=\"ts-badge\">No material presets<\/span><span class=\"ts-badge\">Reference arithmetic only<\/span><\/div>\n  <\/header>\n\n  <section class=\"ts-card\" aria-labelledby=\"ts-calc-title\">\n    <h2 id=\"ts-calc-title\">Controlled-input calculation<\/h2>\n    <div class=\"ts-warning\"><strong>Do not use this scalar result as an allowable-stress or fitness-for-service decision.<\/strong> Real restraints have finite stiffness; temperature and properties may be nonuniform; local stress, multiaxiality, plasticity, creep, buckling, fatigue, joints and support movement require an appropriate structural model and governing code.<\/div>\n    <form id=\"ts-form\" novalidate>\n      <div class=\"ts-grid\">\n        <label class=\"ts-field\" for=\"ts-E\"><span class=\"ts-label\">Young&#8217;s modulus E <span class=\"ts-hint\">GPa, valid for the stated temperature and material condition<\/span><\/span><input class=\"ts-input\" id=\"ts-E\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"e.g. 200\"><\/label>\n        <label class=\"ts-field\" for=\"ts-alpha\"><span class=\"ts-label\">Mean linear CTE \u03b1\u0304 <span class=\"ts-hint\">\u00b5m\/(m\u00b7K), signed and valid over the full interval<\/span><\/span><input class=\"ts-input\" id=\"ts-alpha\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"e.g. 12\"><\/label>\n        <label class=\"ts-field\" for=\"ts-dt\"><span class=\"ts-label\">Temperature change \u0394T <span class=\"ts-hint\">K (a Celsius temperature difference has the same numerical value)<\/span><\/span><input class=\"ts-input\" id=\"ts-dt\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"e.g. 100\"><\/label>\n        <label class=\"ts-field\" for=\"ts-total\"><span class=\"ts-label\">Imposed total axial strain \u03b5total <span class=\"ts-hint\">\u00b5m\/m; enter 0 only if the modeled axial total strain is truly zero<\/span><\/span><input class=\"ts-input\" id=\"ts-total\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"e.g. 0\"><\/label>\n        <label class=\"ts-field ts-full\" for=\"ts-property-source\"><span class=\"ts-label\">Controlled E and \u03b1\u0304 source \/ condition <span class=\"ts-hint\">Record grade, heat\/temper, direction, temperature interval and source revision<\/span><\/span><textarea class=\"ts-input\" id=\"ts-property-source\" autocomplete=\"off\" placeholder=\"e.g. manufacturer material record, revision and exact condition\"><\/textarea><\/label>\n        <label class=\"ts-field ts-full\" for=\"ts-boundary-source\"><span class=\"ts-label\">Boundary and total-strain basis <span class=\"ts-hint\">Record how \u03b5total and the stress-free reference state were established<\/span><\/span><textarea class=\"ts-input\" id=\"ts-boundary-source\" autocomplete=\"off\" placeholder=\"e.g. released 1D model, restraint measurement and stress-free reference\"><\/textarea><\/label>\n        <label class=\"ts-check ts-full\" for=\"ts-confirm-properties\"><input id=\"ts-confirm-properties\" type=\"checkbox\"><span>I confirm that E and \u03b1\u0304 are controlled values for the exact material condition, direction and temperature interval, and that the evaluated state remains linear elastic.<\/span><\/label>\n        <label class=\"ts-check ts-full\" for=\"ts-confirm-model\"><input id=\"ts-confirm-model\" type=\"checkbox\"><span>I confirm that a uniform, small-strain, uniaxial thermoelastic model is appropriate and that significant gradients, multiaxial stress, local concentration, plasticity, creep, buckling, fatigue and joint\/support effects are handled elsewhere.<\/span><\/label>\n      <\/div>\n      <div class=\"ts-actions\"><button class=\"ts-btn ts-primary\" type=\"submit\">Evaluate signed relation<\/button><button class=\"ts-btn ts-secondary\" id=\"ts-reset\" type=\"reset\">Clear<\/button><\/div>\n      <p class=\"ts-status\" id=\"ts-status\" data-kind=\"\" aria-live=\"polite\">Enter controlled inputs; no example values are preloaded.<\/p>\n    <\/form>\n    <div class=\"ts-output\" id=\"ts-output\" data-visible=\"false\" aria-live=\"polite\">\n      <h3>Arithmetic result<\/h3>\n      <div class=\"ts-result-grid\">\n        <div class=\"ts-result\"><span>Thermal strain \u03b1\u0304\u0394T<\/span><strong id=\"ts-r-thermal\">\u2014<\/strong><\/div>\n        <div class=\"ts-result\"><span>Imposed total strain \u03b5total<\/span><strong id=\"ts-r-total\">\u2014<\/strong><\/div>\n        <div class=\"ts-result\"><span>Elastic\/mechanical strain \u03b5total \u2212 \u03b1\u0304\u0394T<\/span><strong id=\"ts-r-mechanical\">\u2014<\/strong><\/div>\n        <div class=\"ts-result ts-primary-result\"><span>Signed uniaxial stress \u03c3<\/span><strong id=\"ts-r-stress\">\u2014<\/strong><\/div>\n      <\/div>\n      <p class=\"ts-note\" id=\"ts-r-interpretation\"><\/p>\n      <p class=\"ts-note ts-small\" id=\"ts-r-record\"><\/p>\n    <\/div>\n  <\/section>\n\n  <section class=\"ts-card\" aria-labelledby=\"ts-method-title\">\n    <h2 id=\"ts-method-title\">Relation, signs and dimensions<\/h2>\n    <div class=\"ts-formula\">\u03b5thermal = \u03b1\u0304 \u0394T<br>\u03b5mechanical = \u03b5total \u2212 \u03b5thermal<br>\u03c3 = E \u03b5mechanical<\/div>\n    <p>With E in GPa and strains in \u00b5m\/m, the implemented output is:<\/p>\n    <div class=\"ts-formula\">\u03c3 [MPa] = E [GPa] \u00d7 (\u03b5total \u2212 \u03b1\u0304\u0394T) [\u00b5m\/m] \u00f7 1000<\/div>\n    <div class=\"ts-columns\">\n      <div><h3>Sign convention<\/h3><ul class=\"ts-list\"><li>Axial tension and extension are positive.<\/li><li>Compression and shortening are negative.<\/li><li>\u0394T = T \u2212 Tref; heating is positive.<\/li><li>For a positive CTE and truly zero total axial strain, heating gives negative (compressive) stress.<\/li><\/ul><\/div>\n      <div><h3>Dimensional check<\/h3><ul class=\"ts-list\"><li>\u03b1\u0304: \u00b5m\/(m\u00b7K)<\/li><li>\u03b1\u0304\u0394T: \u00b5m\/m<\/li><li>1 \u00b5m\/m = 10<sup>\u22126<\/sup><\/li><li>1 GPa \u00d7 10<sup>\u22126<\/sup> = 0.001 MPa<\/li><\/ul><\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"ts-card\" aria-labelledby=\"ts-scope-title\">\n    <h2 id=\"ts-scope-title\">What this does not establish<\/h2>\n    <ul class=\"ts-list\"><li>It does not determine the actual restraint strain or support stiffness.<\/li><li>It does not calculate pipe flexibility, stress intensification, nozzle loads, pressure stress, joint loads or expansion-joint behavior.<\/li><li>It does not compare the result with yield, allowable stress, fatigue, creep or code acceptance limits.<\/li><li>It does not represent a temperature gradient, bonded dissimilar materials, thick sections or a multiaxial stress state.<\/li><li>It is not an ISO formula and does not establish ASME B31.3 compliance.<\/li><\/ul>\n    <p class=\"ts-small\">A full-restraint value is the special arithmetic case \u03b5total = 0 in this uniaxial model. It is not proof that a real installation is fully fixed or that the calculated elastic stress can physically develop without relaxation, yielding, creep, slip or instability.<\/p>\n  <\/section>\n\n  <section class=\"ts-card\" aria-labelledby=\"ts-evidence-title\">\n    <h2 id=\"ts-evidence-title\">Evidence and classification<\/h2>\n    <div class=\"ts-source\"><a href=\"https:\/\/ocw.mit.edu\/courses\/2-001-mechanics-materials-i-fall-2006\/bd0c65066e01f2a16313d1903725b14d_lec14.pdf\" target=\"_blank\" rel=\"noopener\">MIT OpenCourseWare, Mechanics and Materials I, Lecture 15 (1 Nov 2006), pages 1\u20133<\/a><p>Gives thermal strain \u03b1\u0394T, total strain as elastic plus thermal strain, and the linear isotropic thermoelastic equations. Its constrained-channel example derives \u03c3xx = \u2212\u03b1\u0394TE for heating under zero axial strain and zero transverse stress.<\/p><\/div>\n    <div class=\"ts-source\"><a href=\"https:\/\/emtoolbox.nist.gov\/faq\/faq.asp\" target=\"_blank\" rel=\"noopener\">NIST Engineering Metrology Toolbox \u2014 CTE FAQ<\/a><p>Explains why material identity and the temperature range used to average CTE matter. It does not provide the former generic six-material preset table.<\/p><\/div>\n    <div class=\"ts-source\"><a href=\"https:\/\/store.astm.org\/standards\/e228\" target=\"_blank\" rel=\"noopener\">ASTM E228-22<\/a><p>Active test method for measuring linear thermal expansion of solid materials with a push-rod dilatometer. It is a property-measurement source, not a structural acceptance formula.<\/p><\/div>\n    <div class=\"ts-source\"><a href=\"https:\/\/www.asme.org\/codes-standards\/find-codes-standards\/b31-3-process-piping\" target=\"_blank\" rel=\"noopener\">ASME B31.3-2024 official catalog page<\/a><p>Process piping design includes flexibility and stress-intensification requirements. Exact code calculations and acceptance limits require the licensed governing edition and project design basis; none are reproduced or inferred here.<\/p><\/div>\n  <\/section>\n\n  <footer class=\"ts-footer\">Vibromera engineering reference \u00b7 Controlled arithmetic, not a design approval<\/footer>\n<\/main>\n<script>\n(function(){'use strict';\nfunction byId(id){return document.getElementById(id)}\nfunction parsePlain(raw,label){var s=String(raw==null?'':raw).trim();if(!\/^[+-]?(?:\\d+(?:[.,]\\d*)?|[.,]\\d+)$\/.test(s))throw new Error('Enter '+label+' as one signed plain decimal.');var n=Number(s.replace(',','.'));if(!Number.isFinite(n))throw new Error('Enter a finite '+label+'.');return n}\nfunction cleanText(raw,label){var s=String(raw==null?'':raw).trim();if(s.length<3||s.length>500||\/[\\u0000-\\u001F\\u007F]\/.test(s))throw new Error('Describe '+label+' in 3\u2013500 printable characters.');return s}\nfunction solve(E,alpha,dT,totalMicro){if(!Number.isFinite(E)||E<=0||E>10000)throw new Error('Young\\'s modulus must be greater than 0 and not exceed 10000 GPa.');if(!Number.isFinite(alpha)||Math.abs(alpha)>1000000)throw new Error('Mean CTE magnitude must not exceed 1000000 \u00b5m\/(m\u00b7K).');if(!Number.isFinite(dT)||Math.abs(dT)>1000000)throw new Error('Temperature-change magnitude must not exceed 1000000 K.');if(!Number.isFinite(totalMicro)||Math.abs(totalMicro)>100000000)throw new Error('Total-strain magnitude must not exceed 100000000 \u00b5m\/m.');var thermalMicro=alpha*dT,mechanicalMicro=totalMicro-thermalMicro,stressMPa=E*mechanicalMicro\/1000;if(![thermalMicro,mechanicalMicro,stressMPa].every(Number.isFinite))throw new Error('The supplied values exceed the computational range.');return{thermalMicro:thermalMicro,totalMicro:totalMicro,mechanicalMicro:mechanicalMicro,stressMPa:stressMPa}}\nfunction fmt(n){if(Object.is(n,-0)||Math.abs(n)<5e-13)n=0;return Number(n.toPrecision(12)).toString()}\nfunction clearOutput(message,kind){byId('ts-output').dataset.visible='false';byId('ts-status').dataset.kind=kind||'';byId('ts-status').textContent=message;['ts-r-thermal','ts-r-total','ts-r-mechanical','ts-r-stress'].forEach(function(id){byId(id).textContent='\u2014'});byId('ts-r-interpretation').textContent='';byId('ts-r-record').textContent=''}\nfunction calculate(){try{var E=parsePlain(byId('ts-E').value,\"Young's modulus\"),alpha=parsePlain(byId('ts-alpha').value,'mean CTE'),dT=parsePlain(byId('ts-dt').value,'temperature change'),total=parsePlain(byId('ts-total').value,'imposed total axial strain'),propertySource=cleanText(byId('ts-property-source').value,'the controlled property source and condition'),boundarySource=cleanText(byId('ts-boundary-source').value,'the boundary and total-strain basis');if(!byId('ts-confirm-properties').checked)throw new Error('Confirm the controlled-property and linear-elastic applicability.');if(!byId('ts-confirm-model').checked)throw new Error('Confirm the uniform uniaxial thermoelastic model boundary.');var r=solve(E,alpha,dT,total);byId('ts-r-thermal').textContent=fmt(r.thermalMicro)+' \u00b5m\/m';byId('ts-r-total').textContent=fmt(r.totalMicro)+' \u00b5m\/m';byId('ts-r-mechanical').textContent=fmt(r.mechanicalMicro)+' \u00b5m\/m';byId('ts-r-stress').textContent=fmt(r.stressMPa)+' MPa';var tol=1e-12;byId('ts-r-interpretation').textContent=Math.abs(r.stressMPa)<=tol?'The idealized signed stress is zero for the supplied relation.':r.stressMPa>0?'Positive sign denotes idealized axial tension under the declared convention.':'Negative sign denotes idealized axial compression under the declared convention.';byId('ts-r-record').textContent='Property source\/condition: '+propertySource+' | Boundary\/strain basis: '+boundarySource;byId('ts-output').dataset.visible='true';byId('ts-status').dataset.kind='ok';byId('ts-status').textContent='Signed one-dimensional thermoelastic relation evaluated.'}catch(e){clearOutput(String(e&&e.message||e),'error')}}\nbyId('ts-form').addEventListener('submit',function(e){e.preventDefault();calculate()});byId('ts-form').addEventListener('reset',function(){setTimeout(function(){clearOutput('Enter controlled inputs; no example values are preloaded.','')},0)});\nwindow.C100257Test={parsePlain:parsePlain,cleanText:cleanText,solve:solve};\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Evaluate the signed idealized uniaxial relation sigma=E(epsilon_total-alpha_bar deltaT) from controlled inputs without implying piping-code or component acceptance.<\/p>","protected":false},"featured_media":0,"template":"","meta":{"ai_generated_summary":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100257","calculator","type-calculator","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/da\/wp-json\/wp\/v2\/calculator\/100257","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibromera.eu\/da\/wp-json\/wp\/v2\/calculator"}],"about":[{"href":"https:\/\/vibromera.eu\/da\/wp-json\/wp\/v2\/types\/calculator"}],"version-history":[{"count":2,"href":"https:\/\/vibromera.eu\/da\/wp-json\/wp\/v2\/calculator\/100257\/revisions"}],"predecessor-version":[{"id":102601,"href":"https:\/\/vibromera.eu\/da\/wp-json\/wp\/v2\/calculator\/100257\/revisions\/102601"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/da\/wp-json\/wp\/v2\/media?parent=100257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/da\/wp-json\/wp\/v2\/categories?post=100257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/da\/wp-json\/wp\/v2\/tags?post=100257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}