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
沒有留言:
張貼留言