Фортран усредняя столбцы кадр за кадром в определенном формате - PullRequest
0 голосов
/ 01 мая 2018

Я бы хотел усреднить первый столбец и последний показанный столбец здесь (это мой вывод). Мой код делает несколько вещей, таких как сравнение определенных атомов с именем «CA» для каждого кадра (у меня есть 1000 кадров), исключение ближайших соседей и, в зависимости от значения отсечки, и подсчет этих контактов и распечатка их отдельно в соответствии с моим желанием ( входной файл выглядит как это ). Я хотел бы напечатать файл, в котором он дает мне вывод, например, следующий:

1 0

2 12

3 12

....

100 16


Нужно руководство, чтобы достичь этого, помогая мне сформировать цикл или условие.

  open(unit=11,file="0-1000.gro", status="old", action="read")      
  do f=1,frames,10               
  25 format (F10.5,F10.5,F10.5)      

  do h=1,natoms_frames
  read(11,format11)nom(h),resname(h),atmtype(h),num(h),x(h),y(h),z(h)
  end do
  read(11,25)lasta(f),lastb(f),lastc(f) 

  count=0    
  do h=1, natoms_frames        
  if (atmtype(h).eq.'  CA') then
      count=count+1
      CAx(count)=x(h) 
      CAy(count)=y(h)
      CAz(count)=z(h)    
  end if
  end do      

  do h=1, count
  avg_cal=0 
    cal=0 
    do hh=h+3, count
    if (h.ne.hh) then
  ! finding distance formula from the gro file  
  distance = sqrt((CAx(hh)-CAx(h))**2 + (CAy(hh)-CAy(h))**2 + (CAz(hh)-CAz(h))**2)
  if (distance.le.cutoff) then
  cal = cal+1
  set = set+1
  final_set=final_set+1
  avg_cal=avg_cal+1
  end if
  end if
  end do
   write(*,*)h,cal,final_set 
  end do

  end do ! end of frames

  close(11)

  end program num_contacts     

1 Ответ

0 голосов
/ 02 мая 2018

Запись в файл (в ASCII) аналогична печати на экране, за исключением того, что вам нужно указать единицу измерения файла.

Итак, сначала откройте ваш файл:

open(unit = 10, file = "filename.dat", access = "sequential", form = "formatted", status = "new", iostat = ierr)

где 'unit' - это уникальное целое число, которое будет связано с вашим файлом (как идентификатор). Обратите внимание, что «форма» «отформатирована», так как вы хотите вывести что-то читаемое человеком. Тогда вы можете начать свой цикл:

do h = 1, natoms_frames
  ! BUNCH OF STUFF TO CALCULATE REQUIRED VARIABLES
  write(10, *) h, cal, final_set
end do

Наконец, закройте файл:

close(10)
...