CP2K 2.4 (Revision 12889)
Functions | Variables

d3_poly Namespace Reference

Routines to efficently handle dense polynomial in 3 variables up to a given degree. Multiplication, partial evalution, 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

subroutine init_d3_poly_module ()
 initialization of the cache, is called by functions in this module that use cached values
INTEGER, public poly_size1 (maxgrad)
 size of a polynomial in x up to the given degree
INTEGER, public poly_size2 (maxgrad)
 size of a polynomial in x,y up to the given degree
INTEGER, public poly_size3 (maxgrad)
 size of a polynomial in x,y,z up to the given degree
INTEGER, public grad_size1 (n)
 max grad for a polynom of the given size
INTEGER, public grad_size2 (n)
 max grad for a polynom of the given size
INTEGER, public grad_size3 (n)
 max grad for a polynom of the given size
INTEGER mono_index1 (i)
 0-based index of monomial of the given degree
INTEGER mono_index2 (i, j)
 0-based index of monomial of the given degree
INTEGER mono_index3 (i, j, k)
 0-based index of monomial of the given degree
INTEGER mono_exp1 (ii)
 exponents of the monomial at the given 0-based index
INTEGER, dimension(2) mono_exp2 (ii)
 exponents of the monomial at the given 0-based index
INTEGER, dimension(3) mono_exp3 (n)
 exponents of the monomial at the given 0-based index
INTEGER mono_mult1 (ii, ij)
 the index of the result of the multiplication of the two monomials
INTEGER mono_mult2 (ii, ij)
 the index of the result of the multiplication of the two monomials
INTEGER mono_mult3 (ii, ij)
 the index of the result of the multiplication of the two monomials
subroutine, public poly_mult1 (p1, p2, pRes, np1, sumUp, error)
 multiplies the polynomials p1 with p2 using pRes to store the result
subroutine, public poly_mult2 (p1, p2, pRes, np1, sumUp, error)
 multiplies p1 with p2 using pRes to store the result
subroutine, public poly_mult3 (p1, p2, pRes, np1, sumUp, error)
 multiplies p1 with p2 using pRes to store the result
subroutine poly_mult3b (p1, size_p1, grad1, p2, size_p2, grad2, pRes, size_pRes, np1, sumUp)
 low level routine of poly_mult3 without checks
subroutine poly_mult3ab (p1, size_p1, grad1, p2, pRes, size_pRes, np1, sumUp)
 low level routine that multiplies with a polynomial of grad 1
subroutine, public poly_write1 (p, out_f)
 writes out a 1d polynomial in a human readable form
subroutine, public poly_write2 (p, out_f)
 writes out a 2d polynomial in a human readable form
subroutine, public poly_write3 (p, out_f)
 writes out the polynomial in a human readable form
INTEGER, public poly_random (p, maxSize, minSize, error)
 random poly with coeffiecents that are easy to print exactly, of the given maximum size (for testing purposes)
subroutine, public poly_affine_t3t (p, m, b, pRes, npoly, error)
 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, error)
 returns in the polynomials pRes the affine transformation x -> m*x+b of p
subroutine, public poly_p_eval3 (p, x, pRes, npoly, error)
 evaluates the 3d polymial at x (the result is a polynomial in two variables)
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_uneval3 (p, x, pRes, npoly, error)
 unevaluates a 2d polymial to a 3d polynomial at x p(a,b,c)=p(a,b,c)+sum(pRes(b,c)*(x*a)^i,i), this is *not* the inverse of poly_p_eval3 adds to p
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_eval2 (p, x, pRes, npoly, error)
 evaluates the 2d polynomial at x (the result is a polynomial in one variable)
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_uneval2 (p, x, pRes, npoly, error)
 unevaluates a 1d polynomial to 2d at x p(a,b)=sum(pRes(b)*(x*a)^i,i), this is *not* the inverse of poly_p_eval2 overwrites p
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_eval1 (p, x, pRes, npoly, error)
 evaluates the 1d polynomial at the given place, results are stored contiguosly
subroutine, public poly_eval2 (p, x, y, pRes, npoly, error)
 evaluates the 2d polynomial at the given place, results are stored contiguosly
subroutine, public poly_eval3 (p, x, y, z, pRes, npoly, error)
 evaluates the 3d polynomial at the given place, results are stored contiguosly
subroutine, public poly_derive3 (p, pRes, npoly, sumUp, error)
 returns an array with all dp/dx, the all dp/dy, and finally all dp/dz
subroutine, public poly_cp2k2d3 (poly_cp2k, grad, poly_d3, error)
 subroutine that converts from the cp2k poly format to the d3 poly format
subroutine, public poly_d32cp2k (poly_cp2k, grad, poly_d3, error)
 subroutine that converts from the d3 poly format to the cp2k poly format

Variables

CHARACTER(len=*), parameter,
private 
moduleN = 'd3_poly'
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
LOGICAL, save, private module_initialized = .FALSE.
INTEGER, dimension(2,
cached_dim2), save 
a_mono_exp2
INTEGER, dimension(3,
cached_dim3), save 
a_mono_exp3
INTEGER, dimension(cached_dim3),
save 
a_reduce_idx3
INTEGER, dimension(3,
cached_dim3), save 
a_deriv_idx3
INTEGER, dimension(cached_dim2,
cached_dim2), save 
a_mono_mult2
INTEGER, dimension(cached_dim3,
cached_dim3), save 
a_mono_mult3
INTEGER, dimension(4,
cached_dim3), save 
a_mono_mult3a

Detailed Description

Routines to efficently handle dense polynomial in 3 variables up to a given degree. Multiplication, partial evalution, 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.

Note:
not all routines have been fully optimized. original available also with a BSD style license
Author:
Fawzi Mohamed

Function Documentation

INTEGER,public d3_poly::grad_size1 ( INTEGER,intent(in)  n)

max grad for a polynom of the given size

Definition at line 173 of file d3_poly.f90.

Referenced by poly_mult1(), and poly_padd_uneval2().

Here is the caller graph for this function:

INTEGER,public d3_poly::grad_size2 ( INTEGER,intent(in)  n)

max grad for a polynom of the given size

Definition at line 183 of file d3_poly.f90.

Referenced by poly_eval2(), poly_mult2(), poly_p_eval2(), and poly_padd_uneval3().

Here is the caller graph for this function:

INTEGER,public d3_poly::grad_size3 ( INTEGER,intent(in)  n)

max grad for a polynom of the given size

Definition at line 193 of file d3_poly.f90.

Referenced by gauss_colloc::calc_max_r2(), gauss_colloc::calcRadius2(), poly_affine_t3(), poly_affine_t3t(), poly_derive3(), poly_eval3(), poly_mult3(), and poly_p_eval3().

Here is the caller graph for this function:

subroutine d3_poly::init_d3_poly_module ( ) [private]
INTEGER d3_poly::mono_exp1 ( INTEGER,intent(in)  ii) [private]

exponents of the monomial at the given 0-based index

Definition at line 249 of file d3_poly.f90.

INTEGER,dimension(2) d3_poly::mono_exp2 ( INTEGER,intent(in)  ii) [private]

exponents of the monomial at the given 0-based index

Definition at line 259 of file d3_poly.f90.

Referenced by mono_mult2(), and poly_write2().

Here is the caller graph for this function:

INTEGER,dimension(3) d3_poly::mono_exp3 ( INTEGER,intent(in)  n) [private]

exponents of the monomial at the given 0-based index

Definition at line 273 of file d3_poly.f90.

Referenced by mono_mult3(), and poly_write3().

Here is the caller graph for this function:

INTEGER d3_poly::mono_index1 ( INTEGER,intent(in)  i) [private]

0-based index of monomial of the given degree

Definition at line 212 of file d3_poly.f90.

INTEGER d3_poly::mono_index2 ( INTEGER,intent(in)  i,
INTEGER,intent(in)  j 
) [private]

0-based index of monomial of the given degree

Definition at line 222 of file d3_poly.f90.

Referenced by init_d3_poly_module(), and mono_mult2().

Here is the caller graph for this function:

INTEGER d3_poly::mono_index3 ( INTEGER,intent(in)  i,
INTEGER,intent(in)  j,
INTEGER,intent(in)  k 
) [private]

0-based index of monomial of the given degree

Definition at line 235 of file d3_poly.f90.

Referenced by init_d3_poly_module(), mono_mult3(), and poly_eval3().

Here is the caller graph for this function:

INTEGER d3_poly::mono_mult1 ( INTEGER,intent(in)  ii,
INTEGER,intent(in)  ij 
) [private]

the index of the result of the multiplication of the two monomials

Definition at line 293 of file d3_poly.f90.

INTEGER d3_poly::mono_mult2 ( INTEGER,intent(in)  ii,
INTEGER,intent(in)  ij 
) [private]

the index of the result of the multiplication of the two monomials

Definition at line 303 of file d3_poly.f90.

References mono_exp2(), and mono_index2().

Here is the call graph for this function:

INTEGER d3_poly::mono_mult3 ( INTEGER,intent(in)  ii,
INTEGER,intent(in)  ij 
) [private]

the index of the result of the multiplication of the two monomials

Definition at line 316 of file d3_poly.f90.

References mono_exp3(), and mono_index3().

Here is the call graph for this function:

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,
TYPE(cp_error_type),intent(inout)  error 
)

returns in the polynomials pRes the affine transformation x -> m*x+b of p

Definition at line 954 of file d3_poly.f90.

References CPPostconditionNoFail, CPPreconditionNoFail, grad_size3(), init_d3_poly_module(), module_initialized, poly_mult3ab(), and poly_size3().

Referenced by gauss_colloc::calc_max_r2().

Here is the call graph for this function:

Here is the caller graph for this function:

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,
TYPE(cp_error_type),intent(inout)  error 
)

returns in the polynomials pRes the transpose of the affine transformation x -> m*x+b of p

Definition at line 792 of file d3_poly.f90.

References CPPostconditionNoFail, CPPreconditionNoFail, grad_size3(), init_d3_poly_module(), module_initialized, poly_mult3ab(), and poly_size3().

Here is the call graph for this function:

subroutine,public d3_poly::poly_cp2k2d3 ( REAL(dp),dimension(:),intent(in)  poly_cp2k,
INTEGER,intent(in)  grad,
REAL(dp),dimension(:),intent(out)  poly_d3,
TYPE(cp_error_type),intent(inout)  error 
)

subroutine that converts from the cp2k poly format to the d3 poly format

Definition at line 1786 of file d3_poly.f90.

Referenced by collocate_general_subpatch(), and collocate_general_wings().

Here is the caller graph for this function:

subroutine,public d3_poly::poly_d32cp2k ( REAL(dp),dimension(:),intent(out)  poly_cp2k,
INTEGER,intent(in)  grad,
REAL(dp),dimension(:),intent(in)  poly_d3,
TYPE(cp_error_type),intent(inout)  error 
)

subroutine that converts from the d3 poly format to the cp2k poly format

Definition at line 1839 of file d3_poly.f90.

Referenced by integrate_general_subpatch(), and integrate_general_wings().

Here is the caller graph for this function:

subroutine,public d3_poly::poly_derive3 ( REAL(dp),dimension(:),intent(in)  p,
REAL(dp),dimension(:),intent(inout)  pRes,
INTEGER,intent(in),optional  npoly,
LOGICAL,intent(in),optional  sumUp,
TYPE(cp_error_type),intent(inout)  error 
)

returns an array with all dp/dx, the all dp/dy, and finally all dp/dz

Definition at line 1702 of file d3_poly.f90.

References a_deriv_idx3, a_mono_exp3, cached_dim3, CPPreconditionNoFail, grad_size3(), init_d3_poly_module(), max_grad3, module_initialized, and poly_size3().

Here is the call graph for this function:

subroutine,public d3_poly::poly_eval1 ( REAL(dp),dimension(:),intent(in)  p,
REAL(dp),intent(in)  x,
REAL(dp),dimension(:),intent(inout)  pRes,
INTEGER,intent(in),optional  npoly,
TYPE(cp_error_type),intent(inout)  error 
)

evaluates the 1d polynomial at the given place, results are stored contiguosly

Definition at line 1526 of file d3_poly.f90.

References CPPreconditionNoFail.

subroutine,public d3_poly::poly_eval2 ( REAL(dp),dimension(:),intent(in)  p,
REAL(dp),intent(in)  x,
REAL(dp),intent(in)  y,
REAL(dp),dimension(:),intent(inout)  pRes,
INTEGER,intent(in),optional  npoly,
TYPE(cp_error_type),intent(inout)  error 
)

evaluates the 2d polynomial at the given place, results are stored contiguosly

Definition at line 1560 of file d3_poly.f90.

References a_mono_exp2, cached_dim2, CPPostconditionNoFail, CPPreconditionNoFail, grad_size2(), init_d3_poly_module(), max_grad2, and module_initialized.

Here is the call graph for this function:

subroutine,public d3_poly::poly_eval3 ( REAL(dp),dimension(:),intent(in)  p,
REAL(dp),intent(in)  x,
REAL(dp),intent(in)  y,
REAL(dp),intent(in)  z,
REAL(dp),dimension(:),intent(inout)  pRes,
INTEGER,intent(in),optional  npoly,
TYPE(cp_error_type),intent(inout)  error 
)

evaluates the 3d polynomial at the given place, results are stored contiguosly

Definition at line 1627 of file d3_poly.f90.

References a_mono_exp3, cached_dim3, CPPostconditionNoFail, CPPreconditionNoFail, grad_size3(), init_d3_poly_module(), max_grad3, module_initialized, and mono_index3().

Referenced by gauss_colloc::collocGauss_safe().

Here is the call graph for this function:

Here is the caller graph for this function:

subroutine,public d3_poly::poly_mult1 ( REAL(dp),dimension(:),intent(in)  p1,
REAL(dp),dimension(:),intent(in)  p2,
REAL(dp),dimension(:),intent(inout)  pRes,
INTEGER,intent(in),optional  np1,
LOGICAL,intent(in),optional  sumUp,
TYPE(cp_error_type),intent(inout)  error 
)

multiplies the polynomials p1 with p2 using pRes to store the result

Definition at line 329 of file d3_poly.f90.

References CPPreconditionNoFail, grad_size1(), init_d3_poly_module(), module_initialized, and poly_size1().

Here is the call graph for this function:

subroutine,public d3_poly::poly_mult2 ( REAL(dp),dimension(:),intent(in)  p1,
REAL(dp),dimension(:),intent(in)  p2,
REAL(dp),dimension(:),intent(inout)  pRes,
INTEGER,intent(in),optional  np1,
LOGICAL,intent(in),optional  sumUp,
TYPE(cp_error_type),intent(inout)  error 
)

multiplies p1 with p2 using pRes to store the result

Definition at line 373 of file d3_poly.f90.

References a_mono_mult2, cached_dim2, CPPreconditionNoFail, grad_size2(), init_d3_poly_module(), max_grad2, module_initialized, and poly_size2().

Here is the call graph for this function:

subroutine,public d3_poly::poly_mult3 ( REAL(dp),dimension(:),intent(in)  p1,
REAL(dp),dimension(:),intent(in)  p2,
REAL(dp),dimension(:),intent(inout)  pRes,
INTEGER,intent(in),optional  np1,
LOGICAL,intent(in),optional  sumUp,
TYPE(cp_error_type),intent(inout)  error 
)

multiplies p1 with p2 using pRes to store the result

Definition at line 451 of file d3_poly.f90.

References CPPreconditionNoFail, grad_size3(), init_d3_poly_module(), module_initialized, poly_mult3b(), and poly_size3().

Here is the call graph for this function:

subroutine d3_poly::poly_mult3ab ( REAL(dp),dimension(if_check(size_p1, *)),intent(in)  p1,
INTEGER,intent(in)  size_p1,
INTEGER,intent(in)  grad1,
REAL(dp),dimension(if_check(4, *)),intent(in)  p2,
REAL(dp),dimension(if_check(size_pres, *)),intent(inout)  pRes,
INTEGER,intent(in)  size_pRes,
INTEGER,intent(in)  np1,
LOGICAL,intent(in)  sumUp 
) [private]

low level routine that multiplies with a polynomial of grad 1

Definition at line 585 of file d3_poly.f90.

References a_mono_mult3a, cached_dim3, init_d3_poly_module(), max_grad3, and module_initialized.

Referenced by poly_affine_t3(), and poly_affine_t3t().

Here is the call graph for this function:

Here is the caller graph for this function:

subroutine d3_poly::poly_mult3b ( REAL(dp),dimension(if_check(size_p1, *)),intent(in)  p1,
INTEGER,intent(in)  size_p1,
INTEGER,intent(in)  grad1,
REAL(dp),dimension(if_check(size_p2, *)),intent(in)  p2,
INTEGER,intent(in)  size_p2,
INTEGER,intent(in)  grad2,
REAL(dp),dimension(if_check(size_pres, *)),intent(inout)  pRes,
INTEGER,intent(in)  size_pRes,
INTEGER,intent(in)  np1,
LOGICAL,intent(in)  sumUp 
) [private]

low level routine of poly_mult3 without checks

Definition at line 483 of file d3_poly.f90.

References a_mono_mult3, cached_dim3, init_d3_poly_module(), max_grad3, and module_initialized.

Referenced by poly_mult3().

Here is the call graph for this function:

Here is the caller graph for this function:

subroutine,public d3_poly::poly_p_eval2 ( REAL(dp),dimension(:),intent(in)  p,
REAL(dp),intent(in)  x,
REAL(dp),dimension(:),intent(inout)  pRes,
INTEGER,intent(in),optional  npoly,
TYPE(cp_error_type),intent(inout)  error 
)

evaluates the 2d polynomial at x (the result is a polynomial in one variable)

Definition at line 1327 of file d3_poly.f90.

References CPPostconditionNoFail, CPPreconditionNoFail, grad_size2(), init_d3_poly_module(), module_initialized, poly_p_eval2b(), and poly_size1().

Here is the call graph for this function:

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 
)

low level routine of poly_p_eval2 without checks

Definition at line 1359 of file d3_poly.f90.

References a_mono_exp2, cached_dim2, init_d3_poly_module(), max_grad2, and module_initialized.

Referenced by poly_p_eval2().

Here is the call graph for this function:

Here is the caller graph for this function:

subroutine,public d3_poly::poly_p_eval3 ( REAL(dp),dimension(:),intent(in)  p,
REAL(dp),intent(in)  x,
REAL(dp),dimension(:),intent(inout)  pRes,
INTEGER,intent(in),optional  npoly,
TYPE(cp_error_type),intent(inout)  error 
)

evaluates the 3d polymial at x (the result is a polynomial in two variables)

Definition at line 1116 of file d3_poly.f90.

References CPPostconditionNoFail, CPPreconditionNoFail, grad_size3(), init_d3_poly_module(), module_initialized, poly_p_eval3b(), and poly_size2().

Here is the call graph for this function:

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 
)

low level routine of poly_p_eval3 without checks

Definition at line 1148 of file d3_poly.f90.

References a_mono_exp3, a_reduce_idx3, cached_dim3, init_d3_poly_module(), max_grad3, and module_initialized.

Referenced by poly_p_eval3().

Here is the call graph for this function:

Here is the caller graph for this function:

subroutine,public d3_poly::poly_padd_uneval2 ( REAL(dp),dimension(:),intent(inout)  p,
REAL(dp),intent(in)  x,
REAL(dp),dimension(:),intent(in)  pRes,
INTEGER,intent(in),optional  npoly,
TYPE(cp_error_type),intent(inout)  error 
)

unevaluates a 1d polynomial to 2d at x p(a,b)=sum(pRes(b)*(x*a)^i,i), this is *not* the inverse of poly_p_eval2 overwrites p

Definition at line 1427 of file d3_poly.f90.

References CPPostconditionNoFail, CPPreconditionNoFail, grad_size1(), init_d3_poly_module(), module_initialized, poly_padd_uneval2b(), poly_size1(), and poly_size2().

Here is the call graph for this function:

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 
)

low level routine of poly_p_uneval2 without checks

Definition at line 1459 of file d3_poly.f90.

References a_mono_exp2, cached_dim2, init_d3_poly_module(), max_grad2, and module_initialized.

Referenced by poly_padd_uneval2().

Here is the call graph for this function:

Here is the caller graph for this function:

subroutine,public d3_poly::poly_padd_uneval3 ( REAL(dp),dimension(:),intent(inout)  p,
REAL(dp),intent(in)  x,
REAL(dp),dimension(:),intent(in)  pRes,
INTEGER,intent(in),optional  npoly,
TYPE(cp_error_type),intent(inout)  error 
)

unevaluates a 2d polymial to a 3d polynomial at x p(a,b,c)=p(a,b,c)+sum(pRes(b,c)*(x*a)^i,i), this is *not* the inverse of poly_p_eval3 adds to p

Definition at line 1222 of file d3_poly.f90.

References CPPostconditionNoFail, CPPreconditionNoFail, grad_size2(), init_d3_poly_module(), module_initialized, poly_padd_uneval3b(), poly_size2(), and poly_size3().

Here is the call graph for this function:

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

Note:
loop should be structured differently (more contiguous pRes access)

Definition at line 1255 of file d3_poly.f90.

References a_mono_exp3, a_reduce_idx3, cached_dim3, init_d3_poly_module(), max_grad3, and module_initialized.

Referenced by poly_padd_uneval3().

Here is the call graph for this function:

Here is the caller graph for this function:

INTEGER,public d3_poly::poly_random ( REAL(dp),dimension(:),intent(out)  p,
INTEGER,intent(in)  maxSize,
INTEGER,intent(in),optional  minSize,
TYPE(cp_error_type),intent(inout)  error 
)

random poly with coeffiecents that are easy to print exactly, of the given maximum size (for testing purposes)

Definition at line 759 of file d3_poly.f90.

References CPPreconditionNoFail, init_d3_poly_module(), and module_initialized.

Here is the call graph for this function:

INTEGER,public d3_poly::poly_size1 ( INTEGER,intent(in)  maxgrad)

size of a polynomial in x up to the given degree

Definition at line 143 of file d3_poly.f90.

Referenced by poly_mult1(), poly_p_eval2(), and poly_padd_uneval2().

Here is the caller graph for this function:

INTEGER,public d3_poly::poly_size2 ( INTEGER,intent(in)  maxgrad)

size of a polynomial in x,y up to the given degree

Definition at line 153 of file d3_poly.f90.

Referenced by poly_mult2(), poly_p_eval3(), poly_padd_uneval2(), and poly_padd_uneval3().

Here is the caller graph for this function:

INTEGER,public d3_poly::poly_size3 ( INTEGER,intent(in)  maxgrad)

size of a polynomial in x,y,z up to the given degree

Definition at line 163 of file d3_poly.f90.

Referenced by gauss_colloc::calc_max_r2(), poly_affine_t3(), poly_affine_t3t(), poly_derive3(), poly_mult3(), and poly_padd_uneval3().

Here is the caller graph for this function:

subroutine,public d3_poly::poly_write1 ( REAL(dp),dimension(:),intent(in)  p,
INTEGER,intent(in)  out_f 
)

writes out a 1d polynomial in a human readable form

Definition at line 683 of file d3_poly.f90.

subroutine,public d3_poly::poly_write2 ( REAL(dp),dimension(:),intent(in)  p,
INTEGER,intent(in)  out_f 
)

writes out a 2d polynomial in a human readable form

Definition at line 705 of file d3_poly.f90.

References init_d3_poly_module(), module_initialized, and mono_exp2().

Here is the call graph for this function:

subroutine,public d3_poly::poly_write3 ( REAL(dp),dimension(:),intent(in)  p,
INTEGER,intent(in)  out_f 
)

writes out the polynomial in a human readable form

Definition at line 731 of file d3_poly.f90.

References init_d3_poly_module(), module_initialized, and mono_exp3().

Here is the call graph for this function:


Variable Documentation

Definition at line 58 of file d3_poly.f90.

Referenced by init_d3_poly_module(), and poly_derive3().

Definition at line 55 of file d3_poly.f90.

Referenced by init_d3_poly_module(), poly_eval2(), poly_p_eval2b(), and poly_padd_uneval2b().

Definition at line 59 of file d3_poly.f90.

Referenced by init_d3_poly_module(), and poly_mult2().

Definition at line 60 of file d3_poly.f90.

Referenced by init_d3_poly_module(), and poly_mult3b().

Definition at line 61 of file d3_poly.f90.

Referenced by init_d3_poly_module(), and poly_mult3ab().

Definition at line 57 of file d3_poly.f90.

Referenced by init_d3_poly_module(), poly_p_eval3b(), and poly_padd_uneval3b().

INTEGER,parameter,public d3_poly::cached_dim1 = max_grad2+1

Definition at line 48 of file d3_poly.f90.

INTEGER,parameter,public d3_poly::cached_dim2 = (max_grad2+1)*(max_grad2+2)/2
INTEGER,parameter,public d3_poly::cached_dim3 = (max_grad3+1)*(max_grad3+2)*(max_grad3+3)/6
INTEGER,parameter,public d3_poly::max_grad2 = 5
INTEGER,parameter,public d3_poly::max_grad3 = 3
LOGICAL,save,private d3_poly::module_initialized = .FALSE.
CHARACTER(len=*),parameter,private d3_poly::moduleN = 'd3_poly'

Definition at line 44 of file d3_poly.f90.