|
22 | 22 | #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/nonlocal_new.h" |
23 | 23 |
|
24 | 24 | template <typename T> |
25 | | -Force_Stress_LCAO<T>::Force_Stress_LCAO(Record_adj& ra, const int nat_in) : RA(&ra), f_pw(nat_in), nat(nat_in) |
| 25 | +Force_Stress_LCAO<T>::Force_Stress_LCAO(Record_adj& ra, const int nat_in) : RA(&ra), nat(nat_in) |
26 | 26 | { |
27 | 27 | } |
28 | 28 | template <typename T> |
@@ -861,24 +861,39 @@ void Force_Stress_LCAO<T>::calForcePwPart(UnitCell& ucell, |
861 | 861 | const Structure_Factor& sf) |
862 | 862 | { |
863 | 863 | ModuleBase::TITLE("Force_Stress_LCAO", "calForcePwPart"); |
864 | | - //-------------------------------------------------------- |
865 | | - // local pseudopotential force: |
866 | | - // use charge density; plane wave; local pseudopotential; |
867 | | - //-------------------------------------------------------- |
868 | | - f_pw.cal_force_loc(ucell, fvl_dvl, rhopw, locpp.vloc, chr); |
869 | | - //-------------------------------------------------------- |
870 | | - // ewald force: use plane wave only. |
871 | | - //-------------------------------------------------------- |
872 | | - f_pw.cal_force_ew(ucell, fewalds, rhopw, &sf); // remain problem |
| 864 | +#ifdef __CUDA |
| 865 | + if(PARAM.inp.device == "gpu") |
| 866 | + { |
| 867 | + Forces<double, base_device::DEVICE_GPU> f_pw(nat); |
| 868 | + |
| 869 | + //-------------------------------------------------------- |
| 870 | + // local pseudopotential force: |
| 871 | + // use charge density; plane wave; local pseudopotential; |
| 872 | + //-------------------------------------------------------- |
| 873 | + f_pw.cal_force_loc(ucell, fvl_dvl, rhopw, locpp.vloc, chr); |
| 874 | + //-------------------------------------------------------- |
| 875 | + // ewald force: use plane wave only. |
| 876 | + //-------------------------------------------------------- |
| 877 | + f_pw.cal_force_ew(ucell, fewalds, rhopw, &sf); // remain problem |
| 878 | + |
| 879 | + //-------------------------------------------------------- |
| 880 | + // force due to core correlation. |
| 881 | + //-------------------------------------------------------- |
| 882 | + f_pw.cal_force_cc(fcc, rhopw, chr, locpp.numeric, ucell); |
| 883 | + //-------------------------------------------------------- |
| 884 | + // force due to self-consistent charge. |
| 885 | + //-------------------------------------------------------- |
| 886 | + f_pw.cal_force_scc(fscc, rhopw, vnew, vnew_exist, locpp.numeric, ucell); |
| 887 | + } else |
| 888 | +#endif |
| 889 | + { |
| 890 | + Forces<double, base_device::DEVICE_CPU> f_pw(nat); |
| 891 | + f_pw.cal_force_loc(ucell, fvl_dvl, rhopw, locpp.vloc, chr); |
| 892 | + f_pw.cal_force_ew(ucell, fewalds, rhopw, &sf); // remain problem |
| 893 | + f_pw.cal_force_cc(fcc, rhopw, chr, locpp.numeric, ucell); |
| 894 | + f_pw.cal_force_scc(fscc, rhopw, vnew, vnew_exist, locpp.numeric, ucell); |
| 895 | + } |
873 | 896 |
|
874 | | - //-------------------------------------------------------- |
875 | | - // force due to core correlation. |
876 | | - //-------------------------------------------------------- |
877 | | - f_pw.cal_force_cc(fcc, rhopw, chr, locpp.numeric, ucell); |
878 | | - //-------------------------------------------------------- |
879 | | - // force due to self-consistent charge. |
880 | | - //-------------------------------------------------------- |
881 | | - f_pw.cal_force_scc(fscc, rhopw, vnew, vnew_exist, locpp.numeric, ucell); |
882 | 897 | return; |
883 | 898 | } |
884 | 899 |
|
|
0 commit comments