Fortran:
! module, output a single frame (pdb "model") of the trajectory. This has | |
! nothing to do with OpenMM. | |
SUBROUTINE myWritePDBFrame(frameNum, timeInPs, energyInKcal) | |
use MyAtomInfo; implicit none | |
integer frameNum; real*8 timeInPs, energyInKcal | |
integer n | |
print "('MODEL',5X,I0)", frameNum | |
print "('REMARK 250 time=', F0.3, ' picoseconds; Energy=', F0.3, ' kcal/mole')", & | |
timeInPs, energyInKcal | |
do n = 1,NumAtoms | |
print "('ATOM ', I5, ' ', A4, ' SLT 1 ', 3F8.3, ' 1.00 0.00')", & | |
n, atoms(n)%pdb, atoms(n)%posInAng | |
end do | |
print "('ENDMDL')" | |
END SUBROUTINE |
static void | |
myWritePDBFrame(int frameNum, double timeInPs, double energyInKcal, | |
const MyAtomInfo atoms[]) | |
{ | |
// Write out in PDB format -- printf is so much more compact than formatted cout. | |
printf("MODEL %d\n", frameNum); | |
printf("REMARK 250 time=%.3f ps; energy=%.3f kcal/mole\n", | |
timeInPs, energyInKcal); | |
for (int n=0; *atoms[n].pdb; ++n) | |
printf("ATOM %5d %4s SLT 1 %8.3f%8.3f%8.3f 1.00 0.00\n", | |
n+1, atoms[n].pdb, | |
atoms[n].posInAng[0], atoms[n].posInAng[1], atoms[n].posInAng[2]); | |
printf("ENDMDL\n"); | |
}
|
參考
https://github.com/pandegroup/openmm/blob/master/examples/HelloSodiumChlorideInFortran.f90
https://github.com/pandegroup/openmm/blob/master/examples/HelloSodiumChloride.cpp
沒有留言:
張貼留言