Statistiques
| Révision :

root / src / CalcBMat_mixed.f90 @ 2

Historique | Voir | Annoter | Télécharger (2,88 ko)

1 1 equemene
subroutine CalcBMat_mixed (natoms, xyzatm, indzmat, dzdc, atmass,atome)
2 1 equemene
3 1 equemene
  use Io_module
4 1 equemene
  use Path_module, only : MW, NCart
5 1 equemene
6 1 equemene
  IMPLICIT NONE
7 1 equemene
8 1 equemene
9 1 equemene
  integer(KINT) :: natoms, indzmat(natoms,5),atome(natoms)
10 1 equemene
  real(KREAL)   :: xyzatm(3,natoms), dzdc(3*natoms,3*natoms),atmass(natoms)
11 1 equemene
12 1 equemene
13 1 equemene
!!!!!!!!!!!!!!!!!!!!!
14 1 equemene
!
15 1 equemene
! This routine computes the derivatives of the internal coordinates
16 1 equemene
! with respect to the cartesian coordinates.
17 1 equemene
! This is what is called the B matrix in Baker coordinates :
18 1 equemene
! B(i,j)=dz_i/dx_j
19 1 equemene
!
20 1 equemene
! it uses the same routines as Calc_baker
21 1 equemene
!
22 1 equemene
! Here, it is used for mixed Cart+Z-mat system
23 1 equemene
!
24 1 equemene
!!!!!!!!!!!!!!!!!!!!!!
25 1 equemene
!
26 1 equemene
! Input:
27 1 equemene
! natoms: number of atoms
28 1 equemene
! xyzatm(3,natoms): cartesian geometry
29 1 equemene
! indzmat(natoms,5): index of the Z-matrix definition
30 1 equemene
! atmass(natoms): mass of the atoms
31 1 equemene
! atome(natoms): ??
32 1 equemene
!
33 1 equemene
! Output:
34 1 equemene
! dzdc(3*natoms,3*natoms): B matrix
35 1 equemene
!
36 1 equemene
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
37 1 equemene
38 1 equemene
39 1 equemene
  INTERFACE
40 1 equemene
     function valid(string) result (isValid)
41 1 equemene
       CHARACTER(*), intent(in) :: string
42 1 equemene
       logical                  :: isValid
43 1 equemene
     END function VALID
44 1 equemene
  END INTERFACE
45 1 equemene
46 1 equemene
  LOGICAL :: debug
47 1 equemene
  INTEGER(KINT) :: i,j,k,iat, istart
48 1 equemene
  INTEGER(KINT) :: iat1, iat2, iat3, iat4
49 1 equemene
50 1 equemene
51 1 equemene
52 1 equemene
  ! ======================================================================
53 1 equemene
54 1 equemene
  debug=valid('CalcBMat').OR.valid('CalcBMat_mixed')
55 1 equemene
56 1 equemene
  if (debug) Call Header('Entering CalcBMat_mixed')
57 1 equemene
  if (debug) THEN
58 1 equemene
     WRITE(*,*) 'DBG CalcBMat_mixed Xyzatm '
59 1 equemene
     DO iat=1,natoms
60 1 equemene
        write(*,'(1X,I5,3(1X,F15.6))') iat, xyzatm(1:3,iat)
61 1 equemene
     END DO
62 1 equemene
     WRITE(*,*) 'DBG CalcBMat_mixed IndZmat'
63 1 equemene
     DO iat=1,natoms
64 1 equemene
        write(*,'(6(1X,I5))') iat, indzmat(iat,1:4)
65 1 equemene
     END DO
66 1 equemene
  END IF
67 1 equemene
68 1 equemene
  dzdc=0.d0
69 1 equemene
  do i = 1, NCart
70 1 equemene
     iat=indzmat(i,1)
71 1 equemene
     do j=1,3
72 1 equemene
        k=(iat-1)*3+j
73 1 equemene
        dzdc(k,k)=1.d0
74 1 equemene
     END DO
75 1 equemene
  END DO
76 1 equemene
77 1 equemene
    IF (NCart.EQ.1) THEN
78 1 equemene
       if (natoms.ge.2) THEN
79 1 equemene
          iat1=indzmat(2,1)
80 1 equemene
          iat2=indzmat(2,2)
81 1 equemene
          Call CONSTRAINTS_BONDLENGTH_DER(Natoms,iat1,iAT2, xyzatm, dzdc(1,4))
82 1 equemene
         END IF
83 1 equemene
    END IF
84 1 equemene
    IF (NCart.LE.2) THEN
85 1 equemene
       if (natoms.ge.3) THEN
86 1 equemene
          iat1=indzmat(3,1)
87 1 equemene
          iat2=indzmat(3,2)
88 1 equemene
          iat3=indzmat(3,3)
89 1 equemene
          Call CONSTRAINTS_BONDLENGTH_DER(Natoms,iat1,iAT2, xyzatm, dzdc(1,7))
90 1 equemene
          CALL CONSTRAINTS_BONDANGLE_DER(Natoms,iAt1,iAT2,iAt3, xyzatm, dzdc(1,8))
91 1 equemene
       END IF
92 1 equemene
    END IF
93 1 equemene
94 1 equemene
    IStart=max(NCart+1,4)
95 1 equemene
    k=(IStart-1)*3+1
96 1 equemene
  DO I=IStart, Natoms
97 1 equemene
     iat1=indzmat(i,1)
98 1 equemene
     iat2=indzmat(i,2)
99 1 equemene
     iat3=indzmat(i,3)
100 1 equemene
     iat4=indzmat(i,4)
101 1 equemene
     Call CONSTRAINTS_BONDLENGTH_DER(Natoms,iat1,iAT2, xyzatm, dzdc(1,k))
102 1 equemene
     k=k+1
103 1 equemene
     CALL CONSTRAINTS_BONDANGLE_DER(Natoms,iAt1,iAT2,iAt3, xyzatm, dzdc(1,k))
104 1 equemene
     k=k+1
105 1 equemene
     CALL CONSTRAINTS_TORSION_DER2(Natoms,iat1,iat2,iat3,iat4, xyzatm, dzdc(1,k))
106 1 equemene
     k=k+1
107 1 equemene
  END DO
108 1 equemene
109 1 equemene
110 1 equemene
111 1 equemene
112 1 equemene
113 1 equemene
  if (debug) Call Header('CalcBMat_mixed over')
114 1 equemene
115 1 equemene
  ! ======================================================================
116 1 equemene
117 1 equemene
end subroutine CalcBMat_mixed