14 subroutine cooling_rate(s,mi,ni,n,m,Ti,T,chi,sigmai,alpha,rhoi,xvec)
19 integer,
INTENT(IN) :: s
20 double precision :: mi(s)
21 double precision :: ni(s)
22 double precision :: n, m
23 double precision :: Ti(s)
25 double precision :: chi(s,s)
26 double precision :: sigmai(s)
27 double precision :: alpha(s,s)
28 double precision :: rhoi(s)
29 double precision :: xvec(s)
36 double precision :: tolx, tolf
48 CALL mnewt(ntrial, xvec, s, tolx, tolf, &
49 mi,ni,n,m,chi,sigmai,alpha,rhoi)
69 subroutine mnewt(ntrial, x, s, tolx, tolf, &
70 mi,ni,n,m,chi,sigmai,alpha,rhoi)
76 INTEGER,
intent(in) :: s
77 INTEGER,
intent(in) :: ntrial
78 DOUBLE PRECISION,
intent(in) :: tolx, tolf
79 DOUBLE PRECISION :: mi(s)
80 DOUBLE PRECISION :: ni(s)
81 DOUBLE PRECISION :: n, m
82 DOUBLE PRECISION :: chi(s,s)
83 DOUBLE PRECISION :: sigmai(s)
84 DOUBLE PRECISION :: alpha(s,s)
85 DOUBLE PRECISION :: rhoi(s)
86 DOUBLE PRECISION :: X(s)
95 INTEGER :: I, K, INDX(s)
96 DOUBLE PRECISION :: D, ERRF, ERRX
97 DOUBLE PRECISION :: FJAC(s,s), FVEC(s)
98 DOUBLE PRECISION :: P(s)
103 mi,ni,n,m,chi,sigmai,alpha,rhoi)
106 errf = errf + dabs(fvec(i))
109 IF(errf <= tolf)
RETURN 114 CALL ludcmp(fjac, s, np, indx, d,
'MNewt')
115 CALL lubksb(fjac, s, np, indx, p)
119 errx = errx + dabs(p(i))
122 IF(errx <= tolx)
RETURN 143 mi,ni,n,m,chi,sigmai,alpha,rhoi)
149 INTEGER,
intent(in) :: s
150 DOUBLE PRECISION :: X(s)
152 DOUBLE PRECISION :: FVEC(s), FJAC(s,s)
154 DOUBLE PRECISION :: mi(s)
155 DOUBLE PRECISION :: ni(s)
156 DOUBLE PRECISION :: n, m
157 DOUBLE PRECISION :: chi(s,s), sigmai(s), alpha(s,s), &
162 double precision :: one
164 double precision :: zero
172 DOUBLE PRECISION :: eta(s,s), lambda(s,s)
173 DOUBLE PRECISION :: gamma(s,s), sqrtXiXj(s,s)
174 DOUBLE PRECISION :: oneMGama(s,s)
179 eta(i,j) = (one + alpha(i,j))/2.d0
180 lambda(i,j) = chi(i,j)* ni(j)*(mi(j)/(mi(j)+mi(i)))* &
181 ((sigmai(i)+sigmai(j))/2d0)**2 * (eta(i,j)*2d0)
183 gamma(i,j) = (mi(j)/(mi(j)+mi(i)))* (eta(i,j))
185 sqrtxixj(i,j) = dsqrt((x(i)+x(j))/(x(i)*x(j)))
186 onemgama(i,j) = (one-gamma(i,j)*((x(i)+x(j))/x(j)))
196 fvec(1) = fvec(1) + (rhoi(k)/x(k))
198 fvec(1) = fvec(1) - n*m
203 + lambda(i,k) * sqrtxixj(i,k) * onemgama(i,k) &
204 - lambda(1,k) * sqrtxixj(1,k) * onemgama(1,k)
217 fjac(1,j) = -rhoi(j)/x(j)**2
224 fjac(i,j) = fjac(i,j) &
225 - lambda(1,k)*(one/(x(1)*x(j))-(x(j)+x(1))/
234 fjac(i,j) = fjac(i,j) &
235 + lambda(i,k)*(one-gamma(i,k)*(x(k)+x(j))/x(k))*
245 fjac(i,j) = -lambda(i,k)*onemgama(i,1)/ &
246 (x(1)**2*sqrtxixj(i,1)*2.0d0) &
247 + lambda(i,k)*sqrtxixj(i,1)*gamma(i,k)*x(i)/x(1)**2
251 fjac(i,j) = fjac(i,j) &
252 + gamma(1,k)*lambda(1,k)*sqrtxixj(k,1)/x(k)
260 fjac(i,j) = - lambda(i,k)*onemgama(i,k)/ &
261 (x(j)**2*sqrtxixj(j,i)*2d0) &
262 + lambda(i,k)*sqrtxixj(j,i)*gamma(i,k)*x(i)/x(j)**2 &
263 + lambda(1,k)*onemgama(1,k)/(x(j)**2*sqrtxixj(j,1)*2d0)
286 subroutine ludcmp(a,n,np,indx,d,calledFrom)
294 integer,
intent(in) :: n
295 double precision,
intent(inout) :: a(n,n)
297 integer,
intent(out) :: indx(n)
298 double precision,
intent(out) :: d
299 CHARACTER(len=*),
intent(in) :: calledFrom
304 double precision :: TINY
305 parameter(nmax=500, tiny=1.0d-20)
309 integer :: i, j, k, imax
310 double precision :: vv(nmax)
311 double precision :: aamax, sum, dum
318 if (dabs(a(i,j)).gt.aamax) aamax = dabs(a(i,j))
320 if (aamax.eq.0.0d0)
then 322 'Singular Matrix in ludcmp called from ', calledfrom
331 sum = sum-a(i,k)*a(k,j)
339 sum = sum-a(i,k)*a(k,j)
342 dum = vv(i)*dabs(sum)
343 if (dum.ge.aamax)
then 358 if (a(j,j).eq.0.0d0) a(j,j) = tiny
382 subroutine lubksb (a,n,np,indx,b)
388 integer,
intent(in) :: n
389 double precision,
intent(in) :: a(n,n)
391 integer,
intent(in) :: indx(n)
392 double precision,
intent(inout) :: b(n)
396 integer :: i, ii, j, ll
397 double precision :: sum
409 elseif (sum.ne.0.d0)
then
subroutine mnewt(ntrial, x, s, tolx, tolf, mi, ni, n, m, chi, sigmai, alpha, rhoi)
subroutine func_jacobi_eval(X, s, FVEC, FJAC, mi, ni, n, m, chi, sigmai, alpha, rhoi)
subroutine cooling_rate(s, mi, ni, n, m, Ti, T, chi, sigmai, alpha, rhoi, xve
subroutine mfix_exit(myID, normal_termination)
subroutine ludcmp(a, n, np, indx, d, calledFrom)
subroutine lubksb(a, n, np, indx, b)