CalculiX  2.13
A Free Software Three-Dimensional Structural Finite Element Program
pt2_lim_calc.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine pt2_lim_calc (pt1, a2, a1, kappa, zeta, pt2_lim)
 

Function/Subroutine Documentation

◆ pt2_lim_calc()

subroutine pt2_lim_calc ( real*8  pt1,
real*8  a2,
real*8  a1,
real*8  kappa,
real*8  zeta,
real*8  pt2_lim 
)
25 !
26  implicit none
27 !
28  integer i
29 !
30  real*8 pt1,a2,a1,kappa,pt2_lim,x,zeta,f,df,expon1,
31  & expon2,expon3,cte,a2a1,kp1,km1,delta_x,fact1,fact2,term
32 !
33  x=0.999
34 !
35 ! x belongs to interval [0;1]
36 !
37 ! modified 25.11.2007
38 ! since Pt1/Pt2=(1+0.5(kappa)-M)**(zeta*kappa)/(kappa-1)
39 ! and for zeta1 elements type M_crit=M1=1
40 ! and for zeta2 elements type M_crit=M2 =1
41 ! it is not necessary to iteratively solve the flow equation.
42 ! Instead the previous equation is solved to find pt2_crit
43  if(zeta.ge.0d0) then
44  kp1=kappa+1d0
45  km1=kappa-1d0
46  a2a1=a2/a1
47  expon1=-0.5d0*kp1/(zeta*kappa)
48  expon2=-0.5d0*kp1/km1
49  cte=a2a1*(0.5*kp1)**expon2
50  expon3=-km1/(zeta*kappa)
51  i=0
52 !
53 !
54  do
55  i=i+1
56 !
57  f=x**(-1d0)-cte*x**(expon1)
58  & *(2d0/km1*(x**expon3-1.d0))**-0.5d0
59 !
60  df=-1.d0/x**2-cte*(x**expon1
61  & *(2d0/km1*(x**expon3-1.d0))**-0.5d0)
62  & *(expon1/x-1d0/km1*expon3*x**(expon3-1d0)
63  & *(2d0/km1*(x**expon3-1.d0))**(-1.d0))
64 
65  delta_x=-f/df
66 !
67  if(( dabs(delta_x/x).le.1.e-8)
68  & .or.(dabs(delta_x/1d0).le.1.e-10)) then
69 !
70  pt2_lim=pt1*x
71 !
72  exit
73  endif
74  if(i.gt.25)then
75  pt2_lim=pt1/(1+0.5*km1)**(zeta*kappa/km1)
76  exit
77  endif
78 !
79  x=delta_x+x
80 !
81  enddo
82 !
83  else
84 !
85  do
86  kp1=kappa+1d0
87  km1=kappa-1d0
88  a2a1=a2/a1
89  expon1=kp1/(zeta*kappa)
90  expon2=km1/(zeta*kappa)
91  expon3=kp1/km1
92  cte=a2a1**2*(0.5*kp1)**-expon3*(2/km1)**-1
93  fact1=x**-expon1
94  fact2=x**-expon2
95  term=fact2-1
96 !
97  f=x**-2-cte*fact1*term**-1
98 !
99  df=-2*x**-3-cte*(x**(-expon1-1)*term**-1)
100  & *(-expon1+expon2*(x**-expon2)*fact2*term**-1)
101 !
102  delta_x=-f/df
103 !
104  if(( dabs(delta_x/x).le.1.e-8)
105  & .or.(dabs(delta_x/1d0).le.1.e-10)) then
106  pt2_lim=pt1*x
107  exit
108  endif
109 !
110  x=delta_x+x
111 !
112  enddo
113 !
114  endif
115 
116  return
subroutine df(x, u, uprime, rpar, nev)
Definition: subspace.f:133
Hosted by OpenAircraft.com, (Michigan UAV, LLC)