Transients in long cylinder with step temperature change
|
11-22-2016, 03:29 PM
(This post was last modified: 11-23-2016 11:05 AM by Ángel Martin.)
Post: #1
|
|||
|
|||
Transients in long cylinder with step temperature change
Transients in long cylinder with step temperature change [ TRT ]
Extension of the TXT program from the ETSII Collection This program calculates the temperature T(r) in points r of an infinite cylinder of radius R, after experiencing a thermal shock – or sudden change of ambient temperature, from To initial to Tf final. Similar to the flat plate case, the Biot number is calculated from its constituent factors. The same data entry process is used like in the infinite plate, only now it is cylindrical symmetry instead. The resulting temperature is expressed as an infinite sum as follows: T(x,t) = Tf + (T0-Tf) SUM { (2/Mn). f(n, r). exp[-a.t.(Mn/R)^2 ]} ; n = 1,2,... With: f(n,r) = J1(Mn). J0(Mn.r/R) / [ J1^2 (Mn) + J0^2(Mn)] And (Mn) are the n roots of the equation defined by: (Mn) J1(Mn) = Bi J0(Mn) Which, leaving the Biot number alone in the second term, can be expressed as the intersection of the Biot number with the function x.J1(x)/J0(x), shown in the graphic (see WolframAlpha), where the asymptotic boundaries will provide a reasonable criteria for the estimations needed by the root-finding routine (more about this later). Example. A very long metal rod of radius R=0.14 has a uniform temperature of 1,000 deg C. It is suddenly immersed into a cooling fluid stream at 50 deg C. Calculate the temperature in its center and outer boundary 15, 30 and 60 minutes after the sudden step temperature change. The physical properties of the material are given below: alpha = 1.66 E-6 m^2/s h = 20,000 kcal/H.m^2.C = 23,260.0 W/m^2 K K = 100 kcal/h.m.C = 116.30 W/m.K The result temperatures are shown in the table below: (warning: very slow convergence!) Code: Point t = 15 min t = 30 min t = 1 hour A few remarks regarding the implementation. By direct inspection of the plot in previous URL, it’s clear that this case is much more demanding on the root-finder algorithm than the previous one. As the Biot number value increases, the intersection with the graphic will occur in zones with a very steep slope, making the identification of the root very tricky – so much so that the FOCAL routine “SLV” is not adequate and misses the roots, even if very fine-tuned search intervals are provided – which is also a difficult affair. To search for each of the Mn roots, the program uses symmetric intervals centered at the initial value, and distance "one", i.e: [ n*(Mn)init - 0.5 ; n*(Mn)init + 0.5] With: (Mn)init = sqr{ (3/2) [ sqr (1+4Bi/3) – 1] In this version we’ve used FROOT instead, also included in the SandMath - which was already required for the Bessel functions, so no more dependencies are added. The estimation for the initial guesses becomes very important for the successful root identification, and the execution times – which are going to be very long regardless; better crank up your turbo emulator for this one! Another important remark is that repeating the calculations for different values of (t, r) (analysis time and distance to the cylinder axis) has been expedited dramatically for subsequent runs with longer times than previous executions). In that case there's no need to re-calculate or find additional Mn roots beyond those already identified, as the contribution of the terms to the infinite sum will be smaller due to the larger argument in the inverse exponential function: f(n, r) . exp[- alpha.t.(Mn/R)^2 ]} This of course is not so straight-forward as one may think, because the series is alternating the sign of its terms so the contributions are not always in the same direction. The program stores the successive roots found in an X-memory file, to be reused when the analysis is repeated with longer values of cooling time. In this way, if the X-mem value is zero then the corresponding root needs to be sought for. The program listing is given below. Note that the ALPHA registers are used by the infinite sum routine to calculate the partials and to store the current term. Because the MCODE function JBS also uses the ALPHA registers for scratch, we’ll use the function A<>RG to preserve ALPHA in {R17-R20} while the general term is being calculated. XROM “?” is a simple data-entry utility functions to save bytes. Be careful if you use arithmetic functions with the value in X – that would alter the expected stack configuration and may be disruptive to the program. Code: 1 LBL "?" And here's the complete listing - feedback is always welcome. Code: 1 LBL "TRT" "To live or die by your own sword one must first learn to wield it aptly." |
|||
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 1 Guest(s)