ITM AMNS: User Interface  \$Id: Doxyfile 502 2015-10-15 12:23:45Z dpc $
eckstein_yields.F90
Go to the documentation of this file.
1 
10 
11  use itm_types
12 
13  real(R8), parameter :: mathpi = 3.1415926535897932384626433832795
14  real(R8), parameter :: degtorad = 0.01745329251994329576923690768489
15 
16 contains
17 
23  function etf(M1, M2, Z1, Z2)
24  real(R8) :: etf, m1, m2, z1, z2
25  etf = (30.74*(m1 + m2)*z1*sqrt(z1**0.6666666666666666 + z2**0.6666666666666666)*z2)/m2
26  end function etf
27 
33  function omegal(epsl)
34  real(R8) :: omegal, epsl
35  omegal = 0.008*(epsl**0.1504) + 0.1728*sqrt(epsl) + epsl
36  end function omegal
37 
43  function sn(epsl)
44  real(R8) :: sn, epsl
45  sn = (0.5*log(1 + 1.2288*epsl))/omegal(epsl)
46  end function sn
47 
53  function seyield(E0, M1, M2, Z1, Z2, q, lambda, u, ETh)
54  real(R8) :: seyield, e0, m1, m2, z1, z2, q, lambda, u, eth, epsl, snucl, omega, etoeth
55  epsl = e0/etf(m1, m2, z1, z2)
56  snucl = sn(epsl)
57  omega = omegal(epsl)
58  etoeth = ((e0/eth) - 1.0)**u
59  seyield = (etoeth*q*snucl)/(etoeth + (lambda/omega))
60  end function seyield
61 
67  function sayield(E0, theta, f, b, c, Esp)
68  real(R8) :: sayield, e0, theta, thetarad, f, b, c, esp
69  real(R8) :: thetastar, cosfact
70  thetarad = theta * degtorad
71  thetastar = mathpi - acos(sqrt(1/(1 + e0/esp)))
72  cosfact = cos(((mathpi/2.)**c)*((thetarad/thetastar)**c))
73  sayield = exp(b*(1 - 1/cosfact))/(cosfact**f)
74  end function sayield
75 
81  function reyieldlight(E0, M1, M2, Z1, Z2, A1, A2, A3, A4)
82  real(R8) :: reyield, e0, m1, m2, z1, z2, a1, a2, a3, a4, eps
83 
84  eps = e0/etf(m1, m2, z1, z2)
85 
86  reyieldlight = (a1 * eps**a2) / (1.0 + a3 * eps**a4)
87 
88  end function reyieldlight
89 
95  function reyieldself(E0, M1, M2, Z1, Z2, A1, A2, A3, A4)
96  real(R8) :: reyield, e0, m1, m2, z1, z2, a1, a2, a3, a4, eps
97 
98  eps = e0/etf(m1, m2, z1, z2)
99 
100  if(a3 * eps**a4 .lt. 700) then ! prevent overflow DPC
101  reyieldself = exp(a1*eps**a2)/(1.0 + exp(a3 * eps**a4))
102  else
103  reyieldself = exp(a1*eps**a2 - a3 * eps**a4)
104  endif
105 
106  end function reyieldself
107 
113  function reyield(E0, M1, M2, Z1, Z2, A1, A2, A3, A4)
114  real(R8) :: reyield, e0, m1, m2, z1, z2, a1, a2, a3, a4, eps
115  if (m1 .ge. m2) then
116 ! write(*,*) 'M1 = ', M1, ' is >= M2 = ',M2,' Using ryieldself'
117  reyield = reyieldself(e0, m1, m2, z1, z2, a1, a2, a3, a4)
118  else
119 ! write(*,*) 'M1 = ', M1, ' is < M2 = ',M2,' Using ryieldlight'
120  reyield = reyieldlight(e0, m1, m2, z1, z2, a1, a2, a3, a4)
121  end if
122  end function reyield
123 
129  function rayield(angledeg, C1, C2, C3, C4)
130  real(R8) :: rayield, angledeg, c1, c2, c3, c4
131 
132  rayield = c1 + c2 * tanh(c3 * angledeg * degtorad + c4)
133 
134  end function rayield
135 
136 end module eckstein_yields
real(r8) function etf(M1, M2, Z1, Z2)
AMNS External utility function ...
real(r8) function reyield(E0, M1, M2, Z1, Z2, A1, A2, A3, A4)
AMNS External utility function ...
real(r8) function omegal(epsl)
AMNS External utility function ...
function reyieldself(E0, M1, M2, Z1, Z2, A1, A2, A3, A4)
AMNS External utility function ...
real(r8) function sn(epsl)
AMNS External utility function ...
real(r8) function sayield(E0, theta, f, b, c, Esp)
AMNS External utility function ...
function reyieldlight(E0, M1, M2, Z1, Z2, A1, A2, A3, A4)
AMNS External utility function ...
real(r8) function seyield(E0, M1, M2, Z1, Z2, q, lambda, u, ETh)
AMNS External utility function ...
real(r8) function rayield(angledeg, C1, C2, C3, C4)
AMNS External utility function ...