6 use kinds,
only: kind_real
35 INTEGER ,
INTENT(in ) :: n
36 REAL(kind_real),
INTENT( out) :: q(n)
37 REAL(kind_real),
INTENT(in ) :: x(n)
44 IF(j /= i)q(i)=q(i)/(x(i)-x(j))
55 INTEGER ,
INTENT(in ) :: n
56 REAL(kind_real),
DIMENSION(n),
INTENT( out) :: q,q_tl
57 REAL(kind_real),
DIMENSION(n),
INTENT(in ) :: x,x_tl
60 REAL(kind_real) :: rat
68 q_tl(i)=(q_tl(i)-q(i)*(x_tl(i)-x_tl(j))*rat)*rat
93 INTEGER ,
INTENT(IN ) :: n
94 REAL(kind_real) ,
INTENT(IN ) :: xt
95 REAL(kind_real),
INTENT(IN ) :: x(n),q(n)
96 REAL(kind_real),
INTENT( OUT) :: w(n),dw(n)
98 REAL(kind_real) :: d(n),pa(n),pb(n),dpa(n),dpb(n)
106 dpa(j+1)=dpa(j)*d(j)+pa(j)
114 dpb(j-1)=dpb(j)*d(j)+pb(j)
117 w(j)= pa(j)*pb(j)*q(j)
118 dw(j)=(pa(j)*dpb(j)+dpa(j)*pb(j))*q(j)
128 INTEGER ,
INTENT(IN ) :: n
129 REAL(kind_real) ,
INTENT(IN ) :: xt
130 REAL(kind_real),
DIMENSION(n),
INTENT(IN ) :: x,q,x_tl,q_tl
131 REAL(kind_real),
DIMENSION(n),
INTENT( OUT) :: w,dw,w_tl,dw_tl
133 REAL(kind_real),
DIMENSION(n) :: d,pa,pb,dpa,dpb
134 REAL(kind_real),
DIMENSION(n) :: d_tl,pa_tl,pb_tl,dpa_tl,dpb_tl
146 pa_tl(j+1)=pa_tl(j)*d(j)+pa(j)*d_tl(j)
147 dpa(j+1)=dpa(j)*d(j)+pa(j)
148 dpa_tl(j+1)=dpa_tl(j)*d(j)+dpa(j)*d_tl(j)+pa_tl(j)
159 pb_tl(j-1)=pb_tl(j)*d(j)+pb(j)*d_tl(j)
160 dpb(j-1)=dpb(j)*d(j)+pb(j)
161 dpb_tl(j-1)=dpb_tl(j)*d(j)+dpb(j)*d_tl(j)+pb_tl(j)
164 w(j)= pa(j)*pb(j)*q(j)
165 dw(j)=(pa(j)*dpb(j)+dpa(j)*pb(j))*q(j)
166 w_tl(j)=(pa_tl(j)*pb(j)+pa(j)*pb_tl(j))*q(j)+pa(j)*pb(j)*q_tl(j)
167 dw_tl(j)=(pa_tl(j)*dpb(j)+pa(j)*dpb_tl(j)+dpa_tl(j)*pb(j)+dpa(j)*pb_tl(j))*q(j)+ &
168 (pa(j)*dpb(j)+dpa(j)*pb(j))*q_tl(j)
187 INTEGER ,
INTENT(IN ) :: n
188 REAL(kind_real) ,
INTENT(IN ) :: xt
189 REAL(kind_real),
INTENT(IN ) :: x(n)
190 REAL(kind_real),
INTENT(IN ) :: aq(n-1),bq(n-1)
191 REAL(kind_real),
INTENT( OUT) :: w(n),dw(n)
193 REAL(kind_real) :: aw(n),bw(n),daw(n),dbw(n)
194 REAL(kind_real) :: xa,xb,dwb,wb
204 IF(na*2 /= n)stop
'In lag_interp_smthWeights; n must be even'
229 INTEGER ,
INTENT(IN ) :: n
230 REAL(kind_real) ,
INTENT(IN ) :: xt
231 REAL(kind_real),
DIMENSION(n) ,
INTENT(IN ) :: x,x_tl
232 REAL(kind_real),
DIMENSION(n-1),
INTENT(IN ) :: aq,bq,aq_tl,bq_tl
233 REAL(kind_real),
DIMENSION(n) ,
INTENT( OUT) :: dw_tl,dw
235 REAL(kind_real),
DIMENSION(n) :: aw,bw,daw,dbw
236 REAL(kind_real),
DIMENSION(n) :: aw_tl,bw_tl,daw_tl,dbw_tl
237 REAL(kind_real) :: xa,xb,dwb,wb
238 REAL(kind_real) :: xa_tl,xb_tl,dwb_tl,wb_tl
242 daw(1:n-1),daw_tl(1:n-1),n-1)
244 dbw(2:n ),dbw_tl(2:n ),n-1)
255 IF(na*2 /= n)stop
'In lag_interp_smthWeights; n must be even'
261 dwb_tl=-(xb_tl-xa_tl)/(xb-xa)**2
263 wb_tl=(-xa_tl)*dwb+(xt-xa)*dwb_tl
269 ELSEIF(wb < zero)
THEN
282 dw =daw + wb *dbw + dwb *bw
283 dw_tl=daw_tl+(wb_tl*dbw+wb*dbw_tl)+(dwb_tl*bw+dwb*bw_tl)
Fortran module to prepare for Lagrange polynomial interpolation. based on GSI: lagmod....
subroutine, public lag_interp_weights(x, xt, q, w, dw, n)
subroutine, public lag_interp_smthweights_tl(x, x_TL, xt, aq, aq_TL, bq, bq_TL, dw, dw_TL, n)
subroutine, public lag_interp_const(q, x, n)
subroutine, public lag_interp_const_tl(q, q_TL, x, x_TL, n)
subroutine, public lag_interp_weights_tl(x, x_TL, xt, q, q_TL, w, w_TL, dw, dw_TL, n)
subroutine, public lag_interp_smthweights(x, xt, aq, bq, w, dw, n)