## Documentation for module ai_derivatives

Calculate the first derivative of an integral block.

source: ai_derivatives.F

#### public Subroutines/Functions:

Calculate the first derivative of an integral block. This takes the derivative with respect to the atomic position Rb, i.e. the center of the primitive on the right. To get the derivative of the left primitive with respect to r (orbital coordinate), take the opposite sign. [a|O|db/dRi] = 2*zetb*[a|O|b+1i] - Ni(b)[a|O|b-1i]
Calculate the first derivative of an integral block. This takes the derivative with respect to the atomic position Ra, i.e. the center of the primitive on the left. To get the derivative of the left primitive with respect to r (orbital coordinate), take the opposite sign. To get the derivative with respect to the center of the primitive on the right Rb, take the opposite sign. To get the derivative of the right primitive with respect to r, do not change the sign. [da/dRi|O|b] = 2*zeta*[a+1i|O|b] - Ni(a)[a-1i|O|b]
Calculate the first derivative of an integral block. This takes the derivative with respect to the atomic position Ra, i.e. the center of the primitive on the left. Difference to routine dabdr: employs no (!!) screening, which is relevant when calculating the derivatives of Coulomb integrals

Calculate the first derivative of an integral block. This takes the derivative with respect to the atomic position Rb, i.e. the center of the primitive on the right. To get the derivative of the left primitive with respect to r (orbital coordinate), take the opposite sign. [a|O|db/dRi] = 2*zetb*[a|O|b+1i] - Ni(b)[a|O|b-1i]

##### Arguments:
 INTEGER, INTENT(in) :: la_max ... INTEGER, INTENT(in) :: npgfa ... REAL(dp), INTENT(in) :: rpgfa(:) ... INTEGER, INTENT(in) :: la_min ... INTEGER, INTENT(in) :: lb_max ... INTEGER, INTENT(in) :: npgfb ... REAL(dp), INTENT(in) :: zetb(:) ... REAL(dp), INTENT(in) :: rpgfb(:) ... INTEGER, INTENT(in) :: lb_min ... REAL(dp), INTENT(in) :: dab ... REAL(dp), INTENT(in) :: ab(:,:) ... REAL(dp), INTENT(out) :: adbdx(:,:) ... REAL(dp), INTENT(out) :: adbdy(:,:) ... REAL(dp), INTENT(out) :: adbdz(:,:) ...

#### SUBROUTINEdabdr(la_max, npgfa, zeta, rpgfa, la_min, lb_max, npgfb, rpgfb, lb_min, dab, ab, dabdx, dabdy, dabdz)^

Calculate the first derivative of an integral block. This takes the derivative with respect to the atomic position Ra, i.e. the center of the primitive on the left. To get the derivative of the left primitive with respect to r (orbital coordinate), take the opposite sign. To get the derivative with respect to the center of the primitive on the right Rb, take the opposite sign. To get the derivative of the right primitive with respect to r, do not change the sign. [da/dRi|O|b] = 2*zeta*[a+1i|O|b] - Ni(a)[a-1i|O|b]

##### Arguments:
 INTEGER, INTENT(in) :: la_max ... INTEGER, INTENT(in) :: npgfa ... REAL(dp), INTENT(in) :: zeta(:) ... REAL(dp), INTENT(in) :: rpgfa(:) ... INTEGER, INTENT(in) :: la_min ... INTEGER, INTENT(in) :: lb_max ... INTEGER, INTENT(in) :: npgfb ... REAL(dp), INTENT(in) :: rpgfb(:) ... INTEGER, INTENT(in) :: lb_min ... REAL(dp), INTENT(in) :: dab ... REAL(dp), INTENT(in) :: ab(:,:) ... REAL(dp), INTENT(out) :: dabdx(:,:) ... REAL(dp), INTENT(out) :: dabdy(:,:) ... REAL(dp), INTENT(out) :: dabdz(:,:) ...

#### SUBROUTINEdabdr_noscreen(la_max, npgfa, zeta, lb_max, npgfb, ab, dabdx, dabdy, dabdz)^

Calculate the first derivative of an integral block. This takes the derivative with respect to the atomic position Ra, i.e. the center of the primitive on the left. Difference to routine dabdr: employs no (!!) screening, which is relevant when calculating the derivatives of Coulomb integrals

##### Arguments:
 INTEGER, INTENT(in) :: la_max ... INTEGER, INTENT(in) :: npgfa ... REAL(dp), INTENT(in) :: zeta(:) ... INTEGER, INTENT(in) :: lb_max ... INTEGER, INTENT(in) :: npgfb ... REAL(dp), INTENT(in) :: ab(:,:) ... REAL(dp), INTENT(out) :: dabdx(:,:) ... REAL(dp), INTENT(out) :: dabdy(:,:) ... REAL(dp), INTENT(out) :: dabdz(:,:) ...