• No results found

Evaluation of Local Stresses at the Vessel Shell to Nozzle Intersection

N/A
N/A
Protected

Academic year: 2020

Share "Evaluation of Local Stresses at the Vessel Shell to Nozzle Intersection"

Copied!
10
0
0

Loading.... (view fulltext now)

Full text

(1)

20th International Conference on Structural Mechanics in Reactor Technology (SMiRT 20)

Espoo, Finland, August 9-14, 2009

SMiRT 20-Division 6, Paper 2117

Evaluation of Local Stresses at the Vessel Shell to Nozzle Intersect

ion

Andrzej Strzelczyk and San Ho

Ontario Power Generation, 889 Brock Rd., Pickering, Ontario, Canada

[email protected]

Keywords:

FEM, FEA, Local, Stress, Pressure, Vessel, Nozzle, Bijlaard.

1

ABSTRACT

Local stresses, at the intersection of the pressure vessel shell with a nozzle, can be evaluated by Bijlaard or finite

element methods. The first method, which is based on the classical shell theory, is still very common and described in

numerous references like [1] and [2]. The second approach can be implemented by using a shell or a solid finite element

model. This paper compares both approaches and discusses the limitations of the Bijlaard and shell finite element

methods.

The paper demonstrates that for the purpose of ASME Code evaluation, a more practical approach is an automatic

evaluation of the stresses from a solid element model in which one second-order element through-thickness is used. The

advantages of this type of modelling have been discussed in [3]. The geometry of the model can be generated by a

computer program whose input data are vessel and nozzle diameters and thicknesses. An example of a source code of a

program, generating an input deck for Abaqus finite element code [4], is provided.

The proposed approach allows (i) fast evaluation of the stresses, (ii) visualization of stresses and deformation as

well as (iii) investigation of various factors affecting the solution. The output produced by Abaqus can easily be

post-processed for the need of ASME Code [5] evaluation.

2

INTRODUCTION

Although finite element analysis (FEA) has been used for decades, the local stresses at the location of the attachment to

the pressure vessel are still very often evaluated by coarse approximate methods [1,2] which are based on classical shell

theory. The advantage of these methods is simplicity, whereas the disadvantage is limited accuracy. Evaluation of the

local stresses by FEA is more accurate but time consuming (creation and verification of the FEM, then post-processing

results). The objective of this paper is to demonstrate that the local stresses can be evaluated promptly, when the FEM is

prepared and post-processed automatically by a computer program. Another advantage of the proposed approach is that

the user can control numerous factors affecting the solution, such as boundary/loading conditions and material property

(including limit analysis).

3

SOLID FEM - CREATED BY A FORTRAN PROGRAM

The proposed method is explained in an example. The FEM, whose Abaqus input deck was created automatically by a

computer program, is shown in Figure 1.

3.1

Geometry

The origin of the FEM is at the intersection of the cylinder

and nozzle axes Z and Y, respectively. The dimensions of

the model, entered by the user are: outer radii of shell (ORS)

and nozzle (ORN) and their wall thicknesses (TS, TN). The

model is made out of quadratic 20 node elements (Type

C3D20R [4] is used as a default; alternatively type C3D20

may be used in cases when a numerical singularity is

encountered; so far it did not happen while using the

method.)

3.2

Boundary Conditions and Constraints

Tip of the nozzle nodes are kinematically coupled to the reference node #999999 (located on the Y axis), except that the

nodes are free to move in the radial direction. Similarly, the nodes of the vessel end faces are kinematically coupled

(2)

(except radial direction) to their reference nodes #999997, #999998, located in the centres of the end faces. The two

nodes are restrained as ending points of a “simple supported beam” (At #999997 Ux=Uy=Uz= z=0 and at #999998

Ux=Uy= z=0).

3.3

Loading Conditions

The input deck, considers seven “unit” load cases which are defined in Abaqus steps. In the first step, the pressure of

1000 psi is applied to the inner surface of the structure and the end-cap loads are applied at reference nodes #999999

and #999998. In the remaining steps the loads are: Fx = 1000 lb (2nd step), Fy = 1000 lb… and Mz = 1000 lb-in (7th

step); all these concentrated forces are applied at node #999999. The default location of this node is where axis Y

punctures the outer vessel surface. (The location can be modified to the location where the nozzle loads are given.)

3.4

Stress Area of Interest

In the ASME code stress analysis the main areas of interest are: (1) the inner edge of the nozzle/vessel intersection (the

pressure stresses are dominant in this area) and (2) the cross section of the vessel shell by the outer surface of the nozzle

(the stresses caused by the nozzle loads are dominant in this area). The elements relevant to the two areas of interest are

highlighted in Figs. 2 and 3.

Fig. 2:First Area of Interest

Fig. 3: Second Area of Interest

Since the mechanical nozzle load causes maximum stresses at the second area of interest and because only this region is

discussed in [1, 2], this paper concentrates also on this region, even though the method applies to both regions. In

ASME stress evaluation [5], the key stress components are membrane (M) and membrane plus bending stress (M + B).

The M components are the averaged through thickness stress components and M + B are linearized stress components

with respect to the thickness variable. The major acceptance criteria of [5] are that the Tresca invariants evaluated for

membrane and membrane plus bending are below the material limits. For simplicity, the two Tresca stresses are further

denoted as M and M + B, unless otherwise described.

3.5

Automatic Generation of the FEM

The Abaqus input deck for the model shown in Fig. 1 was generated by FORTRAN program cyl_sol, whose source

code is given at the end of the paper, by the command “

cyl_sol 4 22 2 2 6 3

” The first four program parameters describe

geometry and they are:

ORN = 4”, ORS = 22”, TN = 2”, TS = 2”

. The last two parameters define the mesh and they

stand for the number of elements per 90 degree of nozzle circumference and the number of elements per nozzle length.

The name of the input deck

sol_4_22_2_2_6_3.inp

is directly associated with the parameters used. If the user does not

know the program parameters they are displayed once the name of the program is entered. The last two parameters

define the mesh density of the model. By comparing results obtained for different mesh density it can be concluded that

the mesh parameters, 6 and 3 used in this example, are appropriate for all practical cases

.

3.6

Example of Evaluation of Local Stresses

(3)

Abaqus nodal stresses. The nodes to be used for the evaluation of the M stresses are highlighted in Fig. 5 (the other

nodes are appropriate for the M + B stress evaluation).

Fig.4: M+B Stresses

Fig. 5: Location of Nodal M stresses

An example of the output produced by a post-processing program (the source code of the post-processing program

com_cyl_sol

, is not complicated; therefore due to the paper size limit it is not provided) is presented below:

**com_cyl_sol;2009-04-08;07:54:44;G:\data\andrzej\TIP\abaqus_t\NOZZLE~1\NOZ_2_~1\sol_FEM\smirt

** cmd_arg: sol_4_22_2_2_6_3

Notes on stress evaluation

Extrnl load applied at nozzle-axis/outer-shell-surf intrsctn

The load units are: psi (pressure), lbf (forces), in-lbf (mom)

Y - nozzle axis, Z - vessel axis

Origin is at the intersection of vessel/nozzle axes

For the load: p, Fx, Fy, Fz, Mx, My, Mz

0.8000E+03 0.1000E+04 0.2000E+04 0.3000E+04 0.4000E+04 0.5000E+04 0.6000E+04

Tresca_max at the outer surfaces x-section is:

0.9888E+04 30087 30587 <= M , EL#. NODE#

0.1268E+05 30089 31091 <= M + B, EL#. NODE#

For the load: p, Fx, Fy, Fz, Mx, My, Mz

0.1000E+04 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00

Tresca_max at the outer surfaces x-section is:

0.1225E+05 87 587 <= M , EL#. NODE#

0.1588E+05 89 1091 <= M + B, EL#. NODE#

Note that highlighted M + B stress of 12680 psi is the same as

in Figure 4, which was produced directly by Abaqus.

4

SHELL FEM

The local stresses can also be evaluated using a shell finite

element model. As for the solid models an automatic pre- and

post-processing is possible for the shell model. For shell FEM

both type of stresses, that is M and M+B can be obtained

directly from Abaqus plot (for solid models only M+B stresses can be obtained). However this visualizing advantage

does not compensate various modelling difficulties like: (i) modelling pressure at the vessel/nozzle inner edge, (ii)

overlapping of the material at the vessel/nozzle intersection, (iii) inability to model through-thickness-pressure-stress

variation (iv) accounting for the stress components which are ignored in shell modelling, and (v) problematic pressure

and end-cap load values (pressure is applied to the mid-surface, instead to the inner surface; it is not possible to find an

equivalent pressure and end-cap loads which meet all theory requirements). The shell-element version of the solid

model is shown in Figure 6; for better visualization only a quarter of the model is shown.

Our shell FEM can be considered as being created from its solid counterpart by removal of its inner and outer

surfaces nodes. As the internal pressure is applied to the mid-shell surface, its value is equal to the actual pressure

(4)

prorated by the (inner-radius)/(mid-radius) factor. Note that the most-inner-edge-segments of the vessel and nozzle

(“half” of the highlighted region in Figure 6), are needed only for the purpose of pressure application but these

segments, if not modified, create artificial stiffness at the nozzle/vessel juncture. For this reason, the thickness of these

segments was reduced to 1/10 of the actual thickness. The shell model was made out of S8R [4] elements, except the

four rows of the elements (they are highlighted in Figure 6) in the nozzle/vessel juncture which were made out of S4R

[4] elements.

5

FACTORS AFFECTING SOLUTION

The magnitudes of the local stresses are affected by various factors, among which the most important are: (i) nozzle

wall thickness (with or without reinforcement), (ii) mesh size and (iii) boundary conditions. These three factors can be

easily investigated if the model is generated automatically. The effect of the first two factors, for the structure model

loaded internal pressure of 1000 psi, is illustrated in the table below. It is apparent that the third factor (boundary

conditions) is relevant only for the nozzle loads and it is more significant the larger the ORN/ORS ratio is, therefore this

factor is not discussed in the paper.

Table 1:

Effect of the Mesh and the Nozzle Thickness on M and M+B (only p = 1000 psi load)

Case Model

Parameters

M

(ksi)

M+B

(ksi)

Comments

1

4 22 2 2 6 3

12.25

15.88

Benchmark case (solid FEM)

2

4 22 1 2 6 3

17.00

22.06

As case #1 but with 1” nozzle thickness

3

4 22 2 2 8 4

12.11

15.90

As case #1 but with finer mesh

1sh

4 22 2 2 6 3

13.70

15.07

As case #1 but for the shell model

2sh

4 22 1 2 6 3

19.42

20.36

As case #2 but for the shell model

3sh

4 22 2 2 8 4

13.70

15.28

As case #3 but for the shell model

The results indicate that the nozzle thickness significantly affects M and M+B stresses (compare cases 1 vs. 2 and 1sh

vs. 2sh); the mesh size has smaller effect (compare cases 1 vs. 3 and 1sh vs. 3sh) than the type of the model (solid or

shell). (The accuracy of using one element through thickness approach in the evaluation of the M+B stresses has been

discussed in [3].)

6

RESULTS OBTAINED IN THREE DIFFERENT APPROACHES

To illustrate the differences between the results obtained by different methods, the stresses were evaluated for the data

of example 7 from [2] using (1) formulas and coefficients from [2], and (2) solid FEM and (3) shell FEM discussed

before. The geometry of the example is defined by ORS = 30.5”, ORN=7.0”, TS=0.5”, TN=0.5”.

Table 2:

Pressure Stresses Obtained by Different Methods (p = 150 psi)

Case

Method

M (ksi)

M+B(ksi)

Comments

4

Bijlaard

16.92

-

For the pressure load M + B can not be evaluated

(5)

The results illustrate that for this particular case the local stresses are underestimated by the classical method used in

[1,2] (based on Bijlard’s original works assuming that nozzle/attachments are rigid.) Furthermore, the results indicate a

significant effect of the nozzle thickness upon the stresses, but this effect is ignored in the classical approach

7

CONCLUSIONS

The following conclusions can be made from the consideration presented here.

The Bijlaard method, a very useful method prior to the invention of the finite element method, should be

replaced by the finite element method.

The values of the stresses at the nozzle/vessel junction are significantly affected by the two factors: (1)

nozzle-wall-thickness/vessel-wall-thickness ratio and (2) boundary conditions; both factors are considered in the finite

element method, but not in [1, 2].

Generation of the finite element model and evaluation of the stresses can be easily automated by computer

programs.

For evaluation of the local stresses, solid element modelling appears to be more appropriate than shell element

modelling.

Solid element modelling enables reasonable assessment of stresses in both areas of interests (very inner edge

and vessel cross-section), while the shell element modelling appears to be appropriate only to the second area

of interest.

Solid element models created by a computer program have consistent element and node numbering; therefore

these models can be easily adjusted to actual geometry, boundary conditions, nozzle reinforcement and loading

conditions.

ACKNOWLEDGEMENTS

The authors would like to express gratitude to Ontario Power Generation for sponsoring this work.

NOMENCLATURE

FEA - Finite Element Analysis

FEM - Finite Element Model

ORN - Outer Radius of the Nozzle

ORS - Outer Radius of the Shell (Vessel)

TN - wall Thickness of the Nozzle

TS - wall Thickness of the Shell (Vessel)

REFERENCES

[1]

Wichman, K.R., Hopper, A.G. and Mershon, J.L., 1965,

“Local Stresses in Spherical Shells due to External

Loading”, Welding Research Council Bulletin 107, October 20 Update of the March 1979 Revision (original,

August 1965), pp. 68-70.

[2]

Forman B. F., 1981, “Local Stresses in Pressure Vessels”, Third Edition, Pressure Vessel Handbook Pub.

[3]

Strzelczyk, A., Ho S., 2007, “Evaluation of “Linearized” stresses without Linearization” Proceedings of

PVP2007-ICPVT-11 (2007 PVP Conference in San Antonio).

[4]

Abaqus FE Code, V.6-8, Dassault Systems Simulia Inc.,2008

[5]

ASME Code, Section III, Division 1, Sub-section NB., 2008

LISTING OF THE CYL_SOL FORTRAN PROGRAM

The program whose listing is below can be compiled with GNU G77 FORTRAN compiler. Note the order of

listing: first column one through all pages, then column two.

c--- program cyl_sol c---

c The load is applied at the intersection of the nozzle axis with c the outer surface of the shell at its values are:

c p = 1000 psi; (Fx,Fy,Fz) = 1000. lbf; (Mx,My,Mz) = 1000. in-lbf c The origin is at nozzle/cylinder axes intersection

c y is nozzle axis, z is cylinder axes c

c output:(12) cyl_sol.log c (14) - Abaqus main deck

+,'*kinematic coupling,ref node=999999,orientation=o_tip' +,'**'

+,'** Cplng with 2,6 appeaRIS to get better dfrmtn results but for' +,'** solid elements only 2,3 can be used.'

+,'**' +,'n_tip,2,3'

+,'*kinematic coupling,ref node=999997,orientation=o_z' +,'n_zmin_all,2,3'

+,'*kinematic coupling,ref node=999998,orientation=o_z' +,'n_zmax_all,2,3'

(6)

c (15) - *.outside_nodes (include file) c - *.inside_nodes (include file) c external getarg parameter (NARG=8,INC_P_E=1000) logical firstt character*20 arg_i,line*180,fname*80,faba*80,fout*80 +,R_noz*10,R_she*10,o*1 dimension arg_i(NARG) c

i_ = 0 firstt = .true.

call echo_arg_line(iendl,line,n,arg_i) open(12,file='cyl_sol.log',status='replace') read(arg_i(1),*,end=998,err=998) ORN read(arg_i(2),*,end=998,err=998) ORS read(arg_i(3),*,end=998,err=998) tn read(arg_i(4),*,end=998,err=998) ts read(arg_i(5),*,end=998,err=998) n_ediv read(arg_i(6),*,end=998,err=998) n_ecir

if (ORN.gt.ORS) stop '#cyl_sol: R-mid-nozzle > R-mid-shell?' pi = atan(1.)*4.

fn = 1. fs = 1.

write(R_noz,'(e10.4)') 1000. * pi * (ORN-tn)**2 write(R_she,'(e10.4)') 1000. * pi * (ORS-ts)**2 if (mod(n_ediv,2).ne.0) goto 998

n_div = 2 * n_ediv N_I = n_div+1 if (n.eq.NARG) then

read(arg_i(7),*,end=998,err=998) zmax read(arg_i(8),*,end=998,err=998) ymax elseif (n.eq.NARG-2) then

ymax = ORS + 2*ORN zmax = ORS + 2*ORN else

goto 998 endif c

c ns is the shift number and NQI1 is total number of nodes in a quater c

n_cir = 2 * n_ecir ns = n_cir*N_I

n_ex = N_I * (4 * n_ecir + 1)+1 NQI1 = n_ex+n_cir**2-1+ns + n_cir

write(*,'(i6,a)') nqi1,' <= last number on the outer surface' if (nqi1*2>INC_P_E) stop '#cyl_sol: increase size of INC_P_E' c

c delta indicates how much needs to be subtrated in the c circumference to get the highest coordinate of 2 * ORN c

delta = ORS * pi/2. - 2 * ORN faba=arg_i(1)(1:lenli1(arg_i(1)))//'_'//

+arg_i(2)(1:lenli1(arg_i(2)))//'_'//arg_i(3)(1:lenli1(arg_i(3)))// +'_'//arg_i(4)(1:lenli1(arg_i(4)))//'_'//

+arg_i(5)(1:lenli1(arg_i(5)))//'_'//arg_i(6)(1:lenli1(arg_i(6))) ifaba = lenli1(faba)

fname='cyl_sol.'//faba(1:ifaba) fout='sol_'//faba(1:ifaba)//'.inp' open(14,file=fout,status='replace') call dattim(14,'cyl_sol')

fout='sol_'//faba(1:ifaba)//'_q.outside_nodes' write(14,'(a)') '** or_n or_s t_n t_s e_n_div e_s_div' +,'** '//line(1:iendl)

+,'*heading','*preprint,model=yes,echo=yes'

+,'*include,input='//'sol_'//faba(1:ifaba)//'_q.outside_nodes' +,'*include,input='//'sol_'//faba(1:ifaba)//'_q.inside_nodes' o = ' '

1000 open(15,file=fout,status='replace') call dattim(15,'cyl_sol')

write(15,'(a)') '*node,nset=n_ins'//o do 100 i=1,n_ediv + 1

gamma = (pi/2.)/n_div * (i-1) z = ORN * sin(gamma) x = ORN * cos(gamma) alpha = pi/2. - asin(x/ORS) w = alpha * ORS - delta c

c w is the true distance measured in circumferential direction

+,'999997,1,3','999997,6,6','999998,1,2','999998,6,6' +,'*nfill','n_juncture1,n_edge,2,'//str6

write(14,'(a)') '*element,type=c3d20r' N_I1 = n_cir + 1

n1 = n_ex + N_I1 + ns

write(14,'(16(i6,'',''))') 1,1,1+N_I*2,N_I*2+3,3 +, 1+3*I_,1+N_I*2+3*I_,N_I*2+3+3*I_,3+3*I_ +,N_I+1,N_I*2+2,N_I+3,2

+,N_I+1+3*I_,N_I*2+2+3*I_,N_I+3+3*I_ write(14,'(i6,4('','',i6))') ,2+3*I_

+, 1+3*n_h,1+N_I*2+3*n_h,N_I*2+3+3*n_h,3+3*n_h write(14,'(16(i6,'',''))') 1+ns,1+ns,1+N_I*2+ns,N_I*2+3+ns +,3+ns +,1+ns+I_,1+N_I*2+ns+I_,N_I*2+3+ns+I_,3+ns+I_ +,N_I+1+ns,N_I*2+2+ns,N_I+3+ns,2+ns +,N_I+1+ns+I_,N_I*2+2+ns+I_,N_I+3+ns+I_ write(14,'(i6,4('','',i6))') 2+ns+I_ +,1+ns+n_h,1+N_I*2+ns+n_h,N_I*2+3+ns+n_h,3+ns+n_h write(14,'(16(i6,'',''))')

+n1 ,n1 ,n1+2 ,n1+2+2*N_I1 ,n1+2*N_I1 + ,n1+I_,n1+2+I_,n1+2+2*N_I1+I_,n1+2*N_I1+I_ + ,n1+1 ,n1+2+N_I1,n1+2*N_I1+1,n1+N_I1 + ,n1+1 +I_,n1+2+N_I1+I_,n1+2*N_I1+1+I_ write(14,'(i6,4('','',i6))') n1+N_I1+I_

+,n1+n_h,n1+2+n_h,n1+2+2*N_I1 +n_h,n1+2*N_I1+n_h write(14,'(16(i6,'',''))')

+2+ns,ns+1, ns+1+i_ ,ns+3+i_ ,ns+3 + ,ns+1+3*i_, ns+1+4*i_,ns+3+4*i_ ,ns+3+3*i_ + ,ns+1+n_h , ns+2+i_ ,ns+3+n_h ,ns+2 + ,ns+1+7*n_h,ns+2+4*i_,ns+3+7*n_h write(14,'(i6,4('','',i6))') ,ns+2+3*i_

+ ,ns+1+3*n_h, ns+1+5*n_h,ns+3+5*n_h,ns+3+3*n_h write(14,'(a)') '*element,type=c3d20r,elset=e_she1' write(14,'(16(i6,'',''))')

+nco+1+ns ,nco+ns ,n1 ,nco+2*N_I+2+ns ,nco+2+ns + ,nco+ns +I_,n1+I_,nco+2*N_I+2+ns +I_,nco+2+ns+I_ + ,n_ex+ns ,nco+2*N_I+1+ns,nco+2+N_I+ns, nco+1+ns + ,n_ex+ns +I_,nco+2*N_I+1+ns+I_,nco+2+N_I+ns+I_ write(14,'(i6,4('','',i6))') nco+1+ns+I_

+,nco+ns +n_h,n1 +n_h,nco+2*N_I+2+ns +n_h,nco+2+ns+n_h write(14,'(a)')

+'** N_IN_ecirn_ediv ns n_ex nlas nco n1' write(14,'(a,9i6)') '**',N_I,n_ecir,n_ediv,ns,n_ex,nlas,nco,n1 last = nlas + 4 * n_ecir * N_I

do 90 i=1,n_ecir-1 iat = i*2*N_I iab = (i-1)*2*N_I1

write(14,'(16(i6,'',''))') nco+1+iat+ns,n1+iab,n1+iab+N_I1*2 +,nco+iat+2+2*N_I+ns,nco+iat+2+ns +,n1+iab+I_,n1+iab+N_I1*2+I_,nco+iat+2+2*N_I+ns+I_ +,nco+iat+2+ns+I_ +,n_ex+iab+2*N_I1+ns,nco+iat+1+2*N_I+ns +,nco+iat+2+N_I+ns,nco+1+iat+ns +,n_ex+iab+2*N_I1+ns+I_,nco+iat+1+2*N_I+ns+I_ +,nco+iat+2+N_I+ns+I_ write(14,'(i6,4('','',i6))') nco+1+iat+ns+I_,n1+iab+n_h, +n1+iab+N_I1*2+n_h,nco+iat+2+2*N_I+ns+n_h,nco+iat+2+ns+n_h 90 continue

do 100 i=1,n_ecir ia1 = (i-1)*2*N_I ia2 = (i-1)*2 write(14,'(16(i6,'',''))')

+nco+N_I+ia1+ns,nco+ia1+ns,nco+N_I*2+ia1+ns, n1+2+ia2,n1+ia2 +,I_+nco+ia1+ns,I_+nco+N_I*2+ia1+ns,I_+ n1+2+ia2,I_+n1+ia2 + ,nco+N_I+ia1+ns,n_ex+2+ia2+ns,n1+1+ia2,n_ex+ia2+ns +,I_+nco+N_I+ia1+ns,I_+n_ex+2+ia2+ns,I_+n1+1+ia2

write(14,'(i6,4('','',i6))') I_+n_ex+ia2+ns +,n_h+nco+ia1+ns,n_h+nco+N_I*2+ia1+ns,n_h+ n1+2+ia2,n_h+n1+ia2

100 continue

(7)

c

write(15,'(a)') '** '

+ ,'** intersection node number and its coordinates','**' call w2xy(delta,w,ORS,x3d,y3d)

call wcoo(firstt,fs,fn,3,i_, i+ns,x3d,y3d,z) dz = (2 * ORN / n_ediv * (i-1) - z)/N_CIR dw = w/N_CIR

do 110 j=1,N_CIR wj = w-dw*j

call w2xy(delta,wj,ORS,x3d,y3d)

call wcoo(firstt,fs,fn,1,i_,i+N_I*j+ns,x3d,y3d,z+dz*j) 110 continue

100 continue

ors = sqrt(x3d**2 + y3d**2) top_angle = asin(x3d/ors) if (y3d.gt.0) then

bottom_angle = pi - top_angle else

bottom_angle = top_angle endif

do 200 i=n_ediv + 2, 2 * n_ediv + 1 gamma = (pi/2.)/n_div * (i-1) z = ORN * sin(gamma) x = ORN * cos(gamma) alpha = pi/2. - asin(x/ORS) w = alpha * ORS - delta c

c w is the true distance measured in circumferential direction c

call w2xy(delta,w,ORS,x3d,y3d) write(15,'(a)') '** '

+ ,'** 2nd pattern intersection node# and its coordinates','**' call wcoo(firstt,fs,fn,3,i_, i+ns,x3d,y3d,z)

dz = (2 * ORN - z)/N_CIR

dw = (w - (2 * ORN)/n_ediv * (i - n_ediv -1))/N_CIR do 210 j=1,N_CIR

wj = w-dw*j

call w2xy(delta,wj,ORS,x3d,y3d)

call wcoo(firstt,fs,fn,1,i_,i+N_I*j+ns,x3d,y3d,z+dz*j) 210 continue

200 continue

call write_end(n_ex,NQI1,firstt,i_,fn,fs,pi,N_I,n_ecir +,ORS,ORN,R_noz,R_she,bottom_angle,ymax,zmax) if(firstt) then

firstt = .false. i_ = INC_P_E o = '1'

fout='sol_'//faba(1:ifaba)//'_q.inside_nodes ' fn = 1. - tn/ORN

fs = 1. - ts/ORS goto 1000 endif write(*,'(a)') ''

+,'sol_'//faba(1:ifaba)//'.inp <= Abaqus input deck','', +'sol_'//faba(1:ifaba)//'_q.inside_nodes <= include file','', +'sol_'//faba(1:ifaba)//'_q.outside_nodes <= include file','' stop

998 write(*,'(a)') 'FORMAT: cyl_sol or_noz or_shell ' * +//'t_noz t_shell e_noz_div e_shell_div [ymax zmax]' +//'t_noz t_shell e_noz_div e_shell_div'

stop end c******************************************************************** subroutine write_end(n_ex,NQI1,firstt,i_,fn,fs,pi,N_I,n_ecir +,ORS,ORN,R_noz,R_she,bottom_angle,ymax,zmax) c******************************************************************** logical firstt character*6 ninc,ninc2,ninc3,str6,str6_3,R_noz*10,R_she*10,o*1 c

if (firstt) then o=' ' else o='1' endif n_h = i_/2 NI =N_I

n_ediv = (N_I - 1)/2 n_cir = 2 * n_ecir NI1 = n_cir + 1

+ 1+ ns,2,N_I * 2 * n_ecir,N_I * 2 * n_ecir write(14,'(i6,3('','',i6))') 1+ ns,2,nco + 1,nco+1

write(14,'(i6,6('','',i6))') ns+N_I * 2 * n_ecir+1,n_ediv/2,2,2 +,n_ecir,N_I*2,N_I*2 write(14,'(i6,6('','',i6))') ns+nco+2,n_ediv/2-1,2,2,n_ecir +,2*N_I,2*N_I write(14,'(i6,6('','',i6))') n1,n_ecir,2,2,n_ecir-1 +,(n_cir+1)*2,(n_cir+1)*2 write(14,'(a)') '*elset,elset=e_she1_c,generate' write(14,'(i6,2('','',i6))') 1+ns,1+ns+2*(n_ediv-1),2

write(14,'(a)') '*solid section,elset=e_no_all,material=m_solid' +,'*solid section,elset=e_sh_all,material=m_solid'

+,'*material,name=m_solid' +,'*elastic'

+,'3.e7,0.3' +,'**'

+,'** creation of the other three quadrants' +,'**'

+,'*nset,nset=n_q1,elset=e_noz1' +,'*nset,nset=n_q1,elset=e_she1'

+,'*ncopy,reflect=mirror,old set=n_q1,new set=n_q2,change number'//

+ '=10000' +,'0.,0.,0.,1.,0.,0.' +,'0.,1.,0.'

+,'*ncopy,shift,old set=n_q1,new set=n_q3,change number=20000' +,'0.,0.,0.'

+,'0.,0.,0.,0.,1.,0.,180.'

+,'*ncopy,reflect=mirror,old set=n_q1,new set=n_q4,change number'//

+ '=30000' +,'0.,0.,0.,0.,0.,1.' +,'0.,1.,0.'

+,'*elcopy,old set=e_noz1,new set=e_noz2,element shift=10000,'// +'reflect,shift nodes=10000'

+,'*elcopy,old set=e_noz1,new set=e_noz3,element shift=20000,'// +'shift nodes=20000'

+,'*elcopy,old set=e_noz1,new set=e_noz4,element shift=30000,'// +'reflect,shift nodes=30000'

+,'*elcopy,old set=e_she1,new set=e_she2,element shift=10000,'// +'reflect,shift nodes=10000'

+,'*elcopy,old set=e_she1,new set=e_she3,element shift=20000,'// +'shift nodes=20000'

+,'*elcopy,old set=e_she1,new set=e_she4,element shift=30000,'// +'reflect,shift nodes=30000' +,'*elset,elset=e_sh_all' +,'e_she1,e_she2,e_she3,e_she4' +,'*elset,elset=e_no_all' +,'e_noz1,e_noz2,e_noz3,e_noz4' +,'*mpc' +,'tie,n_yz4,n_yz1' +,'tie,n_yz3,n_yz2' +,'tie,n_xy2,n_xy1' +,'tie,n_xy4,n_xy3' do 180 i=1,3

write(14,'(a,2('','',i6))') 'tie',last-NI+1+n_h*(i-1)+20000 + ,last-NI+1+n_h*(i-1)

180 continue

write(14,'(a)') '*elset,elset=e_she_c,generate' do 105 j=1,4

JNQ = (j-1)*10000

write(14,'(i6,2('','',i6))') 1+ns+JNQ,1+ns+2*(n_ediv-1)+JNQ,2 105 continue

write(14,'(a)') '*elset,elset=e_ed_4,generate' do 200 i=1,2

ka = (i - 1)*20000

write(14,'(i6,2('','',i6))') ns+2+ka,ns+2+ka+(n_ediv-1)*2,2 200 continue

write(14,'(a)') '*elset,elset=e_ed_5,generate' do 210 i=1,2

ka = i*20000 - 10000

write(14,'(i6,2('','',i6))') ns+2+ka,ns+2+ka+(n_ediv-1)*2,2 210 continue

(8)

ns = n_cir*N_I

write(15,'(a)') '*nset,generate,nset=n_line'//o write(15,'(i6,a,i6)') N_I * 2 * n_ecir+1+ns+i_ +,',',N_I * 2 * n_ecir+1+n_ediv+ns+i_

write(15,'(a,i6,a,i6)') '*ncopy,NEW SET=N_O'//o//',shift,old set=' +//'n_line'//o//',change number=',N_I,',multiple=',n_cir-1 angle = bottom_angle*180/pi/n_cir

write(15,'(a/a,f10.7)') '0.,0.,0.','0.,0.,0.,0.,0.,-1.,',angle write(15,'(a)') '*nset,generate,nset=n_cline'//o nlas = N_I * (n_cir + 1)

nco = nlas - n_ediv last = nlas + 4 * n_ecir * N_I

write(15,'(i6,a,i6)') nco+1+ns+i_,',',nlas+ns+i_ write(15,'(a,i6,a)') '*ncopy,shift,change number=',ns +,',old set=n_cline'//o//',new set=n_zmax'//o deltaz = zmax - 2 * ORN

write(15,'(a,e14.8)') '0.,0.,',deltaz write(15,'(a)') '0.,0.,0.,0.,0.,-1.,0' +,'*nfill,NSET=N_O'//o

write(15,'(2(a,i6))') 'n_cline'//o//',n_zmax'//o//',',n_cir,',' +,N_I

write(15,'(a)') '**','** non-typical segment nodes','**' +,'*nset,nset=n_corner'//o

write(15,'(i6,a)') nco+ns+i_,','

write(15,'(a,i6,a)') '*ncopy,NEW SET=N_O'//o// +',shift,change number=',nco,',old set=n_corner'//o write(15,'(a,e14.8)') '0.,0.,',deltaz/n_cir

write(15,'(a)') '0.,0.,0.,0.,0.,-1.,0,'

write(15,'(a,i6)') '*ncopy,NEW SET=N_O'//o//',shift,old set='// +'n_corner'//o//',change number=',nco + n_cir**2 - 1 write(15,'(a,e14.8)') '0.,0.,',deltaz

write(15,'(a)') '0.,0.,0.,0.,0.,-1.,0,' +,'*ngen,nset=N_L1'//o NQI2 = nqi1 * 2 write(ninc,'(i6)') NQI1 write(ninc2,'(i6)') NQI1*2 write(ninc3,'(i6)') NQI1*3

write(15,'(i6,2('','',i6))') n_ex+ns+i_,n_ex+n_cir**2-1+ns+i_ +,n_cir+1

write(15,'(a,i6)') '*ncopy,NEW SET=N_O'//o//',shift,old set='// +'N_L1'//o//

+',change number=1,multiple=',n_cir-1

write(15,'(a/a,f10.7)') '0.,0.,0.','0.,0.,0.,0.,0.,-1.,',angle c

c bottom line nodes c write(15,'(a)') '*node' call wrispe(15,last-NI+1+i_,0.,-ORS*fs,0.) call wrispe(15,last-n_ediv+i_,0.,-ORS*fs,2*ORN) call wrispe(15,last+n_cir+1+i_,0.,-ORS*fs +,2*ORN+(2*ORS-2*ORN)/n_cir) call wrispe(15,NQI1+i_-NI1+n_cir+1,0.,-ORS*fs,ORS+2*ORN) write(15,'(a)') '*ngen' write(15,'(i6,2('','',i6))') last-NI+1+i_,last-n_ediv+i_,1 write(15,'(i6,2('','',i6))') last+n_cir+1+i_,NQI1+i_-NI1+n_cir+1 +,n_cir+1 c

c nozzle nodes c

write(15,'(a)') '*node,nset=n_1'//o

write(15,'(i6,2('','',e14.8))') 1+3*i_,ORN*fn,ymax write(15,'(a,i6)') '*ncopy,shift,old set=n_1'//o//

+',change number=1,new set=n_top'//o//',multiple=',N_I-1 write(15,'(a/a,e14.8)') +,'0.,0.,0.','0.,0.,0.,0.,-1.,0.,',90./(N_I-1) write(15,'(a)') '*nset,nset=n_top'//o +,'n_1'//o//',' +,'*nset,nset=n_juncture'//o//',generate' write(15,'(i6,a,i6)') ns+1+3*i_,',',ns+N_I+3*i_ write(15,'(a/a,i6,a,i6)') '*nfill,NSET=N_O'//o +,'n_top'//o//',n_juncture'//o//',',n_cir,',',N_I if (firstt) return

write(15,'(a)') '*nset,nset=n_edge,generate' write(15,'(i6,a,i6)') ns+1+4*i_,',',ns+N_I+4*i_ do 8 k=1,4

ka = (k - 1)*10000

write(14,'(a/a,i1,a)') '**','*nset,nset=n_yz',k,',generate' do 10 i=1,3

+,'*cload'

+,'**','** End-cap-load 1000. * pi * r_inside**2','**' +,'** 1000. * pi * rin**2/4.'

+,'** 1000. * pi * ris**2/2.' +,'999999,2,'//R_noz +,'999998,3,'//R_she +,'**' +,'*el print,elset=e_she_c,position=nodes' +,'s,tresc' +,'*el print,elset=e_she_c,position=centroid' +,'s,tresc' +,'*el print,elset=e_edge,position=nodes' +,'s,tresc' +,'*el print,elset=e_edge,position=centroid' +,'s,tresc' +,'*node print,total=yes,global=yes' +,'u1,u2,u3,rf,' +,'*end step' +,'*step','Fx = 1000.'

+,'*static','1.,,,','*dload,op=new','*cload,op=new' +,'999999,1,1000.','*end step'

+,'*step','Fy = 1000.' +,'*static','1.,,,','*cload,op=new' +,'999999,2,1000.','*end step' +,'*step','Fz = 1000.' +,'*static','1.,,,','*cload,op=new' +,'999999,3,1000.','*end step' +,'*step','Mx = 1000.' +,'*static','1.,,,','*cload,op=new' +,'999999,4,1000.','*end step' +,'*step','My = 1000.' +,'*static','1.,,,','*cload,op=new' +,'999999,5,1000.','*end step' +,'*step','Mz = 1000.' +,'*static','1.,,,','*cload,op=new' +,'999999,6,1000.','*end step' return end c*************************************** subroutine w2xy(delta,w,ORS,x3d,y3d) c***************************************

c based on delta,w,ORS find x and y (space coordinates, z is unchanged)

c

w_true = w + delta alpha = w_true / ORS x3d = ORS * cos(alpha) y3d = ORS * sin(alpha) return

end

c****************************************************** subroutine wcoo(firstt,fs,fn,itype,i_,node,x,y,z) c****************************************************** c itype = 1 <= (node on the shell part only) c = 2 <= (node on the nozzle part only) c = 3 <= (node at the junction)

logical firstt if (firstt) then

call wrispe(15,node,x,y,z) else

if (itype.eq.1.or.itype.eq.3) then xs = x * fs

ys = y * fs zs = z

call wrispe(15,node+i_,xs,ys,zs) elseif (itype.eq.2) then xf = x * fn

yf = y zf = z * fn

call wrispe(15,node+3*i_,xf,yf,zf) endif

if (itype.eq.3) then ris = sqrt(xs**2 + ys**2) xf = x * fn

yf = y zf = z * fn

(9)

k_ = (i-1)*n_h + ka if (i.eq.1) then

write(14,'(i6,'','',i6,'','',i6)') NI+k_,last+k_,NI elseif (i.eq.2) then

write(14,'(i6,'','',i6,'','',i6)') ns+N_I+k_,last+k_,NI*2 else

write(14,'(i6,'','',i6,'','',i6)') ns+N_I+k_,last+k_,NI endif

if (i.eq.2) then

write(14,'(i6,'','',i6,'','',i6)') last-NI+3+k_,last-n_ediv+k_,2 else

write(14,'(i6,'','',i6,'','',i6)') last-NI+2+k_,last-n_ediv+k_,1 endif

if (i.eq.2) then

write(14,'(i6,'','',i6,'','',i6)') last+n_cir+1+NI1+k_,NQI1+k_ + ,NI1*2

else

write(14,'(i6,'','',i6,'','',i6)') last+n_cir+1+k_,NQI1+k_,NI1 endif

10 continue

write(14,'(i6,'','',i6,'','',i6)') NI+3*n_h+ka,ns+N_I+3*n_h+ka +,2*NI

+,NI+3*i_+ka,ns+N_I+3*i_+ka,NI +,ns+N_I+5*n_h+ka,ns+N_I+4*i_+ka,n_h

write(14,'(a/a,i1,a)') '**','*nset,nset=n_xy',k,',generate' do 20 i=1,3

k_ = (i-1)*n_h j_= NI

if (i.eq.2) j_= NI + NI

write(14,'(i6,'','',i6,'','',i6)') 1+3*k_+ka,ns+1+3*k_+ka,j_ write(14,'(i6,'','',i6,'','',i6)') ns+1+k_+ka,last-NI+1+k_+ka,j_ 20 continue

write(14,'(i6,'','',i6,'','',i6)') ns+1+5*n_h+ka,ns+1+4*i_+ka +,n_h

8 continue

write(14,'(a)') '*nset,nset=n_tip,generate' do 28 k=1,4

do 30 i=1,3

k_ = 3* (i-1)*n_h + (k - 1) * 10000 if (k.eq.1) then

if (i.eq.2) then

write(14,'(i6,'','',i6,'','',i6)') 1+k_,NI+k_,2 else

write(14,'(i6,'','',i6,'','',i6)') 1+k_,NI+k_,1 endif

elseif (k.eq.2) then if (i.eq.2) then

write(14,'(i6,'','',i6,'','',i6)') 3+k_,NI+k_,2 else

write(14,'(i6,'','',i6,'','',i6)') 2+k_,NI+k_,1 endif

elseif (k.eq.3) then if (i.eq.2) then

write(14,'(i6,'','',i6,'','',i6)') 1+k_,NI+k_-2,2 else

write(14,'(i6,'','',i6,'','',i6)') 1+k_,NI+k_-1,1 endif

elseif (k.eq.4) then if (i.eq.2) then

write(14,'(i6,'','',i6,'','',i6)') 3+k_,NI+k_-2,2 else

write(14,'(i6,'','',i6,'','',i6)') 2+k_,NI+k_-1,1 endif

endif 30 continue 28 continue write(14,'(a)') '*node'

c write(14,'(a,e14.8,a)') '999999,0.,',ORS+2*ORN,',0.' write(14,'(a,e14.8,a)') '999999,0.,',ORS,',0.' write(14,'(a,e15.8)') '999998,0.,0.,',zmax write(14,'(a,e15.8)') '999997,0.,0.,',-zmax write(14,'(a)') '*nset,nset=n_zmax_all,generated' nqi3 = NQI1*3

nqi4 = NQI1*4

do 32 k=1,2 j_=0 if (k.eq.2) j_= 1 do 40 i=1,3

* Node on the inner edge *

yf = sqrt(ris**2 - xf**2) call wrispe(15,node+4*i_,xf,yf,zf) xf = (xf + xs)/2.

zf = (zf + zs)/2. yf = sqrt(ris**2 - xf**2) iadd = 5 * i_ / 2

call wrispe(15,node+iadd,xf,yf,zf) endif endif return end c******************** subroutine wrispe(iou,n,x,y,z) c******************** c

c write coodrinates in shortest format c

C

parameter (EPS=1.e-5) character*10 xs,ys,zs c

if (abs(x).gt.EPS) then call wrir10(x,xs) else

call wrir10(0.,xs) endif

if (abs(z).gt.EPS) then call wrir10(z,zs) else call wrir10(0.,zs) endif call wrir10(y,ys) write(iou,'(i6,3('','',a))') n,xs,ys,zs return end c******************** subroutine wrir10(r,stri10) c********************

c return in 10 character string real number c

character strin7*7,stri10*10 c

absr=abs(r)

if (absr.ge.1.e8.or.absr.lt.1.e-5) then if (absr.eq.0.) then

write(stri10,'(a)') '0.0' else

write(stri10,'(e10.4)') r endif

else

do 100 isigni=1,8 if (absr.lt.1.) goto 101 absr=absr*.1 100 continue

101 write(strin7,'(a,i1,a)') '(F10.',9-isigni,')' write(stri10,strin7) r endif return end c*********************************************** function lenli1(string)

c! Get string length without trailing blanks c*********************************************** character string*(*),c_test*1 c

lenli1=len(string) if (lenli1.ne.0) then do 100 i=lenli1,1,-1 c_test = string(i:i) if (c_test.eq.' ') goto 100 if (c_test.eq.char(9)) goto 100 if (c_test.eq.char(0)) goto 100 goto 998

(10)

L_ = j_

if (i.eq.2) L_= j_ + j_ k_ = (i-1)*n_h + 30000 * (k-1) if (i.eq.2) then

write(14,'(i6,2('','',i6))') last-n_ediv+2+k_,last+k_-L_,2 write(14,'(i6,2('','',i6))') NQI1-n_cir+k_,NQI1+k_-L_,2 else

write(14,'(i6,2('','',i6))') last-n_ediv+1+k_,last+k_-L_,1 write(14,'(i6,2('','',i6))') NQI1-n_cir+k_,NQI1+k_-L_,1 endif

40 continue 32 continue

write(14,'(a)') '*nset,nset=n_zmin_all,generated' do 132 k=1,2

j_=0 if (k.eq.2) j_= 1 do 140 i=1,3 L_ = j_

if (i.eq.2) L_= j_ + j_ k_ = (i-1)*n_h + 10000 * k if (i.eq.2) then

write(14,'(i6,2('','',i6))') last-n_ediv+2+k_,last+k_-L_,2 write(14,'(i6,2('','',i6))') NQI1-n_cir+k_,NQI1+k_-L_,2 else

write(14,'(i6,2('','',i6))') last-n_ediv+1+k_,last+k_-L_,1 write(14,'(i6,2('','',i6))') NQI1-n_cir+k_,NQI1+k_-L_,1 endif

140 continue 132 continue

write(14,'(a)') '*nset,nset=nn_outside,generated' write(14,'(i6,'','',i6)') 1,ns+N_I

write(14,'(a)') '*nset,nset=nn_inside,generated' write(14,'(i6,'','',i6)') 1+3*i_,ns+N_I+3*i_ write(14,'(a)') '*nset,nset=n_outside,generated' write(14,'(i6,'','',i6)') ns+1,NQI1

write(14,'(a)') '*nset,nset=n_inside,generated' write(14,'(i6,'','',i6)') ns+1+I_,NQI1+I_ write(str6,'(i6)') n_h

write(14,'(a)') '*nfill','n_outside,n_inside,2,'//str6 write(str6_3,'(i6)') n_h*3

write(14,'(a)') 'nn_outside,nn_inside,2,'//str6_3 +,'*orientation,name=o_tip,system=cylindrical' +,'0.,0.,0.,0.,1.,0.','1,0.'

+,'*orientation,name=o_z,system=cylindrical' +,'0.,0.,0.,0.,0.,1.','1,0.'

return end

c******************************** subroutine dattim(io,fname) c******************************** c

c write down date and time c

character dates*8,times*10,fname*(*),defdir*80 integer getcwd

c

ierrno = getcwd(defdir) iend=lenli1(fname)

call date_and_time(dates,times) write(io,'(20a)') '**',fname(1:iend),';' +,dates(1:4),'-',dates(5:6),'-',dates(7:8),';' * +,times(1:2),':',times(3:4),':',times(5:10) +,times(1:2),':',times(3:4),':',times(5:6) +,';',defdir(1:lenli1(defdir))

return end

c************************************************** subroutine echo_arg_line(iend,line,n,arg_i) c************************************************** external getarg,iargc

* character arg_i*80,line*(*) character arg_i*(*),line*(*) dimension arg_i(*) c

n = iargc()

write(*,*) n,'<= value of iargc()' if (n.eq.0) goto 999 do 100 i=1,n

call getarg(i,arg_i(i)) 100 continue

write(line,'(120a)') 'cmd_arg: ' + ,(arg_i(j)(1:lenli1(arg_i(j))),' ',j=1,n) iend = lenli1(line)

do 300 j=1,n if (j.lt.10) then

write(*,'(3a,i1)') '>',arg_i(j)(1:lenli1(arg_i(j))),'< arg',j else

write(*,'(3a,i2)') '>',arg_i(j)(1:lenli1(arg_i(j))),'< arg',j endif

300 continue 999 return end

Figure

Fig. 1: Solid FEM Created Automatically
Fig. 2:First Area of  Interest
Fig.4:  M+B Stresses
Table 1: Effect of the Mesh and the Nozzle Thickness on M and M+B (only p = 1000 psi load)

References

Related documents

Мөн БЗДүүргийн нохойн уушгины жижиг гуурсанцрын хучуур эсийн болон гөлгөр булчингийн ширхгийн гиперплази (4-р зураг), Чингэлтэй дүүргийн нохойн уушгинд том

19% serve a county. Fourteen per cent of the centers provide service for adjoining states in addition to the states in which they are located; usually these adjoining states have

Field experiments were conducted at Ebonyi State University Research Farm during 2009 and 2010 farming seasons to evaluate the effect of intercropping maize with

Also, both diabetic groups there were a positive immunoreactivity of the photoreceptor inner segment, and this was also seen among control ani- mals treated with a

Results suggest that the probability of under-educated employment is higher among low skilled recent migrants and that the over-education risk is higher among high skilled

The impact effect is a technology of state institutional landscapes associated with the academy and new cultures of auditing and accountability, as hinted in the

National Conference on Technical Vocational Education, Training and Skills Development: A Roadmap for Empowerment (Dec. 2008): Ministry of Human Resource Development, Department

The paper is discussed for various techniques for sensor localization and various interpolation methods for variety of prediction methods used by various applications