1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
module def_interface
interface
subroutine lecture_geom_toutes(symb,xyz,pas)
real,pointer :: xyz(:,:,:)
character,pointer :: symb(:)
integer pas
end subroutine
subroutine ecriture(distances)
real,pointer :: distances(:,:)
end subroutine
end interface
end module
program Suivi_Distances
use def_interface
implicit none
real,pointer :: xyz(:,:,:)
character,pointer :: symb(:)
integer pas
integer,pointer :: liste(:)
integer atomRef
real,pointer :: distances(:,:)
integer i,j,nbatomes
real dist
integer nb,nbgeom
call lecture_geom_toutes(symb,xyz,pas)
nbatomes = size(symb)
do i=1,nbatomes
print '(I3,A3,100(F8.3))',i,symb(i), &
(sqrt( (xyz(1,i,1)-xyz(1,j,1))**2 + (xyz(2,i,1)-
xyz(2,j,1))**2 + (xyz(3,i,1)-xyz(3,j,1))**2 ),j=1,i)
enddo
print*,'n° de l''atome de référence'
read*,atomRef
print*,'Nombre d''atomes à suivre'
read*,nb
allocate(liste(nb))
print*,'Donner les n° des atomes à suivre'
read*,liste(:)
nbgeom = size(xyz,dim=1)
do i=1,size(xyz,dim=1)
do j=1,nb
distances(i,j) = sqrt( (xyz(i,liste(j),1) -
xyz(i,atomRef,1))**2 &
+(xyz(i,liste(j),2) -
xyz(i,atomRef,2))**2 &
+(xyz(i,liste(j),3) -
xyz(i,atomRef,3))**2)
enddo
enddo
call ecriture(distances)
end program
subroutine lecture_geom_toutes(symb,xyz,pas)
implicit none
real,pointer :: xyz(:,:,:)
character,pointer :: symb(:)
integer nbgeom
real,parameter:: tempsua = 2.41888E-17
integer nbatomes,pas
character(len=50) :: fich,dump
integer ioerr
integer i,j
do
print*,'Donner le nom du fichier'
read*,fich
open(1,file=fich,status='old',iostat=ioerr)
if (ioerr == 0) exit
print *,'Erreur de fichier à l''ouverture'
enddo
nbgeom = 1
do
read(1,*,iostat=ioerr) nbatomes
if (ioerr == -1) exit
nbgeom = nbgeom + 1
read(2,*) dump,pas
do i=1,nbatomes
read(i,*)
enddo
enddo
print*,'Nombre de géométries dans le fichier:',nbgeom
print*,'Temps de simulation en ps:',pas*tempsua/1E-12
allocate(symb(nbatomes),xyz(nbgeom,nbatomes,3))
rewind(1)
do i=1,nbgeom
read(1,*)
read(1,*)
do j=1,nbgeom
read(1,*) symb(j),xyz(i,j,:)
enddo
enddo
close(1)
deallocate(symb,xyz)
end subroutine lecture_geom_toutes
subroutine ecriture(distances)
real,pointer :: distances(:,:)
integer i
character(len=30) fich
print*,"nom du fichier résultat :"
read*,fich
open(2, file=fich)
do i=1,size(distances,dim=1)
write(2,*) distances(i,:)
enddo
close(2)
end subroutine |
Partager