!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! CARACAL - Ring polymer molecular dynamics and rate constant calculations ! on black-box generated potential energy surfaces ! ! Copyright (c) 2023 by Julien Steffen (mail@j-steffen.org) ! Stefan Grimme (grimme@thch.uni-bonn.de) (QMDFF code) ! ! Permission is hereby granted, free of charge, to any person obtaining a ! copy of this software and associated documentation files (the "Software"), ! to deal in the Software without restriction, including without limitation ! the rights to use, copy, modify, merge, publish, distribute, sublicense, ! and/or sell copies of the Software, and to permit persons to whom the ! Software is furnished to do so, subject to the following conditions: ! ! The above copyright notice and this permission notice shall be included in ! all copies or substantial portions of the Software. ! ! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ! THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ! FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ! DEALINGS IN THE SOFTWARE. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! subroutine bspline: calculates the coefficients for an n-th order ! B-spline approximation ! ! subroutine bspline (x,n,c) implicit none integer i,k,n real(kind=8)::x,denom real(kind=8)::c(*) ! ! initialize the B-spline as the linear case ! c(1) = 1.0d0 - x c(2) = x ! ! compute standard B-spline recursion to n-th order ! do k = 3, n denom = 1.0d0 / dble(k-1) c(k) = x * c(k-1) * denom do i = 1, k-2 c(k-i) = ((x+dble(i))*c(k-i-1) & & + (dble(k-i)-x)*c(k-i)) * denom end do c(1) = (1.0d0-x) * c(1) * denom end do return end subroutine bspline