Calculix does not use units itself, we have to use consistent unit system. I think, mm,N,s,K (Calculix 2.7 manual, page 18) should be the best choice:
Input:
Force [N]
Length [mm]
Young Modulus [MPa or N/mm^2]
Output:
Displacement [mm]
Stress [MPa or N/mm^2]
Meanwhile FreeCAD uses kPa in the material library, and forces are multiplied x1000 inside MechanicalAnalysis.py - I have no idea why. I changed, inside MechanicalAnalysis.py:
Code: Select all
Force = (ForceObject.Force * 1000.0) / NbrForceNods
Code: Select all
Force = ForceObject.Force / NbrForceNods
Code: Select all
inpfile.write('{0:.3f}, '.format(YM.Value) )
Code: Select all
inpfile.write('{0:.3f}, '.format(YM.Value/1000) )
Code: Select all
YoungsModulus=2e+08
Code: Select all
YoungsModulus=2.0e+08
The problem
No matter if vanilla FreeCAD or FreeCAD with my changes, I cannot get correct stress and displacement results. Check the file https://app.box.com/s/14giy87qvm9c0291urq0
It is an I-beam HEB100, 1000mm length. One end fixed, other end 10 000N force along Y. The results (confirmed by Z88 FEM tool) should be:
FreeCAD + Calculix gives me results different by magnitudes.Name Ix Iy Wx Wy ix iy
cm4 cm3 cm
100 HEB 450 167 90 33 4,2 2,53
Wx=90000mm^3
M=F*l=10000N*1000mm=10000000Nmm
Sig=M/W=10000000Nmm/90000mm^3=111N/mm^2=111MPa
f=F*l^3/(3*E*J)
f=10000N*(1000mm)^3/(3*206000N/mm^2*4.5*10^6mm^4)=3.6mm
Final question, why
Code: Select all
*INITIAL CONDITIONS, TYPE=STRESS, USER