38 SUBROUTINE linear1_interp(n0,x0,y0,n1,x1, &
52 INTEGER,
INTENT(IN) :: &
56 REAL(KIND=rspec),
INTENT(IN) :: &
62 CHARACTER(len=*),
INTENT(OUT) :: &
65 INTEGER,
INTENT(OUT) :: &
71 REAL(KIND=rspec),
INTENT(OUT) :: &
86 message=
'LINEAR1_INTERP/WARNING(1):no points in output array'
95 message=
'LINEAR1_INTERP/ERROR(2):<2 points in source array'
108 10
IF(x1(i) < x0(1))
THEN
113 message=
'LINEAR1_INTERP(3)/WARNING:x<x(1), use end point'
115 ELSEIF(x1(i) == x0(1))
THEN
120 ELSEIF(x1(i) > x0(il+1))
THEN
134 message=
'LINEAR1_INTERP(4)/WARNING:x>x(n0), use end point'
141 y1(i)=y0(il)+(y0(il+1)-y0(il))*(x1(i)-x0(il))/(x0(il+1)-x0(il))
152 END SUBROUTINE linear1_interp
154 SUBROUTINE linear1_integ(k_order,n0,x0,f,n1,x1, &
165 INTEGER,
INTENT(IN) :: &
171 REAL(KIND=rspec),
INTENT(IN) :: &
177 CHARACTER(len=*),
INTENT(OUT) :: &
180 INTEGER,
INTENT(OUT) :: &
186 REAL(KIND=rspec),
INTENT(OUT) :: &
194 REAL(KIND=rspec) :: &
195 add,dx,f2,sum,xnew,xold
204 message=
'LINEAR1_INTEG(1)/WARNING:no target points'
210 IF(x1(1) < 0.99999_rspec*x0(1))
THEN
213 message=
'LINEAR1_INTEG(2)/WARNING:target below range'
219 IF(x1(n1) > 1.00001_rspec*x0(n0))
THEN
222 message=
'LINEAR1_INTEG(3)/WARNING:target above range'
235 f2=(f(2)-f(1))/(x0(2)-x0(1))
247 IF(x1(i) < x0(j+1))
THEN
254 ELSEIF(x1(i) == x0(j+1))
THEN
261 ELSEIF(x1(i) > x0(j+1))
THEN
273 IF(k_order == 1)
THEN
276 add=dx*(xold*f(j)+dx*((xold*f2+f(j))/2))
281 add=dx*(f(j)+dx*f2/2)
301 f2=(f(j+1)-f(j))/(x0(j+1)-x0(j))
319 END SUBROUTINE linear1_integ
321 END MODULE linear1_mod