COMPUTATIONAL ENGINEERING Thesis Work

ARIANE 5 NOZZLE Heat transfer & Structural mechanics by the finite element method 1

ABSTRACT As a pedagogical work in computational engineering, the Ariane 5 nozzle is studied with the finite element method. Temperature, displacement and stress fields are computed using Matlab in steady and transient state. Nonlinearities such as radiation, temperature-dependent properties and displacement-load interaction are included in the code. The thermal expansion is also taken in count. Thermomechanical coupling is discussed but not performed. Structural dynamics results are provided through the modal superposition analysis.

KEYWORDS

Computational engineering

Heat transfer

Finite element method

Nonlinear analysis

Solid mechanics

Matlab

2

TABLE OF CONTENTS INTRODUCTION...............................................................4 SYSTEM DESCRIPTION....................................................5 BASICS OF PHYSICS.........................................................7 THE FINITE ELEMENT METHOD...................................10 THE CODE.......................................................................15 SYSTEM MODELISATION...............................................16 Heat transfer................................................................................18 Solid mechanics...........................................................................26

GLOBAL RESULTS.........................................................38 CONCLUSION.................................................................38

APPENDIX Code #1...........................................................................39 Code #2...........................................................................57 Code #3...........................................................................78 Code #4...........................................................................87 Code #5.........................................................................102 Code #6.........................................................................113 BIBLIOGRAPHY............................................................129

3

1. INTRODUCTION This section introduces the subject and expose what is precisely expected as a deliverable work. During my study in a multidisciplinary engineering school at EIGSI in La Rochelle, France, it became clear to me that I wanted to become a mechanical engineer. Besides, I would like to work abroad during my career, that is why I decided to study at the Mechanical Engineering Department of the Blekinge Institute of Technology in Karlskrona, Sweden. More specifically, my professional goal is to perform scientific calculus in a Research & Development office. This led me to choose a thesis work in computational engineering, in order to improve significantly my knowledge of the so-called finite element method, which is one of the major way to perform scientific calculus. Indeed, finite element codes are very widely used in the industry nowadays, but even though it is quite easy to make a code running, it is even easier to make a mistake and/or misunderstand the results. Without a good knowledge of basic physics, finite element and numerical mathematics, it is hard to be critical regarding the results and, thus, it can be extremely hazardous to â€œtrustâ€? the computer. That is why I wanted to perform a finite element simulation code by myself in order to see how this really works and face the problems from the inside. As a subject, it was decided with my tutor Ansel BERGHUVUD that I should study the temperature, displacement and stress fields in the nozzle of a rocket engine. As an example, it was decided to study the nozzle of the Ariane 5 main engine called Vulcan, but this work can, of course, be easily generalized to any rocket nozzle. This work offers many interests. It is indeed a typical R&D-like subject, as the nozzle is exposed to extremely severe temperature and mechanical conditions that could lead to its failure, while the nozzle should remain as light as possible. Technically, it implies working in axisymmetric 3D, seeking for both scalar and vectorial fields which may be coupled, leading to a multiphysics numerical simulation that could be performed in both steady and transient state. Besides, the system behavior appears to be nonlinear in several ways, leading to a very consequent physical and mathematical situation. The main goal of this work is to provide a Matlab finite element code which should be able to simulate the physical behavior of the nozzle. It shall then be used as an engineering tool in order to make technological choices about the nozzle structure. It is of course a very complicated subject that can not be completely fulfilled by a single student. This means that, in fact, this thesis work should be treated in a pedagogical approach and should involved consequent approximations. Anyway, like the whole Physics, engineering is about approximations. The main thing is that those approximations have to remain relevant in order to provide reliable results. This is the real goal of the present work: create a relevant model of a real structure, capable of simulating its behavior, leading to an engineering tool that could be used to take technological decisions. The objectives are to compute temperature, displacement and stress fields in steady and transient state with Matlab codes. Nonlinearities due to radiation, temperature-dependent conductivity and displacement-dependent pressure should be included. Natural frequencies are expected and should lead to structural dynamics results. Thermomechanical coupling is expected. 4

2. SYSTEM DESCRIPTION This section describes the Vulcan engine and discusses the involved physics. The Ariane 5 launcher is powered by two big solid rocket boosters and the cryogenic Vulcan engine, delivering a total thrust of about 900 tons. The Vulcan engine by itself provides a 120 tons thrust (see fig. 1). Its nozzle is parabolic shaped, with a maximum diameter of 1.3 meter. As a result of the combustion of liquid nitrogen and oxygen running at very high speed, this nozzle is exposed to 3500Â°C gases at a 120 bars pressure. That is why the nozzle is made of a very special metallic alloy called Inconel. This alloy offers excellent mechanical skills (very close to the steel, if not even better) and a very high fusion point around 1200Â°C, often used in the aerospace industry since its first use on the hypersonic X-15 spatial plane created by the NASA in the 1950's. It is a remarkable alloy but this is clearly not enough to resist in such extremely severe conditions. That is why, like in any such system, the Ariane 5 nozzle structure is made of very small square pipes where the cryogenic Fig.1 â€“ The Vulcan engine liquid nitrogen is running, allowing to remove a lot of energy from the nozzle, cooling it at an acceptable temperature. This smart cooling system has another interest: when the nitrogen arrives in the combustion chamber, it has already been heated, making its ignition easier. This system can thus preserve the nozzle form melting destruction and also improves the energetic output.

2.1. Heat transfer The heating is due to forced convection between the nozzle surface and the hot gases running at very high speed of thousands kilometers per hour in both laminar and turbulent flow. This will result in a very strong and spatially-dependent convection coefficient. But there is also another source of heat transfer: radiation. The very hot flow is not only giving energy to the nozzle by just running on it at high-speed, it is also emitting energy. Radiation can often be neglected in engineering because of the low temperature of most physical systems, but at such high temperature, it cannot be neglected anymore. And, unfortunately, radiation is depending on the temperature at its fourth power, making the radiation heat transfer very strongly nonlinear. This has a dramatic mathematical meaning. But radiation is definitely not the only source of nonlinearity in this system. Indeed, due to the very hot gases and the extremely cool nitrogen, the system is exposed to a very important temperature gradient, and the heat conductivity is a function of the temperature, making the temperature a function of... itself! Just like the radiation, this phenomenon can usually be neglected in classical engineering by assuming this coefficient to be a constant, but under such strong variations, this assumption may be dangerous here and temperature-dependence should be taken in count. Depending on the results, we may come back to a constant, but it is much safer to consider it as a variable to begin with. Studying the problem in transient state can be interesting as we fear that the maximum temperature may not be reached in steady but in transient state. Besides, this will provide 5

us information about the history of the system, which can be critical for some mechanical phenomenon.

2.2. Solid mechanics After those heat transfer considerations, we should take a look at the mechanical problem we have here. First, by nature, it is no longer a simple scalar problem but a vectorial one. Indeed, unlike the temperature which is a single value at each point, the displacements and stresses are oriented: they are vectors, containing several components at each point. This results in a much bigger problem and special technical considerations in the finite element method. Then when the deflection is great, we may have a problem with the force: the pressure is always perpendicular to the surface it acts on, thus when the surface moves, the pressure moves with it, making the problem nonlinear again. Besides, the mechanical properties of the metal, just like its thermal ones, are not constant. The stiffness for instance may depend on the strain, making the deflection a function of itself and, again, a nonlinear problem. But this kind of strain-dependence is sometimes even more complicated: the Young modulus is often not a simple reversible function of the strain, but an irreversible one with a hysteresis cycle. That is, the deflection is not only a function of itself but of its history. This can make the transient state interesting, just as discussed above. From a technical point of view, the stiffness nonlinearity is called a material-nonlinearity, while the one due to the moving force is called a geometric-nonlinearity. In transient state, we may study the structural dynamics and observe how the nozzle can oscillate. Calculating the eigen frequencies is absolutely critical, as if the nozzle is excited at one of those, it will enter in resonance that can lead to unbounded amplitude vibrations which may render the rocket uncontrollable or even destroy the nozzle.

2.3. Multiphysics It is very clear that the Inconel, as strong as it is, must be affected by the temperature. Indeed, we have the thermal expansion phenomenon: like any metal, the Inconel will expand on heated areas and will retract on cooled ones. Then, the hotter it is, the less stiff it is. That is why the temperature field will have an effect on the nozzle deflection. We have here an interaction between heat transfer and solid mechanics, but the question is: is there a retro action? Does the deflection have an effect on the temperature too? Unfortunately yes, of course. The deflection, by modifying the geometry, must have an effect on how the heat is spreading in it. In fact, the real question is: if the deflection is small, can we neglect this feed-back effect? Here is the real engineer work. Considering the feed-back, it will make the problem a thermomechanical coupled one. To solve it, we have to make a multiphysics simulation which is, of course, far more complicated to solve or, at least, requiring considerably more computational effort. That is why, if the deflection appears to be small, we can neglect the coupling and come back to an uncoupled problem. Solving the temperature first, and then the mechanics, with no feedback, is of an enormous engineering value, by saving considerable computational effort. The ultimate answer depends practically on the required accuracy of the results.

6

3. BASICS OF PHYSICS In this section we remind some basics of physics in heat transfer and solid mechanics. This will makes the following finite element calculations and procedures easier to understand.

3.1. Heat transfer 3.1.1. Conduction Conduction is the transfer of thermal energy through a solid or a fluid, due to temperature gradient. This transfer occurs at the molecular and atomics levels, with shock exchange of energy, without net mass motion of the material. For an isotropic material, which the Inconel is, the heat transfer is described by the empiric law of Fourier: q = −k ∇ T Where q is the rate of heat flow per unit area and T is the temperature. The minus sign comes from the fact that the heat flow occurs from warmer to colder regions. In transient state with heat generation, the equation turns to: ∇ ²T

Q 1 ∂T = ∂t k

Where α is the the thermal diffusivity, being =

k with c the heat capacitance. c

3.1.2. Convection Convection is the transfer of thermal energy through a fluid due to motion of the fluid. The energy transfer from one fluid particle to another occurs by conduction, but thermal energy is transported by the motion of the fluid. There is forced convection when this transfer is caused by external meaning such as a fan or a pump, and there is free or natural convection when the fluid motion is caused by density differences in the fluid, differences caused by thermal expansion. Free convection is in fact a heat transfer problem coupled with a fluid mechanical one, and thus it becomes very complicated. In our nozzle problem, it appears that, due to very high speed of gases inside and outside, we encounter only forced convection, which is quite lucky. Considering this, the convection equation is rather simple: q = h T S −T

Where TS is the outside exchange temperature, assumed to be constant. It is not true of course, due to heat exchange, but except in a very thin boundary layer this assumption is relevant, besides, the real problem remains in the convection coefficient h which is very difficult to 7

Fig.2 – Laminar and turbulent flow

determinate. A common way to obtain it is using non dimensional parameters. This coefficient will depend on the velocity and whether the flow is turbulent or laminar, and it appears that we have both cases in the nozzle: laminar in the top half and turbulent in the bottom half (see fig.2). Anyway, the code will be able to deal with any mathematical form of coefficient, it is just seen as a value in the tool code. It is possible to make this value whatever the user needs, and it can be recomputed for each finite element if necessary. The convection equation can become nonlinear if the convection coefficient appears to be temperature-dependent.

3.1.3. Radiation Radiation is the heat transfer of thermal energy between two locations by an electromagnetic wave. Unlike conduction and convection, radiation does not need any material to go through, as it is an electromagnetic wave, it can even pass through a perfect vacuum. Another very specific property is the fact that radiation heat exchange depends on the temperature raised at its fourth power. This makes the problem very strongly nonlinear and results in a very intense heat exchange when the temperature increases. Besides, it appears that the electromagnetic waves can be either absorbed or re-emitted and this will strongly depends on the geometry of the considered locations. The concept of black body is basic to the study of radiation heat transfer. A black body is roughly a very simple body in its radiative behavior: it is a perfect emitter at every wavelength in every direction and also a perfect absorber. There is a practical formulation which suits well to our problem and this is the most commonly used for this kind of heat transfer problem: q = T 41 −T 42 Where ε is the emissivity which measures how well a body can radiate energy as compared to a black body. The emissivity of a real surface is a very complicated function of the wavelength, surface temperature, surface roughness and surface material. In the code it will be of course quite simplified, even if we will sometimes see it as a function of the temperature. The other parameter is σ, which is the Stefan-Boltzmann constant.

3.2. Solid mechanics 3.2.1. Stress A state of stress exists in a body acted upon by external forces. There are two types of forces: the ones that act on surface, not surprisingly called surfaces forces, and the ones that act on the entire volume, called body forces. Hydrostatic pressure is a typical surface force, while gravitational force is a typical body force. There are 6 stress components: 3 normal ones denoted σx, σy and σz and 3 shear ones denoted τxy, τyz and τzx.

8

3.2.2. Strain The strains ε and γ are, respectively, the unit elongation and the unit angle distortion, and can be expressed as follows: xi =

∂ ui ∂ xi

xy =

∂u ∂v ∂x ∂x

These formulae are valid only for small displacements, more exact strain-displacement relations contain higher order terms of differentiation. One of the solid mechanics constitutive formulae is the Hooke's law, describing the stressstrain proportional relation, which can be expressed as follows in matrix notation: {σ} = [C] {ε} Where the proportionality matrix C is called the material matrix or modulus matrix, containing the Young's modulus E and the Poisson's ratio ν. The first one describes the stiffness of the material and is homogeneous to a pressure, while the second one describes the volume variation due to elongation and is dimensionless.

3.2.3. Thermal effects Materials are often affected by the temperature, resulting in expansion or contraction. This can be expressed as a thermal strain as follows:

{}

T 0 T 0 {T }= T 0 0 0 0

Where α is the thermal expansion coefficient and T0 is the unexpanded temperature.

9

4. THE FINITE ELEMENT METHOD This section presents the global aspects and procedures of the finite element method. There are some elements of its history and we expose its different formulations. We will emphasize on how to deal with boundary conditions.

4.1. Introduction The finite element method is a very powerful way to solve partial differential equations. It is a numerical analysis technique for obtaining approximate solutions to a wide variety of engineering problems. It was originally developed by Boeing and the NASA in the 1950's for structural mechanical analysis, and this mechanical origin remains in some of the finite element notations. It has been since successfully extended to the whole physic, from electricity to heat transfer and fluid dynamics. The physical governing equations are generally impossible to solve analytically without extremely simplifying assumptions which lead to serious inaccuracies or even completely wrong answers. The finite element method is a piecewise approach on very small elements that can be put together in many ways, allowing the representation of every exceedingly complex shape that can be encountered. The finite element discretization reduces any continuum problem with an infinite number of unknowns to one of a finite number, by dividing the solution region into elements and by expressing the unknown field in terms of assumed approximating functions within each element. The approximating functions express the solution in terms of the values of the field variable at specified points called nodes. Once these are known, the interpolation functions define the field variable throughout the assemblage of elements. In essence, the finite element method offers a way to solve a complex continuum problem by allowing us to subdivide it into a series of simpler interrelated problems: it gives a consistent technique for modeling the whole as an assemblage of discrete parts â€“ the socalled finite elements. The â€œwholeâ€? may be a body of matter or a region of space in which some phenomenon of interest is occurring, such as stress field in airframe structures or water velocity field around a submarine. The whole finite element approach is the following: 1. Discretize the continuum: There are lots of elements and we should choose the type(s) that better suits to our problem. The number of elements will dictate the solution accuracy and, linked, its difficulty to solve.

2. Select interpolation functions: They are usually polynomials and their order will depend on the type of element and some continuity requirements imposed at nodes and elements boundaries.

3. Find the element properties: We need to determinate the matrix and vector equations expressing the physical properties of the individual elements (mass, stiffness, conductivity, and so on). These can be found using physical approach such as the minimization of the energy of by some others mathematical approach.

10

4. Assemble element properties into the global system equations: To find the properties of the overall system we must assemble all its parts.

5. Impose boundary conditions: As we are dealing with differential equations, we must set boundary and/or initial conditions in order to completely determinate our system. Mathematically speaking, this results in making the global matrix nonsingular.

6. Solve the system equations: The finite element method leads to a set of algebraic equations expressed by a matrix formulation. This system has to be computer-solved.

4.2. Formulations 4.2.1. Direct approach This approach is the simplest one and is based upon physical meaning. Indeed, it is sometimes possible to use direct physical reasoning to establish the element equations in terms of pertinent variables. This approach allows us to derive element equations for simple systems such as springs, beams, truss, one-dimensional heat flow, fluid and electrical networks, and so on. Unfortunately, this intuitive method is limited to simple problems and therefore cannot handle with any kinds of systems.

4.2.2. Variational interpretation The variational approach relies on both physical and mathematical reasoning. We start with a physical overview of the system which leads to the expression of its potential energy. This energy can be elastic, kinetic, and thermal and so on, and will always be minimum. Thus, once the energy is expressed as a function of pertinent variables, we can pursue with the mathematical analysis in order to minimize this function. This approach relies of course on differentiation and leads to the equilibrium state which is the expected solution.

4.2.3. Weighted residuals The weighted residual method by Galerkin's criteria is a generalized mathematical approach for the finite element formulation. First, we assume the general functional behavior of the dependent field variable in some way as to satisfy the given differential equation and boundary conditions. Substitution of this approximation function into the differential equation and boundary conditions then results in some error called a residual. This residual is required to vanish in some average sense over the entire solution domain. We then have to solve the resulting equation and thereby specialize the general functional form to a particular function, which becomes the approximate solution sought.

4.3. Discretization The meshing operation is the spatial discretization of the domain. It is very important in many ways. The number of elements will dictate the accuracy and the difficulty to solve the problem in terms of computational effort.

11

It is obvious that a finer mesh will provide more accurate results than a coarse mesh, but refining the meshing increases the computational requirements (power, memory, time). That is why, in practical, we should use a well-balanced mesh between accuracy and computational effort, as the accuracy doesn't increase linearly with the number of elements. On the contrary, the accuracy increases lower and lower whereas the number of equations increases with the square of the nodes number.

4.4. Assemblage Once we have computed the element equations, we have to assemble them to form a complete set governing the whole composite of elements. This is done using numeration of local and global nodes in order to know where is located each element. This approach allows us to know where each elementary matrix component should be placed in the global matrix. This is done using compatibility, meaning that the solution field must be the same for two elements at their node junction. The resulting global matrix is banded: it has its nonzero terms clustered about its main diagonal, and outside the band all terms are zero. Consequently, this matrix is sparse because it is not fully populated. This is because each element has relatively very few nodes compared to all the system nodes and only a few elements share each node. This banded effect is of a great mathematical value because that kind of matrix is much more easily treated in numerical solvers. The numeration during the meshing has a considerable effect on the bandwidth, which is why meshing must be done with care in order to improve its mathematical efficiency. Another interesting feature is that the global matrix is often symmetric, a property that can be used to save considerable computer storage.

4.5. Boundary conditions After the assemblage, the matrix system looks like this:

[

K 11 K 21 K 31 K 41

K 12 K 22 K 32 K 42

K 13 K 14 K 23 K 24 K 33 K 34 K 43 K 44

]{ } { } x1 F1 x2 = F 2 x3 F3 x4 F4

K is for instance the mechanical stiffness matrix, while x is the displacement solution vector and F is the load vector. In this form, it is not possible to solve x by inverting K because it is singular: its determinant is zero. The physical reason is that if no displacement is specified, there are an infinite number of solutions. The unique solution we are looking for is the one that, of course, satisfies this system but boundary conditions must also be specified. Indeed, K must be modified according to these boundary conditions to render it nonsingular. For instance, let's assume that we know the system's behavior at nodes 1 and 3: the displacement is specified as: x1 = î‚¸1 and

x3 = î‚¸ 3 12

There are numbers of ways to apply these boundary conditions, and when they are applied, the number of equations to solve is reduced. However, it is most convenient to introduce the nodal values in a way that leaves the original number of equations unchanged. This may sound strange as reducing this number should reduce the number of operations to perform, but in fact it is far better to leave the number of equations unchanged, because it avoids major restructuring of the matrix and, doing so, of computer storage. It is far easier to code, it saves computational procedures and storage and, at the end, even if all the equations still hold, the ones that could have been removed are significantly simplified. The following approaches can be found in most of finite element books.

4.5.1. Penalization method One convenient way to perform this is to modify certain diagonal terms of K. Diagonal coefficients associated with prescribed values are multiplied by a very large number, 1015 for instance, while the corresponding term in F is replaced by its specified value multiplied by the same large factor times the corresponding diagonal term. We should follow with our example to clarify this:

[

K 11⋅1015 K 21 K 31 K 41

K 12 K 13 K 22 K 23 K 32 K 33⋅1015 K 42 K 43

K 14 K 24 K 34 K 44

]{ } { } x1 1⋅K 11⋅1015 x2 = F2 x3 3⋅K 33⋅10 15 x4 F4

To see that this procedure gives the desired result, consider the first equation of the set: K 11⋅1015⋅x1 K 12⋅x 2 K 13⋅x 3 K 14⋅x 4=1⋅K 11⋅1015 For all practical purposes, this equation expresses the fact that: K 11⋅1015 ≫ K 1j ⇔ x 1≃ β 1 This method is called the penalization method, as some coefficients are penalized versus other ones, due to the very large multiplication factor. Yet this penalization procedure works well, we preferred to use another method.

4.5.2. Direct method The direct method is sometimes called the brutal method. “Brutal” because, in this approach, we do not “prefer” coefficients against others by a large factor, we directly erase some coefficients and set others to 1. With our example, the direct methods results in:

[

1 0 0 0

0 K 22 0 K 42

0 0 1 0

0 K 24 0 K 44

]{ } {

}

x1 1 x 2 = F 2 −K 21⋅1 −K 23⋅3 x3 3 x4 F 4 −K 41⋅1 − K 43⋅ 3

13

Computer coding is a little harder for this method but it leads to the exact solution and not an approximation, since we have: 1⋅x 1= 1 ⇔ x 1 =1 instead of

x1 ≃1

This is the method chosen in the code. Anyway, both procedures preserve the sparse, banded and usually symmetric properties of the original master matrix, which are of an enormous mathematical value for computer solving.

4.5.3. Dirichlet and Von Neumann conditions There are two types of boundary conditions: the ones that prescribes the field in itself, and the ones that prescribes its derivative. In the matrix formulation, the field in itself is a “true” boundary condition (Dirichlet condition, left hand-side), while its derivative is generally not, because it is just included in the load vector (Von Neumann condition, righthand side). Mathematically, in steady-state, only a Dirichlet condition can help us modify the master matrix to render it nonsingular, even though is it not always obvious to set such conditions. For instance, in heat transfer, it can be hazardous to set an assumed temperature because it is surely about to change, due to heating or cooling. Assuming a constant known temperature is of course convenient, even absolutely necessary from a mathematical point of view, but it is not always the most relevant. Indeed, in heat transfer, we study the temperature field variation which is dictated by heat load on the right-hand side, making the Von Neumann condition quite more relevant than the Dirichlet one. Unfortunately, Von Neumann condition is not enough to make the master matrix singularity vanish, we need to know a boundary temperature somehow. A way to overcome this difficulty – and make use of the more relevant condition – is to study the transient state of the system. In this procedure, we can know for sure the Dirichlet initial condition and, then, applying the Von Neumann loading condition, we can obtain a realistic solution without assuming any possibly hazardous constant temperature. We just have to begin with a temperature, which can even be arbitrary, no matter: the system will naturally tend to the real equilibrium. Of course, if we only need a steady-state solution, this method requires consequent additional work to obtain it through the transient one. Studying the transient state or not in this case is a typical engineering choice, involving desired relevance and accuracy, time, price, resources, and so on.

14

5. THE CODE The present finite element code is made with Matlab language, which is very similar to C++ with extremely efficient built-in mathematical tools and functions. Meaning MATrix LABoratory, Matlab is a very powerful software to compute matrices and, knowing that almost everything can be seen as a matrix, this makes Matlab a very powerful calculation tool for any engineering domain. The finite element method makes an extensively use of matrices. The extremely repetitive assemblage procedures are very simply performed using one of the algorithmic basics: the loop. This is the main routine widely used in the code, to perform assemblage, matrix filling, time marching, residuals minimizing, and so on. We developed many codes, but only the most interesting ones are given in the final appendix. They provide results for transient nonlinear heat transfer and for static nonlinear solids mechanics. Indeed, structural dynamics was not successfully achieved, but natural frequencies and mode shapes are still computed in the solid mechanics part. There are lots of comments through the code, making it as easy to understand as possible, even though every routine algorithm is not always explicated. For instance, the assemblage requires quite a lot of incremented variables which are left in the code without real explanation but it shouldn't darken any of the main procedures. This code is supposed to be an engineering calculation tool. That is why it is quite flexible. It is possible for instance to change the profile of the nozzle, modify the pipes dimensions or to change any of the material properties and/or of the environment (initial and surrounding temperatures, heat exchange coefficients, pressure intensity, and so on). For nonlinearities, it is possible to imagine any type of dependences – hoping that the mathematical method used to solve it will be efficient, of course. In fact, the code is really quite flexible, but it hasn't any graphical interface, neither any input requirements. It has just to be run. This means that, even though it is flexible, it is not always extremely “userfriendly”: if one needs to change any parameters, this will have to be done directly in the code before running it. This can seem quite tough, but this code is supposed to be used by someone who knows what he is doing. Besides, the main goal of this thesis work is to learn the finite element method, and not to program any graphical interface. These are two extremely different things and, as we are studying engineering by the finite element method, we emphasized on the calculation code and not on any cool-but-beyond-of-thescope graphical interface. Nevertheless, it doesn't mean that the code is hard to run and only provides highly complex and impossible to understand austere tables of values. On the contrary: post-processing is a very important aspect in computational engineering. Indeed, if the results are not presented in a clear manner, is extremely hard – if not to say impossible – to judge them and to get a clear idea of what is happening. That is why we made lots of efforts in order to provide clear and easy to understood graphics, with quite nice 3D and/or colored representations. It is even possible to make movies just for the fun. Our major reference will be The finite element method for engineers – 4th edition, from Huebner, Dewhirst, Smith and Byrom. The authors derive all elementary matrices and vectors formulations that suit extremely well to our system (heat transfer, solid mechanics, axisymmetry, radiation, and so on). That is why we are going to make an extensive use of their extremely helpful results. A number into brackets will indicate the page of this book where the results are picked from.

15

6. SYSTEM MODELING In this section we emphasize on the nozzle's meshing. We also introduce the finite elements we are using in the code, giving the shape functions and presenting a convenient way to carry out integrations of these functions over the elements.

6.1. Meshing and elements We have a parabolic nozzle full of square pipes. The approach to mesh this geometry is to make use of its axial symmetry. Indeed, considering cylindrical coordinates, nothing in our problem will depend on θ, as the geometry and the loading are not function of it. In fact, this is not completely true, due to the fact that the pipes are not just simple rings. In reality, they form a helix, so their z altitude coordinate should be a function of θ, but this angle is so small that we can neglect it. As a result, we shall represent our domain with axisymmetric triangular ring elements and analyze the problem not as a three-dimensional, but only as a twodimensional. Thus, the problem becomes considerably easier as we do not deal with real 3D. We assume that all pipes are perfectly welded to each other. For our problem, we used the simplest 2D element possible: the 3-nodes triangle. Both second-order heat transfer and solid mechanics equations require only C0 continuity, allowing us to use very simple linear shape functions. This will be of a great value later, saving numerical integration and isoparametric Jacobian transform. The mesh is done by hand for a single square pipe (see fig.3) and the whole nozzle is then automatically generated. The parabolic shaped is then applied by a simple shift (see fig.4-5-6). We tried lots of different meshing, from only 16 elements per pipe to more than 300. We could roughly compare accuracies and discrepancies and we finally used different meshes of about 90 elements with around 60 nodes. Unfortunately, even with the simplest mesh possible, the Matlab code couldn't deal with the whole 256 pipes structure, even though we used a powerful computer equipped with 2 gigabytes of RAM. From a pedagogical point of view, this is not a problem as the main goal 16

Fig.3 – One of the meshing used – 96 elements per pipe

Fig.4 – Nozzle parabolic profile

Fig.5 – Zoom – Revealing pipes

remains to create a model, whatever the number of pipes is. As said before, the nozzle has a parabolic profile. It is made of 256 square pipes of 6 mm height and 4 mm width. These parameters (equation profile, number and dimensions of pipes) can of course be changed anytime in the code. For such a 3-nodes triangular toroid element (see fig.7), whose nodes coordinates are r1-2-3 and z1-2-3 , we have the following shape functions: 1 a b r c1 z 2 1 1 1 N 2 r , z = a b rc 2 z 2 2 2 1 N 3 r , z = a b r c3 z 2 3 3 N 1 r , z =

Fig.6 – Zoom – Revealing nodes

Where Δ is the area of the element:

∣ ∣

1 r1 z1 1 = 1 r 2 z2 2 1 r3 z3 and: a 1 = r 2 z 3 −r 3 z 2 a 2 = r 3 z 1−r 1 z 3 a 3 = r 1 z 2 −r 2 z 1

b1 = z2− z3 b 2 = z 3 −z 1 b 3 = z 1− z 2

c1 = r 3−r 2 c 2 = r 1−r 3 c3 = r 2−r 1

[154-155]

Fig.7 – Axisymmetric triangular toroid ring element

Integration There is a convenient formula for integrating shape functions over the area of a triangular element. The following approach will be used extensively for later integrations:

∬S

N 1 N 2 N 3 dS =

2 ! ! ! [156] 2!

Now that we have defined our shape matrix, its derivative and that we have a convenient way to perform integrations, we can go through our physical problem. We shall begin with heat transfer.

17

6. 2. Heat transfer In this section we are deriving all elementary vectors and matrices required to compute the temperature field in the nozzle. We are beginning with steady-state analysis, dealing with radiation nonlinearity with the substitution method. We then derive transient-state analysis by the recurrence approach with the Crank-Nicholson formula. 6.2.1. Steady-state resolution Starting from the energy equation, the weighted residual approach for steady-state heat transfer problem leads to: [ [Kc] + [Kh] ] {T} = {Qh} + {Qσ} Where Kc is the heat conductivity matrix, Kh is the convection matrix, Qh is the convection heat load vector and Qσ is the radiative heat load vector, defined as follows: [Kc] = ∫∫∫ [B] T k [B] dV [Kh] = ∫∫ h {N} [N] dS {Qh} = ∫∫ h Te {N} dS {Qσ} = ∫∫ - σεTS 4 {N} dS With N the shape function vector for a scalar problem: [N ] = [ N1

N2

N 3]

[]

N1 {N } = N 2 N3

Matrices and vectors The space derivative of N is the B matrix:

[ ]

∂ N1 ∂r ∂ N1 [ B r , , z ] = ∂ ∂ N1 ∂z

∂ N2 ∂r ∂ N2 ∂ ∂ N2 ∂z

∂ N3 ∂r ∂ N3 ∂ ∂ N3 ∂z

thus [ B] =

[

1 b 1 b 2 b3 2 c1 c2 c3

]

[all results in this page refers to 348-355]

18

While B contains only constant terms, its integration over the element will be a simple multiplication. The element lies in the r–z plane and the integrations are carried out in cylindrical coordinates, meaning: dV =2 r dr dz

dS =2 r ds

Where s is the length coordinate measured along the sides of a triangular cross section. As a result, from [362]: [ KC] =

r1 r 2r 3 [ B]T k [ B] 3

[K h] =

hl 12 3 r 1r 2 r 1 r 2 12 r 1r 2 r 1 3 r 2

{R h } =

hT e l 12 2 1 6 1 2

[

]

[ ]{ } r1 r2

The convection coefficient h is a very complex physical entity. It is quite difficult to determinate its value, besides, it can depend on lot of parameters. It is possible to calculate it analytically, using a computational fluid dynamics (CFD) simulation but this is clearly beyond the scope of this work. It can also be determinate by practical measurements or, approximately, using some non dimension parameters such as Prandtl or Nusselt numbers. Anyway, the code can deal with any value of this coefficient. The program can even compute and apply a different h value to each element. For instance, the gas flow is laminar in the top half of the nozzle and turbulent in the bottom half. This should clearly affect the convection coefficient, which is why the code uses a different coefficient for each profile. Turbulence considerably increases heat transfer (see fig.8).

Fig.8 – Turbulent and laminar effects on the temperature field

19

Now we should come to the Qσ radiative heat exchange vector, but in fact it will not be necessary. The next section emphasizes on this point and will again rely on The finite element method for engineers. Dealing with radiation The Qσ radiative load vector will not be computed. Indeed, as radiative heat transfer is nonlinear, we have to find a way to deal with it, and the chosen solution does not require this vector. The approach is to include the radiative heat transfer in the convection vector and matrix. In fact, we introduce a new global heat exchange coefficient hg, including both convection and radiation. This new coefficient hg is the sum of the convection one (h) and of another temperature-dependent coefficient hr : h g = h hr

This new coefficient must of course result in an equivalent radiative heat exchange, thus we make it a function of the TS temperature, as follows: h r [T S ] = T 2S T 2r T S T r To see that this procedure gives the desired result, let's consider the following: h r [T S ]⋅T S −T r = T 2S T 2r T S T r T S −T r = T 4S −T 4r [381]

This is exactly the expected equivalent radiative heat transfer at the fourth power. This approach clearly shows that the radiative load vector is no longer necessary, it is simply replaced by a new temperature-dependent global heat exchange coefficient, which is included in both Kh matrix and Qh vector. Emissivity is usually also function of the temperature. The code is also dealing with temperature-dependent heat conductivity, computed with an average temperature over each element. Considering previous considerations about radiation, our equation becomes: [ [Kc] + [Kg(T)] ] {T} = {Qg(T)} Where we have the same elements as before, with Kg and Qg being respectively the temperature-dependent global heat exchange matrix and load vector, including both convection and radiation. We get: [ K T ] {T } = {Q T } We cannot simply solve this system by inverting K because T becomes a solution of itself. Nonlinear algorithm There are several methods to solve nonlinear problems. A very powerful and commonly used one is the Newton-Raphson method. This method is powerful because it is a sophisticated method, using first-order Taylor expansion to precisely follow the variations of the solution using a tangent matrix. Unfortunately, this method is quite hard to code, 20

that is why we tried another one, much simpler and therefore much easier to code. This method is called the substitution method as it is a very simple convergence approach where we simply recompute the system with the solution of the previous iteration, that is: m 1

[ K T m ] {T }

= {Q T m }

There is no way to make this easier and, fortunately, this method works quite well for our problem. The iteration process is stopped when the desired accuracy is reached. This desired accuracy can of course be modified and is expressed in percent of difference between two successive iterations.

Fig.9 – Convergence's behavior

Theses differences are first strongly decreasing and then tend toward zero slower and slower, which is typically what to be expected (see fig.9).

Boundary conditions In steady-state, we cannot set load condition, but only temperature conditions. The most relevant way to make it in our case is to set the pipe boundaries to the liquid nitrogen temperature. Of course this is not true because, due to the heating, the temperature of these surfaces, and even of the liquid, should rise. Anyway, we are dealing with high-speed cryogenic liquid nitrogen, meaning a very strong convection coefficient. We can then assume that the inner surface of a pipe is held at the liquid nitrogen's temperature. Finally we can determinate our temperature field in the whole structure. The fig.10 shows the result for the first pipe. Fig.10 – Temperature profile in a single pipe

21

6.2.2. Transient-state resolution The transient-state problem is much more complicated than the steady-state one, as it now involves non-zero time derivative. Taking in count our previous considerations about radiation and relying on [356], the main transient-state heat transfer equation is: [C ][ T˙ ][ [ K c ][ K g ] ] {T } = {Q g } [C] = ∫∫∫ ρc {N} [N] dV Performing the integral leads to: c [C ] = 60

[

6 r 12 r 2 2 r 3 2 r 1 2r 2r 3 2 r 1r 22 r 3 sym 2 r 16 r 2 2 r 3 r 1 2 r 22 r 3 sym sym 2 r 12 r 2 6 r 3

]

[362]

There are two ways to solve this problem, using recurrence formulation or modal superposition. The recurrence approach is a direct numerical integration in time, that is to say, finding the solution Tn+1 from a previous solution Tn and a previous derivative dTn/dt. The mode superposition consists in finding the eigenvalues and eigenvectors of the problem, in order to uncouple the system and write the solution as a linear superposition of the response in each mode. Once the system is uncoupled, it is much easier to solve, but first finding eigenvalues still requires a lot of computational efforts. Besides, for a firstorder equation as we have now, the modes have no clear physical interpretation. They exist only as mathematical quantities, not as real physical entities, making their use less intuitive. Anyway, modal superposition is fundamentally a linear approach, thus it doesn't hold for our nonlinear system. That is why we are going to use a recurrence method. Recurrence formula There is a large set of algorithms that relies on time-marching methods, which mean solving a set of algebraic equations at each time step Δt. Some algorithms are unconditionally stable, which is extremely comfortable, preventing hazardous solutions. We used the unconditionally stable CrankNicholson method, which gives [366-367]:

[ K ] {T }n1 = {Q }n Where:

[ K ] = 1 [ K ] 1 [C ] 2

{Q}n = −

t

1 1 [K ] [C ]⋅{T }n {Q}n 2 t

Fig.11 – Average transient temperature

22

Unlike in steady-state, we can now use much more realistic boundary conditions, by setting initial boundary conditions. These are effectively known (being Tinit = Tout) and we can then apply the heat load, without having to assume any hazardous constant temperature. Henceforth, the whole temperature field can change, leading to a much more reliable result. The transient solution is averaged in the whole structure. We obtain a typical exponential response like any heated system until the steady-state (see fig.11). Nonlinear algorithm Bearing in mind that the problem is nonlinear because K and Q (and even possibly C) are function of T, we must combine two loop algorithms, one for time marching, and another one for nonlinear solving, as follows: −

1 1 1 1 [ K T mn1 ] [C T mn1 ]⋅{T }m1 [ K T mn1 ] [C T mn1 ]⋅{T }n {Q T mn1 } n1 = − 2 t 2 t

The m loop is for minimizing residuals from nonlinearities, while the n loop is for timemarching: for each time step n, the solution Tn+1 is in fact approached by iterations of T m+1. During this residual minimization, the previous time step solution Tn must, of course, remain constant. The total algorithm is: 1. Initialize Tm = Tinit 2. For each n time step: 3. a. Set Tn=Tm b. For each m correction loop: -Compute K, C and Q as functions of Tm -Calculate Tmplus as a function of Tm and Tn -Set Tm = Tmplus

The convergence criteria is calculated and treated as before. An interesting thing is its behavior as a function of the time step. It is obvious that, when the time step is very small, the properties of the system do not have the time to change a lot, making them nearly constants. That is why nonlinearities are decreasing for small time steps. This is a very interesting thing, because this means that a nonlinear problem could be treated as a linear one if we are using a very small time step. In this procedure, temperature-dependences are becoming time-dependences. All the elements should be recomputed at each time step, but the correction loop for nonlinearities can then be neglected. The three following picture show this phenomenon very clearly: for a desired accuracy, the number of iterations increases with the time step (see fig.12-13-14). In the code, we are using linear temperature-dependence for conductivity and emissivity. The code user can of course modify this very easily if any other type of dependence is required (exponential, polynomial, and so on).

23

Fig.12 – Small time step: only 3 iterations are required

Fig.13 – Longer time step: 7 iterations are now required to reach the same accuracy

Fig.14 – Very long time step: 25 iterations are now required

>>> Results review As the main goal remains to create a tool code, its physical behavior must be checked. There are 4 codes: linear and nonlinear for both steady and transient states. The steady-state codes are working quite well. Results are clear and reasonable. The temperature never exceeds the one of the hot gases even with an extremely strong exchange coefficient: the heating shut down at the equilibrium, just as expected. The extremes are correct regarding of the heating, cooling and geometry. The maximum can be reduced by a factor of 2 if the radiation is disabled, which is a very strong fall that should effectively be expected, regarding to the natural intensity of radiation. When the Fig.15 – Strange hot peak nozzle is made perfectly cylindrical, we observe perfect symmetry of the temperature field. All those elements make theses steady-state codes, if not perfect, at least quite reasonable with no major conceptual mistakes. The transient state seems quite good, providing interesting results about convergence, leading to temperature or time-dependence considerations. Unfortunately, the temperature extremes are not at the expected locations. There is sometimes an 24

unexpected temperature hot peak (see fig. 15). There is also a strange cooled zone near to the hot gas which is clearly not what to be expected (see fig.16). However, this cooling phenomenon is extremely brief and should be seen as a typical transient finite element discrepancy. Indeed, the mesh is quite coarse and cannot always allow a realistic behavior due to the average error inherent to the finite element approach. Sometimes, we also observe an unbounded increase, over passing the hot gases temperature, which is not physically possible. It is not very surprising because, being very simple, the substitution method cannot handle every nonlinear Fig.16 â€“ Strange cooled area situations. Under some circumstances, it cannot deal with divergence effects. Maybe we ought to have used the Newton-Raphson method which is known as a very robust and reliable nonlinear method. Another problem with this transient state code is that its steady-state solution reached after a long enough time is not really the same as the one given by the steady-state code. This is very probably due to the fact that we are using completely different boundary conditions depending on steady or transient states.

25

6. Solid mechanics In this section we derive all vectors and matrices required to calculate the displacement and stress fields in the nozzle due to heating and pressure loading. Static deflection is performed, as well as structural dynamics with the modal superposition approach. Nonlinearities due to displacementdependent pressure are performed with the substitution method. 6.3.1. Equilibrium Before studying the transient-state structural dynamics, we should study the simple mechanical equilibrium problem, in order to determinate the whole deflection of the nozzle. With this displacement field, we shall then calculate the stress field. These are extremely common study: the basics in structural engineering are indeed to check the resistance of the system and its shape deflection. The variational approach, by minimizing the potential energy of a mechanical system leads to the following finite element formulation for equilibrium: [ K ] {u} = {F } [223-237] Where u is the displacement vector, K the stiffness matrix and F the load vector, defined as:

{}

{u }= u r uz

(there is no displacement in θ)

[K] = ∫∫∫ [B] T [C] [B] dV {F} = {F0} + {FB} + {FT} With C the elastic modulus matrix. F0 is the initial force vector (due to thermal strain for instance), FB is the body force (gravity) and FT is the surface force (pressure for instance), defined as: {F0} = ∫∫∫ [B] T [C] {ε0} dV

where {ε0} is the initial strain vector

{FB} = ∫∫∫ [N] T [Fb] dV {FT} = ∫∫ [N] T [Ft] dS For boundary conditions, we will use fully clamped nodes at the top of the nozzle, that is null displacements in both r and z directions. Strain vector An important thing to notice is that, unlike for the heat transfer problem, the solid mechanics equations are not scalar but vectorial. In our 3D axisymmetric problem, this results in 2 unknowns displacements (ur and uz) and 4 stress unknowns (σr, σθ, σz and σrz) at each nodes. Hence, the master stiffness matrix for n nodes will be a 2n*2n square matrix 26

instead of a simple n*n square matrix as for the heat transfer problem. As we have axisymmetry, our 3D problem is reduced to a 2D one, but there are still some 3D “remains”. We have indeed an important difference between our problem and stressplane strain usual problems: there are four strains instead of three because, even though the displacement uθ is identically zero, the strain εθ is not zero because it is caused by radial displacement [247]:

{}

r {} = = z rz

{ } ∂ ur ∂r ur r ∂ uz ∂z

∂ ur ∂ u z ∂z ∂r

In finite element formulation, the strain vector, which is the derivative of the displacement, is defined using the B derivative matrix: {ε} = [B] {u} Stiffness matrix Since we have four strain components, the strain interpolation matrix B is now a 4x6 array. Hence we may write the matrix relating strains and displacements as follows:

[

∂N1 ∂r N1 [ B]= r 0 ∂N1 ∂z

0 0 ∂N1 ∂z ∂N1 ∂r

∂ N2 ∂r N2 r 0 ∂ N2 ∂z

∂N3 ∂r N3 r

0 0 ∂N2 ∂z ∂N2 ∂r

0 ∂N3 ∂z

0 0 ∂N3 ∂z ∂N3 ∂r

]

giving:

[

b1 2 N 1 1 [ B]= r 2 0 c1

0 0 c1 b1

b2 2 N 2 r 0 c2

0 0 c2 b2

b3 2 N 3 r 0 c3

0 0 c3 b3

27

]

[248]

We notice that the B matrix no longer contains only constants terms: it also includes the function N(r, z)/r. Thus strains and stresses are no longer constants within an element as in plane stress or strain. These non-constants terms will result in some difficulties during integration. The matrix of elastic constants for a linear isotropic solid is:

[C ] =

E 11−2

[

1− 1− 1− 0

0

0

0 0 0 1−2 2

]

[248]

Now we have to perform the integrations in cylindrical coordinates, using the same infinitesimal volume and surface as before. As we said, the integration of B over the element is now complicated because it is no longer constant. This difficulty can be overcome by using double numerical Gauss integration or by tediously integrating term by term. However, a simpler procedure described in [249] is to obtain an approximate average value for the B matrix by using centroidal values, that is, for the r and z variables, we substitute respectively: 1 r r r 3 1 2 3 1 z = z 1 z 2 z 3 3 r=

The accuracy of this approximation deteriorates for elements close to the axis, because the relative variation of r is larger there. However, this is not a matter in our case because we are using very thin elements very far from the z axis, making reasonable this extremely helpful approximation. This gives [250]:

[ ] b1 0

[ K ]=

E 2 11−2

b2 0

b3 0

Where

2N1 r 0 2 N 2 r 0 2 N 3 r 0

0

c1

c1 b 1 0

c2

c2 b 2 0

c3

[

1− 1− 1− 0

0

0

0 0 0 1−2 2

][

b1 2 N 1 r 0 c1

0 0 c1 b1

b2 0 2 N 2 0 r 0 c2 c2 b2

b3 0 2 N 3 0 r 0 c3 c3 b3

]

c3 b 3

N i = a i bi rc i z

The Young's modulus is a function of the temperature. The code is using a linearly decreasing dependence but, as mentionned before, the user can modify this with any other function necessary. 28

Force vectors The initial force vector is a body force. It is simply formed by using our prescribed initial strain vector [243], which is here our thermal expansion vector found in [671]. Carrying out the integration over the element using the approximate average radius gives:

{}

T 0 T 0 r r r {F 0 }=∬ [ B]T [C ]{T }dS = 1 2 3 [ B]T [C ] T 0 3 0 0 0 The body force vector is:

{}

{F B } = 2 ∬ [ N ] R r dr dz Z Where R is the radial body force and Z the vertical body force. Here, R is of course zero and Z is, classically, gravity:

{F B } = 2 ∬

[] N1 0 N2 0 N3 0

0 N1 0 N2 0 N3

{ }

0 −2r 1 r 2r 3 g 0 0 r dr dz = 6 −r 12 r 2r 3 g − g 0 −r 1r 2 2r 3 g

{ }

Then we have the surface force vector:

{}

{F T }=2 ∫ [ N ]T T r r ds Tz

[251]

Where Tr is the radial surface force and Tz is the vertical surface force. Here, both are due to inside pressure. Hence, they are normal to the surface nozzle. If the nozzle was purely cylindrical, Tz would be zero and Tr would simply be equals to the inside pressure. However, the nozzle is parabolic shaped, making the pressure force not purely radial: there may be a vertical component. In the code, these radial and vertical components are very simply calculated using a few trigonometries (see picture).

29

[250-251]

Performing the integral leads to:

{ }

2 r 1 r 2 T r Lcontact 2 r 1r 2 T z {F T } = 3 r 1 2 r 2 T r r 1 2 r 2 T z

[252]

Stress field To obtain the stress field σ, we first solve for the displacement field u and then the Hooke's law gives the relation between stress and strain, which is the displacement derivative: {}=[C ] {}=[C ][ B]{u} [234] This leads to define four stress fields: the normal stress in r (σr), the normal stress in θ (σθ), the normal stress in z (σz) and the shear stress in r–z (σrz). These four stresses should be included in one single common and convenient criterion, for instance the Von Mises or the Tresca criteria. We should pay attention to correctly remove initial strains caused by temperature before calculating the stresses. Nonlinearities After some testing, it appears that displacements are very small. Thus we can ignore variations of material properties that could arise with displacements. In that sense, we have no material nonlinearities. The fact that pressure must remain normal to the surfaces can also be neglected because of the small displacements. However, even though we have small deflection, there is still a geometrical nonlinearity that could arise and be of interest to treat. Indeed, inside pressure cannot last whatever happens. When the nozzle expands, we can expect the pressure to decrease. Even though it is hard to know how it could decrease, it is not the problem here: our goal is just to make a code that could deal with this variation, whatever it is. We tried an exponential model which is kind of reasonable and we used the substitution method again. The code user can try a polynomial function or any other model required. With our displacement-dependent force vector we have: [ K ] {u} = {F u}

30

This nonlinear system is iteratively solved as follows: [ K ] {u }m1 = {F u}m The code is working well with this procedure and provides quick results. The convergence evolution is different than the one encountered in heat transfer: there is a small divergence at the beginning due to the fact that the force is severely overestimated and then it is decreasing (see fig.17). This behavior seems quite normal because of the exponential pressure fall and we could even observe “oscillations”, depending on stiffness, pressure and decreasing factor.

Fig.17 – Solution's behavior – Notice the peak before convergence

>>> Results review Deflection At the equilibrium, the whole structure deflection behavior is quite satisfying, as the nozzle shape is modified by pressure exactly as expected (see fig.18). However, even though the general shape is correct, the nozzle is always too much expanded, as if it was not stiff enough. This is quite questionable because the finite element method usually provides overstiff but not understiff results. The material nonlinearities are not considered as the deflection is really small, but they could be very simply implemented in the code if required. The code is considering geometrical nonlinearity due to the decreasing pressure and this phenomenon is solved quite well with the substitution approach, eventhough this may be worthless because displacements are still very small.

31

Fig.18 – Initial shape in black – Amplified deflection in red

Stress We also observe very correct behavior for R, Z and R–Z stresses in linear analysis, that is, maximum stresses at the clamped top of the nozzle with high concentration surrounding the very thin wall pipe (see fig.19). Nevertheless, the θ stress doesn't seem that correct. Indeed, unlike the others, this state of stress is caused by radial displacement and, because this displacement is maximum at the bottom of the nozzle, the θ stress should be maximum there too (this is confirmed by the COMSOL professional finite element code). But, very surprisingly, the code indicates a maximum value at the top or, sometimes, somewhere in between. We cannot say for sure whether this is wrong or correct, but this is clearly a questionable result. Considering the fact that stress comes from displacement – assumed to be correct as we just said –, makes this result extremely strange, if not quite embarrassing. It is possible that the way we clamped every nodes at the top of the nozzle is creating an extremely stressed area with no clear physical meaning while other results could be reliable. Multiphysics As discussed previously, we have a possibly coupled system with heat transfer and solid mechanics. The code is considering the obvious effect of temperature on the mechanical stiffness. To do so, the heat transfer is just solved before the mechanical study. If we amplify the thermal expansion coefficient, we observe the correct enlargement of the nozzle diameter and the increase of its thickness (see fig.20). The real question was: is there any feedback on heat transfer from the structure deflection? Considering the fact that displacements are extremely small, the whole geometry is not really modified, thus neither is the temperature field. There is henceforth no coupling. We can thus begin with the heat transfer problem, solve it and then pursue with the mechanical study without any concern for what have been done before as there is no feed-back. If there was any, du to another configuration, we should put both heat transfer and solid mechanics in a “giant loop” algorithm for calculating and reinserting results from one to the other, trying to minimize any residuals until we reach a reasonable convergence.

32

Fig.19 – Von Mises stress field in a pipe

Fig.20 – Exaggerated thermal expansion – Notice the deflection and the increased thickness

6.3.2. Structural dynamics After the steady-state equilibrium problem, we should study the transient state, which is the global structural dynamics problem. The main reason of this study, from an engineering point of view, is to determinate how the nozzle can oscillate. As discussed before, this phenomenon can indeed results in severe dysfunctions or even destruction. Knowing the transient solution of the system – its history – is also important if we have nonlinear properties with hysteresis cycle, even though we are not dealing with it in this project because of the small deflections. The same finite element approach as before leads to the main structural dynamics equation: [ M ] {u¨ } [ D ] {u˙ } [ K ] {u} = {F }

[266]

Where M is the mass matrix and D the damping matrix, defined as follows: [M] = ∫∫∫ ρ [N] T {N} dV [D] = ∫∫∫ d [N] T {N} dV The damping matrix appears here to be a typical viscous damping, even though damping is never that simple. It is a very complex physical phenomenon resulting in energy loss by irreversible and complicated meanings. It is convenient to express it as a factor of the velocity, but this is just a model. Damping can sometimes be neglected or “just” outrageously simplified as we will see later. As discussed in the previous heat transfer section, there are two ways to solve that kind of time-dependent equation: time-marching recurrence and modal superposition. We have previously used time-marching, because it was working quite well and because the modal superposition was not possible to perform, due to the fact that the system was nonlinear. But now we have a linear mechanical system, since the equilibrium resolution has shown small deflections. Besides, unlike in heat transfer, modal superposition has a clear physical meaning in structural dynamics. Indeed, each mode corresponds to an eigen vector which is a shape displacement that occurs at a very precise frequency, the eigen frequency. Hence, the modal superposition approach is doubly interesting, as it will result in determining the eigen frequencies of the system, which are critical for the resonance phenomenon, and, pursuing, this will lead to the transient-state solution. Natural frequencies If we imagine the ideal case in which the system has no damping and no external forcing functions, the equation of motion is reduced to: [ M ] {u} ¨ [ K ] {u} = {0}

[267]

The system will have as many natural (eigen) modes and natural (eigen) frequencies as it has unconstrained degrees of freedom. To find these modes and frequencies, the displacement is assumed to be of the form: {u }={}ei t 33

Where Φ is the unknown vector of modal amplitudes and ω is one natural frequency. Noting that: 2 it {u} ¨ = − {} e

The equation of motion reduces to: [ [ K ]−2 [ M ] ] {} = {0}

[267]

There is of course a trivial solution to this system, which is Φ = 0, but this has no interest. And if we want this solution not to be the only one, the determinant of this system must be zero. Thus we now want to solve: ∣K −2 M ∣ = 0 This is seen as an eigenvalue problem, which can be easily solved with Matlab, even though this will require considerable computational efforts. The thing is, once these eigen components are found, they can be stored and reused as they offer considerable simplification possibilities. Anyway, the K and M matrices must again be modified accordingly to the boundary conditions, using the same procedure as before, with clamped nodes at the top of the nozzle. There are two Matlab functions that can solve this problem. The generalized eigenvalue solver eigs(M, K) can do the job quite well, working on the two matrices, but there is another way with very clear physical meaning. Multiplying by the inverse of M, we obtain: ∣M −1 K −2 M −1 M ∣= 0

⇔

∣M −1 K −2 I∣ = 0

With I being the identity matrix. We immediately recognize the M-1K matrix which is nothing less than the ω² typical term. This new matrix contains the square of the eigen frequencies of the system, which is quite more clear than just M and K. Anyway, using this form, Matlab can compute the eigen vectors and square frequencies using the simple eigenvalue solver eig(ω²). Mode superposition Once this eigenvalue equation is solved, the displacement solution vector can be expressed as a linear combination of all the eigenvectors of the system. Hence we set: {u } = [1 2 3 ... n ] = [ A] {} Where A is a new square matrix whose columns are the eigenvectors, and Λ is the vector of unknown modal amplitudes. One eigen mode shape is shown on fig. 21. The magic thing with this new A matrix is that, if we substitute into the main equation and premultiply by its transposed, the resulting equation becomes uncoupled, which is very helpful because an uncouple system is extremely easier to solve than a strongly coupled one. We have: ¨ [ A]T [C ][ A] {} ˙ [ A]T [ K ][ A] {} = [ A]T [ F ] [271] [ A]T [ M ][ A] {} 34

This system can be rewritten as: ¨ [ D] {} ˙ [ K ] {} = {F } [ M ] {} [ M ]=[ A]T [ M ][ A] [ D]=[ A]T [ D ][ A] [ K ]=[ A]T [ K ][ A] {F }=[ A]T {F }

[271]

In fact, this system is not totally uncoupled yet. Indeed, the D matrix has, for the moment, nothing to with M neither K, which means that, if M and K are effectively diagonalized by this mathematical trick, D remains consistent. Thus, the system is still coupled by D. However, we can assume that D is proportional to M either K, the Fig. 21 – One of the first natural mode shape system becomes fully uncoupled because each matrix is now diagonal. This assumption is extremely convenient and can seem outrageously simplifying, but this is usually justified for structural systems, because the actual coupling produced by damping is often negligible. With all these considerations, we now have n uncoupled equations. This result is truly beautiful: M ii ¨ i 2i i M ii ˙ i 2 M ii i = F i

[271]

Even though the proportionality between D, M and K can be shocking, it is in fact relevant if we look at the frequency-dependence of the damping. Indeed, damping is a very sensitive function of the frequency and, with uncoupled modes associated to their own frequencies, it becomes possible to assign a special and unique damping factor to each frequency. From that point of view, the proportionality allows us to define very precise damping factors according to its frequency-dependence, which is far more realistic than a single global one, making this assumption more and more relevant. Anyway, we didn't completely uncouple the system by diagonalizing D too. Having obtained the natural frequencies and vectors and, having diagonalized the M and K matrices, we then used a classic time marching method to solve our partially uncoupled system. Having put so much computational efforts to compute all the eigen components and not fully uncouple the system can sound strange. It is. But the system is still much easier to solve than it was before, thus all these efforts are not as vain as they could seem. Recurrence formula Using the finite difference method, we can approximate the time derivatives by a simple combination of the displacement. For the second order equations of structural dynamics, the central difference method is working well. This approach derived in [274] leads to the following recurrence formula: 35

[ K ] {u}n1 = {F }n With: [K ] =

1 1 [M ] [ D] 2 t t

And: {F }n = {F }n [ [ K ] −

2 1 1 [ M ] ]⋅{u}n − [ [M ] − [ D] ]⋅{u}n−1 2 2 2 t t t

This algorithm is not unconditionally stable, meaning that we must select a time step smaller than a critical one, otherwise the recurrence will completely fail. This critical time step is linked to the maximum eigenvalue of the system. This eigenvalue corresponds to the square of the maximum natural frequency of the system. There is a very clear physical reason for this, which is pretty obvious: the time step must be smaller than the smallest oscillating period of the system to be able to “capture” it. Indeed, the nodes positions can only be determinate before and after the time step, never in between. This means that if the time step is longer than the wave we should observe, it is completely irrelevant. We can also have the opposite phenomenon: instead of quiet nodes, these could oscillate with unbounded amplitudes, leading to completely wrong results. Considering this, we must choose a time step smaller than the critical one defined below: t t cr =

Tn

[275]

Where Tn is the smallest natural vibration period of the system. This period is linked to the largest natural frequency ωn, that is: Tn =

2 n

As we just said, this natural frequency is the square root of the maximum eigenvalue of the system. In our case, this leads to a very small time step around 10-7 s. It is then quite difficult to go through a long period, as it would need lots of iterations and, so, of computer time. When this become a real problem, it is possible to use an unconditionally stable algorithm, such as the Newmark method. We can then select a time step without any concern for solution stability, which can be extremely convenient. However, we still must consider the effects of time step size on solution accuracy. The basic guideline is that the time step should remain small enough so that the response in all modes that contribute significantly to the total response is calculated accurately.

36

Nonlinearities As we are not considering material nonlinearities, the M and K matrices are not function of the displacements, allowing us to diagonalize them with the eigenvalue approach. We can even still consider geometrical nonlinearities, because these only affect the F load vector. It is then possible to implement the exponential decrease of the pressure intensity in our algorithm, using the substitution method again. The algorithm is very similar to the one already detailed in the heat transfer section, so we will not derive it any further.

>>> Results review We managed to obtain natural frequencies and modes, which allowed us to diagonalize the mass and stiffness matrices. Nonlinear structural dynamics worked rather bad, showing decreasing radius as if the nozzle was loaded from the outside. This seems completely not reasonable but further investigations should be done. For instance, this decreasing displacement is extremely small and we couldn't observe a very long period of time because we ran out of memory due to the very small time step. It is possible that the later behavior will show something that makes sense. We should also have checked the positions of other points, instead of just observing the bottom position of the nozzle. This should show more informations about the structure's behavior. In transient linear analysis, we could observe typical responses from a sudden constant loading: decreasing oscillations around the final equilibrium position, for low damping or critical state for big damping, which are clearly what to be expected (see fig. 22-23-24 where the bottom radius position of the nozzle is plotted function of the time). Unfortunately, while structural dynamics worked rather well with some meshes, some others led to catastrophic results with “exploding” nozzle. As results shouldn't completely depend on the mesh – except of course for some accuracy considerations –, this may be the sign of some serious mistake somewhere.

Fig.22 – Weak damping

Fig.23 – Medium damping

37

Fig.24 – Critical damping

7. GLOBAL RESULTS The main objectives are partially completed. We obtained results for steady and transient states and managed to deal with nonlinearities, even if we couldn't avoid some divergence failures. The main thing we didn't achieve is the thermomecanical coupling, because we assumed there was no real coupling due to the fact that displacements were very small. The questionable and/or wrong results (stress, divergence, decreasing radius in nonlinear structural dynamics) should be inspected and may require lots of additional work. The Newton-Raphson nonlinear algorithm should for instance be implemented in the code, replacing the substitution method and may solve all divergence failures. Structural dynamics should be computed using the unconditionally stable Newmark method, allowing longer periods of observation. Multiphysics should be considered using a â€œgiant loopâ€? algorithm to insert results from heat transfer to solid mechanics (and viceversa) until we reach a reasonable accuracy.

8. CONCLUSION This thesis work helped me to learn a lot of things. Even though I already had quite good skills in heat transfer, solid mechanics and scientific calculus, spending hours and hours coding this finite element program made me understand a lot of precise physical considerations. I mainly improved my knowledge of the finite element method, which was one of the major purposes of this project. From that point of view, I am quite happy with the final job. I learnt how to perform transient, vectorial and nonlinear analysis on a real problem involving lot of parameters. And, to some extend, I succeeded. There are, of course, some parts of the code that didn't work as well as expected. There were for instance some divergence failures due to nonlinearities and some unexplained differences between steady a final transient state solutions. Anyway, I learnt to understand how a physical calculation code is made and I think this will be of a great value considering my professional goal, which is to become a mechanical engineer in a calculation approach. Indeed, as mentioned in the introduction, this is quite easy to make a finite element code running, but without understanding how it really works in depth, it is again easier to make a critical mistake. That is why, understanding a code by having performed one by myself will help me making relevant models, asking the good questions, seeking the good answers and, permanently, asking the brute results: are these possibly correct or, more probably, wrong? I would like to thank Ansel BERGHUVUD for his helpful comments and recommendation.

38

APPENDIX Matlab codes This appendix gives the Matlab codes developed during this thesis work. There are several codes for steady and transient state in linear and nonlinear analysis. Those codes are quite easy to use but the user is supposed to know what he is doing. At the beginning of the code, it is possible to change the value of almost every physical parameters such as heat conductivity, exchange coefficients, pressure, Young's modulus, time step and so on. It is also possible to change the number and dimensions of the pipes and to modify the profile of the nozzle, which is a pure cylindrical before being parabolic. There are many comments to indicate what the algorithm is actually doing. Running the code with Matlab will provide some graphics of interest. The user is then free to pursue by himself, calling any value or plotting any graphic necessary.

1. Steady-state 1.1. Linear This code doesn't deal with any nonlinearities. It provides results for both heat transfer and solid mechanics in steady-state. % % % % %

COMPUTATIONAL ENGINEERING ARIANE 5 NOZZLE CALCULATION HEAT TRANSFER AND SOLID MECHANICS FINITE ELEMENT CODE STEADY-STATE LINEAR ANALYSIS

% PHYSICAL DATA % Heat Transfer kond=100; % Inconel heat conductivity (W/m/°K) hlaminar=2000; % % Laminar convection coefficient with the combustion gas (W/m²/°K) hturbulent=20000; % Turbulent convection coefficient with the combustion gas (W/m²/°K) hout=200; % Convection coefficient with the outside air (W/m²/°K) Tcombustion=3500; % Temperature in the nozzle (°K) Tout=300; % Outside air temperature (°K) Tcool=250; % Liquid nitrogen temperature % Solid Mechanics

39

E0=235*10^9; % Inconel Young's modulus at T=300°K (Pa) ET=-1*10^7; % Inconel temperature dependant Young modulus coefficient >>> E(T)=E0+ET*T nu=0.41; % Inconel Poisson's ratio (dimensionless) ro=8400; % Inconel density (kg/m^3) g=9.81; % Earth acceleration (m/s²) acc=3; % Rocket acceleration (m/s²) Acc=g+acc; % Total acceleration on the nozzle Pressure=100*10^5; % Pressure in the nozzle (Pa) Patm=1*10^5; % Atmospheric pressure (Pa) Alpha=1*10^-18; % Inconel thermal expansion coefficient (m/°K) Tzero=300; % No-thermal strain Inconel reference temperature (°K) % Pipe Height=0.06; % Height of the pipe W=0.02; % Width of the pipe wint=0.02; % Internal nozzle thickness wext=0.03; % External nozzle thickness wh=0.015; % Space between two pipes in Z P=10; % Number of pipes SIZE=(Height+2*wh)*P; % Total size of the nozzle % TABLE OF CONNECTIVITIES Connec=[8 1 2 8 2 9 9 2 3 9 3 10 10 3 4 10 4 11 11 4 12 12 4 5 12 5 13 13 5 6 13 6 14 14 6 7 15 8 9 15 9 16 16 9 10 16 10 17 17 10 11 18 17 11 19 18 11 11 12 19 19 12 20 20 12 13 20 13 21 21 13 14 22 15 16 22 16 23 23 16 17 17 24 23 25 19 26 26 19 20 26 20 27

40

27 28 28 29 24 31 32 32 33 34 35 35 30 37 37 38 33 40 41 41 36 44 44 45 39 47 48 48 49 49 42 43 50 51 51 52 46 54 55 55 56 56 57 57 57 58 58 59 53

20 22 23 23 30 25 25 26 26 28 28 29 36 31 32 32 39 34 34 35 42 37 38 38 46 40 40 41 42 42 43 44 44 44 45 45 53 47 47 48 48 49 49 50 51 51 52 52 60

21 23 29 24 29 32 26 33 27 35 29 36 29 32 38 33 38 41 35 42 35 38 45 39 45 48 41 49 41 50 50 50 51 45 52 46 52 55 48 56 49 57 50 51 58 52 59 53 59]; % Elementary connectivities table

% NODES COORDINATES Nodes=zeros(60,2); % Coordinates table for a SINGLE pipe, function of its dimensions Nodes(1:7,1:2)=[0 0; wint/2 0; wint 0; wint+W/2 0; wint+W 0; wint+W+wext/2 0; wint+W+wext 0]; Nodes(8:14,1:2)=[0 wh/2; wint/2 wh/2; wint wh/2; wint+W/2 wh/2; wint+W wh/2; wint+W+wext/2 wh/2; wint+W+wext wh/2]; Nodes(15:21,1:2)=[0 wh; wint/2 wh; wint wh; wint+W/2 wh; wint+W wh;

41

wint+W+wext/2 wh; wint+W+wext wh]; Nodes(22:27,1:2)=[0 wh+Height/4; wint/2 wh+Height/4; wint wh+Height/4; wint+W wh+Height/4; wint+W+wext/2 wh+Height/4; wint+W+wext wh+Height/4]; Nodes(28:33,1:2)=[0 wh+Height/2; wint/2 wh+Height/2; wint wh+Height/2; wint+W wh+Height/2; wint+W+wext/2 wh+Height/2; wint+W+wext wh+Height/2]; Nodes(34:39,1:2)=[0 wh+3*Height/4; wint/2 wh+3*Height/4; wint wh+3*Height/4; wint+W wh+3*Height/4; wint+W+wext/2 wh+3*Height/4; wint+W+wext wh+3*Height/4]; Nodes(40:46,1:2)=[0 wh+Height; wint/2 wh+Height; wint wh+Height; wint+W/2 wh+Height; wint+W wh+Height; wint+W+wext/2 wh+Height; wint+W+wext wh+Height]; Nodes(47:53,1:2)=[0 wh+Height+wh/2; wint/2 wh+Height+wh/2; wint wh+Height+wh/2; wint+W/2 wh+Height+wh/2; wint+W wh+Height+wh/2; wint+W+wext/2 wh+Height+wh/2; wint+W+wext wh+Height+wh/2]; Nodes(54:60,1:2)=[0 wh+Height+wh; wint/2 wh+Height+wh; wint wh+Height+wh; wint+W/2 wh+Height+wh; wint+W wh+Height+wh; wint+W+wext/2 wh+Height+wh; wint+W+wext wh+Height+wh];

GlobalConnec=zeros(80*P,3); % Extension of connectivities and coordinates from 1 to P pipes GlobalNodes=zeros(53*P+7,2); GlobalConnec(1:80,1:3)=Connec(1:80,1:3); GlobalNodes(1:60,1:2)=Nodes(1:60,1:2); for i=0:P-2 % Extension loop GlobalConnec(81+80*i:160+80*i,1:3)=Connec(1:80,1:3)+53*(1+i); GlobalNodes(61+53*i:113+53*i,1)=Nodes(8:60,1); GlobalNodes(61+53*i:113+53*i,2)=Nodes(8:60,2)+(wh+Height+wh)*(1+i); % Offset of one pipe heigth end for e=1:53*P+7 GlobalNodes(e,1)=GlobalNodes(e,1)+0.4+0.17*(GlobalNodes(e,2)+0.15)^0.5; % Generating the parabolic curve of the nozzle end

% HEAT TRANSFER % CONDUCTIVITY MATRIX K=zeros(53*P+7,53*P+7); % Master heat conductivity matrix for e=1:80*P % Loop on all elements k=zeros(3,3); % Elementary heat conductivity matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2);

42

z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); b1=z2-z3; % B matrix components b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=abs(0.5*det(Delta)); % Area of the element B=1/(2*Area)*[b1 b2 b3; c1 c2 c3]; % Elementary B matrix k=1/3*Area*(r1+r2+r3)*B'*kond*B; % Elementary conductivity matrix t=[u v w]; % Connectivities for the assemblage x=0; for i=t x=x+1; y=0; for j=t y=y+1; K(i,j)=K(i,j)+k(x,y); % Assemblage of the master heat conductivity

matrix end end

end % (elements) Q=zeros(53*P+7,1); % Master heat load vector % CONVECTION MATRIX H=zeros(53*P+7,53*P+7); % Master convection matrix for I=0:P-1 % Loop extending the geometry from 1 to P pipes for e=[1+80*I 13+80*I 25+80*I 33+80*I 41+80*I 49+80*I 57+80*I 69+80*I]; % Elements exposed to convection (combustion) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates

43

r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); za=(z1+z2)/2; % Average altitude of the element lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (combustion) if za<SIZE/2 % Determining laminar or turbulent flow Hc=hlaminar; % Laminar else Hc=hturbulent; % Turbulent end h=1/12*Hc*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*Hc*Tcombustion*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assembliage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Assemblage of the master heat load

vector

end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Assemblage of the master heat load vector

end x=x+1; y=0; for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Assemblage the master convection matrix end end

end % (combustion) for e=[12+80*I 24+80*I 32+80*I 40+80*I 48+80*I 56+80*I 68+80*I 80+80*I]; % Elements exposed to convection (outside air) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates

44

r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (outside) h=1/12*hout*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hout*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Assemblage of the master load vector end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Assemblage of the master load vector end x=x+1; y=0; for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Assemblage of the master convection

matrix

end

end end

% (outside air)

end % (pipes) K=K+H; % Master conductivity and convection matrix % BOUNDARY CONDITIONS for I=0:P-1 % Loop extending the geometry from 1 to P pipes x=[17+53*I:19+53*I 24+53*I 25+53*I 30+53*I 31+53*I 36+53*I 37+53*I 42+53*I:44+53*I]; % Known nodes temperature y=[1+53*I:16+53*I 20+53*I: 23+53*I 26+53*I:29+53*I 32+53*I:35+53*I 38+53*I:41+53*I 45+53*I:60+53*I]; % Unknown nodes temperature T=zeros(53*P+7,1); % Temperature vector for i=x T(i,1)=Tcool; % Setting the boundary condition end for i=y % Transforming the load vector to respect boundary conditions

45

end

for j=x Q(i,1)=Q(i,1)-K(i,j)*T(j,1); end

for i=x Q(i,1)=T(i,1); end Save=zeros(53*P+7,53*P+7); % Save matrix for i=y for j=y Save(i,j)=K(i,j); % Copying needed K components before erasing them (direct method) end end for i=x % Transforming the conductivity matrix to respect boundary conditions K(i,1:53*P+7)=0; K(1:53*P+7,i)=0; K(i,i)=1; end for i=y for j=y K(i,j)=Save(i,j); % Re-copying of the previous important coefficients end end end % (pipes) % SOLUTION T=K\Q; % Solving the temperature % POST-PROCESSING G=zeros(8*P+1,7); % Matrix representing the geometry of the WHOLE structure u=0; % Assembling G for i=1:3 for j=1:7 u=u+1; G(i,j)=T(u,1); end end for i=4:6 for j=[1:3 5:7] u=u+1; G(i,j)=T(u,1); end end G(4:6,4)=Tcool; % Liquid nitrogen temperature inside the pipe

46

for i=7:9 for j=1:7 u=u+1; G(i,j)=T(u,1); end end for I=1:P-1 for i=2+8*I:3+8*I for j=1:7 u=u+1; G(i,j)=T(u,1); end end for i=4+8*I:6+8*I for j=[1:3 5:7] u=u+1; G(i,j)=T(u,1); end end G(4+8*I:6+8*I,4)=Tcool; for i=7+8*I:9+8*I for j=1:7 u=u+1; G(i,j)=T(u,1); end end end % (pipes) g=zeros(9,7); % Matrix representing the geometry of a SINGLE pipe g(1:9,1:7)=G(1:9,1:7); x=[0 wint/2 wint wint+W/2 wint+W wint+W+wext/2 wint+W+wext]; % Building grids for plots y=[0; -wh/2; -wh; -(wh+Height/4); -(wh+Height/2); -(wh+3*Height/4); -(wh+Height); -(wh+Height+wh/2); -(wh+Height+wh)]; Y=zeros(8*P+1,1); Y(1:9,1)=y(1:9,1); for I=1:P-1 Y(2+8*I:9+8*I,1)=y(2:9,1)-(wh+Height+wh/2)*I; end % PLOTS set(figure,'Name','TEMPERATURE FIELD') subplot(2,2,[1 3]); pcolor(x,Y,G);

47

title('Temperature (global)','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); axis equal shading interp subplot(2,2,2); pcolor(x,y,g); shading interp title('Temperature (1st pipe)','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold');

% SOLID MECHANICS % STIFFNESS MATRIX K=zeros(106*P+14,106*P+14); % Master stiffness matrix for e=1:80*P % Loop on all elements k=zeros(6,6); % Elementary stiffness matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); ra=1/3*(r1+r2+r3); % Average radius za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Element area

48

B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3; c1 b1 c2 b2 c3 b3]; % Elementary B matrix C=[1-nu nu nu 0; nu 1-nu nu 0; nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix Taverage=1/3*(T(u)+T(v)+T(w)); % Average temperature over the element E=E0+ET*Taverage; % Temperature-dependent Young's modulus k=pi*E/(2*Area*(1+nu)*(1-2*nu))*B'*C*B*ra; % Elementary stiffness matrix x=-1; for i=[u v w] % Element's connectivities x=x+1; y=-1; for j=[u v w] y=y+1; a=1+x; b=1+y; c=a+1; d=b+1; A=2*i-1; B=A+1; C=2*j-1; D=C+1; K(A,C)=K(A,C)+k(1+2*x,1+2*y); % Assemblage the master stiffness matrix K(A,D)=K(A,D)+k(1+2*x,2+2*y); K(B,C)=K(B,C)+k(2+2*x,1+2*y); K(B,D)=K(B,D)+k(2+2*x,2+2*y); end end end % LOAD VECTOR F=zeros(106*P+14,1); % Master load vector % Initial thermal forces for e=1:80*P u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); ra=1/3*(r1+r2+r3); % Average radius

49

za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Element area B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3; c1 b1 c2 b2 c3 b3]; % B matrix C=[1-nu nu nu 0; nu 1-nu nu 0; nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix Ta=1/3*(T(u)+T(v)+T(w)); % Average temperature over the element Fth=ra*Area*B'*C*Alpha*(Ta-Tzero)*[1; 1; 1; 0]; % Elementary temperature force F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Fth(1:2,1); % Assemblage of the master load vector F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Fth(3:4,1); F(2*w-1:2*w,1)=F(2*w-1:2*w,1)+Fth(5:6,1); end % Body forces R=0; % Radial body force Z=-ro*Acc; % Vertical body force for e=1:80*P % Loop on all elements u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2);

50

Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Element area Fb=pi*Area/12*[(2*r1+r2+r3)*R; (2*r1+r2+r3)*Z; (r1+2*r2+r3)*R; (r1+2*r2+r3)*Z; (r1+r2+2*r3)*R; (r1+r2+2*r3)*Z]; % Elementary body force vector F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Fb(1:2,1); % Assemblage of the master load vector F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Fb(3:4,1); F(2*w-1:2*w,1)=F(2*w-1:2*w,1)+Fb(5:6,1); end % Surface forces Tr=Pressure; % Radial pressure force Tz=0; % Vertical pressure force for I=0:P-1 % Loop on all pipes x=[1+80*I 13+80*I 25+80*I 33+80*I 41+80*I 49+80*I 57+80*I 69+80*I]; % Surface elements loaded (inside pressure) for e=x u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (inside) Alph=atan((r2-r1)/(z2-z1)); % Nozzle slope angle cosine=abs(cos(Alph)); sine=abs(sin(Alph)); Tr=Pressure*cosine; % Radial pressure force Tz=Pressure*sine; % Vertical pressure force Ft=pi*lcontact/3*[(2*r1+r2)*Tr; (2*r1+r2)*Tz; (r1+2*r2)*Tr; (r1+2*r2)*Tz]; % Elementary surface force vector F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Ft(1:2,1); % Assemblage of the master load vector

F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Ft(3:4,1);

end

51

end % (pipes)

for I=0:P-1 % Loop on all pipes x=[12+80*I 24+80*I 32+80*I 40+80*I 48+80*I 56+80*I 68+80*I 80+80*I]; % Surface elements loaded (atmosphere pressure) for e=x u=GlobalConnec(e,3); % Element's connectivities v=GlobalConnec(e,1); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (outside) Alph=atan((r2-r1)/(z2-z1)); % Nozzle slope angle cosine=abs(cos(Alph)); sine=abs(sin(Alph)); Tr=-Patm*cosine; % Radial pressure force Tz=-Patm*sine; % Vertical pressure force Ft=pi*lcontact/3*[(2*r1+r2)*Tr; (2*r1+r2)*Tz; (r1+2*r2)*Tr; (r1+2*r2)*Tz]; % Elementary surface force vector vector end

F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Ft(1:2,1); % Assemblage of the master load F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Ft(3:4,1);

end % (pipes) % BOUNDARY CONDITIONS x=[1:14]; % Known displacements y=[15:106*P+14]; % Unknown displacements Save=zeros(106*P+14,106*P+14); % Save matrix for i=y for j=y Save(i,j)=K(i,j); % Copying needed K coefficients before erasing them (direct method) end end F(1:14,1)=0; % Setting boundary conditions (zero displacements) for i=x % Transforming the stiffness matrix to respect boundary conditions

52

end

K(i,1:106*P+14)=0; K(1:106*P+14,i)=0; K(i,i)=1;

for i=y for j=y K(i,j)=Save(i,j); % Re-copying of the previous important coefficients end end % SOLUTION Displacement=K\F; % Solving the deflection % POST-PROCESSING NewNodes=zeros(53*P+7,2); % Displacement added to initial position giving the final shape for n=1:53*P+7 NewNodes(n,1)=GlobalNodes(n,1)+Displacement(2*n-1,1); % Adding the displacements to the initial coordinates NewNodes(n,2)=GlobalNodes(n,2)+Displacement(2*n,1); end set(figure,'Name','INITIAL AND FINAL SHAPE SECTION (Black and red)') for n=1:53*P+7 x=GlobalNodes(n,1); y=GlobalNodes(n,2); plot(x,-y,'--rs','LineWidth',2,... % Plot of the section of the structure, initial shape in black 'MarkerEdgeColor','k',... 'MarkerFaceColor','k',... 'MarkerSize',3) hold all plot(-x,-y,'--rs','LineWidth',2,... % Plot of the section of the structure, initial shape in black 'MarkerEdgeColor','k',... 'MarkerFaceColor','k',... 'MarkerSize',3) hold all x=NewNodes(n,1); y=NewNodes(n,2); plot(x,-y,'--rs','LineWidth',2,... % Plot of the section of the structure, final shape in red 'MarkerEdgeColor','r',... 'MarkerFaceColor','r',... 'MarkerSize',3) hold all plot(-x,-y,'--rs','LineWidth',2,...

% Plot of the section of the structure,

53

final shape in red 'MarkerEdgeColor','r',... 'MarkerFaceColor','r',... 'MarkerSize',3) hold all title('DEFLECTION','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); end

% Stress Sigma=zeros(80*P,4); % Global stress matrix (elements by elements) for e=1:80*P % Loop on all elements k=zeros(6,6); % Elementary stiffness matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); ra=1/3*(r1+r2+r3); % Average radius za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Area of the element B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3;

54

c1 b1 c2 b2 c3 b3]; % Elementary B matrix; C=[1-nu nu nu 0; nu 1-nu nu 0; nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix Disp=zeros(6,1); % Element's nodes displacements Disp(1:2,1)=Displacement(2*u-1:2*u,1); Disp(3:4,1)=Displacement(2*v-1:2*v,1); Disp(5:6,1)=Displacement(2*w-1:2*w,1); sigma=C*B*Disp; % Elementary stress vector Ta=1/3*(T(u)+T(v)+T(w)); % Average temperature over the element EpsT=Alpha*(Ta-Tzero)*[1; 1; 1; 0]; % Elementary initial thermal strain sigma=sigma-C*EpsT; % Removing initial thermal stresses Sigma(e,1)=sigma(1,1); % Assembling the master stress matrix Sigma(e,2)=sigma(2,1); Sigma(e,3)=sigma(3,1); Sigma(e,4)=sigma(4,1); end Sigma1=zeros(0.5*80*P,4); % Master stress in one triangle out of 2 Sigma2=zeros(0.5*80*P,4); % Master stress in the other one triangle out of 2 Sigmaverage=zeros(0.5*80*P,4); % Master stress average matrix (by pair of elements) for i=1:0.5*80*P for j=2*i Sigma1(i,1)=abs(Sigma(j-1,1)); % Absolute value of stresses Sigma1(i,2)=abs(Sigma(j-1,2)); Sigma1(i,3)=abs(Sigma(j-1,3)); Sigma1(i,4)=abs(Sigma(j-1,4)); Sigma2(i,1)=abs(Sigma(j,1)); Sigma2(i,2)=abs(Sigma(j,2)); Sigma2(i,3)=abs(Sigma(j,3)); Sigma2(i,4)=abs(Sigma(j,4)); Sigmaverage(i,1)=0.5*(Sigma1(i,1)+Sigma2(i,1)); % Average of the absolute values Sigmaverage(i,2)=0.5*(Sigma1(i,2)+Sigma2(i,2)); Sigmaverage(i,3)=0.5*(Sigma1(i,3)+Sigma2(i,3)); Sigmaverage(i,4)=0.5*(Sigma1(i,4)+Sigma2(i,4)); end end VonMises=zeros(0.5*80*P,1); % Von Mises combination stress matrix for i=1:0.5*80*P % Loop on half the total of elements

55

VonMises(i,1)=(Sigmaverage(i,1)^2+Sigmaverage(i,2)^2+Sigmaverage(i,3)^2+Sigm average(i,4)^2)^0.5; % Von Mises stress end % Matrices representing the geometry R=zeros(8*P,6); % for the R-stress Theta=zeros(8*P,6); % for the Theta-stress Z=zeros(8*P,6); % for the Z-stress RZ=zeros(8*P,6); % for the RZ-stress VM=zeros(8*P,6); % for the Theta-stress u=0.5*80*P+1; % Assemblage for I=0:P-1 for i=1+8*I:2+8*I for j=1:6 u=u-1; R(i,j)=Sigmaverage(u,1); Theta(i,j)=Sigmaverage(u,2); Z(i,j)=Sigmaverage(u,3); RZ(i,j)=Sigmaverage(u,4); VM(i,j)=VonMises(u,1); end end for i=3+8*I:6+8*I for j=[1:2 5:6] u=u-1; R(i,j)=Sigmaverage(u,1); Theta(i,j)=Sigmaverage(u,2); Z(i,j)=Sigmaverage(u,3); RZ(i,j)=Sigmaverage(u,4); VM(i,j)=VonMises(u,1); end end for i=3+8*I:6+8*I for j=[3:4] R(i,j)=0; Theta(i,j)=0; Z(i,j)=0; RZ(i,j)=0; VM(i,j)=0; end end

end

for i=7+8*I:8+8*I for j=1:6 u=u-1; R(i,j)=Sigmaverage(u,1); Theta(i,j)=Sigmaverage(u,2); Z(i,j)=Sigmaverage(u,3); RZ(i,j)=Sigmaverage(u,4); VM(i,j)=VonMises(u,1); end end

set(figure,'Name','RADIAL TRACTION STRESS') pcolor(R); title('RADIAL STRESS

56

FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp set(figure,'Name','ANGULAR TRACTION STRESS') pcolor(Theta); title('ANGULAR STRESS FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp set(figure,'Name','VERTICAL TRACTION STRESS') pcolor(Z); title('VERTICAL STRESS FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp set(figure,'Name','R-Z PLANE TORSION STRESS') pcolor(RZ); title('TORSION STRESS FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp set(figure,'Name','VON MISES STRESS') pcolor(VM); title('VON MISES STRESS FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp

1.2. Nonlinear This code deals with steady-state nonlinearities such as radiation and displacementdependent pressure. It provides results for both heat transfer and solid mechanics. % % % % %

COMPUTATIONAL ENGINEERING ARIANE 5 NOZZLE CALCULATION HEAT TRANSFER AND SOLID MECHANICS FINITE ELEMENT CODE STEADY-STATE NONLINEAR ANALYSIS

57

% PHYSICAL DATA % Heat Transfer kond0=100; % Inconel heat conductivity at T=0°K (W/m/°K) kondT=0.1; % Inconel temperature dependent heat conductivity coefficient >>> kond(T)=kond0+kondT*T hturbulent=20000; % Convection turbulent coefficient with the combustion gas (W/m²/°K) hlaminar=2000; % % Convection laminar coefficient with the combustion gas (W/m²/°K) hout=200; % Convection coefficient with the outside air (W/m²/°K) Tcombustion=3500; % Temperature in the nozzle (°K) Tout=300; % Outside air temperature (°K) Tcool=250; % Liquid nitrogen temperature epsilon0=0.5; % Inconel radiative emissivity at T=300°K epsilonT=5*10^-5; % Inconel temperature dependent radiative emissivity >>> epsilon(T)=epsilon0+epsilonT*T SIGMA=5.6697*10^-8; % Stefan-Boltzmann constant Ttest=Tout; % First temperature test for nonlinear solving % Solid Mechanics E0=210*10^9; % Inconel Young's modulus at T=300°K (Pa) ET=-1*10^7; % Inconel temperature dependant Young modulus coefficient >>> E(T)=E0+ET*T nu=0.41; % Inconel Poisson's ratio (dimensionless) ro=8400; % Inconal density (kg/m^3) g=9.81; % Earth acceleration (m/s²) acc=3; % Rocket acceleration (m/s²) Acc=g+acc; % Total acceleration on the nozzle Pressure=120*10^5; % Pressure in the nozzle (Pa) Patm=1*10^5; % Atmospheric pressure (Pa) Alpha=2000; % Inconel thermal expansion coefficient (m/°K) Tzero=300; % No-thermal strain Inconel reference temperature (°K) DECREASE=100; % Exponential decreasing temperature coefficient >>> Pressure=Pressure*exp(-DECREASE*Displacement) % Pipe Height=0.06; % Height of the W=0.03; % Width of the pipe wint=0.01; % Internal nozzle wext=0.04; % External nozzle wh=0.01; % Space between two

pipe thickness thickness pipes in Z

P=2; % Number of pipes SIZE=(Height+2*wh)*P; % Total size of the nozzle % TABLE OF CONNECTIVITIES Connec=[11 1 2 11 2 12 2 3 12 12 3 13 3 4 13 13 4 14

58

4 5 14 14 5 15 5 6 15 15 6 16 16 6 17 17 6 7 7 18 17 7 8 18 18 8 19 19 8 9 19 9 20 10 20 9 21 11 12 21 12 22 22 12 13 22 13 23 23 13 14 23 14 24 24 14 15 24 15 25 25 15 16 26 25 16 27 26 16 27 16 17 27 17 28 28 17 18 28 18 29 29 18 19 29 19 30 20 30 19 31 21 22 31 22 32 32 22 23 32 23 33 33 23 24 33 24 34 34 24 25 25 35 34 36 27 37 37 27 28 37 28 38 38 28 29 38 29 39 30 39 29 40 31 41 41 31 32 32 42 41 32 33 42 42 33 43 43 33 34 34 44 43 35 44 34 46 36 37 46 37 47 47 37 38 47 38 48 48 38 39 39 49 48 50 40 51 40 41 51 41 52 51

59

41 42 42 43 43 44 44 45 55 46 56 57 57 58 49 60 50 51 51 52 52 53 53 54 54 55 65 56 66 67 67 68 59

42 53 43 54 44 55 45 46 46 47 47 47 48 48 59 50 51 62 52 63 53 64 54 65 55 56 56 57 57 57 58 58 69

52 52 53 53 54 54 55 55 56 56 57 48 58 49 58 61 61 61 62 62 63 63 64 64 65 65 66 66 67 58 68 59 68]; % Elements connectivities table

% NODES COORDINATES Nodes=zeros(69,2); % Coordinates table for a SINGLE pipe, function of its dimensions Nodes(1:10,1:2)=[0 0; wint/4 0; wint/2 0; 3*wint/4 0; wint 0; wint+W/2 0; wint+W 0; wint+W+wext/3 0; wint+W+2*wext/3 0; wint+W+wext 0]; Nodes(11:20,1:2)=[0 wh/2; wint/4 wh/2; wint/2 wh/2; 3*wint/4 wh/2; wint wh/2; wint+W/2 wh/2; wint+W wh/2; wint+W+wext/3 wh/2; wint+W+2*wext/3 wh/2; wint+W+wext wh/2]; Nodes(21:30,1:2)=[0 wh; wint/4 wh; wint/2 wh; 3*wint/4 wh; wint wh; wint+W/2 wh; wint+W wh; wint+W+wext/3 wh; wint+W+2*wext/3 wh; wint+W+wext wh]; Nodes(31:39,1:2)=[0 wh+Height/2; wint/4 wh+Height/2; wint/2 wh+Height/2; 3*wint/4 wh+Height/2; wint wh+Height/2; wint+W wh+Height/2; wint+W+wext/3 wh+Height/2; wint+W+2*wext/3 wh+Height/2; wint+W+wext wh+Height/2]; Nodes(40:49,1:2)=[0 wh+Height; wint/4 wh+Height; wint/2 wh+Height; 3*wint/4 wh+Height; wint wh+Height; wint+W/2 wh+Height; wint+W wh+Height; wint+W+wext/3 wh+Height; wint+W+2*wext/3 wh+Height; wint+W+wext wh+Height]; Nodes(50:59,1:2)=[0 wh+Height+wh/2; wint/4 wh+Height+wh/2; wint/2 wh+Height+wh/2; 3*wint/4 wh+Height+wh/2; wint wh+Height+wh/2; wint+W/2 wh+Height+wh/2; wint+W wh+Height+wh/2; wint+W+wext/3 wh+Height+wh/2; wint+W+2*wext/3 wh+Height+wh/2; wint+W+wext wh+Height+wh/2]; Nodes(60:69,1:2)=[0 wh+Height+wh; wint/4 wh+Height+wh; wint/2 wh+Height+wh; 3*wint/4 wh+Height+wh; wint wh+Height+wh; wint+W/2 wh+Height+wh; wint+W

60

wh+Height+wh; wint+W+wext/3 wh+Height+wh; wint+W+2*wext/3 wh+Height+wh; wint+W+wext wh+Height+wh]; GlobalConnec=zeros(100*P,3); % Extension of connectivities and coordinates from 1 to P pipes GlobalNodes=zeros(59*P+10,2); GlobalConnec(1:100,1:3)=Connec(1:100,1:3); GlobalNodes(1:69,1:2)=Nodes(1:69,1:2); for i=0:P-2 % Extension loop GlobalConnec(101+100*i:200+100*i,1:3)=Connec(1:100,1:3)+59*(1+i); GlobalNodes(70+59*i:128+59*i,1)=Nodes(11:69,1); GlobalNodes(70+59*i:128+59*i,2)=Nodes(11:69,2)+(wh+Height+wh)*(1+i); % Offset of one pipe heigth end for e=1:59*P+10 GlobalNodes(e,1)=GlobalNodes(e,1)+0.4+0.17*(GlobalNodes(e,2)+0.15)^0.5; % Generating the parabolic profil of the nozzle end

% HEAT TRANSFER iteration=0; % Initializing the number of iterations due to nonlinear solving convergence=1; % Initializing the convergence criterion, far from the stop condition T=zeros(59*P+10,1); % Temperature solution vector T(:,1)=Ttest; % Initializing the temperature solution for nonlinear solving while convergence>0.001 % Checking the convergence criterion iteration=iteration+1; % Incrementing the iteration number % CONDUCTIVITY MATRIX K=zeros(59*P+10,59*P+10); % Master heat conductivity matrix for e=1:100*P % Loop on all elements k=zeros(3,3); % Elementary heat conductivity matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2);

61

b1=z2-z3; % B matrix components b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Area of the element B=1/(2*Area)*[b1 b2 b3; c1 c2 c3]; % Elementary B matrix Taverage=1/3*(T(u)+T(v)+T(w)); % Average temperature over the element kond=kond0+kondT*Taverage; % Temperature-dependent heat conductivity k=1/3*Area*(r1+r2+r3)*B'*kond*B; % Elementary conductivity matrix t=[u v w]; % Connectivities for the assemblage x=0; for i=t x=x+1; y=0; for j=t y=y+1; K(i,j)=K(i,j)+k(x,y); % Assemblage of the master conductivity matrix end

end

end % (elements) Q=zeros(59*P+10,1); % Master heat load vector % CONVECTION MATRIX H=zeros(59*P+10,59*P+10); % Master convection matrix for I=0:P-1 % Loop extending the geometry from 1 to P pipes for e=[1+100*I 19+100*I 37+100*I 51+100*I 65+100*I 83+100*I]; % Elements exposed to convection (combustion) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2);

62

r1=GlobalNodes(u,1); % Nodes Coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); za=1/2*(z1+z2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (combustion) Taverage=1/2*(T(u)+T(v)); % Average temperature over the contact length of the element epsilon=epsilon0+epsilonT*Taverage; % Temperature dependent radiative emissivity hr=SIGMA*epsilon*(Taverage^2+Tcombustion^2)*(Taverage+Tcombustion); % Convection-like temperature dependent radiative coefficient if za<SIZE/2 % Determining laminar or turbulent flow Hc=hlaminar; % Laminar else Hc=hturbulent; % Turbulent end hglobal=Hc+hr;

matrix

kh=1/12*hglobal*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection

rh=1/6*hglobal*Tcombustion*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Assemblage the master load vector end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Assemblage of the master load vector

end x=x+1; y=0;

matrix

for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Assemblage of the master convection end

63

end end % (combustion) for e=[18+100*I 36+100*I 50+100*I 64+100*I 82+100*I 100+100*I]; % Elements exposed to convection (outside air) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (outside) Taverage=1/2*(T(u)+T(v)); % Average temperature over the contact length of the element epsilon=epsilon0+epsilonT*Taverage; % Temperature dependent radiative emissivity hr=SIGMA*epsilon*(Taverage^2+Tout^2)*(Taverage+Tout); % Convectionlike temperature dependent radiative coefficient hglobal=hout+hr; % Global convection-like coefficient

matrix

kh=1/12*hglobal*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection

rh=1/6*hglobal*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Assemblage of the master load vector

end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Assemblage the master load vector end x=x+1; y=0;

matrix

for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Assemblage of the master convection end

64

end end

% (outside air)

end % (pipes) K=K+H; % Master conductivity and convection matrix % BOUNDARY CONDITIONS for I=0:P-1 % Loop extending the geometry from 1 to P pipes x=[25+59*I:27+59*I 35+59*I 36+59*I 44+59*I:46+59*I]; % Known nodes temperature y=[1+59*I:24+59*I 28+59*I:34+59*I 37+59*I:43+59*I 47+59*I:69+59*I]; % Unknown nodes temperature for i=x T(i,1)=Tcool; % Setting the boundary condition end for i=y % Transforming the load vector to respect boundary conditions for j=x Q(i,1)=Q(i,1)-K(i,j)*T(j,1); end end for i=x Q(i,1)=T(i,1); end Save=zeros(59*P+10,59*P+10); % Save matrix for i=y for j=y Save(i,j)=K(i,j); % Copying needed K components before erasing them end end for i=x % Transforming the conductivity matrix to respect boundary conditions K(i,1:59*P+10)=0; K(1:59*P+10,i)=0; K(i,i)=1; end for i=y for j=y K(i,j)=Save(i,j); % Recopying saved K components end end end % (pipes) Tminus=T; % Saving the precedent solution before updating it, for convergence checking % SOLUTION

65

T=K\Q; % Solving the temperature % CONVERGENCE sum=0; for i=1:59*P+10 sum=sum+abs((T(i,1)-Tminus(i,1))/Tminus(i,1))*100; end convergence=sum/(59*P+10); % Convergence criterion check(iteration,1)=convergence; end % (nonlinearities) newcheck=zeros(iteration-1,1); % New convergence criterion without the first component, irrelevant due to arbitrary initialisation newcheck(1:iteration-1,1)=check(2:iteration,1); set(figure,'Name','Convergence (Temperature)') % Plot of the convergence criterion evolution plot(newcheck); % POST-PROCESSING G=zeros(6*P+1,10); % Matrix representing the geometry of the WHOLE structure u=0; % Assembling G for i=1:3 for j=1:10 u=u+1; G(i,j)=T(u,1); end end for i=4 for j=[1:5 7:10] u=u+1; G(i,j)=T(u,1); end end G(4,6)=Tcool; % Liquid nitrogen temperature inside the pipe for i=5:7 for j=1:10 u=u+1; G(i,j)=T(u,1); end end for I=1:P-1 for i=2+6*I:3+6*I for j=1:10 u=u+1; G(i,j)=T(u,1); end end

66

for i=4+6*I for j=[1:5 7:10] u=u+1; G(i,j)=T(u,1); end end G(4+6*I,6)=Tcool; for i=5+6*I:7+6*I for j=1:10 u=u+1; G(i,j)=T(u,1); end end end % (pipes) g=zeros(7,10); % Matrix representing the geometry of a SINGLE pipe g(1:7,1:10)=G(1:7,1:10); x=[0 wint/4 wint/2 3*wint/4 wint wint+W/2 wint+W wint+W+wext/3 wint+W+2*wext/3 wint+W+wext]; % Building grids for plots y=[0; -wh/2; -wh; -(wh+Height/2); -(wh+Height); -(wh+Height+wh/2); -(wh+Height+wh)]; Y=zeros(6*P+1,1); Y(1:7,1)=y(1:7,1); for I=1:P-1 Y(2+6*I:7+6*I,1)=y(2:7,1)-(wh+Height+wh/2)*I; end set(figure,'Name','TEMPERATURE FIELD') subplot(2,2,[1 3]); pcolor(x,Y,G); % Temperature field in the WHOLE structure axis equal shading interp subplot(2,2,2); pcolor(x,y,g); % Temperature field in a SINGLE pipe (the first) axis equal shading interp

% SOLID MECHANICS % STIFFNESS MATRIX K=zeros(118*P+20,118*P+20); % Master stiffness matrix for e=1:100*P % Loop on all elements k=zeros(6,6); % Elementary stiffness matrix

67

u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); ra=1/3*(r1+r2+r3); % Average radius za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Element area B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3; c1 b1 c2 b2 c3 b3]; % Elementary B matrix C=[1-nu nu nu 0; nu 1-nu nu 0; nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix Taverage=1/3*(T(u)+T(v)+T(w)); % Average temperature over the element E=E0+ET*Taverage; % Temperature dependant Young's modulus k=pi*E/(2*Area*(1+nu)*(1-2*nu))*B'*C*B*ra; % Elementary stiffness matrix x=-1; for i=[u v w] % Element's connectivities x=x+1; y=-1; for j=[u v w] y=y+1; a=1+x; b=1+y; c=a+1;

68

d=b+1; A=2*i-1; B=A+1; C=2*j-1; D=C+1; K(A,C)=K(A,C)+k(1+2*x,1+2*y); % Assemblage of the master stiffness matrix

end

K(A,D)=K(A,D)+k(1+2*x,2+2*y); K(B,C)=K(B,C)+k(2+2*x,1+2*y); K(B,D)=K(B,D)+k(2+2*x,2+2*y); end

end % LOAD VECTOR F=zeros(118*P+20,1); % Master load vector % Initial thermal forces for e=1:100*P u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); ra=1/3*(r1+r2+r3); % Average radius za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Area of the element B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3; c1 b1 c2 b2 c3 b3]; % Elementary B matrix

69

C=[1-nu nu nu 0; nu 1-nu nu 0; nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix Taverage=1/3*(T(u)+T(v)+T(w)); % Average temperature over the element Fth=ra*Area*B'*C*Alpha*(Taverage-Tzero)*[1; 1; 1; 0]; % Elementary temperature force F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Fth(1:2,1); % Assembling global load vector F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Fth(3:4,1); F(2*w-1:2*w,1)=F(2*w-1:2*w,1)+Fth(5:6,1); end % Body forces R=0; % Radial volumic body force Z=-ro*Acc; % Vertical volumic body force for e=1:100*P u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Area of the element Fb=pi*Area/12*[(2*r1+r2+r3)*R; (2*r1+r2+r3)*Z; (r1+2*r2+r3)*R; (r1+2*r2+r3)*Z; (r1+r2+2*r3)*R; (r1+r2+2*r3)*Z]; % Elementary body force vector F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Fb(1:2,1); % Assemblage of the master load vector F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Fb(3:4,1); F(2*w-1:2*w,1)=F(2*w-1:2*w,1)+Fb(5:6,1); end for I=0:P-1 % Loop on all pipes x=[18+100*I 36+100*I 50+100*I 64+100*I 82+100*I 100+100*I]; % Surface

70

elements loaded (atmosphere pressure) for e=x u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); %Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (outside) Alph=atan((r2-r1)/(z2-z1)); % Nozzle slope angle cosine=abs(cos(Alph)); sine=abs(sin(Alph)); Tr=-Patm*cosine; % Radial pressure force Tz=-Patm*sine; % Vertical pressure force Ft=pi*lcontact/3*[(2*r1+r2)*Tr; (2*r1+r2)*Tz; (r1+2*r2)*Tr; (r1+2*r2)*Tz]; % Elementary surface force vector F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Ft(1:2,1); % Assemblage of the master load vector

F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Ft(3:4,1);

end end % (pipes) % NONLINEARITIES iteration=0; % Initializing the number of iterations due to nonlinear solving convergence=1; % Initializing the convergence criterion, far from the stop condition Displacement=zeros(118*P+20,1); % Initializing the displacement solution vector if iteration<25 % Avoid non-stopping convergence iteration=iteration+1; % Incrementing the iteration number % Surface forces for I=0:P-1 x=[1+100*I 19+100*I 37+100*I 51+100*I 65+100*I 83+100*I]; % Surface elements loaded (combustion) for e=x u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates

71

r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (inside) Alph=atan((r2-r1)/(z2-z1)); % Nozzle slope angle cosine=abs(cos(Alph)); sine=abs(sin(Alph)); Tr=Pressure*cosine; % Radial pressure force Tz=Pressure*sine; % Vertical pressure force Dispaverage=1/2*(Displacement(u)+Displacement(v)); % Average displacement of the pressurized surface Tr=Tr*exp(-DECREASE*Dispaverage); % Displacement dependent exponential decreasing pressure load Tz=Tz*exp(-DECREASE*Dispaverage); % Displacement dependent exponential decreasing pressure load Ft=pi*lcontact/3*[(2*r1+r2)*Tr; (2*r1+r2)*Tz; (r1+2*r2)*Tr; (r1+2*r2)*Tz]; % Elementary surface force

vector

F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Ft(1:2,1); % Assemblage of the master load vector F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Ft(3:4,1); end end % (pipes) % BOUNDARY CONDITIONS x=[1:20]; % Known displacements y=[21:118*P+20]; % Unknown displacements Save=zeros(118*P+20,118*P+20); % Save matrix for i=y for j=y Save(i,j)=K(i,j); % Copying important K coefficients before erasing them

end end

F(1:20,1)=0; % Transforming the load vector to respect boundary conditions for i=x % Transforming the stiffness matrix to respect boundary conditions K(i,1:118*P+20)=0; K(1:118*P+20,i)=0; K(i,i)=1; end

72

for i=y for j=y K(i,j)=Save(i,j); % Re-copying of the previous important coefficients end end DisplacementMinus=Displacement; % Saving the precedent solution before updating it, for convergence checking % SOLUTION Displacement=K\F; % Solving the deflection % CONVERGENCE DisplacementMinus(:,1)=DisplacementMinus(:,1)+0.001; % Adding a small value in order not to divide by zero DisplacementModif(:,1)=Displacement(:,1)+0.001; sum=0; for i=1:118*P+20 sum=sum+abs((DisplacementModif(i,1)DisplacementMinus(i,1))/DisplacementMinus(i,1))*100; % Difference in % end convergence=sum/(118*P+20); % Convergence criterion check(iteration,1)=convergence; end % (no-stop) newcheck=zeros(iteration-1,1); % New convergence criteria without the first component, irrelevant due to arbitrary initialisation newcheck(1:iteration-1,1)=check(2:iteration,1); set(figure,'Name','Convergence (Displacement)') % Plot of the convergence criterion evolution plot(check);

% POST-PROCESSING NewNodes=zeros(59*P+10,2); % Displacement added to initial position giving the final shape for n=1:59*P+10 NewNodes(n,1)=GlobalNodes(n,1)+Displacement(2*n-1,1); % Adding the displacements to the initial coordinates NewNodes(n,2)=GlobalNodes(n,2)+Displacement(2*n,1); end set(figure,'Name','INITIAL AND FINAL SHAPE SECTION (Black and red)')

73

for n=1:59*P+10 x=GlobalNodes(n,1); y=GlobalNodes(n,2); plot(x,-y,'--rs','LineWidth',2,... % Plot of the section of the structure, initial shape in black 'MarkerEdgeColor','k',... 'MarkerFaceColor','k',... 'MarkerSize',3) hold all plot(-x,-y,'--rs','LineWidth',2,... % Plot of the section of the structure, initial shape in black 'MarkerEdgeColor','k',... 'MarkerFaceColor','k',... 'MarkerSize',3) hold all x=NewNodes(n,1); y=NewNodes(n,2); plot(x,-y,'--rs','LineWidth',2,... % Plot of the section of the structure, final shape in red 'MarkerEdgeColor','r',... 'MarkerFaceColor','r',... 'MarkerSize',3) hold all plot(-x,-y,'--rs','LineWidth',2,... % Plot of the section of the structure, final shape in red 'MarkerEdgeColor','r',... 'MarkerFaceColor','r',... 'MarkerSize',3) hold all end axis equal

% Stress Sigma=zeros(100*P,4); % Master stress matrix (elements by elements) for e=1:100*P % Loop on all elements k=zeros(6,6); % Elementary stiffness matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinaes r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2);

74

ra=1/3*(r1+r2+r3); % Average radius za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Area of the element B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3; c1 b1 c2 b2 c3 b3]; % Elementary B matrix; C=[1-nu nu nu 0; nu 1-nu nu 0; nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix Disp=zeros(6,1); % Element's nodes displacements Disp(1:2,1)=Displacement(2*u-1:2*u,1); Disp(3:4,1)=Displacement(2*v-1:2*v,1); Disp(5:6,1)=Displacement(2*w-1:2*w,1); sigma=C*B*Disp; % Elementar stress vector Ta=1/3*(T(u)+T(v)+T(w)); % Average temperature over the element EpsT=Alpha*(Ta-Tzero)*[1; 1; 1; 0]; % Elementary initial thermal strain sigma=sigma-C*EpsT; % Removing initial thermal stresses Sigma(e,1)=sigma(1,1); % Assembling the global stress matrix Sigma(e,2)=sigma(2,1); Sigma(e,3)=sigma(3,1); Sigma(e,4)=sigma(4,1); end Sigma1=zeros(0.5*100*P,4); % Master stress in one triangle out of 2 Sigma2=zeros(0.5*100*P,4); % Master stress in the other one triangle out of 2

75

Sigmaverage=zeros(0.5*100*P,4); % Master stress average matrix (by pair of elements) for i=1:0.5*100*P for j=2*i Sigma1(i,1)=abs(Sigma(j-1,1)); % Absolute value of stresses Sigma1(i,2)=abs(Sigma(j-1,2)); Sigma1(i,3)=abs(Sigma(j-1,3)); Sigma1(i,4)=abs(Sigma(j-1,4)); Sigma2(i,1)=abs(Sigma(j,1)); Sigma2(i,2)=abs(Sigma(j,2)); Sigma2(i,3)=abs(Sigma(j,3)); Sigma2(i,4)=abs(Sigma(j,4)); Sigmaverage(i,1)=0.5*(Sigma1(i,1)+Sigma2(i,1)); % Average of the absolute values Sigmaverage(i,2)=0.5*(Sigma1(i,2)+Sigma2(i,2)); Sigmaverage(i,3)=0.5*(Sigma1(i,3)+Sigma2(i,3)); Sigmaverage(i,4)=0.5*(Sigma1(i,4)+Sigma2(i,4)); end end VonMises=zeros(0.5*100*P,1); % Von Mises combination stress matrix for i=1:0.5*100*P VonMises(i,1)=(Sigmaverage(i,1)^2+Sigmaverage(i,2)^2+Sigmaverage(i,3)^2+Sigm average(i,4)^2)^0.5; % Von Mises stress end % Matrices representing the geometry R=zeros(6*P,9); % for the R-stress Theta=zeros(6*P,9); % for the Theta-stress Z=zeros(6*P,9); % for the Z-stress RZ=zeros(6*P,9); % for the RZ-stress VM=zeros(6*P,9); % for the Theta-stress u=0.5*100*P+1; % Assemblage for I=0:P-1 for i=1+6*I:2+6*I for j=1:9 u=u-1; R(i,j)=Sigmaverage(u,1); Theta(i,j)=Sigmaverage(u,2); Z(i,j)=Sigmaverage(u,3); RZ(i,j)=Sigmaverage(u,4); VM(i,j)=VonMises(u,1); end end for i=3+6*I:4+6*I for j=[1:4 7:9] u=u-1; R(i,j)=Sigmaverage(u,1); Theta(i,j)=Sigmaverage(u,2); Z(i,j)=Sigmaverage(u,3); RZ(i,j)=Sigmaverage(u,4); VM(i,j)=VonMises(u,1); end end

76

end

for i=3+6*I:4+6*I for j=[5:6] R(i,j)=0; Theta(i,j)=0; Z(i,j)=0; RZ(i,j)=0; VM(i,j)=0; end end for i=5+6*I:6+6*I for j=1:9 u=u-1; R(i,j)=Sigmaverage(u,1); Theta(i,j)=Sigmaverage(u,2); Z(i,j)=Sigmaverage(u,3); RZ(i,j)=Sigmaverage(u,4); VM(i,j)=VonMises(u,1); end end

set(figure,'Name','RADIAL TRACTION STRESS') pcolor(R); title('RADIAL STRESS FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp set(figure,'Name','ANGULAR TRACTION STRESS') pcolor(Theta); title('ANGULAR STRESS FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp set(figure,'Name','VERTICAL TRACTION STRESS') pcolor(Z); title('VERTICAL STRESS FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp set(figure,'Name','R-Z PLANE TORSION STRESS') pcolor(RZ); title('TORSION STRESS FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp

77

set(figure,'Name','VON MISES STRESS') pcolor(VM); title('VON MISES STRESS FIELD','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); daspect([1 1 0.5]); shading interp

2. Transient-state 2.1.1. Linear (heat transfer) This code provides results for heat transfer only. It doesn't deal with nonlinearities but provides results for transient-state. % % % % %

COMPUTATIONAL ENGINEERING ARIANE 5 NOZZLE CALCULATION HEAT TRANSFER FINITE ELEMENT CODE TRANSIENT-STATE LINEAR ANALYSIS

% PHYSICAL DATA % Heat Transfer kond=1000; % Inconel heat conductivity cap=200; % Inconel heat capacitance (J/°K/kg) ro=8000; % Inconel density (kg/m^3) hturbulent=20000; % Convection turbulent coefficient with the combustion gas (W/m²/°K) hlaminar=5000; % Convection laminar coefficient with the combustion gas (W/m²/°K) hout=1000; % Convection coefficient with the outside air (W/m²/°K) hcool=20000; % Convection coefficient with the liquid nitrogen (W/m²/°K) Tcombustion=3500; % Temperature in the nozzle (°K) Tout=300; % Outside air temperature (°K) Tcool=200; % Liquid nitrogen temperature (°K) Tinit=Tout; % Initial temperature (°K) % Time marching dt=0.001; % Time step for temporal integration in transient state (s) timelong=15000; % Number of dt duration time steps % Pipe Height=0.06; % Height of the pipe W=0.04; % Width of the pipe wint=0.02; % Internal nozzle thickness wext=0.04; % External nozzle thickness wh=0.02; % Distance between two pipes in Z

78

P=2; % Number of pipes SIZE=(Height+2*wh)*P; % Total size of the nozzle

% TABLE OF CONNECTIVITIES Connec=[8 1 2 8 2 9 9 2 3 9 3 10 10 3 4 10 4 11 11 4 12 12 4 5 12 5 13 13 5 6 13 6 14 7 14 6 15 8 9 15 9 16 16 9 10 16 10 17 17 10 11 18 17 11 19 18 11 11 12 19 19 12 20 20 12 13 20 13 21 14 21 13 22 15 16 22 16 23 23 16 17 17 24 23 25 19 26 26 19 20 26 20 27 21 27 20 28 22 23 28 23 29 29 23 24 24 30 29 31 25 32 32 25 26 32 26 33 27 33 26 34 28 35 35 28 29 35 29 36 30 36 29 37 31 32 37 32 38 38 32 33 33 39 38 40 34 41 41 34 35 41 35 42 36 42 35 44 37 38

79

44 45 39 47 48 48 49 49 42 43 50 51 51 52 46 54 55 55 56 56 57 57 57 58 58 59 53

38 38 46 40 40 41 42 42 43 44 44 44 45 45 53 47 47 48 48 49 49 50 51 51 52 52 60

45 39 45 48 41 49 41 50 50 50 51 45 52 46 52 55 48 56 49 57 50 51 58 52 59 53 59]; % Elements connectivities

% NODES COORDINATES Nodes=zeros(60,2); % Coordinates table for a SINGLE pipe, function of its dimensions Nodes(1:7,1:2)=[0 0; wint/2 0; wint 0; wint+W/2 0; wint+W 0; wint+W+wext/2 0; wint+W+wext 0]; Nodes(8:14,1:2)=[0 wh/2; wint/2 wh/2; wint wh/2; wint+W/2 wh/2; wint+W wh/2; wint+W+wext/2 wh/2; wint+W+wext wh/2]; Nodes(15:21,1:2)=[0 wh; wint/2 wh; wint wh; wint+W/2 wh; wint+W wh; wint+W+wext/2 wh; wint+W+wext wh]; Nodes(22:27,1:2)=[0 wh+Height/4; wint/2 wh+Height/4; wint wh+Height/4; wint+W wh+Height/4; wint+W+wext/2 wh+Height/4; wint+W+wext wh+Height/4]; Nodes(28:33,1:2)=[0 wh+Height/2; wint/2 wh+Height/2; wint wh+Height/2; wint+W wh+Height/2; wint+W+wext/2 wh+Height/2; wint+W+wext wh+Height/2]; Nodes(34:39,1:2)=[0 wh+3*Height/4; wint/2 wh+3*Height/4; wint wh+3*Height/4; wint+W wh+3*Height/4; wint+W+wext/2 wh+3*Height/4; wint+W+wext wh+3*Height/4]; Nodes(40:46,1:2)=[0 wh+Height; wint/2 wh+Height; wint wh+Height; wint+W/2 wh+Height; wint+W wh+Height; wint+W+wext/2 wh+Height; wint+W+wext wh+Height]; Nodes(47:53,1:2)=[0 wh+Height+wh/2; wint/2 wh+Height+wh/2; wint wh+Height+wh/2; wint+W/2 wh+Height+wh/2; wint+W wh+Height+wh/2; wint+W+wext/2 wh+Height+wh/2; wint+W+wext wh+Height+wh/2]; Nodes(54:60,1:2)=[0 wh+Height+wh; wint/2 wh+Height+wh; wint wh+Height+wh; wint+W/2 wh+Height+wh; wint+W wh+Height+wh; wint+W+wext/2 wh+Height+wh; wint+W+wext wh+Height+wh]; GlobalConnec=zeros(80*P,3); % Extension of connectivities and coordinates from 1 to P pipes GlobalNodes=zeros(53*P+7,2);

80

GlobalConnec(1:80,1:3)=Connec(1:80,1:3); GlobalNodes(1:60,1:2)=Nodes(1:60,1:2); for i=0:P-2 % Extension loop GlobalConnec(81+80*i:160+80*i,1:3)=Connec(1:80,1:3)+53*(1+i); GlobalNodes(61+53*i:113+53*i,1)=Nodes(8:60,1); GlobalNodes(61+53*i:113+53*i,2)=Nodes(8:60,2)+(wh+Height+wh)*(1+i); % Offset of one pipe heigth end for e=1:53*P+7 GlobalNodes(e,1)=GlobalNodes(e,1)+0.5; %+0.15*(GlobalNodes(e,2)+0.5)^0.5; % Generating the parabolic curve of the nozzle end

% HEAT TRANSFER % CONDUCTIVITY AND CAPACITANCE MATRICES K=zeros(53*P+7,53*P+7); % Master heat conductivity matrix C=zeros(53*P+7,53*P+7); % Master heat capacitance matrix for e=1:80*P % Loop on all elements k=zeros(3,3); % Elementary heat conductivity matrix c=zeros(3,3); % Elementary heat capacitance matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); b1=z2-z3; % B matrix components b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=abs(0.5*det(Delta)); % Area of the element B=1/(2*Area)*[b1 b2 b3; c1 c2 c3]; % Elementary B matrix k=1/3*Area*(r1+r2+r3)*B'*kond*B; % Elementary conductivity matrix

81

c=1/60*ro*cap*Area*[6*r1+2*r2+2*r3 2*r1+2*r2+r3 2*r1+r2+r3 2*r1+2*r2+r3 2*r1+6*r2+2*r3 r1+2*r2+2*r3 2*r1+r2+2*r3 r1+2*r2+2*r3 2*r1+2*r2+6*r3]; % Elementary heat capacitance matrix t=[u v w]; % Connectivities for the master matrices assemblage x=0; for i=t x=x+1; y=0; for j=t y=y+1; K(i,j)=K(i,j)+k(x,y); % Master heat conductivity matrix assemblage C(i,j)=C(i,j)+c(x,y); % Master heat capacitance matrix assemblage end end end % (elements) Q=zeros(53*P+7,1); % Master heat load vector % CONVECTION MATRIX H=zeros(53*P+7,53*P+7); % Master convection matrix for I=0:P-1 % Loop extending the geometry from 1 to P pipes for e=[1+80*I 13+80*I 25+80*I 33+80*I 41+80*I 49+80*I 57+80*I 69+80*I]; % Elements exposed to convection (inside combustion) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); za=1/2*(z1+z2); % Average altitude of the element lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (inside) if za<SIZE/2 % Determining laminar or turbulent flow Hc=hlaminar; % Laminar else Hc=hturbulent; % Turbulent end kh=1/12*Hc*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix

82

rh=1/6*Hc*Tcombustion*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector assemblage end x=x+1; y=0;

end

for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage end

end % (combustion) for e=[18+80*I 19+80*I 28+80*I 29+80*I 36+80*I 37+80*I 44+80*I 45+80*I 52+80*I 53+80*I 62+80*I 63+80*I]; % Elements exposed to convection (liquid nitrogen) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (nitrogen) h=1/12*hcool*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hcool*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage

83

end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector assemblage end x=x+1; y=0;

end

for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage end

end

% (nitrogen)

for e=[12+80*I 24+80*I 32+80*I 40+80*I 48+80*I 56+80*I 68+80*I 80+80*I]; % Elements exposed to convection (outside air) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (outside) kh=1/12*hout*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hout*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assembliage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector assemblage end x=x+1; y=0; for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage end

84

end end

% (outside)

end % (pipes) K=K+H; % Master global matrix for both conduction and convection Tn=zeros(53*P+7,1); % Temperature vector Tn(:,1)=Tinit; % Initializing the temperature newK=0.5*K+1/dt*C; % Modified matrix for time marching AVERAGE=zeros(1,timelong); % Average temperature vector % SOLUTION for date=1:timelong % Time marching loop newQ=(-0.5*K+1/dt*C)*Tn+Q; % Modified load vector for time marching Tnplus=newK\newQ; % Solving the temperature Tn=Tnplus; % Update of the m-th nonlinear iteration % POST-PROCESSING G=zeros(7*P+1,7); % Matrix representing the geometry of the WHOLE structure u=0; % Assembling G for i=1:3 for j=1:7 u=u+1; G(i,j)=Tn(u,1); end end for i=4:6 for j=[1:3 5:7] u=u+1; G(i,j)=Tn(u,1); end end G(4:6,4)=Tcool; % Liquid nitrogen temperature inside the pipe for i=7:9 for j=1:7 u=u+1; G(i,j)=Tn(u,1); end end for I=1:P-1 for i=2+7*I:3+7*I for j=1:7 u=u+1;

85

end

G(i,j)=Tn(u,1);

end for i=4+7*I:6+7*I for j=[1:3 5:7] u=u+1; G(i,j)=Tn(u,1); end end G(4+7*I:6+7*I,4)=Tcool; for i=7+7*I:9+7*I for j=1:7 u=u+1; G(i,j)=Tn(u,1); end end end % (pipes) g=zeros(9,7); % Matrix representing the geometry of a SINGLE pipe g(1:9,1:7)=G(1:9,1:7); x=[0 wint/2 wint wint+W/2 wint+W wint+W+wext/2 wint+W+wext]; % Horizontal vector for plot grid y=[0; -wh/2; -wh; -(wh+Height/4); -(wh+Height/2); -(wh+3*Height/4); -(wh+Height); -(wh+Height+wh/2); -(wh+Height+wh)]; % Vertical vector for plot grid Y=zeros(7*P+1,1); Y(1:8,1)=y(1:8,1); for I=1:P-1 Y(2+7*I:9+7*I,1)=y(2:9,1)-(wh+Height+wh/2)*I; % Extending the vertical vector end %{ set(figure,'Name','TEMPERATURE FIELD') % Plot of the solution subplot(2,2,[1 3]); pcolor(x,Y,G); % Temperature field in the WHOLE structure title('WHOLE STRUCTURE','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); axis equal shading interp subplot(2,2,2); pcolor(x,y,g); % Temperature field in ONE pipe title('FIRST PIPE ZOOM','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold');

86

ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); axis equal shading interp %} sum=0; % Initializing the sum of the nodal temperatures for t=1:53*P+7 % Loop on all the nodes sum=sum+Tn(t,1); % Adding the nodal temperatures end av=sum/(53*P+7); % Average temperature over the structure AVERAGE(1,date)=av; % Average temperature at this date end % (time marching) set(figure,'Name','TEMPERATURE EVOLUTION') % Plot of the solution plot(AVERAGE,'linewidth',4); % Plot of the average temperature evolution in the time title('TEMPERATURE HISTORY','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Time (n*dt)','FontName','Georgia','FontWeight','Bold'); ylabel('Temperature','FontName','Georgia','FontWeight','Bold');

2.1.2. Linear (structural dynamics) This code provides results for linear structural dynamics. It also computes the temperature field because it has an impact on the material stiffness but this is not the main goal of this code. % % % % %

COMPUTATIONAL ENGINEERING ARIANE 5 NOZZLE CALCULATION STRUCTURAL DYNAMICS FINITE ELEMENT CODE TRANSIENT-STATE LINEAR ANALYSIS

% PHYSICAL DATA % Heat Transfer kond=100; % Inconel heat conductivity cap=460; % Inconel heat capacitance (J/°K/kg) hcombustion=20000; % Convection coefficient with the combustion gaz (W/m²/°K) hout=200; % Convection coefficient with the outside air (W/m²/°K) hcool=2000; % Convection coefficient with the liquid nitrogen (W/m²/°K) Tcombustion=3500; % Temperature in the nozzle (°K) Tout=300; % Outside air temperature (°K) Tcool=250; % Liquid nitrogen temperature (°K) Tinit=Tout; % Initial temperature (°K) % Solid Mechanics E0=210*10^9; % Inconel Young modulus at T=300°K (Pa) ET=-1*10^7; % Inconel temperature dependant Young modulus coefficient >>>

87

E(T)=E0+ET*T nu=0.41; % Inconel Poisson ratio (dimensionless) ro=8400; % Inconel density (kg/m^3) dmp=1*10^8; % Inconel viscous damping factor (N*s/m) g=9.81; % Earth acceleration (m/s²) acc=3; % Rocket acceleration (m/s²) Acc=g+acc; % Total acceleration on the nozzle Pressure=120*10^5; % Pressure in the nozzle (Pa) Patm=1*10^5; % Atmospheric pressure (Pa) Alpha=1*10^-18; % Inconel thermal expansion coefficient (°K^-1) Tzero=300; % No-thermal strain Inconel reference temperature (°K) % Transient solving dt=0.0000001; % Time step for temporal integration in transient state (s) timelong=2500; % Number of dt duration time steps % Pipe data P=2; % Number of pipes Height=0.06; % Height of the pipe W=0.04; % Width of the pipe wint=0.02; % Internal nozzle thickness wext=0.04; % External nozzle thickness wh=0.02; % Distance between two pipes in Z

% GEOMETRY AND MESHING % TABLE OF CONNECTIVITIES Connec=[11 1 2 11 2 12 2 3 12 12 3 13 3 4 13 13 4 14 4 5 14 14 5 15 5 6 15 15 6 16 16 6 17 17 6 7 7 18 17 7 8 18 18 8 19 19 8 9 19 9 20 10 20 9 21 11 12 21 12 22 22 12 13 22 13 23 23 13 14 23 14 24 24 14 15 24 15 25

88

25 26 27 27 27 28 28 29 29 20 31 31 32 32 33 33 34 25 36 37 37 38 38 30 40 41 32 32 42 43 34 35 46 46 47 47 48 39 50 40 41 41 42 42 43 43 44 44 45 55 46 56 57 57 58 49 60 50 51 51 52

15 25 26 16 17 17 18 18 19 30 21 22 22 23 23 24 24 35 27 27 28 28 29 39 31 31 42 33 33 33 44 44 36 37 37 38 38 49 40 41 52 42 53 43 54 44 55 45 46 46 47 47 47 48 48 59 50 51 62 52 63

16 16 16 17 28 18 29 19 30 19 22 32 23 33 24 34 25 34 37 28 38 29 39 29 41 32 41 42 43 34 43 34 37 47 38 48 39 48 51 51 51 52 52 53 53 54 54 55 55 56 56 57 48 58 49 58 61 61 61 62 62

89

52 53 53 54 54 55 65 56 66 67 67 68 59

53 64 54 65 55 56 56 57 57 57 58 58 69

63 63 64 64 65 65 66 66 67 58 68 59 68];

% NODES COORDINATES Nodes=zeros(69,2); % Coordinates table for a SINGLE pipe, function of its dimensions Nodes(1:10,1:2)=[0 0; wint/4 0; wint/2 0; 3*wint/4 0; wint 0; wint+W/2 0; wint+W 0; wint+W+wext/3 0; wint+W+2*wext/3 0; wint+W+wext 0]; Nodes(11:20,1:2)=[0 wh/2; wint/4 wh/2; wint/2 wh/2; 3*wint/4 wh/2; wint wh/2; wint+W/2 wh/2; wint+W wh/2; wint+W+wext/3 wh/2; wint+W+2*wext/3 wh/2; wint+W+wext wh/2]; Nodes(21:30,1:2)=[0 wh; wint/4 wh; wint/2 wh; 3*wint/4 wh; wint wh; wint+W/2 wh; wint+W wh; wint+W+wext/3 wh; wint+W+2*wext/3 wh; wint+W+wext wh]; Nodes(31:39,1:2)=[0 wh+Height/2; wint/4 wh+Height/2; wint/2 wh+Height/2; 3*wint/4 wh+Height/2; wint wh+Height/2; wint+W wh+Height/2; wint+W+wext/3 wh+Height/2; wint+W+2*wext/3 wh+Height/2; wint+W+wext wh+Height/2]; Nodes(40:49,1:2)=[0 wh+Height; wint/4 wh+Height; wint/2 wh+Height; 3*wint/4 wh+Height; wint wh+Height; wint+W/2 wh+Height; wint+W wh+Height; wint+W+wext/3 wh+Height; wint+W+2*wext/3 wh+Height; wint+W+wext wh+Height]; Nodes(50:59,1:2)=[0 3*wh/2+Height; wint/4 3*wh/2+Height; wint/2 3*wh/2+Height; 3*wint/4 3*wh/2+Height; wint 3*wh/2+Height; wint+W/2 3*wh/2+Height; wint+W 3*wh/2+Height; wint+W+wext/3 3*wh/2+Height; wint+W+2*wext/3 3*wh/2+Height; wint+W+wext 3*wh/2+Height]; Nodes(60:69,1:2)=[0 2*wh+Height; wint/4 2*wh+Height; wint/2 2*wh+Height; 3*wint/4 2*wh+Height; wint 2*wh+Height; wint+W/2 2*wh+Height; wint+W 2*wh+Height; wint+W+wext/3 2*wh+Height; wint+W+2*wext/3 2*wh+Height; wint+W+wext 2*wh+Height]; GlobalConnec=zeros(100*P,3); % Extension of connectivities and coordinates from 1 to P pipes GlobalNodes=zeros(59*P+10,2); GlobalConnec(1:100,1:3)=Connec(1:100,1:3); GlobalNodes(1:69,1:2)=Nodes(1:69,1:2); for i=0:P-2 % Extension loop GlobalConnec(101+100*i:200+100*i,1:3)=Connec(1:100,1:3)+59*(1+i); GlobalNodes(70+59*i:128+59*i,1)=Nodes(11:69,1); GlobalNodes(70+59*i:128+59*i,2)=Nodes(11:69,2)+(wh+Height+wh)*(1+i); % Offset of one pipe heigth end

90

for e=1:59*P+10 GlobalNodes(e,1)=GlobalNodes(e,1)+0.5+0.45*(GlobalNodes(e,2)+0.5)^0.5; % Generating the parabolic curve of the nozzle end % HEAT TRANSFER % CONDUCTIVITY AND CAPACITANCE MATRICES K=zeros(59*P+10,59*P+10); % Master heat conductivity matrix C=zeros(59*P+10,59*P+10); % Master heat capacitance matrix for e=1:100*P % Loop on all elements k=zeros(3,3); % Elementary heat conductivity matrix c=zeros(3,3); % Elementary heat capacitance matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); b1=z2-z3; % B matrix components b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=abs(0.5*det(Delta)); % Area of the element B=1/(2*Area)*[b1 b2 b3; c1 c2 c3]; % Elementary B matrix k=1/3*Area*(r1+r2+r3)*B'*kond*B; % Elementary conductivity matrix c=1/60*ro*cap*Area*[6*r1+2*r2+2*r3 2*r1+2*r2+r3 2*r1+r2+r3 2*r1+2*r2+r3 2*r1+6*r2+2*r3 r1+2*r2+2*r3 2*r1+r2+2*r3 r1+2*r2+2*r3 2*r1+2*r2+6*r3]; % Elementary heat capacitance matrix t=[u v w]; % Connectivities for the master matrices assemblage x=0; for i=t x=x+1; y=0; for j=t

91

end

y=y+1; K(i,j)=K(i,j)+k(x,y); % Master heat conductivity matrix assemblage C(i,j)=C(i,j)+c(x,y); % Master heat capacitance matrix assemblage

end end % (elements) Q=zeros(59*P+10,1); % Master heat load vector % CONVECTION MATRIX H=zeros(59*P+10,59*P+10); % Master convection matrix for I=0:P-1 % Loop extending the geometry from 1 to P pipes for e=[1+100*I 13+100*I 25+100*I 33+100*I 41+100*I 49+100*I 57+100*I 69+100*I]; % Elements exposed to convection (inside combustion) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (inside) kh=1/12*hcombustion*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hcombustion*Tcombustion*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector assemblage end x=x+1; y=0; for j=t y=y+1;

92

end

H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage

end end % (combustion) for e=[18+100*I 19+100*I 28+100*I 29+100*I 36+100*I 37+100*I 44+100*I 45+100*I 52+100*I 59+100*I 62+100*I 63+100*I]; % Elements exposed to convection (liquid nitrogen) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (nitrogen) h=1/12*hcool*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hcool*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector assemblage end x=x+1; y=0;

end end

for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage end

% (nitrogen)

for e=[12+100*I 24+100*I 32+100*I 40+100*I 48+100*I 56+100*I 68+100*I 100+100*I]; % Elements exposed to convection (outside air) h=zeros(2,2); % Elementary convection matrix

93

u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Elementary contact length kh=1/12*hout*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hout*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assembliage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector assemblage end x=x+1; y=0; for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage end end end

%(outside)

end % (pipes) K=K+H; % Master global matrix for both conduction and convection Tn=zeros(59*P+10,1); Tn(:,1)=Tinit; newK=0.5*K+1/dt*C; % Modified matrix for time marching % SOLUTION for date=1:timelong % Time marching loop newQ=(-0.5*K+1/dt*C)*Tn+Q; % Modified load vector for time marching Tnplus=newK\newQ; % Solving the temperature

94

Tn=Tnplus; % Update of the m-th nonlinear iteration end % (time marching)

% SOLID MECHANICS % MASS, DAMPING AND STIFFNESS MATRICES M=zeros(118*P+20,118*P+20); % Master mass matrix Damp=zeros(118*P+20,118*P+20); % Master damping matrix K=zeros(118*P+20,118*P+20); % Master stiffness matrix for e=1:100*P % Loop on all elements m=zeros(6,6); % Elementary mass matrix damp=zeros(6,6); % Elementary damping matrix k=zeros(6,6); % Elementary stiffness matrix u=GlobalConnec(e,1); % Element connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes radial coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); ra=1/3*(r1+r2+r3); % Average radius za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Area of the element B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3; c1 b1 c2 b2 c3 b3]; % Elementary B matrix C=[1-nu nu nu 0; nu 1-nu nu 0;

95

nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix N1sq=6*r1+2*r2+2*r3; % Mass and damping matrix components N2sq=2*r1+6*r2+2*r3; N3sq=2*r1+2*r2+6*r3; N1N2=2*r1+2*r2+r3; N1N3=2*r1+r2+2*r3; N2N3=r1+2*r2+2*r3; NtN=[N1sq 0 0 N1sq N1N2 0 0 N1N2 N1N3 0 0 N1N3

N1N2 0 0 N1N2 N2sq 0 0 N2sq N2N3 0 0 N2N3

N1N3 0; % Mass and damping matrix components 0 N1N3; N2N3 0; 0 N2N3; N3sq 0; 0 N3sq];

m=1/60*ro*Area*NtN; % Elementary mass matrix damp=1/60*dmp*Area*NtN; % Elementary damping matrix Taverage=1/3*(Tn(u)+Tn(v)+Tn(w)); % Average temperature over the element E=E0+ET*Taverage; % Temperature-dependent Young's modulus k=pi*E/(2*Area*(1+nu)*(1-2*nu))*B'*C*B*ra; % Elementary stiffness matrix x=-1; % Beginning the assemblage for i=[u v w] % Element's connectivities x=x+1; y=-1; for j=[u v w] y=y+1; a=1+x; b=1+y; c=a+1; d=b+1; A=2*i-1; B=A+1; C=2*j-1; D=C+1; M(A,C)=M(A,C)+m(1+2*x,1+2*y); % Master mass matrix assemblage M(A,D)=M(A,D)+m(1+2*x,2+2*y); M(B,C)=M(B,C)+m(2+2*x,1+2*y); M(B,D)=M(B,D)+m(2+2*x,2+2*y); Damp(A,C)=Damp(A,C)+damp(1+2*x,1+2*y); % Master damping matrix assemblage

Damp(A,D)=Damp(A,D)+damp(1+2*x,2+2*y); Damp(B,C)=Damp(B,C)+damp(2+2*x,1+2*y); Damp(B,D)=Damp(B,D)+damp(2+2*x,2+2*y); K(A,C)=K(A,C)+k(1+2*x,1+2*y); % Master stiffness matrix assemblage K(A,D)=K(A,D)+k(1+2*x,2+2*y); K(B,C)=K(B,C)+k(2+2*x,1+2*y); K(B,D)=K(B,D)+k(2+2*x,2+2*y);

96

end end end % (elements) % LOAD VECTOR F=zeros(118*P+20,1); % Master load vector % Initial thermal forces for e=1:100*P u=GlobalConnec(e,1); % Element connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); ra=1/3*(r1+r2+r3); % Average radius za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element Area=0.5*det(Delta); % Area of the element B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3; c1 b1 c2 b2 c3 b3]; % Elementary B matrix C=[1-nu nu nu 0; nu 1-nu nu 0; nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix Ta=1/3*(Tn(u)+Tn(v)+Tn(w)); % Average temperature over the element Fth=B'*C*Alpha*(Ta-Tzero)*[1; 1;

97

1; 0]; % Elementary temperature force F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Fth(1:2,1); % Master load vector assembling F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Fth(3:4,1); F(2*w-1:2*w,1)=F(2*w-1:2*w,1)+Fth(5:6,1); end % (elements) %

Body forces

R=0; % Radial volumic body force Z=-ro*Acc; % Vertical volumic body force for e=1:100*P % Loop on all elements u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Area of the element Fb=pi*Area/12*[(2*r1+r2+r3)*R; (2*r1+r2+r3)*Z; (r1+2*r2+r3)*R; (r1+2*r2+r3)*Z; (r1+r2+2*r3)*R; (r1+r2+2*r3)*Z]; % Elementary body force vector F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Fb(1:2,1); % Master load vector assemblage F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Fb(3:4,1); F(2*w-1:2*w,1)=F(2*w-1:2*w,1)+Fb(5:6,1); end % (elements) % Surface forces for I=0:P-1 x=[1+100*I 19+100*I 37+100*I 51+100*I 65+100*I 83+100*I]; % Surface elements loaded (inside pressure) for e=x u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2);

98

r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=abs(z2-z1); % Contact length (inside) Alph=atan((r2-r1)/(z2-z1)); % Nozzle slope angle cosine=abs(cos(Alph)); sine=abs(sin(Alph)); Tr=Pressure*cosine; % Radial pressure force Tz=Pressure*sine; % Vertical pressure force Ft=pi*lcontact/3*[(2*r1+r2)*Tr; (2*r1+r2)*Tz; (r1+2*r2)*Tr; (r1+2*r2)*Tz]; % Elementary surface force vector F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Ft(1:2,1); % Master load vector assemblage F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Ft(3:4,1); end end for I=0:P-1 x=[18+100*I 36+100*I 50+100*I 64+100*I 82+100*I 100+100*I]; % Surface elements loaded (atmosphere pressure) for e=x u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=abs(z2-z1); % Contact length (outside) Alph=atan((r2-r1)/(z2-z1)); % Nozzle slope angle cosine=abs(cos(Alph)); sine=abs(sin(Alph)); Tr=Pressure*cosine; % Radial pressure force Tz=Pressure*sine; % Vertical pressure force Ft=pi*lcontact/3*[(2*r1+r2)*Tr; (2*r1+r2)*Tz; (r1+2*r2)*Tr; (r1+2*r2)*Tz]; % Elementary surface force vector F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Ft(1:2,1); % Master load vector assemblage F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Ft(3:4,1);

99

end end

% BOUNDARY CONDITIONS x=[1:20]; % Known displacements (14 for 7 clamped nodes) y=[21:118*P+20]; % Unknown nodes displacements SaveM=zeros(118*P+20,118*P+20); % Save matrix for i=y for j=y SaveM(i,j)=M(i,j); % Copying some mass matrix components end end for i=x % Transforming the mass matrix to respect boundary conditions M(i,1:118*P+20)=0; M(1:118*P+20,i)=0; M(i,i)=1; end for i=y for j=y M(i,j)=SaveM(i,j); % Recopying the mass matrix components end end SaveDamp=zeros(118*P+20,118*P+20); % Save matrix for i=y for j=y SaveDamp(i,j)=Damp(i,j); % Copying some mass matrix components end end for i=x % Transforming the mass matrix to respect boundary conditions Damp(i,1:118*P+20)=0; Damp(1:118*P+20,i)=0; Damp(i,i)=1; end for i=y for j=y Damp(i,j)=SaveDamp(i,j); % Recopying the mass matrix components end end SaveK=zeros(118*P+20,118*P+20); % Save matrix for i=y for j=y SaveK(i,j)=K(i,j); % Copying some stiffness matrix components end end

100

for i=x % Transforming the K matrix to respect boundary conditions K(i,1:118*P+20)=0; K(1:118*P+20,i)=0; K(i,i)=1; end for i=y for j=y K(i,j)=SaveK(i,j); % Recopying the stiffness matrix components end end KoverM=inv(M)*K; % Matrix K/M = wÂ˛ [V,D]=eig(KoverM); % Computing eigenvectors and eigenvalues of K/M M=V'*M*V; % Diagonalizing the mass matrix Damp=V'*Damp*V; % (no-diagonlization possible) K=V'*K*V; % Diagonalizing the stiffness matrix F=V'*F; AH=1/(dt^2)*M+1/(2*dt)*Damp; % Modified matrix for time marching SaveAH=zeros(118*P+20,118*P+20); % Save matrix for i=y for j=y SaveAH(i,j)=AH(i,j); % Copying some stiffness matrix components end end for i=x % Transforming the K matrix to respect boundary conditions AH(i,1:118*P+20)=0; AH(1:118*P+20,i)=0; AH(i,i)=1; end for i=y for j=y AH(i,j)=SaveAH(i,j); % Recopying the stiffness matrix components end end Xminus=zeros(118*P+20,1); % Initializing displacements at t and t-dt X=zeros(118*P+20,1); EUHAR=zeros(1,timelong); for date=1:timelong % Time marching loop BON=F-(K-2/dt^2*M)*X-(1/dt^2*M-1/(2*dt)*Damp)*Xminus; % Modified load vector for time marching BON(1:20,:)=0; % Modifying the BON vector to respect boundary conditions Xplus=AH\BON; % Solving the displacement Xminus=X; % Updating displacements at t-dt and t

101

X=Xplus; % POST-PROCESSING Displacement=zeros(118*P+20,1); Displacement=0.1*V*Xplus; NewNodes=zeros(59*P+10,2); % Displacement added to initial position giving the final shape for n=1:59*P+10 NewNodes(n,1)=GlobalNodes(n,1)+Displacement(2*n-1,1); % Adding the displacements to the initial coordinates NewNodes(n,2)=GlobalNodes(n,2)+Displacement(2*n,1); end EUHAR(1,date)=NewNodes(59*P+10,1); end % (time marching) set(figure,'Name','NOZZLE OSCILLATIONS') plot(EUHAR, 'LineWidth',3,'Color','b'); title('Nozzle bottom position','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('n*dt','FontName','Georgia','FontWeight','Bold'); ylabel('Radial position','FontName','Georgia','FontWeight','Bold');

2.2.1. Nonlinear (heat transfer) This code provides results for heat transfer only. It deals with nonlinear radiation and transient-state. % % % % %

COMPUTATIONAL ENGINEERING ARIANE 5 NOZZLE CALCULATION HEAT TRANSFER FINITE ELEMENT CODE TRANSIENT-STATE NONLINEAR ANALYSIS

% PHYSICAL DATA % Heat Transfer kond0=100; % Inconel heat conductivity at T=0°K (W/m/°K) kondT=0.05; % Inconel temperature-dependent heat conductivity coefficient >>> kond(T)=kond0+kondT*T cap=500; % Inconel heat capacitance (J/°K/kg) ro=9000; % Inconel density (kg/m^3) hturbulent=5000; % Convection turbulent coefficient with the combustion gas (W/m²/°K) hlaminar=2000; % Convection laminar coefficient with the combustion gas (W/m²/°K) hcool=20000; % Convection coefficient with the liquid nitrogen (W/m²/°K) hout=1000; % Convection coefficient with the outside air (W/m²/°K) Tcombustion=3500; % Temperature in the nozzle (°K)

102

Tout=300; % Outside air temperature (°K) Tcool=200; % Liquid nitrogen temperature (°K) epsilon0=0.5; % Inconel radiative emissivity at T=300°K epsilonT=5*10^-5; % Inconel temperature-dependent radiative emissivity >>> epsilon(T)=epsilon0+epsilonT*T SIGMA=5.6697*10^-8; % Stefan-Boltzmann constant (W/m²/°K^4) Tinit=Tout; % Initial temperature (°K) % Time marching dt=0.01; % Time step for temporal integration in transient state (s) timelong=2000; % Number of dt duration time steps % Pipe Height=0.06; % Height of the W=0.04; % Width of the pipe wint=0.04; % Internal nozzle wext=0.02; % External nozzle wh=0.02; % Space between two

pipe thickness thickness pipes in Z

P=2; % Number of pipes SIZE=(Height+2*wh)*P; % Total size of the nozzle % GEOMETRY AND MESHING % TABLE OF CONNECTIVITIES Connec=[8 1 2 8 2 9 9 2 3 9 3 10 10 3 4 10 4 11 11 4 12 12 4 5 12 5 13 13 5 6 13 6 14 7 14 6 15 8 9 15 9 16 16 9 10 16 10 17 17 10 11 18 17 11 19 18 11 11 12 19 19 12 20 20 12 13 20 13 21 14 21 13 22 15 16 22 16 23 23 16 17 17 24 23 25 19 26

103

26 26 21 28 28 29 24 31 32 32 27 34 35 35 30 37 37 38 33 40 41 41 36 44 44 45 39 47 48 48 49 49 42 43 50 51 51 52 46 54 55 55 56 56 57 57 57 58 58 59 53

19 20 27 22 23 23 30 25 25 26 33 28 28 29 36 31 32 32 39 34 34 35 42 37 38 38 46 40 40 41 42 42 43 44 44 44 45 45 53 47 47 48 48 49 49 50 51 51 52 52 60

20 27 20 23 29 24 29 32 26 33 26 35 29 36 29 32 38 33 38 41 35 42 35 38 45 39 45 48 41 49 41 50 50 50 51 45 52 46 52 55 48 56 49 57 50 51 58 52 59 53 59]; % Elementary connectivities table

% NODES COORDINATES Nodes=zeros(60,2); % Coordinates table for a SINGLE pipe, function of its dimensions Nodes(1:7,1:2)=[0 0; wint/2 0; wint 0; wint+W/2 0; wint+W 0; wint+W+wext/2 0; wint+W+wext 0];

104

Nodes(8:14,1:2)=[0 wh/2; wint/2 wh/2; wint wh/2; wint+W/2 wh/2; wint+W wh/2; wint+W+wext/2 wh/2; wint+W+wext wh/2]; Nodes(15:21,1:2)=[0 wh; wint/2 wh; wint wh; wint+W/2 wh; wint+W wh; wint+W+wext/2 wh; wint+W+wext wh]; Nodes(22:27,1:2)=[0 wh+Height/4; wint/2 wh+Height/4; wint wh+Height/4; wint+W wh+Height/4; wint+W+wext/2 wh+Height/4; wint+W+wext wh+Height/4]; Nodes(28:33,1:2)=[0 wh+Height/2; wint/2 wh+Height/2; wint wh+Height/2; wint+W wh+Height/2; wint+W+wext/2 wh+Height/2; wint+W+wext wh+Height/2]; Nodes(34:39,1:2)=[0 wh+3*Height/4; wint/2 wh+3*Height/4; wint wh+3*Height/4; wint+W wh+3*Height/4; wint+W+wext/2 wh+3*Height/4; wint+W+wext wh+3*Height/4]; Nodes(40:46,1:2)=[0 wh+Height; wint/2 wh+Height; wint wh+Height; wint+W/2 wh+Height; wint+W wh+Height; wint+W+wext/2 wh+Height; wint+W+wext wh+Height]; Nodes(47:53,1:2)=[0 wh+Height+wh/2; wint/2 wh+Height+wh/2; wint wh+Height+wh/2; wint+W/2 wh+Height+wh/2; wint+W wh+Height+wh/2; wint+W+wext/2 wh+Height+wh/2; wint+W+wext wh+Height+wh/2]; Nodes(54:60,1:2)=[0 wh+Height+wh; wint/2 wh+Height+wh; wint wh+Height+wh; wint+W/2 wh+Height+wh; wint+W wh+Height+wh; wint+W+wext/2 wh+Height+wh; wint+W+wext wh+Height+wh]; GlobalConnec=zeros(80*P,3); % Extension of connectivities and coordinates from 1 to P pipes GlobalNodes=zeros(53*P+7,2); GlobalConnec(1:80,1:3)=Connec(1:80,1:3); GlobalNodes(1:60,1:2)=Nodes(1:60,1:2); for i=0:P-2 % Extension loop GlobalConnec(81+80*i:160+80*i,1:3)=Connec(1:80,1:3)+53*(1+i); GlobalNodes(61+53*i:113+53*i,1)=Nodes(8:60,1); GlobalNodes(61+53*i:113+53*i,2)=Nodes(8:60,2)+(wh+Height+wh)*(1+i); % Offset of one pipe heigth end for e=1:53*P+7 GlobalNodes(e,1)=GlobalNodes(e,1)+0.5+0.15*(GlobalNodes(e,2)+0.5)^0.5; % Generating the parabolic curve of the nozzle end

% HEAT TRANSFER % CONDUCTIVITY AND CAPACITANCE MATRICES % SOLUTION Tm=zeros(53*P+7,1); % Initial temperature Tm(:,1)=Tinit; % Setting the initial temperature AVERAGE=zeros(1,timelong); % Average temperature vector for date=1:timelong % Time marching loop Tn=Tm; % Initializing the temperature for the first loop of the nonlinear solver iteration=0; % Initializing the number of iterations due to nonlinear

105

solving convergence=1; % Initializing the convergence criterion, far from the end condition while convergence>0.01 % Nonlinear loop: checking the convergence criterion iteration=iteration+1; % Updating the iteration number K=zeros(53*P+7,53*P+7); % Master heat conductivity matrix C=zeros(53*P+7,53*P+7); % Master heat capacitance matrix for e=1:80*P % Loop on all elements k=zeros(3,3); % Elementary heat conductivity matrix c=zeros(3,3); % Elementary heat capacitance matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); b1=z2-z3; % B matrix components b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=abs(0.5*det(Delta)); % Area of the element B=1/(2*Area)*[b1 b2 b3; c1 c2 c3]; % Elementary B matrix Taverage=1/3*(Tm(u)+Tm(v)+Tm(w)); % Average temperature over the element for temperature-dependent properties kond=kond0+kondT*Taverage; % Temperature-dependent heat conductivity k=1/3*Area*(r1+r2+r3)*B'*kond*B; % Elementary conductivity matrix c=1/60*ro*cap*Area*[6*r1+2*r2+2*r3 2*r1+2*r2+r3 2*r1+r2+r3 2*r1+2*r2+r3 2*r1+6*r2+2*r3 r1+2*r2+2*r3 2*r1+r2+2*r3 r1+2*r2+2*r3 2*r1+2*r2+6*r3]; % Elementary heat capacitance matrix t=[u v w]; % Connectivities for the master matrices assemblage x=0;

106

for i=t x=x+1; y=0; for j=t y=y+1; K(i,j)=K(i,j)+k(x,y); % Master heat conductivity matrix assemblage

C(i,j)=C(i,j)+c(x,y); % Master heat capacitance matrix

assemblage

end end

end % (elements) Q=zeros(53*P+7,1); % Master heat load vector % CONVECTION MATRIX H=zeros(53*P+7,53*P+7); % Master convection matrix for I=0:P-1 % Loop extending the geometry from 1 to P pipes for e=[1+80*I 13+80*I 25+80*I 33+80*I 41+80*I 49+80*I 57+80*I 69+80*I]; % Elements exposed to convection (inside combustion) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); za=1/2*(z1+z2); % Average altitude of the element lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (inside) Taverage=1/2*(Tm(u)+Tm(v)); % Average temperature over the contact length for temperature-dependent properties epsilon=epsilon0+epsilonT*Taverage; % Temperature-dependent radiative emissivity hr=SIGMA*epsilon*(Taverage^2+Tcombustion^2)*(Taverage+Tcombustio n); % Convection-like temperature-dependent radiative coefficient if za<SIZE/2 % Determining laminar or turbulent flow Hc=hlaminar; % Laminar else Hc=hturbulent; % Turbulent end

107

hglobal=Hc+hr; % Global convection-like coefficient kh=1/12*hglobal*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hglobal*Tcombustion*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage

end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector

assemblage

end x=x+1; y=0; for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage

end end end % (combustion)

for e=[18+80*I 19+80*I 28+80*I 29+80*I 36+80*I 37+80*I 44+80*I 45+80*I 52+80*I 53+80*I 62+80*I 63+80*I]; % Elements exposed to convection (liquid nitrogen) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (nitrogen) h=1/12*hcool*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hcool*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary

108

convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage

end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector

assemblage

end x=x+1; y=0; for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage

end end end

% (nitrogen)

for e=[12+80*I 24+80*I 32+80*I 40+80*I 48+80*I 56+80*I 68+80*I 80+80*I]; % Elements exposed to convection (outside air) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (outside) Taverage=1/2*(Tm(u)+Tm(v)); % Average temperature over the contact length for temperature-dependent properties epsilon=epsilon0+epsilonT*Taverage; % Temperature-dependent radiative emissivity hr=SIGMA*epsilon*(Taverage^2+Tout^2)*(Taverage+Tout); % Convection-like temperature-dependent radiative coefficient hglobal=hout+hr; % Global convection-like coefficient kh=1/12*hglobal*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix

109

rh=1/6*hglobal*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assembliage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage

end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector

assemblage

end x=x+1; y=0; for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage

end end end

% End (outside)

end % (pipes) K=K+H; % Master global matrix for both conduction and convection newK=0.5*K+1/dt*C; % Modified matrix for time marching newQ=(-0.5*K+1/dt*C)*Tn+Q; % Modified load vector for time marching Tmplus=newK\newQ; % Solving the temperature (m-th iteration of n-th iteration) Tminus=Tm; % Saving the precedent solution before updating it, for convergence checking Tm=Tmplus; % Update of the m-th nonlinear iteration % CONVERGENCE sum=0; for i=1:53*P+7 sum=sum+abs((Tmplus(i,1)-Tminus(i,1))/Tminus(i,1))*100; % Summing relative differences with previous iteration, in percent end convergence=sum/(53*P+7); % Average of the differences in percent > convergence criterion check(iteration,1)=convergence; % Saving the convergence value in a

110

vector end % (while;nonlinearities) %{ newcheck=zeros(iteration-1,1); % New convergence criterion (without the first component, irrelevant due to arbitrary initialisation) newcheck(1:iteration-1,1)=check(2:iteration,1); set(figure,'Name','Convergence (Temperature)') % Plot of the convergence criterion evolution plot(newcheck,'LineWidth',3); title('CONVERGENCE','FontWeight','Bold','FontSize',14,'FontName','Georgia'); xlabel('Number of iterations','FontName','Georgia','FontWeight','Bold'); ylabel('Difference in %','FontName','Georgia','FontWeight','Bold'); %} % POST-PROCESSING G=zeros(7*P+1,7); % Matrix representing the geometry of the WHOLE structure u=0; % Assembling G for i=1:3 for j=1:7 u=u+1; G(i,j)=Tn(u,1); end end for i=4:6 for j=[1:3 5:7] u=u+1; G(i,j)=Tn(u,1); end end G(4:6,4)=Tcool; % Liquid nitrogen temperature inside the pipe for i=7:9 for j=1:7 u=u+1; G(i,j)=Tn(u,1); end end for I=1:P-1 for i=2+7*I:3+7*I for j=1:7 u=u+1; G(i,j)=Tn(u,1); end end for i=4+7*I:6+7*I for j=[1:3 5:7] u=u+1; G(i,j)=Tn(u,1); end end

111

G(4+7*I:6+7*I,4)=Tcool; for i=7+7*I:9+7*I for j=1:7 u=u+1; G(i,j)=Tn(u,1); end end end % (pipes) g=zeros(9,7); % Matrix representing the geometry of a SINGLE pipe g(1:9,1:7)=G(1:9,1:7); x=[0 wint/2 wint wint+W/2 wint+W wint+W+wext/2 wint+W+wext]; % Horizontal vector for plot grid y=[0; wh/2; wh; wh+Height/4; wh+Height/2; wh+3*Height/4; wh+Height; wh+Height+wh/2; wh+Height+wh]; % Vertical vector for plot grid Y=zeros(7*P+1,1); Y(1:8,1)=y(1:8,1); for I=1:P-1 Y(2+7*I:9+7*I,1)=y(2:9,1)+(wh+Height+wh/2)*I; % Extending the vertical vector end %{ set(figure,'Name','TEMPERATURE FIELD') % Plot of the solution subplot(2,2,[1 3]); pcolor(x,Y,G); % Temperature field in the WHOLE structure title('WHOLE STRUCTURE','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); axis equal shading interp subplot(2,2,2); pcolor(x,y,g); % Temperature field in ONE pipe title('FIRST PIPE ZOOM','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Radius','FontName','Georgia','FontWeight','Bold'); ylabel('Altitude','FontName','Georgia','FontWeight','Bold'); axis equal shading interp %} sum=0; % Initializing the sum of the nodal temperatures for t=1:53*P+7 % Loop on all the nodes sum=sum+Tn(t,1); % Adding the nodal temperatures end

112

av=sum/(53*P+7); % Average temperature over the structure AVERAGE(1,date)=av; % Average temperature at this date end % (time marching) set(figure,'Name','TEMPERATURE EVOLUTION') % Plot of the solution plot(AVERAGE,'linewidth',4); % Plot of the average temperature evolution in the time title('TEMPERATURE HISTORY','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('Time (n*dt)','FontName','Georgia','FontWeight','Bold'); ylabel('Temperature','FontName','Georgia','FontWeight','Bold');

2.2.2. Nonlinear (structural dynamics) This code provides results for nonlinear structural dynamics. It also computes the temperature because it has an impact on the stiffness, but this is not the main goal of this code. % % % % %

COMPUTATIONAL ENGINEERING ARIANE 5 NOZZLE CALCULATION STRUCTURAL DYNAMICS FINITE ELEMENT CODE TRANSIENT-STATE NONLINEAR ANALYSIS

% PHYSICAL DATA % Heat Transfer kond=100; % Inconel heat conductivity cap=460; % Inconel heat capacitance (J/°K/kg) hcombustion=20000; % Convection coefficient with the combustion gaz (W/m²/°K) hout=200; % Convection coefficient with the outside air (W/m²/°K) hcool=2000; % Convection coefficient with the liquid nitrogen (W/m²/°K) Tcombustion=3500; % Temperature in the nozzle (°K) Tout=300; % Outside air temperature (°K) Tcool=250; % Liquid nitrogen temperature (°K) Tinit=Tout; % Initial temperature (°K) % Solid Mechanics E0=210*10^9; % Inconel Young modulus at T=300°K (Pa) ET=-1*10^7; % Inconel temperature dependant Young modulus coefficient >>> E(T)=E0+ET*T nu=0.41; % Inconel Poisson ratio (dimensionless) ro=8400; % Inconel density (kg/m^3) dmp=1*10^8; % Inconel viscous damping factor (N*s/m) g=9.81; % Earth acceleration (m/s²) acc=3; % Rocket acceleration (m/s²) Acc=g+acc; % Total acceleration on the nozzle Pressure=120*10^5; % Pressure in the nozzle (Pa) Patm=1*10^5; % Atmospheric pressure (Pa) Alpha=1*10^-18; % Inconel thermal expansion coefficient (°K^-1)

113

Tzero=300; % No-thermal strain Inconel reference temperature (째K) DECREASE=0; % Exponential decreasing pressure coefficient >>> Pressure=Pressure*exp(-DECREASE*Displacement) % Transient solving dt=0.0000001; % Time step for temporal integration in transient state (s) timelong=2000; % Number of dt duration time steps % Pipe data P=2; % Number of pipes Height=0.06; % Height of the pipe W=0.04; % Width of the pipe wint=0.02; % Internal nozzle thickness wext=0.04; % External nozzle thickness wh=0.02; % Distance between two pipes in Z

% GEOMETRY AND MESHING % TABLE OF CONNECTIVITIES Connec=[11 1 2 11 2 12 2 3 12 12 3 13 3 4 13 13 4 14 4 5 14 14 5 15 5 6 15 15 6 16 16 6 17 17 6 7 7 18 17 7 8 18 18 8 19 19 8 9 19 9 20 10 20 9 21 11 12 21 12 22 22 12 13 22 13 23 23 13 14 23 14 24 24 14 15 24 15 25 25 15 16 26 25 16 27 26 16 27 16 17 27 17 28 28 17 18 28 18 29 29 18 19

114

29 20 31 31 32 32 33 33 34 25 36 37 37 38 38 30 40 41 32 32 42 43 34 35 46 46 47 47 48 39 50 40 41 41 42 42 43 43 44 44 45 55 46 56 57 57 58 49 60 50 51 51 52 52 53 53 54 54 55 65 56

19 30 21 22 22 23 23 24 24 35 27 27 28 28 29 39 31 31 42 33 33 33 44 44 36 37 37 38 38 49 40 41 52 42 53 43 54 44 55 45 46 46 47 47 47 48 48 59 50 51 62 52 63 53 64 54 65 55 56 56 57

30 19 22 32 23 33 24 34 25 34 37 28 38 29 39 29 41 32 41 42 43 34 43 34 37 47 38 48 39 48 51 51 51 52 52 53 53 54 54 55 55 56 56 57 48 58 49 58 61 61 61 62 62 63 63 64 64 65 65 66 66

115

66 67 67 68 59

57 57 58 58 69

67 58 68 59 68];

% NODES COORDINATES Nodes=zeros(69,2); % Coordinates table for a SINGLE pipe, function of its dimensions Nodes(1:10,1:2)=[0 0; wint/4 0; wint/2 0; 3*wint/4 0; wint 0; wint+W/2 0; wint+W 0; wint+W+wext/3 0; wint+W+2*wext/3 0; wint+W+wext 0]; Nodes(11:20,1:2)=[0 wh/2; wint/4 wh/2; wint/2 wh/2; 3*wint/4 wh/2; wint wh/2; wint+W/2 wh/2; wint+W wh/2; wint+W+wext/3 wh/2; wint+W+2*wext/3 wh/2; wint+W+wext wh/2]; Nodes(21:30,1:2)=[0 wh; wint/4 wh; wint/2 wh; 3*wint/4 wh; wint wh; wint+W/2 wh; wint+W wh; wint+W+wext/3 wh; wint+W+2*wext/3 wh; wint+W+wext wh]; Nodes(31:39,1:2)=[0 wh+Height/2; wint/4 wh+Height/2; wint/2 wh+Height/2; 3*wint/4 wh+Height/2; wint wh+Height/2; wint+W wh+Height/2; wint+W+wext/3 wh+Height/2; wint+W+2*wext/3 wh+Height/2; wint+W+wext wh+Height/2]; Nodes(40:49,1:2)=[0 wh+Height; wint/4 wh+Height; wint/2 wh+Height; 3*wint/4 wh+Height; wint wh+Height; wint+W/2 wh+Height; wint+W wh+Height; wint+W+wext/3 wh+Height; wint+W+2*wext/3 wh+Height; wint+W+wext wh+Height]; Nodes(50:59,1:2)=[0 3*wh/2+Height; wint/4 3*wh/2+Height; wint/2 3*wh/2+Height; 3*wint/4 3*wh/2+Height; wint 3*wh/2+Height; wint+W/2 3*wh/2+Height; wint+W 3*wh/2+Height; wint+W+wext/3 3*wh/2+Height; wint+W+2*wext/3 3*wh/2+Height; wint+W+wext 3*wh/2+Height]; Nodes(60:69,1:2)=[0 2*wh+Height; wint/4 2*wh+Height; wint/2 2*wh+Height; 3*wint/4 2*wh+Height; wint 2*wh+Height; wint+W/2 2*wh+Height; wint+W 2*wh+Height; wint+W+wext/3 2*wh+Height; wint+W+2*wext/3 2*wh+Height; wint+W+wext 2*wh+Height]; GlobalConnec=zeros(100*P,3); % Extension of connectivities and coordinates from 1 to P pipes GlobalNodes=zeros(59*P+10,2); GlobalConnec(1:100,1:3)=Connec(1:100,1:3); GlobalNodes(1:69,1:2)=Nodes(1:69,1:2); for i=0:P-2 % Extension loop GlobalConnec(101+100*i:200+100*i,1:3)=Connec(1:100,1:3)+59*(1+i); GlobalNodes(70+59*i:128+59*i,1)=Nodes(11:69,1); GlobalNodes(70+59*i:128+59*i,2)=Nodes(11:69,2)+(wh+Height+wh)*(1+i); % Offset of one pipe heigth end for e=1:59*P+10 GlobalNodes(e,1)=GlobalNodes(e,1)+0.5+0.45*(GlobalNodes(e,2)+0.5)^0.5; % Generating the parabolic curve of the nozzle end % HEAT TRANSFER

116

% CONDUCTIVITY AND CAPACITANCE MATRICES K=zeros(59*P+10,59*P+10); % Master heat conductivity matrix C=zeros(59*P+10,59*P+10); % Master heat capacitance matrix for e=1:100*P % Loop on all elements k=zeros(3,3); % Elementary heat conductivity matrix c=zeros(3,3); % Elementary heat capacitance matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); b1=z2-z3; % B matrix components b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=abs(0.5*det(Delta)); % Area of the element B=1/(2*Area)*[b1 b2 b3; c1 c2 c3]; % Elementary B matrix k=1/3*Area*(r1+r2+r3)*B'*kond*B; % Elementary conductivity matrix c=1/60*ro*cap*Area*[6*r1+2*r2+2*r3 2*r1+2*r2+r3 2*r1+r2+r3 2*r1+2*r2+r3 2*r1+6*r2+2*r3 r1+2*r2+2*r3 2*r1+r2+2*r3 r1+2*r2+2*r3 2*r1+2*r2+6*r3]; % Elementary heat capacitance matrix t=[u v w]; % Connectivities for the master matrices assemblage x=0; for i=t x=x+1; y=0; for j=t y=y+1; K(i,j)=K(i,j)+k(x,y); % Master heat conductivity matrix assemblage C(i,j)=C(i,j)+c(x,y); % Master heat capacitance matrix assemblage end end end % (elements)

117

Q=zeros(59*P+10,1); % Master heat load vector % CONVECTION MATRIX H=zeros(59*P+10,59*P+10); % Master convection matrix for I=0:P-1 % Loop extending the geometry from 1 to P pipes for e=[1+100*I 13+100*I 25+100*I 33+100*I 41+100*I 49+100*I 57+100*I 69+100*I]; % Elements exposed to convection (inside combustion) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (inside) kh=1/12*hcombustion*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hcombustion*Tcombustion*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector assemblage end x=x+1; y=0;

end

for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage end

end % (combustion) for e=[18+100*I 19+100*I 28+100*I 29+100*I 36+100*I 37+100*I 44+100*I

118

45+100*I 52+100*I 59+100*I 62+100*I 63+100*I]; % Elements exposed to convection (liquid nitrogen) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (nitrogen) h=1/12*hcool*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hcool*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assemblage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector assemblage end x=x+1; y=0;

end end

for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage end

% (nitrogen)

for e=[12+100*I 24+100*I 32+100*I 40+100*I 48+100*I 56+100*I 68+100*I 100+100*I]; % Elements exposed to convection (outside air) h=zeros(2,2); % Elementary convection matrix u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2);

119

lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Elementary contact length kh=1/12*hout*lcontact*[3*r1+r2 r1+r2; r1+r2 r1+3*r2]; % Elementary convection matrix rh=1/6*hout*Tout*lcontact*[2 1; 1 2]*[r1;r2]; % Elementary convection load vector t=[u v]; % Connectivities for the assembliage x=0; for i=t if i==u Q(i,1)=Q(i,1)+rh(1,1); % Master heat load vector assemblage end if i==v Q(i,1)=Q(i,1)+rh(2,1); % Master heat load vector assemblage end x=x+1; y=0; for j=t y=y+1; H(i,j)=H(i,j)+h(x,y); % Master convection matrix assemblage end end end

%(outside)

end % (pipes) K=K+H; % Master global matrix for both conduction and convection Tn=zeros(59*P+10,1); Tn(:,1)=Tinit; newK=0.5*K+1/dt*C; % Modified matrix for time marching % SOLUTION for date=1:timelong % Time marching loop newQ=(-0.5*K+1/dt*C)*Tn+Q; % Modified load vector for time marching Tnplus=newK\newQ; % Solving the temperature Tn=Tnplus; % Update of the m-th nonlinear iteration end % (time marching)

% SOLID MECHANICS

120

% MASS, DAMPING AND STIFFNESS MATRICES M=zeros(118*P+20,118*P+20); % Master mass matrix Damp=zeros(118*P+20,118*P+20); % Master damping matrix K=zeros(118*P+20,118*P+20); % Master stiffness matrix for e=1:100*P % Loop on all elements m=zeros(6,6); % Elementary mass matrix damp=zeros(6,6); % Elementary damping matrix k=zeros(6,6); % Elementary stiffness matrix u=GlobalConnec(e,1); % Element connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes radial coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); ra=1/3*(r1+r2+r3); % Average radius za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Area of the element B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3; c1 b1 c2 b2 c3 b3]; % Elementary B matrix C=[1-nu nu nu 0; nu 1-nu nu 0; nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix N1sq=6*r1+2*r2+2*r3; % Mass and damping matrix components N2sq=2*r1+6*r2+2*r3; N3sq=2*r1+2*r2+6*r3; N1N2=2*r1+2*r2+r3; N1N3=2*r1+r2+2*r3;

121

N2N3=r1+2*r2+2*r3; NtN=[N1sq 0 0 N1sq N1N2 0 0 N1N2 N1N3 0 0 N1N3

N1N2 0 0 N1N2 N2sq 0 0 N2sq N2N3 0 0 N2N3

N1N3 0; % Mass and damping matrix components 0 N1N3; N2N3 0; 0 N2N3; N3sq 0; 0 N3sq];

m=1/60*ro*Area*NtN; % Elementary mass matrix damp=1/60*dmp*Area*NtN; % Elementary damping matrix Taverage=1/3*(Tn(u)+Tn(v)+Tn(w)); % Average temperature over the element E=E0+ET*Taverage; % Temperature-dependent Young's modulus k=pi*E/(2*Area*(1+nu)*(1-2*nu))*B'*C*B*ra; % Elementary stiffness matrix x=-1; % Beginning the assemblage for i=[u v w] % Element's connectivities x=x+1; y=-1; for j=[u v w] y=y+1; a=1+x; b=1+y; c=a+1; d=b+1; A=2*i-1; B=A+1; C=2*j-1; D=C+1; M(A,C)=M(A,C)+m(1+2*x,1+2*y); % Master mass matrix assemblage M(A,D)=M(A,D)+m(1+2*x,2+2*y); M(B,C)=M(B,C)+m(2+2*x,1+2*y); M(B,D)=M(B,D)+m(2+2*x,2+2*y); Damp(A,C)=Damp(A,C)+damp(1+2*x,1+2*y); % Master damping matrix assemblage

Damp(A,D)=Damp(A,D)+damp(1+2*x,2+2*y); Damp(B,C)=Damp(B,C)+damp(2+2*x,1+2*y); Damp(B,D)=Damp(B,D)+damp(2+2*x,2+2*y); K(A,C)=K(A,C)+k(1+2*x,1+2*y); % Master stiffness matrix assemblage K(A,D)=K(A,D)+k(1+2*x,2+2*y); K(B,C)=K(B,C)+k(2+2*x,1+2*y); K(B,D)=K(B,D)+k(2+2*x,2+2*y);

end

end

end % (elements) % LOAD VECTOR

122

F=zeros(118*P+20,1); % Master load vector % Initial thermal forces for e=1:100*P u=GlobalConnec(e,1); % Element connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); ra=1/3*(r1+r2+r3); % Average radius za=1/3*(z1+z2+z3); % Average altitude a1=r2*z3-r3*z2; % B matrix components a2=r3*z1-r1*z3; a3=r1*z2-r2*z1; b1=z2-z3; b2=z3-z1; b3=z1-z2; c1=r3-r2; c2=r1-r3; c3=r2-r1; N1=a1+b1*ra+c1*za; % B matrix components N2=a2+b2*ra+c2*za; N3=a3+b3*ra+c3*za; Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element Area=0.5*det(Delta); % Area of the element B=[b1 0 b2 0 b3 0; 2*Area*N1/ra 0 2*Area*N2/ra 0 2*Area*N3/ra 0; 0 c1 0 c2 0 c3; c1 b1 c2 b2 c3 b3]; % Elementary B matrix C=[1-nu nu nu 0; nu 1-nu nu 0; nu nu 1-nu 0; 0 0 0 (1-2*nu)/2]; % Elastic modulus matrix Ta=1/3*(Tn(u)+Tn(v)+Tn(w)); % Average temperature over the element Fth=B'*C*Alpha*(Ta-Tzero)*[1; 1; 1; 0]; % Elementary temperature force F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Fth(1:2,1); % Master load vector assembling F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Fth(3:4,1); F(2*w-1:2*w,1)=F(2*w-1:2*w,1)+Fth(5:6,1); end % (elements)

123

%

Body forces

R=0; % Radial volumic body force Z=-ro*Acc; % Vertical volumic body force for e=1:100*P % Loop on all elements u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); w=GlobalConnec(e,3); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); r3=GlobalNodes(w,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); z3=GlobalNodes(w,2); Delta=[1 r1 z1; 1 r2 z2; 1 r3 z3]; % Matrix for the element area Area=0.5*det(Delta); % Area of the element Fb=pi*Area/12*[(2*r1+r2+r3)*R; (2*r1+r2+r3)*Z; (r1+2*r2+r3)*R; (r1+2*r2+r3)*Z; (r1+r2+2*r3)*R; (r1+r2+2*r3)*Z]; % Elementary body force vector F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Fb(1:2,1); % Master load vector assemblage F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Fb(3:4,1); F(2*w-1:2*w,1)=F(2*w-1:2*w,1)+Fb(5:6,1); end % (elements) % Surface forces for I=0:P-1 x=[18+100*I 36+100*I 50+100*I 64+100*I 82+100*I 100+100*I]; % Surface elements loaded (atmosphere pressure) for e=x u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=abs(z2-z1); % Contact length (outside) Alph=atan((r2-r1)/(z2-z1)); % Nozzle slope angle

124

cosine=abs(cos(Alph)); sine=abs(sin(Alph)); Tr=-Patm*cosine; % Radial pressure force Tz=-Patm*sine; % Vertical pressure force Ft=pi*lcontact/3*[(2*r1+r2)*Tr; (2*r1+r2)*Tz; (r1+2*r2)*Tr; (r1+2*r2)*Tz]; % Elementary surface force vector F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Ft(1:2,1); % Master load vector assemblage F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Ft(3:4,1); end end

% BOUNDARY CONDITIONS x=[1:20]; % Known displacements (14 for 7 clamped nodes) y=[21:118*P+20]; % Unknown nodes displacements SaveM=zeros(118*P+20,118*P+20); % Save matrix for i=y for j=y SaveM(i,j)=M(i,j); % Copying some mass matrix components end end for i=x % Transforming the mass matrix to respect boundary conditions M(i,1:118*P+20)=0; M(1:118*P+20,i)=0; M(i,i)=1; end for i=y for j=y M(i,j)=SaveM(i,j); % Recopying the mass matrix components end end SaveDamp=zeros(118*P+20,118*P+20); % Save matrix for i=y for j=y SaveDamp(i,j)=Damp(i,j); % Copying some mass matrix components end end for i=x % Transforming the mass matrix to respect boundary conditions Damp(i,1:118*P+20)=0; Damp(1:118*P+20,i)=0; Damp(i,i)=1; end

125

for i=y for j=y Damp(i,j)=SaveDamp(i,j); % Recopying the mass matrix components end end SaveK=zeros(118*P+20,118*P+20); % Save matrix for i=y for j=y SaveK(i,j)=K(i,j); % Copying some stiffness matrix components end end for i=x % Transforming the K matrix to respect boundary conditions K(i,1:118*P+20)=0; K(1:118*P+20,i)=0; K(i,i)=1; end for i=y for j=y K(i,j)=SaveK(i,j); % Recopying the stiffness matrix components end end KoverM=inv(M)*K; % Matrix K/M = wÂ˛ [V,D]=eig(KoverM); % Computing eigenvectors and eigenvalues of K/M M=V'*M*V; % Diagonalizing the mass matrix Damp=V'*Damp*V; % (no-diagonlization possible) K=V'*K*V; % Diagonalizing the stiffness matrix F=V'*F; AH=1/(dt^2)*M+1/(2*dt)*Damp; % Modified matrix for time marching SaveAH=zeros(118*P+20,118*P+20); % Save matrix for i=y for j=y SaveAH(i,j)=AH(i,j); % Copying some stiffness matrix components end end for i=x % Transforming the K matrix to respect boundary conditions AH(i,1:118*P+20)=0; AH(1:118*P+20,i)=0; AH(i,i)=1; end for i=y for j=y AH(i,j)=SaveAH(i,j); % Recopying the stiffness matrix components end end A=K-2/dt^2*M;

126

B=1/dt^2*M-1/(2*dt)*Damp; Xm=zeros(118*P+20,1); % Initializing nonlinear solving Xnminus=Xm; % Initializing displacements at t-dt Xn=Xm; % Initializing displacements at t for date=1:timelong % Time marching loop iteration=0; % Initializing the number of iterations due to nonlinear solving convergence=1; % Initializing the convergence criterion, far from the end condition while iteration<5 % Avoiding no-stop iteration=iteration+1; % Updating the iteration number % Surface forces for I=0:P-1 % Loop on all pipes x=[1+100*I 19+100*I 37+100*I 51+100*I 65+100*I 83+100*I]; % Surface elements loaded (inside pressure) for e=x u=GlobalConnec(e,1); % Element's connectivities v=GlobalConnec(e,2); r1=GlobalNodes(u,1); % Nodes coordinates r2=GlobalNodes(v,1); z1=GlobalNodes(u,2); z2=GlobalNodes(v,2); lcontact=sqrt((z1-z2)^2+(r1-r2)^2); % Contact length (inside) Alph=atan((r2-r1)/(z2-z1)); % Nozzle slope angle cosine=abs(cos(Alph)); sine=abs(sin(Alph)); Tr=Pressure*cosine; % Radial pressure force Tz=Pressure*sine; % Vertical pressure force Dispaverage=1/2*(Xm(u)+Xm(v)); % Average displacement of the pressurized surface Tr=Tr*exp(-DECREASE*Dispaverage); % Displacement dependent exponential decreasing pressure load Tz=Tz*exp(-DECREASE*Dispaverage); % Displacement dependent exponential decreasing pressure load

vector

Ft=pi*lcontact/3*[(2*r1+r2)*Tr; (2*r1+r2)*Tz; (r1+2*r2)*Tr; (r1+2*r2)*Tz]; % Elementary surface force

127

assemblage

F(2*u-1:2*u,1)=F(2*u-1:2*u,1)+Ft(1:2,1); % Master load vector F(2*v-1:2*v,1)=F(2*v-1:2*v,1)+Ft(3:4,1); end % (inside)

end % (pipes) BON=F-A*Xn-B*Xnminus; BON(1:20,:)=0; % Modifying the BON vector to respect boundary conditions Xmplus=AH\BON; % Solving the displacement Xpast=Xm; Xm=Xmplus; % Updating displacements at t-dt and t % POST-PROCESSING NewNodes=zeros(59*P+10,2); % Displacement added to initial position giving the final shape for n=1:59*P+10 NewNodes(n,1)=GlobalNodes(n,1)+Xm(2*n-1,1); % Adding the displacements to the initial coordinates NewNodes(n,2)=GlobalNodes(n,2)+Xm(2*n,1); end % CONVERGENCE Xpast(:,1)=Xpast(:,1)+0.001; % Adding a small value in order not to divide by zero XmModif(:,1)=Xm(:,1)+0.001; sum=0; for i=1:118*P+20 sum=sum+abs((XmModif(i,1)-Xpast(i,1))/Xpast(i,1))*100; % Difference

in %

end convergence=sum/(118*P+20); % Convergence criterion check(iteration,1)=convergence; end Xnminus=Xn; % Updating displacement at t-dt Xn=Xm; % Updating displacement at t EUHAR(1,date)=NewNodes(59*P+10,1); % Bottom nozzle position at this date end % (time marching) set(figure,'Name','NOZZLE OSCILLATIONS') plot(EUHAR, 'LineWidth',3,'Color','b'); title('Nozzle bottom position','FontName','Georgia','FontSize',14,'FontWeight','Bold'); xlabel('n*dt','FontName','Georgia','FontWeight','Bold');

128

ylabel('Radial position','FontName','Georgia','FontWeight','Bold');

129

BIBLIOGRAPHY

The finite element method for engineers – 4th edition, by Huebner, Dewhirst, Smith and Byrom

Computational engineering, Göran Broman

Introduction to nonlinear finite element analysis, E. Hinton

A finite element primer, E. Hinton

130

Advertisement