| 46 |
|
!! PURPOSE: Generic Spline interpolation routines. |
| 47 |
|
!! |
| 48 |
|
!! @author Charles F. Vardeman II |
| 49 |
< |
!! @version $Id: interpolation.F90,v 1.7 2006-04-20 18:24:24 gezelter Exp $ |
| 49 |
> |
!! @version $Id: interpolation.F90,v 1.9 2006-06-06 17:43:28 gezelter Exp $ |
| 50 |
|
|
| 51 |
|
|
| 52 |
|
module interpolation |
| 224 |
|
cs%b(n) = cs%b(n-1) + h(n-1) * (2.0_dp*cs%c(n-1) + h(n-1)*3.0_dp*cs%d(n-1)) |
| 225 |
|
|
| 226 |
|
if (isUniform) then |
| 227 |
< |
cs%dx_i = 1.0d0 / (x(2) - x(1)) |
| 227 |
> |
cs%dx_i = 1.0_dp / (x(2) - x(1)) |
| 228 |
|
endif |
| 229 |
|
|
| 230 |
|
return |
| 252 |
|
|
| 253 |
|
type(cubicSpline) :: this |
| 254 |
|
|
| 255 |
< |
if(associated(this%x)) then |
| 256 |
< |
deallocate(this%x) |
| 257 |
< |
this%x => null() |
| 255 |
> |
if(associated(this%d)) then |
| 256 |
> |
deallocate(this%d) |
| 257 |
> |
this%d => null() |
| 258 |
|
end if |
| 259 |
|
if(associated(this%c)) then |
| 260 |
|
deallocate(this%c) |
| 261 |
|
this%c => null() |
| 262 |
+ |
end if |
| 263 |
+ |
if(associated(this%b)) then |
| 264 |
+ |
deallocate(this%b) |
| 265 |
+ |
this%b => null() |
| 266 |
+ |
end if |
| 267 |
+ |
if(associated(this%y)) then |
| 268 |
+ |
deallocate(this%y) |
| 269 |
+ |
this%y => null() |
| 270 |
|
end if |
| 271 |
+ |
if(associated(this%x)) then |
| 272 |
+ |
deallocate(this%x) |
| 273 |
+ |
this%x => null() |
| 274 |
+ |
end if |
| 275 |
|
|
| 276 |
|
this%n = 0 |
| 277 |
|
|
| 322 |
|
! Find the interval J = [ cs%x(J), cs%x(J+1) ] that contains |
| 323 |
|
! or is nearest to xval. |
| 324 |
|
|
| 325 |
< |
j = MAX(1, MIN(cs%n-1, idint((xval-cs%x(1)) * cs%dx_i) + 1)) |
| 325 |
> |
j = MAX(1, MIN(cs%n-1, int((xval-cs%x(1)) * cs%dx_i) + 1)) |
| 326 |
|
|
| 327 |
|
dx = xval - cs%x(j) |
| 328 |
|
yval = cs%y(j) + dx*(cs%b(j) + dx*(cs%c(j) + dx*cs%d(j))) |
| 344 |
|
! or is nearest to xval. |
| 345 |
|
|
| 346 |
|
|
| 347 |
< |
j = MAX(1, MIN(cs%n-1, idint((xval-cs%x(1)) * cs%dx_i) + 1)) |
| 347 |
> |
j = MAX(1, MIN(cs%n-1, int((xval-cs%x(1)) * cs%dx_i) + 1)) |
| 348 |
|
|
| 349 |
|
dx = xval - cs%x(j) |
| 350 |
|
yval = cs%y(j) + dx*(cs%b(j) + dx*(cs%c(j) + dx*cs%d(j))) |
| 351 |
|
|
| 352 |
< |
dydx = cs%b(j) + dx*(2.0d0 * cs%c(j) + 3.0d0 * dx * cs%d(j)) |
| 352 |
> |
dydx = cs%b(j) + dx*(2.0_dp * cs%c(j) + 3.0_dp * dx * cs%d(j)) |
| 353 |
|
|
| 354 |
|
return |
| 355 |
|
end subroutine lookupUniformSpline1d |