I have wrote down Fortran code to calculate the distance and then sorting, but there is some problem in calling executable command.
Here is the code
program sort
implicit none
character CN*8,O*7
integer j,iconf,nconf
integer i,m
integer n,nmax,num
parameter (n=5)
double precision xbox,rq
parameter (nmax=3091,nconf=1)
double precision atom(nmax),id(nmax),ox(nmax),oy(nmax),oz(nmax)
double precision xij,yij,zij,rij,t
double precision r(n,n)
open(unit=1,status='unknown',file='a.gro')
do iconf= 1,nconf
read(1,*)
read(1,*)
do i=1,n
read(1,'(A8,A7,1i5,3f8.3)')CN,O,num,ox(i),oy(i),oz(i)
enddo
read(1,*)xbox
open(unit=3,file='dist.txt')
do i=1,n
do j=1,n
if(i .ne. j) then
xij=ox(i)-ox(j)
yij=oy(i)-oy(j)
zij=oz(i)-oz(j)
xij=xij - nint(xij/xbox)*xbox
yij=yij - nint(yij/xbox)*xbox
zij=zij - nint(zij/xbox)*xbox
r(i,j)=dsqrt(xij**2 + yij**2 + zij**2)
write(3,'(i3,2x,i3,4x,f17.15)') i,j, r(i,j)
call execute_command_line(sort -t, -k1 -g r(i,j))
write(*,*)
endif
enddo
enddo
enddo
END program
The input file is a.gro
Generated by trjconv : 360 water t= 1000.00000
216
1water OW1 1 0.764 0.617 0.582
2water OW1 2 0.865 1.469 1.696
3water OW1 3 0.423 1.400 1.324
4water OW1 4 0.381 1.464 0.392
5water OW1 5 1.279 0.872 0.131
1.87759 1.87759 1.87759
outfile file 3, dist.txt
1 2 1.148553302245917
1 3 1.131341681367747
1 4 0.948787647474397
1 5 0.730514202462895
2 1 1.148553302245917
2 3 0.581815262776768
2 4 0.750524142249935
2 5 0.790896648178509
3 1 1.131341681367747
3 2 0.581815262776768
3 4 0.935138492417032
3 5 1.216627908647504
4 1 0.948787647474397
4 2 0.750524142249935
4 3 0.935138492417032
4 5 1.106792211754311
5 1 0.730514202462895
5 2 0.790896648178509
5 3 1.216627908647504
5 4 1.106792211754311
so, I want to sort r(i,j), keeping i same j different.but call line is not working in fortran code.
error that is coming
tetra.f(48): error #6413: This global name is invalid in this context. [SORT]
call execute_command_line(sort -t, -k1 -g r(i,j))
----------------------------------^
tetra.f(48): error #6404: This name does not have a type, and must have an explicit type. [K1]
call execute_command_line(sort -t, -k1 -g r(i,j))
--------------------------------------------^
tetra.f(48): error #6404: This name does not have a type, and must have an explicit type. [GR]
call execute_command_line(sort -t, -k1 -g r(i,j))
------------------------------------------------^
tetra.f(48): error #6362: The data types of the argument(s) are invalid. [EXECUTE_COMMAND_LINE]
call execute_command_line(sort -t, -k1 -g r(i,j))
---------------------------------------^
tetra.f(48): error #6362: The data types of the argument(s) are invalid. [EXECUTE_COMMAND_LINE]
call execute_command_line(sort -t, -k1 -g r(i,j))
-----------------------------------------------^
compilation aborted for tetra.f (code 1)
Please let me know how can I execute shell command in Fortran code.
execute_command_linemust be a string. But I don't actually understand, what you are trying to do. Sorting a Fortran array using bash? That is a very bad idea.