static void Main(string[] args)
        {
            #region Spänning and stuffs

            #region Uppgift 1
            {
                var area  = Area.FromMilliMeters(200);
                var force = Force.FromNewtons(30000);
                var drag  = Drag.FromForceOverArea(force, area);

                Console.WriteLine("Uppgift 1 | Drag: " + drag);
            }
            #endregion

            #region Uppgift 1*
            {
                var area  = Area.FromMilliMeters(100);
                var force = Force.FromNewtons(20000);
                var drag  = Drag.FromForceOverArea(force, area);

                Console.WriteLine("Uppgift 1* | Drag: " + drag);
            }
            #endregion

            #region Uppgift 2
            {
                var square = Square.FromSideLength(Length.FromMilli(20));
                var force  = Force.FromNewtons(50000);
                var drag   = Drag.FromForceOverArea(force, square.Area);

                Console.WriteLine("Uppgift 2 | Drag: " + drag);
            }
            #endregion

            #region Uppgift 2*
            {
                var circle = Circle.FromDiameter(Length.FromMilli(1000));
                var force  = Force.FromNewtons(5 * Math.Pow(10, 6));
                var drag   = Drag.FromForceOverArea(force, circle.Area);

                Console.WriteLine("Uppgift 2* | Drag: " + Math.Round(drag.Value, 1) + " " + Drag.Unit);
            }
            #endregion

            #region Uppgift 3
            {
                var rect = Rectangle.FromSides(
                    Length.FromMilli(50), Length.FromMilli(100));

                var drag = Drag.FromDragArea(9, rect.Area);

                Console.WriteLine("Uppgift 3 | Force: " + drag.Force);
            }
            #endregion

            #region Uppgift 3*
            {
                var circle = Circle.FromDiameter(Length.FromMilli(100));
                var drag   = Drag.FromDragArea(100, circle.Area);

                Console.WriteLine("Uppgift 3 | Force: " +
                                  Math.Round(drag.Force * 2 / 1000, 1) + " " + SIPrefix.Kilo.Symbol + "N");
            }
            #endregion

            #region Uppgift 4
            {
                var force  = Force.FromNewtons(40000);
                var drag   = Drag.FromForceOverDrag(force, drag: 120);
                var circle = Circle.FromArea(drag.Area);
                Console.WriteLine("Uppgift 4 | Diameter: " + Math.Round(circle.Diameter * 1000, 1) + " mm");
            }
            #endregion

            // hoppa över 5

            #region Uppgift 5*
            {
                var originalLength = Length.FromMilli(5000);
                var strechedLength = Length.FromMilli(5100);
                var tension        = Tension.FromLengths(originalLength, strechedLength);
                Console.WriteLine("Uppgift 5* | Tension: " + tension);
            }
            #endregion

            // hoppa över 7, 8

            Console.WriteLine();

            #region Uppgift 8*
            {
                double sträckgräns       = 380;
                double brottgräns        = 480;
                double elasticitetsModul = 300 / 0.0032;

                Console.WriteLine("Uppgift 8*");
                Console.WriteLine("a) " + nameof(sträckgräns) + ": " + sträckgräns + " " + Drag.Unit);
                Console.WriteLine("b) " + nameof(brottgräns) + ": " + brottgräns + " " + Drag.Unit);
                Console.WriteLine("c) " + nameof(elasticitetsModul) + ": " + elasticitetsModul + " " + Drag.Unit);
                Console.WriteLine();
            }
            #endregion

            #region Uppgift 9
            {
                double kpUnit = 9.80665;

                Console.WriteLine("Uppgift 9");
                Console.WriteLine("a) aluminum: " + 75_000 * 0.05 / 100 + " " + Drag.Unit);
                Console.WriteLine("b) stål: " + 210_000 * 0.0013 + " " + Drag.Unit);
                Console.WriteLine("c) " + Math.Round(21 * kpUnit / 0.001) + " " + Drag.Unit);
                Console.WriteLine("d) " + Math.Round(150 / (0.073 / 100)) + " " + Drag.Unit);
                Console.WriteLine("e) " + Math.Round(100 / 120_000d * 100, 3) + "% " + Drag.Unit);
                Console.WriteLine();
            }
            #endregion

            const double stålElasticitetsModul = 210_000;

            #region Uppgift 10
            {
                // sökt: spänning
                // givet: töjning, elasticitetsmodul

                var tension = Tension.FromLengthExtension(Length.FromMeters(2), Length.FromMilli(2));
                Console.WriteLine("Uppgift 10: " + tension.Value * stålElasticitetsModul + " " + Drag.Unit);
            }
            #endregion

            #region Uppgift 11
            {
                // sökt: elasticitetsmodul
                // givet:
                //  diameter=10mm,
                //  längd=100mm,
                //  längdökning=0.1mm,
                //  kraft = 9500N

                var area    = Circle.FromDiameter(Length.FromMilli(10)).Area;
                var tension = Tension.FromLengthExtension(Length.FromMilli(100), Length.FromMilli(0.1));
                var drag    = Drag.FromForceOverArea(Force.FromNewtons(9500), area);

                Console.WriteLine("Uppgift 11: E = " + Math.Round(drag.Value / tension.Value));
            }
            #endregion

            const double kopparElasticitetsModul = 120_000;

            #region Uppgift 12
            {
                Console.WriteLine("Uppgift 12");
                // sökt: förlängning
                // givet:
                //  kraft = 10_000N
                //  stor  diameter = 30mm
                //  liten diameter = 10mm
                //  stor  längd = 40mm
                //  liten längd = 20mm

                var force = Force.FromNewtons(10_000);

                var    storArea      = Circle.FromDiameter(Length.FromMilli(30)).Area;
                var    storDrag      = Drag.FromForceOverArea(force, storArea);
                double storTension   = storDrag.Value / kopparElasticitetsModul;
                var    storLength    = Length.FromMilli(40);
                var    storExtension = Length.FromMilli(storLength * storTension);
                Console.WriteLine(
                    "Stor-förlängning = " + Math.Round(storExtension.Micro) + " " + SIPrefix.Micro.Symbol + "m");

                var    litenArea      = Circle.FromDiameter(Length.FromMilli(10)).Area;
                var    litenDrag      = Drag.FromForceOverArea(force, litenArea);
                double litenTension   = litenDrag.Value / kopparElasticitetsModul;
                var    litenLength    = Length.FromMilli(20);
                var    litenExtension = Length.FromMilli(litenLength * litenTension);
                Console.WriteLine(
                    "Liten-förlängning = " + Math.Round(litenExtension.Micro) + " " + SIPrefix.Micro.Symbol + "m");

                var totalExtensionDeci = Math.Round((storExtension + litenExtension).Micro);
                Console.WriteLine("Total förlängning = " + totalExtensionDeci + " " + SIPrefix.Micro.Symbol + "m");

                Console.WriteLine();
            }
            #endregion

            const double aluminiumElasticitetsModul = 70_000;

            #region Uppgift 12*
            {
                Console.WriteLine("Uppgift 12");
                // sökt: förlängning
                // givet:
                //  kraft = 10_000N
                //  dellängd = 300mm
                //  alum diameter = 80mm
                //  stål diameter = 40mm

                var force      = Force.FromNewtons(10_000);
                var partLength = Length.FromMilli(300);

                var    alumArea      = Circle.FromDiameter(Length.FromMilli(80)).Area;
                var    alumDrag      = Drag.FromForceOverArea(force, alumArea);
                double alumTension   = alumDrag.Value / aluminiumElasticitetsModul;
                var    alumExtension = Length.FromMilli(partLength * alumTension);
                Console.WriteLine(
                    "Alum-förlängning = " + Math.Round(alumExtension.Micro) + " " + SIPrefix.Micro.Symbol + "m");

                var    stålArea      = Circle.FromDiameter(Length.FromMilli(40)).Area;
                var    stålDrag      = Drag.FromForceOverArea(force, stålArea);
                double stålTension   = stålDrag.Value / stålElasticitetsModul;
                var    stålExtension = Length.FromMilli(partLength * stålTension);
                Console.WriteLine(
                    "Stål-förlängning = " + Math.Round(stålExtension.Micro) + " " + SIPrefix.Micro.Symbol + "m");

                var totalExtensionDeci = Math.Round((alumExtension + stålExtension).Micro);
                Console.WriteLine("Total förlängning = " + totalExtensionDeci + " " + SIPrefix.Micro.Symbol + "m");

                Console.WriteLine();
            }
            #endregion

            const double konstantanElasticitetsModul = 110_000;

            #region Uppgift 13
            {
                Console.WriteLine("Uppgift 13");
                // sökt: diameter (mm)
                // givet:
                //  kraft = 100N
                //  längd = 8mm
                //  förlängning = 0.06mm

                var    length    = Length.FromMilli(8);
                var    extension = Length.FromMilli(0.06);
                double tension   = Tension.FromLengthExtension(length, extension).Value;
                double drag      = tension * konstantanElasticitetsModul;

                var force = Force.FromNewtons(100);
                var area  = Drag.FromForceOverDrag(force, drag).Area;

                Console.WriteLine(Circle.FromArea(area).Diameter.ToString());
            }
            #endregion

            #endregion

            Console.WriteLine();

            #region Skjuvning

            const double härdplastLimDragMax = 15; //  N/mm^2

            #region Uppgift 36
            {
                var area  = Rectangle.FromSides(Length.FromMilli(50), Length.FromMilli(90)).Area;
                var skjuv = Drag.FromDragArea(härdplastLimDragMax, area);

                Console.WriteLine("Uppgift 36 | " + skjuv.Force + " innan limmet släpper");
            }
            #endregion

            #region Uppgift 36*
            {
                double maxLimDrag = 10; // N/mm^2
                var    force      = Force.FromKiloNewtons(50);
                var    area       = Drag.FromForceOverDrag(force, maxLimDrag).Area;
                var    length     = area / Length.FromMilli(60);

                Console.WriteLine("Uppgift 36* | " + Length.FromMilli(Math.Ceiling(length.Milli)));
            }
            #endregion

            #region Uppgift 37
            {
                var bredd = Length.FromMilli(30);
                var längd = Length.FromMilli(100);

                var skärArea       = Rectangle.FromSides(bredd, längd).Area;
                var limMaxSpänning = Drag.FromDragArea(härdplastLimDragMax, skärArea);

                var vänsterHöjd = Length.FromMilli(2);
                var vänsterArea = Rectangle.FromSides(bredd, vänsterHöjd).Area;
                var vänsterMaxAluminiumSpänning = Drag.FromDragArea(150, vänsterArea);

                var högerHöjd = Length.FromMilli(3);
                var högerArea = Rectangle.FromSides(bredd, högerHöjd).Area;
                var högerMaxAluminiumSpänning = Drag.FromDragArea(150, högerArea);

                var lowestForce = Drag.GetLowestForce(
                    limMaxSpänning, vänsterMaxAluminiumSpänning, högerMaxAluminiumSpänning);

                Console.WriteLine("Uppgift 37 | " + lowestForce);
            }
            #endregion

            #region Uppgift 38
            {
                var a      = Length.FromMilli(3);
                var length = Length.FromMilli(20);

                var area     = Rectangle.FromSides(a, length * 2).Area;
                var spänning = Drag.FromDragArea(200, area);

                Console.WriteLine("Uppgift 38 | " + spänning.Force);
            }
            #endregion

            #region Uppgift 38*
            {
                var    force        = Force.FromNewtonsPow(10, 5);
                double skärSpänning = 150;
                var    area         = Drag.FromForceOverDrag(force, skärSpänning).Area;
                var    svetsLängd   = Length.FromMilli(150);
                var    längd        = area / svetsLängd;

                Console.WriteLine("Uppgift 38* | " + längd);
            }
            #endregion

            #region Uppgift 39
            {
                var omkrets               = Circle.FromDiameter(Length.FromMilli(30)).Circumference;
                var svetsArea             = Rectangle.FromSides(omkrets, Length.FromMilli(5)).Area;
                var sänktTillåtenSpänning = 100 / 2d;
                var spänning              = Drag.FromDragArea(sänktTillåtenSpänning, svetsArea);

                Console.WriteLine("Uppgift 39 | " + spänning.Force);
            }
            #endregion

            #region Uppgift 40
            {
                var    kraft        = Force.FromKiloNewtons(20);
                double skärSpänning = 100;
                var    skärArea     = Drag.FromForceOverDrag(kraft, skärSpänning).Area;

                //Console.WriteLine(Math.Sqrt(skärArea.MilliMeters / 5 / 2));
                Console.WriteLine("Uppgift 40 | " + "TODO");

                // a * L
            }
            #endregion

            #region Uppgift 41
            {
                var    nitArea          = Circle.FromDiameter(Length.FromMilli(10)).Area;
                double tillåtenSpänning = 80;
                var    kraft            = Force.FromNewtons(nitArea.MilliMeters * tillåtenSpänning);

                Console.WriteLine("Uppgift 41 | " + kraft);
            }
            #endregion

            #region Uppgift 42
            {
                var    kraft            = Force.FromKiloNewtons(10);
                double tillåtenSpänning = 90;
                var    area             = Drag.FromForceOverDrag(kraft, tillåtenSpänning).Area;

                var areaFörNit  = area / 4;
                var nitDiameter = Circle.FromArea(areaFörNit).Diameter;

                Console.WriteLine("Uppgift 42 | " + nitDiameter);
            }
            #endregion

            #region Uppgift 43
            {
                var    kraft = Force.FromKiloNewtons(50);
                double tillåtenSkärSpänning = 100;
                var    totalNitArea         = Drag.FromForceOverDrag(kraft, tillåtenSkärSpänning).Area;
                var    areaFörNit           = totalNitArea / 4;
                var    nitDiameter          = Circle.FromArea(areaFörNit).Diameter;

                double ssStål_1312_00__tillåtenSpänning = 220;
                double säkerhetsFaktor       = 1.0 / 3;
                double säkerTillåtenSpänning = ssStål_1312_00__tillåtenSpänning * säkerhetsFaktor;

                var plåtSpänningsArea = Drag.FromForceOverDrag(kraft, säkerTillåtenSpänning).Area;
                var totalSkärLängd    = plåtSpänningsArea / Length.FromMilli(10);
                var skärLängd         = totalSkärLängd + nitDiameter * 2;

                Console.WriteLine("Uppgift 43 | d = " + nitDiameter + ", b = " + skärLängd);
            }
            #endregion

            #region Uppgift på tavlan :|
            {
                var    tjocklek   = Length.FromMilli(7);
                var    circle     = Circle.FromDiameter(12);
                var    area       = (Area)(circle.Circumference * tjocklek);
                double brottGräns = 360;
                var    kraft      = Drag.FromDragArea(brottGräns, area).Force;

                //Console.WriteLine("Uppgift 44 | " + kraft);
            }
            #endregion

            #region Uppgift 44
            {
            }
            #endregion

            #endregion
        }