30 SUBROUTINE i14ela(X ,KSURF ,IGRSURF,BUFSF ,NSC ,
31 2 KSC ,NSP ,KSP ,KSI ,IMPACT ,
32 3 CIMP ,NIMP ,STFAC ,NLO ,GAPMIN ,
41#include "implicit_f.inc"
53 INTEGER NSC, NSP, KSURF,KSI(*),
57 . bufsf(*),ksc(*) ,ksp(*) ,stfac , gapmin,
58 . x(3,*) , cimp(3,*),nimp(3,*),pld(*),wf(*) ,
60 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
64 INTEGER ADRBUF, I, IL, IN
69 . a, b, c, an, bn, cn, rot(9),
70 . x1, x2, x3, n1, n2, n3, n,
71 . xpvn1, ypvn1, zpvn1, sgnxn, sgnyn, sgnzn,
72 . ep, ans, ansmx, pente, ftot,
73 . fnormx, fnormy, fnormz, nf
77 adrbuf=igrsurf(ksurf)%IAD_BUFR
91 rot(i)=bufsf(adrbuf+7+i-1)
104 DO i=1,
min(mvsiz,nrest)
107 x1=x(1,in)-bufsf(adrbuf+4)
108 x2=x(2,in)-bufsf(adrbuf+5)
109 x3=x(3,in)-bufsf(adrbuf+6)
110 xpv(1,i)=rot(1)*x1+rot(2)*x2+rot(3)*x3
111 xpv(2,i)=rot(4)*x1+rot(5)*x2+rot(6)*x3
112 xpv(3,i)=rot(7)*x1+rot(8)*x2+rot(9)*x3
117#include
"vectorize.inc"
118 DO i=1,
min(mvsiz,nrest)
122 xpvn1 =xpv(1,i)**(dgr-1)
124 IF (xpvn1*xpv(1,i)>=zero) sgnxn=one
125 ypvn1 =xpv(2,i)**(dgr-1)
127 IF (ypvn1*xpv(2,i)>=zero) sgnyn=one
128 zpvn1 =xpv(3,i)**(dgr-1)
130 IF (zpvn1*xpv(3,i)>=zero) sgnzn=one
138 ep=n1*xpv(1,i)+n2*xpv(2,i)+n3*xpv(3,i)
145 ans=(ep-exp((dgr-1)*log(
max(ep,em20))/dgr))
146 . /
max(exp((dgr-1)*log(em20)/dgr),n)
159 cimp(1,il)=xpv(1,i)-ans*n1
160 cimp(2,il)=xpv(2,i)-ans*n2
161 cimp(3,il)=xpv(3,i)-ans*n3
169 IF (ans>ansmx) ansmx=ans
174 IF (nrest-mvsiz>0)
THEN
188#include "vectorize.inc"
189 DO i=1,
min(mvsiz,nrest)
203 IF (ans>ansmx) ansmx=ans
208 IF (nrest-mvsiz>0)
THEN
217 npt = (npc(nlo+1)-npc(nlo))/2
219 IF (ansmx<=pld(ii))
THEN
220 pente=(pld(ii+3)-pld(ii+1))/(pld(ii+2)-pld(ii))
221 ftot =pld(ii+1)+pente*(ansmx-pld(ii))
222 ELSEIF (ansmx>=pld(ii+2*(npt-1)))
THEN
224 pente=(pld(jj+1)-pld(jj-1))/(pld(jj)-pld(jj-2))
225 ftot =pld(jj+1)+
max(-pld(jj+1),pente*(ansmx-pld(jj)))
229 . .AND.ansmx<=pld(ii+2))
THEN
230 pente=(pld(ii+3)-pld(ii+1))/(pld(ii+2)-pld(ii))
231 ftot =pld(ii+1)+pente*(ansmx-pld(ii))
250 fnormx=fnormx+wf(in)*nimp(1,il)
251 fnormy=fnormy+wf(in)*nimp(2,il)
252 fnormz=fnormz+wf(in)*nimp(3,il)
258 fnormx=fnormx+wf(in)*nimp(1,il)
259 fnormy=fnormy+wf(in)*nimp(2,il)
260 fnormz=fnormz+wf(in)*nimp(3,il)
263 nf =sqrt(fnormx*fnormx+fnormy*fnormy+fnormz*fnormz)
subroutine i14ela(x, ksurf, igrsurf, bufsf, nsc, ksc, nsp, ksp, ksi, impact, cimp, nimp, stfac, nlo, gapmin, npc, pld, wf, stf)