diff --git a/examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py b/examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py new file mode 100644 index 0000000000..1e9d58a71b --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py @@ -0,0 +1,39 @@ +from ase import Atoms, Atom +from ase.calculators.lammpslib import LAMMPSlib +import numpy as np +import matplotlib.pyplot as plt +from mpi4py import MPI + +comm = MPI.COMM_WORLD +rank = comm.Get_rank() + +GaAs = Atoms([Atom('Ga', (0.0, 0.0, 0.0)), + Atom('As', (1.413425, 1.413425, 1.413425))], + cell=[(0.0, 2.82685, 2.82685), (2.82685, 0.0, 2.82685), (2.82685, 2.82685, 0.0)], + pbc=True,) + +cmds = ["pair_style bop", "pair_coeff * * ../../../../../potentials/GaAs.bop.table Ga As", + "comm_modify cutoff 12"] + +mends = ["info system", + "dynamical_matrix all eskm 0.000001 file dynmat.dat binary no", + "neigh_modify delay 0"] + +N = 5 +GaAs = GaAs.repeat([N, N, N]) + +lammps = LAMMPSlib(lmpcmds=cmds, atom_types={'Ga': 1, 'As': 2}, amendments=mends, log_file='lammps.log') + +GaAs.set_calculator(lammps) +GaAs.get_potential_energy() + +if rank == 0: + dynmat = np.loadtxt("dynmat.dat") + dynmat = dynmat.reshape(([int(3*(len(dynmat)/3)**0.5), int(3*(len(dynmat)/3)**0.5)])) + eigv = np.linalg.eigvals(dynmat) + eigv.sort() + eigv = np.sqrt(np.abs(eigv))/(2*np.pi) + plt.hist(eigv, 80) + plt.xlabel('Frequency (THz)') + plt.show() + diff --git a/examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py b/examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py new file mode 100644 index 0000000000..52e14ca47d --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py @@ -0,0 +1,39 @@ +from ase import Atoms, Atom +from ase.calculators.lammpslib import LAMMPSlib +import numpy as np +import matplotlib.pyplot as plt +from mpi4py import MPI + +comm = MPI.COMM_WORLD +rank = comm.Get_rank() + +GaN = Atoms([Atom('Ga', (1.59, 0.917986928012, 0.0)), + Atom('Ga', (1.59, -0.917986928012, 2.583)), + Atom('N', (1.59, 0.917986928012, 1.98891)), + Atom('N', (1.59, -0.917986928012, 4.57191))], + cell=[(1.59, -2.75396078403, 0.0), (1.59, 2.75396078403, 0.0), (0.0, 0.0, 5.166)], + pbc=True) + +cmds = ["pair_style tersoff", "pair_coeff * * ../../../../../potentials/GaN.tersoff Ga N"] + +mends = ["info system", + "dynamical_matrix all eskm 0.000001 file dynmat.dat binary no", + "neigh_modify delay 0"] + +N = 6 +GaN = GaN.repeat([N, N, N]) + +lammps = LAMMPSlib(lmpcmds=cmds, atom_types={'Ga': 1, 'N': 2}, amendments=mends, log_file='lammps.log') + +GaN.set_calculator(lammps) +GaN.get_potential_energy() + +if rank == 0: + dynmat = np.loadtxt("dynmat.dat") + dynmat = dynmat.reshape(([int(3*(len(dynmat)/3)**0.5), int(3*(len(dynmat)/3)**0.5)])) + eigv = np.linalg.eigvals(dynmat) + eigv.sort() + eigv = np.sqrt(np.abs(eigv))/(2*np.pi) + plt.hist(eigv, 80) + plt.xlabel('Frequency (THz)') + plt.show() diff --git a/examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py b/examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py new file mode 100644 index 0000000000..79a81aa95c --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py @@ -0,0 +1,57 @@ +from ase import Atoms, Atom +from ase.calculators.lammpslib import LAMMPSlib +import numpy as np +import matplotlib.pyplot as plt +from mpi4py import MPI + +comm = MPI.COMM_WORLD +rank = comm.Get_rank() + +quartz = Atoms( + [Atom('Si', (1.1545226, -1.99969180169, 0.0)), + Atom('Si', (1.1545226, 1.99969180169, 3.6036)), + Atom('Si', (2.6069548, 2.15247249027e-16, 1.8018)), + Atom('O', (1.6724232, -0.624132037742, 0.64378314)), + Atom('O', (1.6724232, 0.624132037742, 2.9598186618)), + Atom('O', (2.1623026, -2.49695388906, 4.2473849418)), + Atom('O', (3.5392742, 1.13629495821, 1.1580150582)), + Atom('O', (3.5392742, -1.13629495821, 2.4455813382)), + Atom('O', (2.1623026, 2.49695388906, 4.76161686))], + cell=[(2.458, -4.257380885, 0.0), (2.458, 4.257380885, 0.0), (0.0, 0.0, 5.4054)], + pbc=True, + ) + +# number of repeats +N = 3 +quartz = quartz.repeat([N, N, N]) + +header = ['units metal', + 'atom_style charge', + 'atom_modify map array sort 0 0'] + +cmds = ["pair_style buck/coul/long 10.0 8.0", + "pair_coeff 1 1 0 1 0", + "pair_coeff 1 2 18003.7572 0.20520 133.5381", + "pair_coeff 2 2 1388.7730 0.36232 175.0000", + "kspace_style ewald 1.0e-12", + "set type 1 charge 2.4", + "set type 2 charge -1.2"] + +mends = ["dynamical_matrix all eskm 0.000001 file dynmat.dat binary no", + "neigh_modify delay 0"] + + +lammps = LAMMPSlib(lmpcmds=cmds, lammps_header=header, amendments=mends, log_file='lammps.log') + +quartz.set_calculator(lammps) +quartz.get_potential_energy() + +if rank == 0: + dynmat = np.loadtxt("dynmat.dat") + dynmat = dynmat.reshape(([int(3*(len(dynmat)/3)**0.5), int(3*(len(dynmat)/3)**0.5)])) + eigv = np.linalg.eigvals(dynmat) + eigv.sort() + plt.hist(33*np.sqrt(np.abs(eigv))/(2*np.pi), 80) + plt.xlabel('Frequency (cm-1)') + plt.show() + diff --git a/examples/USER/phonon/dynamical_matrix_command/README.md b/examples/USER/phonon/dynamical_matrix_command/Silicon/README.md similarity index 77% rename from examples/USER/phonon/dynamical_matrix_command/README.md rename to examples/USER/phonon/dynamical_matrix_command/Silicon/README.md index 8981c1e63a..15ae158c62 100755 --- a/examples/USER/phonon/dynamical_matrix_command/README.md +++ b/examples/USER/phonon/dynamical_matrix_command/Silicon/README.md @@ -7,7 +7,7 @@ This directory contains the ingredients to calculate a dynamical matrix. Example: ``` NP=4 #number of processors -mpirun -np $NP lmp_mpi < in.silicon > out.silicon +mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon ``` To test out a different silicon example: @@ -15,7 +15,7 @@ To test out a different silicon example: LMP_FILE=amorphous_silicon.lmp cp lmp_bank/$LMP_FILE ./silicon_input_file.lmp NP=4 #number of processors -mpirun -np $NP lmp_mpi < in.silicon > out.silicon +mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon ``` ## Requires: MANYBODY and MOLECULE packages diff --git a/examples/USER/phonon/dynamical_matrix_command/Si.opt.tersoff b/examples/USER/phonon/dynamical_matrix_command/Silicon/Si.opt.tersoff similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/Si.opt.tersoff rename to examples/USER/phonon/dynamical_matrix_command/Silicon/Si.opt.tersoff diff --git a/examples/USER/phonon/dynamical_matrix_command/ff-silicon.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/ff-silicon.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/ff-silicon.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/ff-silicon.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/in.silicon b/examples/USER/phonon/dynamical_matrix_command/Silicon/in.silicon similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/in.silicon rename to examples/USER/phonon/dynamical_matrix_command/Silicon/in.silicon diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/amorphous_silicon.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/amorphous_silicon.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/lmp_bank/amorphous_silicon.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/amorphous_silicon.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_216.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_216.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_216.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_216.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_512.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_512.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_512.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_512.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_8.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_8.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_8.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_8.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/results/dynmat.dat b/examples/USER/phonon/dynamical_matrix_command/Silicon/results/dynmat.dat similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/results/dynmat.dat rename to examples/USER/phonon/dynamical_matrix_command/Silicon/results/dynmat.dat diff --git a/examples/USER/phonon/dynamical_matrix_command/results/out.silicon b/examples/USER/phonon/dynamical_matrix_command/Silicon/results/out.silicon similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/results/out.silicon rename to examples/USER/phonon/dynamical_matrix_command/Silicon/results/out.silicon diff --git a/examples/USER/phonon/dynamical_matrix_command/silicon_input_file.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/silicon_input_file.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/silicon_input_file.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/silicon_input_file.lmp diff --git a/examples/USER/phonon/third_order_command/Manual.md b/examples/USER/phonon/third_order_command/silicon/Manual.md similarity index 100% rename from examples/USER/phonon/third_order_command/Manual.md rename to examples/USER/phonon/third_order_command/silicon/Manual.md diff --git a/examples/USER/phonon/third_order_command/README.md b/examples/USER/phonon/third_order_command/silicon/README.md similarity index 82% rename from examples/USER/phonon/third_order_command/README.md rename to examples/USER/phonon/third_order_command/silicon/README.md index a9604e4575..c938734393 100755 --- a/examples/USER/phonon/third_order_command/README.md +++ b/examples/USER/phonon/third_order_command/silicon/README.md @@ -8,7 +8,7 @@ Example: ``` $THIRD_ORDER=third_order #tensor output file NP=4 #number of processors -mpirun -np $NP lmp_mpi < in.silicon > out.silicon +mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon combine.sh third_order ``` @@ -18,7 +18,7 @@ $THIRD_ORDER=third_order $LMP_FILE=amorphous_silicon.lmp cp lmp_bank/$LMP_FILE ./silicon_input_file.lmp NP=4 #number of processors -mpirun -np $NP lmp_mpi < in.silicon > out.silicon +mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon bash combine.sh $THIRD_ORDER ``` diff --git a/examples/USER/phonon/third_order_command/Si.opt.tersoff b/examples/USER/phonon/third_order_command/silicon/Si.opt.tersoff similarity index 100% rename from examples/USER/phonon/third_order_command/Si.opt.tersoff rename to examples/USER/phonon/third_order_command/silicon/Si.opt.tersoff diff --git a/examples/USER/phonon/third_order_command/combine.sh b/examples/USER/phonon/third_order_command/silicon/combine.sh similarity index 100% rename from examples/USER/phonon/third_order_command/combine.sh rename to examples/USER/phonon/third_order_command/silicon/combine.sh diff --git a/examples/USER/phonon/third_order_command/ff-silicon.lmp b/examples/USER/phonon/third_order_command/silicon/ff-silicon.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/ff-silicon.lmp rename to examples/USER/phonon/third_order_command/silicon/ff-silicon.lmp diff --git a/examples/USER/phonon/third_order_command/in.silicon b/examples/USER/phonon/third_order_command/silicon/in.silicon similarity index 100% rename from examples/USER/phonon/third_order_command/in.silicon rename to examples/USER/phonon/third_order_command/silicon/in.silicon diff --git a/examples/USER/phonon/third_order_command/lmp_bank/silicon_216.lmp b/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_216.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/lmp_bank/silicon_216.lmp rename to examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_216.lmp diff --git a/examples/USER/phonon/third_order_command/lmp_bank/silicon_512.lmp b/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_512.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/lmp_bank/silicon_512.lmp rename to examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_512.lmp diff --git a/examples/USER/phonon/third_order_command/lmp_bank/silicon_8.lmp b/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_8.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/lmp_bank/silicon_8.lmp rename to examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_8.lmp diff --git a/examples/USER/phonon/third_order_command/results/out.silicon b/examples/USER/phonon/third_order_command/silicon/results/out.silicon similarity index 100% rename from examples/USER/phonon/third_order_command/results/out.silicon rename to examples/USER/phonon/third_order_command/silicon/results/out.silicon diff --git a/examples/USER/phonon/third_order_command/results/third_order b/examples/USER/phonon/third_order_command/silicon/results/third_order similarity index 100% rename from examples/USER/phonon/third_order_command/results/third_order rename to examples/USER/phonon/third_order_command/silicon/results/third_order diff --git a/examples/USER/phonon/third_order_command/silicon_input_file.lmp b/examples/USER/phonon/third_order_command/silicon/silicon_input_file.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/silicon_input_file.lmp rename to examples/USER/phonon/third_order_command/silicon/silicon_input_file.lmp diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp index b2a684e6da..41382e64cb 100644 --- a/src/USER-PHONON/third_order.cpp +++ b/src/USER-PHONON/third_order.cpp @@ -168,13 +168,11 @@ void ThirdOrder::options(int narg, char **arg) if (narg < 0) error->all(FLERR,"Illegal dynamical_matrix command"); int iarg = 0; const char *filename = "third_order.txt"; - std::stringstream fss; while (iarg < narg) { if (strcmp(arg[iarg],"file") == 0) { if (iarg+2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); - fss << arg[iarg + 1] << me; - filename = fss.str().c_str(); + filename = arg[iarg + 1]; file_flag = 1; iarg += 2; } @@ -189,7 +187,7 @@ void ThirdOrder::options(int narg, char **arg) iarg += 2; } else error->all(FLERR,"Illegal dynamical_matrix command"); } - if (file_flag == 1 and me == 0) { + if (file_flag == 1 && me == 0) { openfile(filename); } } @@ -338,10 +336,9 @@ void ThirdOrder::writeMatrix(double *dynmat, int i, int a, int j, int b) if (!binaryflag && fp) { clearerr(fp); for (int k = 0; k < gcount; k++){ - double norm = pow(dynmat[k*3], 2) - + pow(dynmat[k*3+1], 2) - + pow(dynmat[k+3+2], 2); - if (norm > 1.0e-16) + if (dynmat[k*3] > 1.0e-16 + && dynmat[k*3+1] > 1.0e-16 + && dynmat[k*3+2] > 1.0e-16) fprintf(fp, "%d %d %d %d %d %7.8f %7.8f %7.8f\n", i+1, a + 1, j+1, b + 1, groupmap[k]+1,