17#include "./base/base_uses.f90"
22 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'splines_types'
41 INTEGER :: ref_count = -1
42 REAL(kind=
dp),
POINTER :: y(:) => null()
43 REAL(kind=
dp),
POINTER :: y2(:) => null()
46 REAL(kind=
dp) :: h = -1.0_dp
47 REAL(kind=
dp) :: invh = -1.0_dp
48 REAL(kind=
dp) :: h26 = -1.0_dp
50 REAL(kind=
dp) :: x1 = -1.0_dp
51 REAL(kind=
dp) :: xn = -1.0_dp
60 TYPE spline_data_pp_type
62 END TYPE spline_data_pp_type
66 TYPE(spline_data_pp_type),
POINTER,
DIMENSION(:) :: spl_pp => null()
67 INTEGER,
POINTER,
DIMENSION(:, :) :: spltab => null()
72 REAL(kind=
dp) :: rcutsq_f = -1.0_dp, cutoff = -1.0_dp
73 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rscale => null()
74 REAL(kind=
dp),
DIMENSION(:),
POINTER :: fscale => null()
75 REAL(kind=
dp),
DIMENSION(:),
POINTER :: dscale => null()
91 DEALLOCATE (spline_env%spltab)
92 DO i = 1,
SIZE(spline_env%spl_pp)
93 spl_p => spline_env%spl_pp(i)%spl_p
96 DEALLOCATE (spline_env%spl_pp)
108 IF (
ASSOCIATED(spline_data))
THEN
109 cpassert(spline_data%ref_count > 0)
110 spline_data%ref_count = spline_data%ref_count - 1
111 IF (spline_data%ref_count < 1)
THEN
112 IF (
ASSOCIATED(spline_data%y))
THEN
113 DEALLOCATE (spline_data%y)
115 IF (
ASSOCIATED(spline_data%y2))
THEN
116 DEALLOCATE (spline_data%y2)
118 DEALLOCATE (spline_data)
132 LOGICAL :: release_kind
134 IF (
ASSOCIATED(spl_p))
THEN
135 release_kind = .true.
136 DO i = 1,
SIZE(spl_p)
138 release_kind = release_kind .AND. (.NOT.
ASSOCIATED(spl_p(i)%spline_data))
140 IF (release_kind)
THEN
155 cpassert(
ASSOCIATED(spline_data))
156 cpassert(spline_data%ref_count > 0)
157 spline_data%ref_count = spline_data%ref_count + 1
170 cpassert(
ASSOCIATED(spl_p))
171 DO i = 1,
SIZE(spl_p)
188 INTEGER,
INTENT(IN) :: ntype
189 INTEGER,
INTENT(IN),
OPTIONAL :: ntab_in
191 CHARACTER(len=*),
PARAMETER :: routinen =
'spline_env_create'
193 INTEGER :: handle, i, isize, j, ntab
195 CALL timeset(routinen, handle)
197 NULLIFY (spline_env%spl_pp)
198 NULLIFY (spline_env%spltab)
200 IF (
PRESENT(ntab_in))
THEN
203 ntab = (ntype*ntype + ntype)/2
205 ALLOCATE (spline_env%spl_pp(ntab))
207 ALLOCATE (spline_env%spltab(ntype, ntype))
210 NULLIFY (spline_env%spl_pp(i)%spl_p)
212 ALLOCATE (spline_env%spl_pp(i)%spl_p(isize))
213 DO j = 1,
SIZE(spline_env%spl_pp(i)%spl_p)
218 CALL timestop(handle)
231 INTEGER :: i, nsized, nsizes
233 cpassert(
ASSOCIATED(spl_p_source))
234 nsizes =
SIZE(spl_p_source)
235 IF (.NOT.
ASSOCIATED(spl_p_dest))
THEN
236 ALLOCATE (spl_p_dest(nsizes))
238 NULLIFY (spl_p_dest(i)%spline_data)
241 nsized =
SIZE(spl_p_dest)
242 cpassert(nsizes == nsized)
248 CALL spline_data_copy(spl_p_source(i)%spline_data, spl_p_dest(i)%spline_data)
258 SUBROUTINE spline_data_copy(spline_data_source, spline_data_dest)
261 cpassert(
ASSOCIATED(spline_data_source))
264 spline_data_dest%ref_count = spline_data_source%ref_count
265 spline_data_dest%n = spline_data_source%n
266 spline_data_dest%h = spline_data_source%h
267 spline_data_dest%invh = spline_data_source%invh
268 spline_data_dest%h26 = spline_data_source%h26
269 spline_data_dest%x1 = spline_data_source%x1
270 spline_data_dest%xn = spline_data_source%xn
271 IF (
ASSOCIATED(spline_data_source%y))
THEN
272 ALLOCATE (spline_data_dest%y(
SIZE(spline_data_source%y)))
273 spline_data_dest%y = spline_data_source%y
275 IF (
ASSOCIATED(spline_data_source%y2))
THEN
276 ALLOCATE (spline_data_dest%y2(
SIZE(spline_data_source%y2)))
277 spline_data_dest%y2 = spline_data_source%y2
279 END SUBROUTINE spline_data_copy
289 ALLOCATE (spline_data)
290 spline_data%ref_count = 1
291 NULLIFY (spline_data%y)
292 NULLIFY (spline_data%y2)
303 IF (
ASSOCIATED(spline_factor))
THEN
304 IF (
ASSOCIATED(spline_factor%rscale))
THEN
305 DEALLOCATE (spline_factor%rscale)
307 IF (
ASSOCIATED(spline_factor%fscale))
THEN
308 DEALLOCATE (spline_factor%fscale)
310 IF (
ASSOCIATED(spline_factor%dscale))
THEN
311 DEALLOCATE (spline_factor%dscale)
313 DEALLOCATE (spline_factor)
325 cpassert(.NOT.
ASSOCIATED(spline_factor))
326 ALLOCATE (spline_factor)
327 ALLOCATE (spline_factor%rscale(1))
328 ALLOCATE (spline_factor%fscale(1))
329 ALLOCATE (spline_factor%dscale(1))
330 spline_factor%rscale = 1.0_dp
331 spline_factor%fscale = 1.0_dp
332 spline_factor%dscale = 1.0_dp
333 spline_factor%rcutsq_f = 1.0_dp
334 spline_factor%cutoff = 0.0_dp
346 INTEGER :: isize, jsize, ksize
349 IF (
ASSOCIATED(spline_factor_source))
THEN
350 isize =
SIZE(spline_factor_source%rscale)
351 jsize =
SIZE(spline_factor_source%fscale)
352 ksize =
SIZE(spline_factor_source%dscale)
353 cpassert(isize == jsize)
354 cpassert(isize == ksize)
356 spline_factor_dest%rscale = spline_factor_source%rscale
357 spline_factor_dest%fscale = spline_factor_source%fscale
358 spline_factor_dest%dscale = spline_factor_source%dscale
359 spline_factor_dest%rcutsq_f = spline_factor_source%rcutsq_f
360 spline_factor_dest%cutoff = spline_factor_source%cutoff
Defines the basic variable types.
integer, parameter, public dp
routines for handling splines_types
subroutine, public spline_data_p_copy(spl_p_source, spl_p_dest)
Copy Data-structure of spline_data_p_type.
subroutine, public spline_data_retain(spline_data)
retains spline_env
subroutine, public spline_factor_release(spline_factor)
releases spline_factor
subroutine, public spline_data_p_release(spl_p)
releases spline_data_p
subroutine, public spline_factor_create(spline_factor)
releases spline_factor
subroutine, public spline_data_create(spline_data)
Data-structure that constains spline table.
subroutine, public spline_data_release(spline_data)
releases spline_data
subroutine, public spline_env_release(spline_env)
releases spline_env
subroutine, public spline_data_p_retain(spl_p)
retains spline_data_p_type
subroutine, public spline_env_create(spline_env, ntype, ntab_in)
Data-structure that holds all needed information about a specific spline interpolation.
subroutine, public spline_factor_copy(spline_factor_source, spline_factor_dest)
releases spline_factor
Data-structure that holds all needed information about a specific spline interpolation.