6 |
|
!! redistribute this software in source and binary code form, provided |
7 |
|
!! that the following conditions are met: |
8 |
|
!! |
9 |
< |
!! 1. Acknowledgement of the program authors must be made in any |
10 |
< |
!! publication of scientific results based in part on use of the |
11 |
< |
!! program. An acceptable form of acknowledgement is citation of |
12 |
< |
!! the article in which the program was described (Matthew |
13 |
< |
!! A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher |
14 |
< |
!! J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented |
15 |
< |
!! Parallel Simulation Engine for Molecular Dynamics," |
16 |
< |
!! J. Comput. Chem. 26, pp. 252-271 (2005)) |
17 |
< |
!! |
18 |
< |
!! 2. Redistributions of source code must retain the above copyright |
9 |
> |
!! 1. Redistributions of source code must retain the above copyright |
10 |
|
!! notice, this list of conditions and the following disclaimer. |
11 |
|
!! |
12 |
< |
!! 3. Redistributions in binary form must reproduce the above copyright |
12 |
> |
!! 2. Redistributions in binary form must reproduce the above copyright |
13 |
|
!! notice, this list of conditions and the following disclaimer in the |
14 |
|
!! documentation and/or other materials provided with the |
15 |
|
!! distribution. |
29 |
|
!! University of Notre Dame has been advised of the possibility of |
30 |
|
!! such damages. |
31 |
|
!! |
32 |
+ |
!! SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your |
33 |
+ |
!! research, please cite the appropriate papers when you publish your |
34 |
+ |
!! work. Good starting points are: |
35 |
+ |
!! |
36 |
+ |
!! [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). |
37 |
+ |
!! [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). |
38 |
+ |
!! [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). |
39 |
+ |
!! [4] Vardeman & Gezelter, in progress (2009). |
40 |
|
!! |
41 |
+ |
!! |
42 |
|
!! interpolation.F90 |
43 |
|
!! |
44 |
|
!! Created by Charles F. Vardeman II on 03 Apr 2006. |
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.10 2009-11-25 20:02:05 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 |