ME 303 MANUFACTURING ENGINEERING FALL 2022-2023 HOMEWORK 1 REPORT Name, Surname: Doruk Alp Emür Student ID: 2519031 Section: 2 TABLE OF CONTENTS 1) INTRODUCTION 2) QUESTION 1 3) QUESTION 2 4) QUESTION 3 5) APPENDICES 2) INTRODUCTION In this report, three homework questions are solved in a systematic order. The details of solution approach, calculation steps, and results are explained thoroughly. When it is required, some figures are provided to make the steps more understandable. For the question 3, “Python” is selected as the main program for performing data analysis, data manipulation, and graphical representation. In the Appendices part, the source codes of question 3 is provided. 3) QUESTION 1 In the question 1, stress state of a body is given. The stress state can be expressed in a 3x3 stress matrix. ๐๐๐ฅ๐ฅ๐ฅ๐ฅ ๏ฟฝ๐๐๐ฆ๐ฆ๐ฆ๐ฆ ๐๐๐ง๐ง๐ง๐ง ๐๐๐ฅ๐ฅ๐ฅ๐ฅ ๐๐๐ฆ๐ฆ๐ฆ๐ฆ ๐๐๐ง๐ง๐ง๐ง ๐๐๐ฅ๐ฅ๐ฅ๐ฅ ๐๐๐ฆ๐ฆ๐ฆ๐ฆ ๏ฟฝ = ๐๐๐ง๐ง๐ง๐ง 20 −8 −4 ๏ฟฝ−8 10 5 ๏ฟฝ ๐๐๐๐๐๐ −4 5 −6 a) In part a, it is asked to find principal stresses of the stress state. By using the knowledge of “Strength of Material”, principal stresses in a stress matrix can be obtained by finding the eigenvalues. Moreover, the principal stress directions can be obtained from the eigenvectors. The eigenvalues and eigenvectors of a matrix can be found as follows: Define ๐ด๐ด as the stress matrix, ๐๐ as the eigenvectors, ๐๐ as the eigenvalues. ๐ด๐ด โ ๐๐ = ๐๐ โ ๐๐ (๐ด๐ด − ๐๐๐๐) โ ๐๐ = 0 (1) If the inverse of the matrix (๐ด๐ด − ๐๐๐๐) exists, it implies that the system has only one trivial solution which is ๐๐ = 0. To find a meaningful solution, the matrix should have infinitely many solutions, meaning that (๐ด๐ด − ๐๐๐๐) shouldn’t have an inversed matrix. This condition can only be satisfied with ๐๐๐๐๐๐(๐ด๐ด − ๐๐๐๐) = 0. ๐๐๐๐๐๐(๐ด๐ด − ๐๐๐๐) = 0 20 − ๐๐ ๐๐๐๐๐๐ ๏ฟฝ๏ฟฝ −8 −4 −8 10 − ๐๐ 5 −4 5 ๏ฟฝ๏ฟฝ = 0 −6 − ๐๐ (20 − ๐๐)๏ฟฝ(10 − ๐๐)(−6 − ๐๐) − 25๏ฟฝ + 8๏ฟฝ(48 + 8๐๐) + 20๏ฟฝ − 4(−40 + 40 − 4๐๐) = 0 Eigenvalues and corresponding principal stresses can be obtained from this equation: ๐๐1 = ๐๐1 = 25.556 ๐๐๐๐๐๐ ๐๐2 = ๐๐2 = 5.992 ๐๐๐๐๐๐ ๐๐3 = ๐๐3 = −7.548 ๐๐๐๐๐๐ To calculate eigenvectors, ๐๐ values that are found should be substituted into the equation (1). For ๐๐1 = 25.556 ๐๐1 can be found as: For ๐๐2 = 5.992 ๐๐2 can be found as: For ๐๐3 = −7.548 ๐๐3 can be found as: 20 − ๐๐ ๏ฟฝ −8 −4 −8 10 − ๐๐ 5 −4 5 ๏ฟฝ โ ๐๐ = 0 −6 − ๐๐ −5.556 −8 −4 ๏ฟฝ −8 ๏ฟฝ โ ๐๐ = 0 −15.556 5 −4 5 −31.556 14.008 ๏ฟฝ −8 −4 27.548 ๏ฟฝ −8 −4 0.848 ๐๐1 = ๏ฟฝ−0.496๏ฟฝ −0.186 −8 4.008 5 −4 ๏ฟฝ โ ๐๐ = 0 5 −11.992 −0.525 ๐๐2 = ๏ฟฝ−0.833๏ฟฝ −0.172 −8 −4 17.548 5 ๏ฟฝ โ ๐๐ = 0 5 1.548 0.070 ๐๐3 = ๏ฟฝ−0.244๏ฟฝ 0.967 The results obtained are tabulated in Table 1. Table 1. Results of Eigenvalue Eigenvector Calculations Principal Stresses Magnitude Direction Vector 0.848 ๏ฟฝ−0.496๏ฟฝ ๐๐๐๐ 25.556 ๐๐๐๐๐๐ −0.186 −0.525 ๏ฟฝ−0.833๏ฟฝ ๐๐๐๐ 5.992 ๐๐๐๐๐๐ −0.172 0.070 ๏ฟฝ−0.244๏ฟฝ ๐๐๐๐ −7.548 ๐๐๐๐๐๐ 0.967 b) In part b, it is asked to find orientation angles of the principal stresses with respect to the fundamental axes. The direction vectors of the principal stresses are known from the part a. We need to perform a dot product operation to calculate orientation angles. Define that fundamental axes are ๐๐, ๐๐, and ๐๐ axes, direction vectors of principles axes are ๐๐๏ฟฝ, and angle between principal axes and fundamental axes are ๐๐ ๏ฟฝ๐๐๐ฅ๐ฅ , ๐๐๐ฆ๐ฆ , ๐๐๐ง๐ง ๏ฟฝ. For ๐๐1 : For ๐๐2 : For ๐๐3 : ๐๐๏ฟฝ ๐๐๏ฟฝ ๐๐๏ฟฝ โ ๐ค๐คฬ = cos (๐๐๐ฅ๐ฅ ) โ ๐ฅ๐ฅฬ = cos (๐๐๐ฆ๐ฆ ) โ ๐๐๏ฟฝ = cos (๐๐๐ง๐ง ) ๐๐๐ฅ๐ฅ = arccos(๐๐๏ฟฝ1 โ ๐ค๐คฬ) = 31.989° ๐๐๐ฆ๐ฆ = arccos(๐๐๏ฟฝ1 โ ๐ฅ๐ฅฬ) = 119.735° ๐๐๐ง๐ง = arccos๏ฟฝ๐๐๏ฟฝ1 โ ๐๐๏ฟฝ๏ฟฝ = 100.725° ๐๐๐ฅ๐ฅ = arccos(๐๐๏ฟฝ2 โ ๐ค๐คฬ) = 121.679° ๐๐๐ฆ๐ฆ = arccos(๐๐๏ฟฝ2 โ ๐ฅ๐ฅฬ) = 146.337° ๐๐๐ง๐ง = arccos๏ฟฝ๐๐๏ฟฝ2 โ ๐๐๏ฟฝ๏ฟฝ = 99.921° ๐๐๐ฅ๐ฅ = arccos(๐๐๏ฟฝ3 โ ๐ค๐คฬ) = 86.007° ๐๐๐ฆ๐ฆ = arccos(๐๐๏ฟฝ3 โ ๐ฅ๐ฅฬ) = 104.115° ๐๐๐ง๐ง = arccos๏ฟฝ๐๐๏ฟฝ3 โ ๐๐๏ฟฝ๏ฟฝ = 14.691° Since sum of squares of direction cosines should be equal to 1, only two of the orientation angles can be expressed as an answer. The answer is tabulated in Table 2. Table 2. Results of Orientation Angle Calculations Principal Stresses ๐ฝ๐ฝ๐๐ ๐ฝ๐ฝ๐๐ ๐๐๐๐ 31.989° 119.735° ๐๐๐๐ 121.679° 146.337° ๐๐๐๐ 86.007° 104.115° c) In this part, it is asked to draw accompanying Mohr’s circle diagram for the given stress state. Mohr’s circle diagram is mainly applicable and functional when a plane stress or 2D stress state is analysed. According to textbook “Mechanics of Materials” (written by Ferdinant P. Beer, E. Russell Jonston, John T. DeWolf, David F. Mazurek, Sanjeev Sanghi), 3D state of stresses cannot be represented properly on the Mohr’s diagram. There are some other advanced techniques to turn this 2D diagram into a 3D diagram (or to represent the surface stress states by points in admissible region of the Mohr’s circle diagram); however, they are overall not efficient and practical techniques to use in complex calculations. Although it is nearly impossible to represent a 3D state of stress in Mohr’s circle diagram, the principal stresses can still be represented properly, and the maximum shear stress can be obtained. The accompanying Mohr’s circle diagram can be drawn as follows: Figure 1. Mohr’s Circle Diagram of Principal Stresses 4) QUESTION 2 The question is asked to find the money which needs to be deposited to the bank to cover future expenses. The future expenses can be found from the information given in the question: Cost of new machine after 25 years: ๐ถ๐ถ๐๐๐๐๐๐โ๐๐๐๐๐๐ = 30000 ๐๐๐๐๐๐ Future scrap value of the old machine: ๐ต๐ต๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ = 7500 ๐๐๐๐๐๐ Future total cost: ๐ถ๐ถ๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก = ๐ถ๐ถ๐๐๐๐๐๐โ๐๐๐๐๐๐ − ๐ต๐ต๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ = 22500 ๐๐๐๐๐๐ According to the question, an amount of money is deposited to the bank each month to cover future expenses. Monthly interest rate (๐๐๐๐ ) is 1%. Money is continuously deposited until the new machine is bought. First month, no money is deposited to the bank since the business with the machine (which will be older after 25 years) is just started and no money is earned. Last day of last month, the money corresponding to the next month is directly used (without interest rate); because assume that the new machine is bought in one day and no more money needs to be deposited. According to this information, this figure can be drawn: Figure 2. Money Deposited Throughout the Months In this figure, A represents the money deposited to the bank. The money earned after N months from the money (A) is deposited can be found with the following formula: ๐ด๐ด โ (1 + ๐๐๐๐ )๐๐ According to the figure 2, the money deposited in the second month is stayed 299 months in the bank. The money deposited in the third month is stayed 298 months in the bank. The money deposited in the fourth month is stayed 297 months in the bank. After the same order is extended for 300 months, the following results are obtained: ๐๐โ๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐: ๐ด๐ด โ (1 + 0.01)299 ๐๐โ๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ ๐ก๐กโ๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐: ๐ด๐ด โ (1 + 0.01)297 ๐๐โ๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐: ๐ด๐ด โ (1 + 0.01)298 ๐๐โ๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐โ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐: ๐ด๐ด โ (1 + 0.01)296 โฏโฏโฏ ๐๐โ๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ 299๐ก๐กโ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐: ๐ด๐ด โ (1 + 0.01)1 ๐๐โ๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ 300๐ก๐กโ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐: ๐ด๐ด โ (1 + 0.01)0 When the earnings are summed up, The total money earned: 299 ๏ฟฝ ๐ด๐ด โ (1 + 0.01)๐๐ ๐๐=0 The total money earned should be equal to the future expenses (๐ถ๐ถ๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก ). 299 ๐ด๐ด โ ๏ฟฝ(1 + 0.01)๐๐ = ๐ด๐ด โ ๐๐=0 1 − (1.01)299+1 = 22500 ๐๐๐๐๐๐ 1 − 1.01 ๐ด๐ด = 11.975 ๐๐๐๐๐๐ The money required to be deposited for future expenses is equal to 11.975 ๐๐๐๐๐๐ per month. 5) QUESTION 3 In the question 3, it is asked to find material properties of several materials whose tensile test data is provided as Excel files. The special names of the six materials are AA1050 Soft Aluminium, AA5182 Hard Aluminium, DC 04 Steel, CRM661 Nimonic 75, BS EN10025:S355, ZStE180. In this part, all solution steps required to find the material properties of AA1050 Soft Aluminium is explained with figures. The same calculations that are done for AA1050 are performed for the remaining 5 materials and the results of calculations are provided with figures and explanations in logical sequence. Finally, all results are tabulated in a table. To analyse and manipulate the long and complex data obtained from the Excel spreadsheet, Python programming language is used. The source codes of all calculations (for AA1050 Soft Aluminium) performed in this solution part are provided in appendix part. AA1050 Soft Aluminium To calculate material properties, these steps are implemented: First, the extensometer data in the Excell file should be corrected. Since the tensile test data is obtained from a real experiment, the initial data for extensometer is not accurate. Their values are below zero up to a point because of the extensometer sensor calibration issues. This inaccurate data should be eliminated before continuing the calculations. Then, the Excell data are imported to Python programme by using a library called “Pandas”. In the Excell data, the initial cross-section area (๐ด๐ด0 ) and gauge length (๐๐0 ) are provided as 14.48 ๐๐๐๐2 and 80 ๐๐๐๐. The raw force and extensometer data are turned into float arrays to perform further data manipulation by using the “NumPy” module of Python. Since it is needed to obtain both engineering and true stresses and strains, the following calculations are done for all array of raw data and the results are assigned to a newly defined array. ๐๐๐๐๐๐๐๐ = ๐๐๐๐๐๐๐๐ [๐๐๐๐๐๐] = [๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐][๐๐] [๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐][๐๐] = ๐ด๐ด0 14.48 ๐๐๐๐2 [๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ (โl)][๐๐๐๐] [๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ (โl)][๐๐๐๐] = ๐๐0 80 ๐๐๐๐ Assuming that the volume of the material is constant throughout the tensile test, the corresponding true stress and true strain values can be calculated from engineering definitions such that: ๐๐๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก = ๐๐๐๐(๐๐๐๐๐๐๐๐ + 1) ๐๐๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก [๐๐๐๐๐๐] = ๐๐๐๐๐๐๐๐ โ (๐๐๐๐๐๐๐๐ + 1) After all data is processed, the data graphs for Engineering Stress – Engineering Strain and True Stress - True Strain plotter graphs can be drawn. For graphical representation, “matplotlib” library of Python is used. Figure 3. Engineering Stress – Engineering Strain Data Points for Material 1 Figure 4. True Stress – True Strain Data Points for Material 1 As expected, the engineering stress – strain graph has a maximum point for UTS (Ultimate Tensile Strength) and true stress – strain graph is increasing until near the fracture region. a) In this part, it is asked to find the Young’s modulus of the material. To find Young's modulus, the slope of the elastic behaviour line should be obtained. By carefully examining the figure 3, a random point on the elastic line is defined and all data points corresponding to ๐๐๐๐๐๐๐๐ < 0.0002 are separated via coding (0.002 is a random point where the elastic behaviour still can be observed.). Then, a line is fit the data points between ๐๐๐๐๐๐๐๐ = 0 and ๐๐๐๐๐๐๐๐ = 0.0002 by using least squares method. By calculating the pseudo inverse matrix of the data, the slope of the line is obtained as 64853.36 MPa. Since the slope is equal to Young’s Modulus, Young’s Modulus value is equal to 64.853 GPa for this material. b) In this part, it is asked to find the Yield Strength of the material. Since the material has a smooth yield point (which can be observed from Figure 3.), the material doesn’t have upper and lower limits of YS. To find YS of the material, a line should be drawn on the engineering stress – strain graph with a slope of Young’s Modulus. The line should pass through 0.2% strain point on the strain axis. Since the Elastic (Young’s) Modulus is found in part (a), such a line can be created as shown: ๐๐โ๐๐ ๐๐๐๐๐๐๐๐ ๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐ ๐๐๐๐๐๐๐๐: ๐๐โ๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐ ๐ โ๐๐๐๐๐๐๐๐ ๐๐๐๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ : ๐๐ = ๐ธ๐ธ โ ๐๐ + ๐๐ 0 = ๐ธ๐ธ[๐๐๐๐๐๐] โ 0.002 + ๐๐ ๐๐ = −๐ธ๐ธ[๐๐๐๐๐๐] โ 0.002 ๐๐โ๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐ ๐๐๐๐๐๐๐๐: ๐๐(๐๐) = ๐ธ๐ธ โ ๐๐ − ๐ธ๐ธ โ 0.002 Then, the Yield Strength of the material can be found by intersecting the line with data points curve. Intersection point should give the YS value. These calculations are performed in Python and following results are obtained: Figure 5. 0.2% Offset Line and Intersection Point for Material 1 As can be seen from the Figure 5, intersection point is obtained as 30.26 MPa which corresponds to the Yield Strength of this material. c) In this part, it is asked to find the Ultimate Tensile Strength of the material. The location of the UTS can be approximately observed from the Figure 3. To find exact value, a data filtering can be performed by Python. The max data point from the stress data set is selected by a Python code. Result is obtained as follows: Figure 6. UTS Point of the Graph for Material 1 After the data analysis is performed, the UTS value is found as 83.56 MPa and the corresponding engineering stress is found as 0.29. d) In this part, it is asked to find the best fit values of K and n for the Power Law which is known as: ๐๐๐๐ = ๐พ๐พ๐๐๐๐๐๐ ๐๐ The best parameters for ๐พ๐พ and ๐๐ can be found by using the Pseudo Inverse Method (PIM). To perform this technique, the equation is needed to be linearized as shown: ๐๐๐๐๏ฟฝ๐๐๐๐ ๏ฟฝ = ๐๐๐๐๏ฟฝ๐พ๐พ๐๐๐๐๐๐ ๐๐ ๏ฟฝ ๐๐๐๐๏ฟฝ๐๐๐๐ ๏ฟฝ = ๐๐๐๐(๐พ๐พ) + ๐๐ โ ๐๐๐๐(๐๐๐๐๐๐ ) The parameters x, y, a, and b can be defined as: ๐ฆ๐ฆ = ๐๐๐๐๏ฟฝ๐๐๐๐ ๏ฟฝ ๐ฅ๐ฅ = ๐๐๐๐๏ฟฝ๐๐๐๐๐๐ ๏ฟฝ ๐๐ = ๐๐ ๐๐ = ๐๐๐๐(๐พ๐พ) Then, the equation becomes: ๐ฆ๐ฆ = ๐๐ โ ๐ฅ๐ฅ + ๐๐ The power law is mostly valid for the plastic strains (๐๐๐๐๐๐ ) in the true stress – true strain graph. Consequently, the stresses related to elastic strains are eliminated by removing the data up to ~0.002 strain. ๐๐ = ๐๐๐๐๐๐ + ๐๐๐๐๐๐ Moreover, the stresses and strains bigger than UTS point is also removed from calculations because the behaviour of the graph is generally not stable after the UTS point. The remaining data is turned into matrix form as follows: ๐ฅ๐ฅ1 ๐ฅ๐ฅ ๏ฟฝ 2 โฎ ๐ฅ๐ฅ๐๐ ๐ค๐คโ๐๐๐๐๐๐ ๐ฆ๐ฆ = ๐๐๐๐๏ฟฝ๐๐๐๐ ๏ฟฝ 1 ๐๐1 1 ๐๐ ๐๐2 ๏ฟฝ๏ฟฝ ๏ฟฝ = ๏ฟฝ ๏ฟฝ 1 ๐๐ โฎ 1 ๐๐๐๐ ๐ด๐ด๐ด๐ด = ๐ต๐ต ๐ฅ๐ฅ = ๐๐๐๐๏ฟฝ๐๐๐๐๐๐ ๏ฟฝ ๐๐ = ๐๐ ๐๐ = ๐๐๐๐(๐พ๐พ) For such a matrix system, there is no exact solution. However, the closest solution can be obtained with Pseudo Inverse Method as shown: ๐ฅ๐ฅ = (๐ด๐ด๐๐ ๐ด๐ด)−1 ๐ด๐ด๐๐ ๐ต๐ต The solution steps are implemented in the Python and the best fitted curve is drawn. The results are obtained as follows: Figure 7. Power Law Best Fit Curve for Material 1 For this material K value is obtained as 146.73 MPa and n value is obtained as 0.23. e) In this part, it is asked to find the best fit values of ๐พ๐พ and ๐๐๐๐0 for a linear line which can be represented as: ๐๐๐๐ = ๐๐๐๐0 + ๐พ๐พ๐๐๐๐๐๐ The same Pseudo Inverse Method (PIM) can be implemented to find the best fitted values. The matrix can be created as: ๐๐๐๐๐๐ โก 1 โข๐๐๐๐๐๐ 2 โข โฎ โข โฃ๐๐๐๐๐๐ ๐๐ 1 ๐๐๐๐ โค โก ๐๐ 1 โค 1โฅ ๐พ๐พ ๐๐ ๏ฟฝ๐๐ ๏ฟฝ = โข โฎ 2 โฅ โฅ 1 ๐๐0 โข โฅ โฅ 1โฆ โฃ๐๐๐๐ ๐๐ โฆ The results can be obtained with the same technique that is used in part (d) as follows: Figure 8. Linear Best Fit Curve for Material 1 For this material and this equation model, ๐พ๐พ value is obtained as 246.78 MPa and ๐๐๐๐0 value is obtained as 55.17 MPa. f) In this part, it is asked to find the best fit values of ๐พ๐พ, ๐๐, and ๐๐๐๐0 for a flow curve which can be represented as: ๐๐๐๐ = ๐พ๐พ๐๐๐๐๐๐ ๐๐ + ๐๐๐๐0 In this model, we have 3 unknowns, which implies that we cannot use simple linearization for a Least Squares Solution. A non-linear least square solution would be better to find the best fitted values for ๐พ๐พ, ๐๐, and ๐๐๐๐0 . Nonlinear curve-fitting can be performed successfully with the “scipy.optimize” module of Python. The best fitted model is defined as a function and the data is assigned in Python. The coding details can be found in the Appendices part. The results obtained by program by solving the non-linear curve fitting program are shown: Figure 9. Improved Power Law Best Fit Curve for Material 1 For this material K value is obtained as 136.94 MPa, n value is obtained as 0.30, and ๐๐๐๐0 is obtained as 17.06 MPa. ๐๐๐๐0 value is slightly smaller than the expected value which close to the YS. Overall, the results seem reasonable and consistent with the previous models. The analysis for AA1050 Soft Aluminium is completed. The same calculations are made for remaining 5 materials. The results are obtained as follows: AA5182 Hard Aluminium Figure 10. Engineering Stress – Engineering Strain Data Points for Material 2 Figure 11. True Stress – True Strain Data Points for Material 2 Figure 12. Upper and Lower Yield Stresses for Material 2 For the material, Upper and Lower Yielding points are shown in Figure 12. The 0.2% offset line method is not applicable for this kind of materials. The local maximum and local minimum data points are calculated with Python coding. The Upper Yield Point is obtained as 404.11 MPa and the Lower Yield Point is obtained as 396.66 MPa. The Young’s Modulus is obtained as 68.81 GPa. Figure 13. UTS Point for Material 2 For this material, the UTS point is obtained as 434.31 MPa. Figure 14. Power Law Best Fit Curve for Material 2 For this material K value is obtained as 436.28 MPa and n value is obtained as 0.01. Figure 15. Linear Best Fit Curve for Material 2 For this material and this equation model, ๐พ๐พ value is obtained as 1125.03 MPa and ๐๐๐๐0 value is obtained as 400.22 MPa. Figure 16. Improved Power Law Best Fit Curve for Material 2 For this material K value is obtained as 170.27 MPa, n value is obtained as 0.48, and ๐๐๐๐0 is obtained as 397.20 MPa. DC 04 Steel Figure 17. Engineering Stress – Engineering Strain Data Points for Material 3 Figure 18. True Stress – True Strain Data Points for Material 3 Figure 19. 0.2% Offset Line and Intersection Point for Material 3 For this material, Young’s Modulus is obtained as 208.84 GPa and Yield Strength is obtained as 162.83 MPa. Figure 20. UTS Point of the Graph for Material 3 For this material, the UTS point is obtained as 301.46 MPa. Figure 21. Power Law Best Fit Curve for Material 3 For this material K value is obtained as 496.38 MPa and n value is obtained as 0.19. Figure 22. Linear Best Fit Curve for Material 3 For this material and this equation model, ๐พ๐พ value is obtained as 637.78 MPa and ๐๐๐๐0 value is obtained as 232.24 MPa. Figure 23. Improved Power Law Best Fit Curve for Material 3 For this material K value is obtained as 458.09 MPa, n value is obtained as 0.44, and ๐๐๐๐0 is obtained as 145.71 MPa. CRM661 Nimonic 75 Figure 24. Engineering Stress – Engineering Strain Data Points for Material 4 Figure 25. True Stress – True Strain Data Points for Material 4 Figure 26. 0.2% Offset Line and Intersection Point for Material 4 For this material, Young’s Modulus is obtained as 124.82 GPa and Yield Strength is obtained as 312.34 MPa. Figure 27. UTS Point of the Graph for Material 4 For this material, the UTS point is obtained as 761.14 MPa. Figure 28. Power Law Best Fit Curve for Material 4 For this material K value is obtained as 1554.85 MPa and n value is obtained as 0.34. Figure 29. Linear Best Fit Curve for Material 4 For this material and this equation model, ๐พ๐พ value is obtained as 2095.62 MPa and ๐๐๐๐0 value is obtained as 446.41 MPa. Figure 30. Improved Power Law Best Fit Curve for Material 4 For this material K value is obtained as 1758.51 MPa, n value is obtained as 0.65, and ๐๐๐๐0 is obtained as 290.76 MPa. BS EN10025:S355 Figure 31. Engineering Stress – Engineering Strain Data Points for Material 5 Figure 32. True Stress – True Strain Data Points for Material 5 Figure 33. Upper and Lower Yield Stresses for Material 5 The Upper Yield Point is obtained as 479.36 MPa and the Lower Yield Point is obtained as 432.12 MPa. The Young’s Modulus is obtained as 229.64 GPa. Figure 34. UTS Point of the Graph for Material 5 For this material, the UTS point is obtained as 567.19 MPa. Figure 35. Power Law Best Fit Curve for Material 5 For this material K value is obtained as 758.93 MPa and n value is obtained as 0.08. Figure 36. Linear Best Fit Curve for Material 5 For this material and this equation model, ๐พ๐พ value is obtained as 448.83 MPa and ๐๐๐๐0 value is obtained as 568.01 MPa. Figure 37. Improved Power Law Best Fit Curve for Material 5 For this material K value is obtained as 528.15 MPa, n value is obtained as 0.46, and ๐๐๐๐0 is obtained as 462.12 MPa. ZStE180 Figure 38. Engineering Stress – Engineering Strain Data Points for Material 6 Figure 39. True Stress – True Strain Data Points for Material 6 Figure 40. Upper and Lower Yield Stresses for Material 6 The Upper Yield Point is obtained as 270.06 MPa and the Lower Yield Point is obtained as 231.94 MPa. The Young’s Modulus is obtained as 205.41 GPa. Figure 41. UTS Point of the Graph for Material 6 For this material, the UTS point is obtained as 318.86 MPa. Figure 42. Power Law Best Fit Curve for Material 6 For this material K value is obtained as 462.13 MPa and n value is obtained as 0.11. Figure 43. Linear Best Fit Curve for Material 6 For this material and this equation model, ๐พ๐พ value is obtained as 634 MPa and ๐๐๐๐0 value is obtained as 271.38 MPa. Figure 44. Improved Power Law Best Fit Curve for Material 6 For this material K value is obtained as 375.19 MPa, n value is obtained as 0.46, and ๐๐๐๐0 is obtained as 224.09 MPa. All results obtained can be tabulated in a single table as shown: MATERIALS YOUNG’S MODULUS YIELD STRENGTH(S) ULTIMATE TENSILE STRESS AA1050 SOFT ALUMINIUM 64.85 GPa 30.26 MPa 83.56 MPa 68.80 GPa UYP = 404.11 MPa LYP= 396.66 MPa AA5182 HARD ALUMINIUM 434.31 MPa DC 04 STEEL 208.84 GPa 162.83 MPa 301.46 MPa CRM661 NIMONIC 75 124.82 GPa 312.34 MPa 761.14 MPa BS EN10025:S355 ZSTE180 229.64 GPa 205.41 GPa UYP = 479.36 MPa LYP= 432.12 MPa UYP = 270.06 MPa LYP= 231.94 MPa 567.19 MPa 318.86 MPa ๐๐๐๐ = ๐ฒ๐ฒ๐บ๐บ๐๐๐๐ ๐๐ ๐๐๐๐ = ๐๐๐๐๐๐ + ๐ฒ๐ฒ๐บ๐บ๐๐๐๐ ๐๐๐๐ = ๐ฒ๐ฒ๐บ๐บ๐๐๐๐ ๐๐ + ๐๐๐๐๐๐ ๐พ๐พ= 436.28 MPa ๐๐= 0.01 ๐พ๐พ= 1125.03 MPa ๐๐๐๐0 = 400.22 MPa ๐พ๐พ= 170.27 MPa ๐๐= 0.48 ๐๐๐๐0 = 397.20 MPa ๐พ๐พ= 146.73 MPa ๐๐= 0.23 ๐พ๐พ= 496.38 MPa ๐๐= 0.19 ๐พ๐พ= 1554.85 MPa ๐๐= 0.34 ๐พ๐พ= 758.93 MPa ๐๐= 0.08 ๐พ๐พ= 462.13 MPa ๐๐= 0.11 ๐พ๐พ= 246.78 MPa ๐๐๐๐0 = 55.17 MPa ๐พ๐พ= 637.78 MPa ๐๐๐๐0 = 232.24 MPa ๐พ๐พ= 2095.62 MPa ๐๐๐๐0 = 446.41 MPa ๐พ๐พ= 448.83 MPa ๐๐๐๐0 = 568.01 MPa ๐พ๐พ= 634 MPa ๐๐๐๐0 = 271.38 MPa ๐พ๐พ= 136.94 MPa ๐๐= 0.30 ๐๐๐๐0 = 17.06 MPa ๐พ๐พ= 458.09 MPa ๐๐= 0.44 ๐๐๐๐0 =145.71 MPa ๐พ๐พ=1758.51 MPa ๐๐= 0.65 ๐๐๐๐0 =290.76 MPa ๐พ๐พ=528.15 MPa ๐๐= 0.46 ๐๐๐๐0 = 462.12 MPa ๐พ๐พ=375.19 MPa ๐๐= 0.46 ๐๐๐๐0 =224.09 MPa 6) APPENDICES In this part, the Python source code related to the AA1050 Soft Aluminium calculations and graphs is provided. import pandas as pd import matplotlib.pyplot as plt from scipy.optimize import curve_fit import numpy as np import math import warnings data = pd.read_csv("AA1050_plate_tensile_test_data.csv", delimiter=';') #Given data points as arrays force_kN = data["Force [kN]"].values #in kN force = force_kN * 1000 #in N elongation = data["Extensometer_corrected [mm]"].values #in mm area = 14.48 #in mm length_0 = 80 #in mm #Calculations l_over_l0 = (elongation+length_0)/(length_0) true_strain = np.log(l_over_l0) eng_strain = elongation/length_0 eng_stress = force/area #in MPa true_stress = eng_stress*(eng_strain + 1) #in MPa #print(true_strain) #print(eng_strain) #print(eng_stress) #Plot the eng stress-strain data scatter plt.scatter(eng_strain, eng_stress, color = "red", s = 5, label='Data Points') plt.xlabel('Engineering Strain') plt.ylabel('Engineering Stress [MPa]') plt.title('Engineering Stress - Engineering Strain Data Points') plt.legend() plt.grid(True) plt.show() #Plot the eng stress-strain curve plt.plot(eng_strain, eng_stress, label="Data Curve") plt.xlabel('Engineering Strain') plt.ylabel('Engineering Stress [MPa]') plt.title('Engineering Stress - Engineering Strain Curve') plt.legend() plt.grid(True) plt.show() #Curve Fitting for Elastic Modulus #for values between 0 - 0.0002 [eng strain] #0.0002 is arbitrarily selected for the Hooke's Law line #Find the first strain value bigger than 0.0002 for i in range(len(eng_strain) - 1): if eng_strain[i] > 0.0002: eng_strain_elastic = eng_strain[1: i+1] eng_stress_elastic = eng_stress[1: i+1] break #Define a function to fit the data def func(x, a, b): return a * x + b popt, pcov = curve_fit(func, eng_strain_elastic, eng_stress_elastic) # Get the coefficients of the fitted curve a_fit, b_fit = popt E = a_fit / 1000 #Elastic Modulus in GPa print("Elastic Modulus:",E) #Plot the eng stress-strain curve with elastic curve plt.plot(eng_strain, eng_stress, label="Data Curve") #Point Intersection Code # #desired_x = 0.0002 #desired_index = np.abs(eng_strain - desired_x).argmin() #desired_y = eng_stress[desired_index] # #plt.scatter(desired_x, desired_y, color='red', label=f'Point at x={desired_x} y={desired_y}') #Line Intersection Code # #eng_strain_half = eng_strain[1: int(len(eng_strain)/2)] # #line_slope = 1000 #line_intercept = 0 #line_y = line_slope * eng_strain_half + line_intercept # #plt.plot(eng_strain_half, line_y, color='green', label='Test Line') # # #intersection_points = [] #for i in range(len(eng_strain_half) - 1): # if (eng_stress[i] - line_y[i]) * (eng_stress[i + 1] - line_y[i + 1]) <= 0: # # If the signs of the y differences change, there's a potential intersection # x_intersect = (eng_strain_half[i] + eng_strain_half[i + 1]) / 2 # Midpoint interpolation # y_intersect = (eng_stress[i] + eng_stress[i + 1]) / 2 # intersection_points.append((x_intersect, y_intersect)) # #intersection_points = np.array(intersection_points).T #plt.scatter(intersection_points[0], intersection_points[1], color='green', label='Intersection Points') #Find the first strain value bigger than 0.002 for i in range(len(eng_strain) - 1): if eng_strain[i] > 0.002: eng_strain_half = eng_strain[i: i+80] eng_fit_index = i-1 break line_slope = E*1000 #in MPa line_intercept = E*1000*(-0.002) line_y = line_slope * eng_strain_half + line_intercept plt.plot(eng_strain_half, line_y, color='red', label=f'0.2% Offset Line with Slope E={E:.2f}GPa') intersection_points = [] for i in range(len(eng_strain_half) - 1): if (eng_stress[i+eng_fit_index] - line_y[i]) * (eng_stress[i + 1+eng_fit_index] - line_y[i + 1]) <= 0: # If the signs of the y differences change, there's a potential intersection x_intersect = (eng_strain_half[i] + eng_strain_half[i + 1]) / 2 Midpoint interpolation y_intersect = (eng_stress[i+eng_fit_index] + eng_stress[i+1+eng_fit_index]) / 2 intersection_points.append((x_intersect, y_intersect)) intersection_points = np.array(intersection_points).T YS = format(intersection_points[1, 0], ".2f") YS_raw = intersection_points[1, 0] print("Yield Stress:",intersection_points[1, 0]) YS_eng_strain = intersection_points[0, 0] plt.scatter(intersection_points[0], intersection_points[1], color='red', label=f'Intersection Point (YS={YS}MPa)') plt.xlabel('Engineering Strain') plt.ylabel('Engineering Stress [MPa]') plt.title('Engineering Stress - Engineering Strain Curve') plt.legend() plt.grid(True) plt.show() #Code for finding UTS point max_eng_stress_index = np.argmax(eng_stress) max_eng_stress = eng_stress[max_eng_stress_index] max_eng_strain = eng_strain[max_eng_stress_index] print("Ultimate Tensile Stress:", max_eng_stress) print("Engineering Strain at UTS:", max_eng_strain) max_eng_stress_r = format(max_eng_stress, ".2f") max_eng_strain_r = format(max_eng_strain, ".2f") plt.scatter(max_eng_strain, max_eng_stress, color = "red", label=f"UTS Point (UTS={max_eng_stress_r} MPa, Eng. Strain={max_eng_strain_r})") plt.plot(eng_strain, eng_stress, label="Data Curve") plt.xlabel('Engineering Strain') plt.ylabel('Engineering Stress [MPa]') plt.title('Engineering Stress - Engineering Strain Curve') plt.legend() plt.grid(True) plt.show() #Plot the true stress-strain data scatter plt.scatter(true_strain, true_stress, color = "red", s = 5, label='Data Points') # plt.xlabel('True Strain') plt.ylabel('True Stress [MPa]') plt.title('True Stress - True Strain Data Points') plt.legend() plt.grid(True) plt.show() #Plot the true stress-strain curve plt.plot(true_strain, true_stress, label="Data Curve") plt.xlabel('True Strain') plt.ylabel('True Stress [MPa]') plt.title('True Stress - True Strain Curve') plt.legend() plt.grid(True) plt.show() #Curve fitting for True Stress First Equation #Since we are calculating the plastic behaviour, we need to #eliminate the data related to elastic region #new zero strain is where the plastic strain starts for i in range(len(true_strain) - 1): if true_strain[i] > math.log(YS_eng_strain + 1): true_plastic_strain = true_strain[i::] meaningful_true_stress = true_stress[i::] true_plastic_strain = true_plastic_strain - (math.log(YS_eng_strain + 1)) break #fracture region is removed meaningful_true_stress_calc = meaningful_true_stress[:-120:] true_plastic_strain_calc = true_plastic_strain[:-120:] warnings.filterwarnings('ignore') #to prevent overflow warning # Define a function to fit the data def func1(x, a, b): return a * x**b #Fit the curve to the data popt, pcov = curve_fit(func1, true_plastic_strain_calc, meaningful_true_stress_calc) #Get the coefficients of the fitted curve a_fit1, b_fit1 = popt #Generate points for the curve fit x_fit1 = np.linspace(0, true_strain[-1], 300) y_fit1 = func1(x_fit1, a_fit1, b_fit1) K1 = format(a_fit1, ".2f") n1 = format(b_fit1, ".2f") print("First Equation:"," K:",a_fit1," n:",b_fit1) plt.plot(x_fit1, y_fit1, color = "red", label=f"Power Law K={K1}MPa n={n1}") #plt.scatter(true_strain, true_stress, s = 5, label='Data Points') plt.scatter(true_plastic_strain, meaningful_true_stress, s = 5, label='Data Points') plt.xlabel('True Plastic Strain') plt.ylabel('True Stress [MPa]') plt.title('True Stress - True Plastic Strain Power Law Best Fit Curve') plt.legend() plt.grid(True) plt.show() #Curve fitting for True Stress Second Equation for i in range(len(true_strain) - 1): if true_strain[i] > math.log(YS_eng_strain + 1): true_plastic_strain = true_strain[i::] meaningful_true_stress = true_stress[i::] true_plastic_strain = true_plastic_strain - (math.log(YS_eng_strain + 1)) break #fracture region is removed meaningful_true_stress_calc = meaningful_true_stress[:-744:] true_plastic_strain_calc = true_plastic_strain[:-744:] # Define a function to fit the data def func2(x, a, b): return a * x + b #Fit the curve to the data popt, pcov = curve_fit(func2, true_plastic_strain_calc, meaningful_true_stress_calc) #Get the coefficients of the fitted curve a_fit2, b_fit2 = popt #Generate points for the curve fit x_fit2 = np.linspace(0, true_strain[-1], 300) y_fit2 = func2(x_fit2, a_fit2, b_fit2) K2 = format(a_fit2, ".2f") sigma2 = format(b_fit2, ".2f") print("Second Equation:"," K:",a_fit2," sigma_0:", sigma2) plt.plot(x_fit2, y_fit2, color = "red", label=f"Linear Relation K={K2}MPa $ \u03C3_0$={sigma2}MPa") plt.scatter(true_plastic_strain, meaningful_true_stress, s = 5, label='Data Points') plt.scatter(true_plastic_strain_calc, meaningful_true_stress_calc, s = 5, color = "red", label='Data Points') plt.xlabel('True Strain') plt.ylabel('True Stress [MPa]') plt.title('True Stress - True Strain Linear Relation Best Fit Curve') plt.legend() plt.grid(True) plt.show() #Curve fitting for True Stress Third Equation #Since we are calculating the plastic behaviour, we need to #eliminate the data related to elastic region #new zero strain is where the plastic strain starts for i in range(len(true_strain) - 1): if true_strain[i] > math.log(YS_eng_strain + 1): true_plastic_strain = true_strain[i::] meaningful_true_stress = true_stress[i::] true_plastic_strain = true_plastic_strain - (math.log(YS_eng_strain + 1)) break #fracture region is removed meaningful_true_stress_no_fructure = meaningful_true_stress[:-300:] true_plastic_strain_no_fructure = true_plastic_strain[:-300:] #print(true_strain) #print(true_stress) #print(meaningful_true_strain) #print(meaningful_true_stress) warnings.filterwarnings('ignore') #to prevent overflow warning # Define a function to fit the data def func3(x, a, b, c): return a * x**b + c #Fit the curve to the data popt, pcov = curve_fit(func3, true_plastic_strain_no_fructure, meaningful_true_stress_no_fructure) #Get the coefficients of the fitted curve a_fit3, b_fit3, c_fit3 = popt #Generate points for the curve fit #We will only take the plastic part of the curve x_fit3 = np.linspace(0, true_strain[-1], 500) y_fit3 = func3(x_fit3, a_fit3, b_fit3, c_fit3) K3 = format(a_fit3, ".2f") n3 = format(b_fit3, ".2f") sigma3 = format(c_fit3, ".2f") print("Third Equation:"," K:",a_fit3," n:",b_fit3," sigma_0:", sigma3) plt.plot(x_fit3, y_fit3, color = "red", label=f"Improved Power Law K={K3}MPa n={n3} $ \u03C3_0$={sigma3}MPa") #plt.scatter(true_plastic_strain_calc, meaningful_true_stress_calc, s = 5, label='Data Points') plt.scatter(true_plastic_strain, meaningful_true_stress, s = 5, label='Data Points') plt.xlabel('True Strain') plt.ylabel('True Stress [MPa]') plt.title('True Stress - True Strain Improved Power Law Best Fit Curve') plt.legend() plt.grid(True) plt.show()