# Copyright 2021 Huawei Technologies Co., Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================ '''main''' import argparse import time from src.simulation import Simulation import mindspore.context as context from mindspore import Tensor parser = argparse.ArgumentParser(description='Sponge Controller') parser.add_argument('--i', type=str, default=None, help='input file') parser.add_argument('--amber_parm', type=str, default=None, help='paramter file in AMBER type') parser.add_argument('--c', type=str, default=None, help='initial coordinates file') parser.add_argument('--r', type=str, default="restrt", help='') parser.add_argument('--x', type=str, default="mdcrd", help='') parser.add_argument('--o', type=str, default="mdout", help="") parser.add_argument('--box', type=str, default="mdbox", help='') parser.add_argument('--device_id', type=int, default=0, help='') args_opt = parser.parse_args() context.set_context(mode=context.GRAPH_MODE, device_target="GPU", device_id=args_opt.device_id, save_graphs=False) if __name__ == "__main__": simulation = Simulation(args_opt) start = time.time() compiler_time = 0 save_path = args_opt.o file = open(save_path, 'w') for steps in range(simulation.md_info.step_limit): print_step = steps % simulation.ntwx if steps == simulation.md_info.step_limit - 1: print_step = 0 temperature, total_potential_energy, sigma_of_bond_ene, sigma_of_angle_ene, sigma_of_dihedral_ene, \ nb14_lj_energy_sum, nb14_cf_energy_sum, LJ_energy_sum, ee_ene, _ = simulation(Tensor(steps), Tensor(print_step)) if steps == 0: compiler_time = time.time() if steps % simulation.ntwx == 0 or steps == simulation.md_info.step_limit - 1: if steps == 0: print("_steps_ _TEMP_ _TOT_POT_ENE_ _BOND_ENE_ " "_ANGLE_ENE_ _DIHEDRAL_ENE_ _14LJ_ENE_ _14CF_ENE_ _LJ_ENE_ _CF_PME_ENE_") file.write("_steps_ _TEMP_ _TOT_POT_ENE_ _BOND_ENE_ " "_ANGLE_ENE_ _DIHEDRAL_ENE_ _14LJ_ENE_ _14CF_ENE_ _LJ_ENE_ _CF_PME_ENE_\n") temperature = temperature.asnumpy() total_potential_energy = total_potential_energy.asnumpy() print("{:>7.0f} {:>7.3f} {:>11.3f}".format(steps, float(temperature), float(total_potential_energy)), end=" ") if simulation.bond.bond_numbers > 0: sigma_of_bond_ene = sigma_of_bond_ene.asnumpy() print("{:>10.3f}".format(float(sigma_of_bond_ene)), end=" ") if simulation.angle.angle_numbers > 0: sigma_of_angle_ene = sigma_of_angle_ene.asnumpy() print("{:>11.3f}".format(float(sigma_of_angle_ene)), end=" ") if simulation.dihedral.dihedral_numbers > 0: sigma_of_dihedral_ene = sigma_of_dihedral_ene.asnumpy() print("{:>14.3f}".format(float(sigma_of_dihedral_ene)), end=" ") if simulation.nb14.nb14_numbers > 0: nb14_lj_energy_sum = nb14_lj_energy_sum.asnumpy() nb14_cf_energy_sum = nb14_cf_energy_sum.asnumpy() print("{:>10.3f} {:>10.3f}".format(float(nb14_lj_energy_sum), float(nb14_cf_energy_sum)), end=" ") LJ_energy_sum = LJ_energy_sum.asnumpy() ee_ene = ee_ene.asnumpy() print("{:>7.3f}".format(float(LJ_energy_sum)), end=" ") print("{:>12.3f}".format(float(ee_ene))) if file is not None: file.write("{:>7.0f} {:>7.3f} {:>11.3f} {:>10.3f} {:>11.3f} {:>14.3f} {:>10.3f} {:>10.3f} {:>7.3f}" " {:>12.3f}\n".format(steps, float(temperature), float(total_potential_energy), float(sigma_of_bond_ene), float(sigma_of_angle_ene), float(sigma_of_dihedral_ene), float(nb14_lj_energy_sum), float(nb14_cf_energy_sum), float(LJ_energy_sum), float(ee_ene))) end = time.time() file.close() print("Main time(s):", end - start) print("Main time(s) without compiler:", end - compiler_time)