![]() |
(git:b77b4be)
|
Routines to efficiently handle dense polynomial in 3 variables up to a given degree. Multiplication, partial evaluation, affine transform (change of reference system), differentiation are efficiently implemented. some functions accept or return several polynomial together, these have to have all the same size, and are stored one after the other in an unique 1d array. This gives them an easy handling and even seem to be faster than the transposed layout. More...
Functions/Subroutines | |
subroutine, public | init_d3_poly_module () |
initialization of the cache, is called by functions in this module that use cached values | |
pure integer function, public | poly_size1 (maxgrad) |
size of a polynomial in x up to the given degree | |
pure integer function, public | poly_size2 (maxgrad) |
size of a polynomial in x,y up to the given degree | |
pure integer function, public | poly_size3 (maxgrad) |
size of a polynomial in x,y,z up to the given degree | |
pure integer function, public | grad_size3 (n) |
max grad for a polynom of the given size | |
subroutine, public | poly_affine_t3t (p, m, b, pres, npoly) |
returns in the polynomials pRes the transpose of the affine transformation x -> m*x+b of p | |
subroutine, public | poly_affine_t3 (p, m, b, pres, npoly) |
returns in the polynomials pRes the affine transformation x -> m*x+b of p | |
subroutine, public | poly_p_eval3b (p, size_p, x, pres, size_pres, npoly, grad, xi) |
low level routine of poly_p_eval3 without checks | |
subroutine, public | poly_padd_uneval3b (p, size_p, x, pres, size_pres, npoly, grad, xi) |
low level routine of poly_padd_uneval3 without checks | |
subroutine, public | poly_p_eval2b (p, size_p, x, pres, size_pres, npoly, grad, xi) |
low level routine of poly_p_eval2 without checks | |
subroutine, public | poly_padd_uneval2b (p, size_p, x, pres, size_pres, npoly, grad, xi) |
low level routine of poly_p_uneval2 without checks | |
subroutine, public | poly_cp2k2d3 (poly_cp2k, grad, poly_d3) |
subroutine that converts from the cp2k poly format to the d3 poly format | |
subroutine, public | poly_d32cp2k (poly_cp2k, grad, poly_d3) |
subroutine that converts from the d3 poly format to the cp2k poly format | |
Variables | |
integer, parameter, public | max_grad2 = 5 |
integer, parameter, public | max_grad3 = 3 |
integer, parameter, public | cached_dim1 = max_grad2 + 1 |
integer, parameter, public | cached_dim2 = (max_grad2 + 1)*(max_grad2 + 2)/2 |
integer, parameter, public | cached_dim3 = (max_grad3 + 1)*(max_grad3 + 2)*(max_grad3 + 3)/6 |
Routines to efficiently handle dense polynomial in 3 variables up to a given degree. Multiplication, partial evaluation, affine transform (change of reference system), differentiation are efficiently implemented. some functions accept or return several polynomial together, these have to have all the same size, and are stored one after the other in an unique 1d array. This gives them an easy handling and even seem to be faster than the transposed layout.
subroutine, public d3_poly::init_d3_poly_module |
pure integer function, public d3_poly::poly_size1 | ( | integer, intent(in) | maxgrad | ) |
pure integer function, public d3_poly::poly_size2 | ( | integer, intent(in) | maxgrad | ) |
pure integer function, public d3_poly::poly_size3 | ( | integer, intent(in) | maxgrad | ) |
pure integer function, public d3_poly::grad_size3 | ( | integer, intent(in) | n | ) |
subroutine, public d3_poly::poly_affine_t3t | ( | real(dp), dimension(:), intent(in) | p, |
real(dp), dimension(3, 3), intent(in) | m, | ||
real(dp), dimension(3), intent(in) | b, | ||
real(dp), dimension(:), intent(out) | pres, | ||
integer, intent(in), optional | npoly | ||
) |
subroutine, public d3_poly::poly_affine_t3 | ( | real(dp), dimension(:), intent(in) | p, |
real(dp), dimension(3, 3), intent(in) | m, | ||
real(dp), dimension(3), intent(in) | b, | ||
real(dp), dimension(:), intent(out) | pres, | ||
integer, intent(in), optional | npoly | ||
) |
subroutine, public d3_poly::poly_p_eval3b | ( | real(dp), dimension(if_check(size_p, *)), intent(in) | p, |
integer, intent(in) | size_p, | ||
real(dp), intent(in) | x, | ||
real(dp), dimension(if_check(size_pres, *)), intent(inout) | pres, | ||
integer, intent(in) | size_pres, | ||
integer, intent(in) | npoly, | ||
integer, intent(in) | grad, | ||
real(dp), dimension(if_check(grad+1, *)), intent(inout) | xi | ||
) |
subroutine, public d3_poly::poly_padd_uneval3b | ( | real(dp), dimension(if_check(size_p, *)), intent(inout) | p, |
integer, intent(in) | size_p, | ||
real(dp), intent(in) | x, | ||
real(dp), dimension(if_check(size_pres, *)), intent(in) | pres, | ||
integer, intent(in) | size_pres, | ||
integer, intent(in) | npoly, | ||
integer, intent(in) | grad, | ||
real(dp), dimension(if_check(grad+1, *)), intent(inout) | xi | ||
) |
low level routine of poly_padd_uneval3 without checks
p | ... |
size_p | ... |
x | ... |
pRes | ... |
size_pRes | ... |
npoly | ... |
grad | ... |
xi | ... |
Definition at line 1311 of file d3_poly.F.
subroutine, public d3_poly::poly_p_eval2b | ( | real(dp), dimension(if_check(size_p, *)), intent(in) | p, |
integer, intent(in) | size_p, | ||
real(dp), intent(in) | x, | ||
real(dp), dimension(if_check(size_pres, *)), intent(inout) | pres, | ||
integer, intent(in) | size_pres, | ||
integer, intent(in) | npoly, | ||
integer | grad, | ||
real(dp), dimension(if_check(grad+1, *)) | xi | ||
) |
subroutine, public d3_poly::poly_padd_uneval2b | ( | real(dp), dimension(if_check(size_p, *)), intent(inout) | p, |
integer, intent(in) | size_p, | ||
real(dp), intent(in) | x, | ||
real(dp), dimension(if_check(size_pres, *)), intent(in) | pres, | ||
integer, intent(in) | size_pres, | ||
integer, intent(in) | npoly, | ||
integer | grad, | ||
real(dp), dimension(if_check(grad+1, *)) | xi | ||
) |
subroutine, public d3_poly::poly_cp2k2d3 | ( | real(dp), dimension(:), intent(in) | poly_cp2k, |
integer, intent(in) | grad, | ||
real(dp), dimension(:), intent(out) | poly_d3 | ||
) |
subroutine, public d3_poly::poly_d32cp2k | ( | real(dp), dimension(:), intent(out) | poly_cp2k, |
integer, intent(in) | grad, | ||
real(dp), dimension(:), intent(in) | poly_d3 | ||
) |
integer, parameter, public d3_poly::cached_dim1 = max_grad2 + 1 |