@@ -496,7 +496,7 @@ check_params(struct efp *efp)
496496 enum efp_result res ;
497497
498498 for (size_t i = 0 ; i < efp -> n_frag ; i ++ ) {
499- if (efp -> opts .print > 1 )
499+ if (efp -> opts .print > 2 )
500500 print_frag_info (efp , i );
501501 if ((res = check_frag_params (& efp -> opts , efp -> frags + i ))) {
502502 efp_log ("check_params() failure" );
@@ -607,6 +607,10 @@ compute_two_body_range(struct efp *efp, size_t frag_from, size_t frag_to,
607607 if ((do_elec (& efp -> opts ) || special_elec ) && efp -> frags [i ].n_multipole_pts > 0 &&
608608 efp -> frags [fr_j ].n_multipole_pts > 0 ) {
609609 e_elec_tmp = efp_frag_frag_elec (efp , i , fr_j );
610+
611+ if (efp -> opts .print > 0 && fabs (e_elec_tmp ) > 1.0 )
612+ printf (" WARNING: elec energy between fragments %zu and %zu is %lf \n" , i , fr_j , e_elec_tmp );
613+
610614 // zeroing the energy contribution on the special fragment in torch custom models
611615 if (efp -> opts .enable_elpot && if_special_fragment ) e_elec_tmp = 0.0 ;
612616 //e_elec_tmp = efp_frag_frag_elec(efp, i, fr_j);
@@ -662,9 +666,9 @@ compute_two_body_range(struct efp *efp, size_t frag_from, size_t frag_to,
662666 if (efp -> opts .print > 1 ) {
663667 printf (" In compute_two_body_range() \n" );
664668 print_ene (& efp -> energy );
665- if (efp -> opts .enable_pairwise )
666- print_energies (efp );
667669 }
670+ if (efp -> opts .print > 2 && efp -> opts .enable_pairwise )
671+ print_energies (efp );
668672}
669673
670674EFP_EXPORT enum efp_result
@@ -1559,6 +1563,7 @@ efp_get_frag_ai_screen(struct efp *efp, size_t frag_idx, double *screen, int if_
15591563 return EFP_RESULT_SUCCESS ;
15601564}
15611565
1566+ /*
15621567EFP_EXPORT enum efp_result
15631568efp_get_all_ai_screen(struct efp *efp, double *screen)
15641569{
@@ -1576,6 +1581,27 @@ efp_get_all_ai_screen(struct efp *efp, double *screen)
15761581
15771582 return EFP_RESULT_SUCCESS;
15781583}
1584+ */
1585+
1586+ EFP_EXPORT enum efp_result
1587+ efp_get_ho_ai_screen (struct efp * efp , double * screen )
1588+ {
1589+ assert (efp );
1590+ assert (screen );
1591+
1592+ for (size_t i = 0 ; i < efp -> n_frag ; i ++ )
1593+ if (efp -> frags [i ].multipole_rank > 0 ) {
1594+ struct frag * frag = efp -> frags + i ;
1595+
1596+ for (size_t j = 0 ; j < frag -> n_multipole_pts ; j ++ ) {
1597+ struct multipole_pt * pt = frag -> multipole_pts + j ;
1598+ * screen ++ = pt -> screen0 ;
1599+ }
1600+ }
1601+
1602+ return EFP_RESULT_SUCCESS ;
1603+ }
1604+
15791605/*
15801606EFP_EXPORT enum efp_result
15811607efp_get_ai_screen(struct efp *efp, size_t frag_idx, double *screen)
@@ -1856,33 +1882,20 @@ efp_get_frag_rank(struct efp *efp, size_t frag_idx, size_t *rank)
18561882*/
18571883
18581884EFP_EXPORT enum efp_result
1859- efp_get_frag_rank (struct efp * efp , size_t frag_idx , size_t * rank )
1885+ efp_get_frag_rank (struct efp * efp , size_t frag_idx , int * rank )
18601886{
18611887 assert (efp );
18621888 assert (rank );
18631889 assert (frag_idx < efp -> n_frag );
18641890
18651891 struct frag * frag = efp -> frags + frag_idx ;
18661892
1867- * rank = 0 ;
1868- for (size_t i = 0 ; i < frag -> n_multipole_pts ; i ++ ) {
1869- struct multipole_pt * pt = frag -> multipole_pts + i ;
1870- size_t rank_tmp = 0 ;
1871- if (pt -> if_dip )
1872- rank_tmp = 1 ;
1873- if (pt -> if_quad )
1874- rank_tmp = 2 ;
1875- if (pt -> if_oct )
1876- rank_tmp = 3 ;
1877- if (rank_tmp > * rank )
1878- * rank = rank_tmp ;
1879- if (* rank == 3 )
1880- break ;
1881- }
1893+ * rank = frag -> multipole_rank ;
18821894
18831895 return EFP_RESULT_SUCCESS ;
18841896}
18851897
1898+ /*
18861899EFP_EXPORT enum efp_result
18871900efp_get_multipole_count(struct efp *efp, size_t *n_mult)
18881901{
@@ -1897,7 +1910,41 @@ efp_get_multipole_count(struct efp *efp, size_t *n_mult)
18971910 *n_mult = sum;
18981911 return EFP_RESULT_SUCCESS;
18991912}
1913+ */
1914+
1915+ EFP_EXPORT enum efp_result
1916+ efp_get_ho_multipole_count (struct efp * efp , size_t * n_mult )
1917+ {
1918+ size_t sum = 0 ;
1919+
1920+ assert (efp );
1921+ assert (n_mult );
1922+
1923+ for (size_t i = 0 ; i < efp -> n_frag ; i ++ )
1924+ if (efp -> frags [i ].multipole_rank > 0 )
1925+ sum += efp -> frags [i ].n_multipole_pts ;
1926+
1927+ * n_mult = sum ;
1928+ return EFP_RESULT_SUCCESS ;
1929+ }
1930+
1931+ EFP_EXPORT enum efp_result
1932+ efp_get_mm_multipole_count (struct efp * efp , size_t * n_mult )
1933+ {
1934+ size_t sum = 0 ;
1935+
1936+ assert (efp );
1937+ assert (n_mult );
1938+
1939+ for (size_t i = 0 ; i < efp -> n_frag ; i ++ )
1940+ if (efp -> frags [i ].multipole_rank == 0 )
1941+ sum += efp -> frags [i ].n_multipole_pts ;
1942+
1943+ * n_mult = sum ;
1944+ return EFP_RESULT_SUCCESS ;
1945+ }
19001946
1947+ /*
19011948EFP_EXPORT enum efp_result
19021949efp_get_multipole_coordinates(struct efp *efp, double *xyz)
19031950{
@@ -1915,7 +1962,47 @@ efp_get_multipole_coordinates(struct efp *efp, double *xyz)
19151962 }
19161963 return EFP_RESULT_SUCCESS;
19171964}
1965+ */
19181966
1967+ EFP_EXPORT enum efp_result
1968+ efp_get_ho_multipole_coordinates (struct efp * efp , double * xyz )
1969+ {
1970+ assert (efp );
1971+ assert (xyz );
1972+
1973+ for (size_t i = 0 ; i < efp -> n_frag ; i ++ )
1974+ if (efp -> frags [i ].multipole_rank > 0 ) {
1975+ struct frag * frag = efp -> frags + i ;
1976+
1977+ for (size_t j = 0 ; j < frag -> n_multipole_pts ; j ++ ) {
1978+ * xyz ++ = frag -> multipole_pts [j ].x ;
1979+ * xyz ++ = frag -> multipole_pts [j ].y ;
1980+ * xyz ++ = frag -> multipole_pts [j ].z ;
1981+ }
1982+ }
1983+ return EFP_RESULT_SUCCESS ;
1984+ }
1985+
1986+ EFP_EXPORT enum efp_result
1987+ efp_get_mm_multipole_coordinates (struct efp * efp , double * xyz )
1988+ {
1989+ assert (efp );
1990+ assert (xyz );
1991+
1992+ for (size_t i = 0 ; i < efp -> n_frag ; i ++ )
1993+ if (efp -> frags [i ].multipole_rank == 0 ) {
1994+ struct frag * frag = efp -> frags + i ;
1995+
1996+ for (size_t j = 0 ; j < frag -> n_multipole_pts ; j ++ ) {
1997+ * xyz ++ = frag -> multipole_pts [j ].x ;
1998+ * xyz ++ = frag -> multipole_pts [j ].y ;
1999+ * xyz ++ = frag -> multipole_pts [j ].z ;
2000+ }
2001+ }
2002+ return EFP_RESULT_SUCCESS ;
2003+ }
2004+
2005+ /*
19192006EFP_EXPORT enum efp_result
19202007efp_get_multipole_values(struct efp *efp, double *mult)
19212008{
@@ -1943,7 +2030,58 @@ efp_get_multipole_values(struct efp *efp, double *mult)
19432030 }
19442031 return EFP_RESULT_SUCCESS;
19452032}
2033+ */
2034+
2035+ EFP_EXPORT enum efp_result
2036+ efp_get_ho_multipole_values (struct efp * efp , double * mult )
2037+ {
2038+ assert (efp );
2039+ assert (mult );
2040+
2041+ for (size_t i = 0 ; i < efp -> n_frag ; i ++ )
2042+ if (efp -> frags [i ].multipole_rank > 0 ) {
2043+ struct frag * frag = efp -> frags + i ;
2044+
2045+ for (size_t j = 0 ; j < frag -> n_multipole_pts ; j ++ ) {
2046+ struct multipole_pt * pt = frag -> multipole_pts + j ;
2047+
2048+ // monopole and nuclear charges are added together as of 2025: LVS
2049+ * mult ++ = pt -> monopole + pt -> znuc ;
2050+
2051+ * mult ++ = pt -> dipole .x ;
2052+ * mult ++ = pt -> dipole .y ;
2053+ * mult ++ = pt -> dipole .z ;
2054+
2055+ for (size_t t = 0 ; t < 6 ; t ++ )
2056+ * mult ++ = pt -> quadrupole [t ];
2057+ for (size_t t = 0 ; t < 10 ; t ++ )
2058+ * mult ++ = pt -> octupole [t ];
2059+ }
2060+ }
2061+ return EFP_RESULT_SUCCESS ;
2062+ }
2063+
2064+ EFP_EXPORT enum efp_result
2065+ efp_get_mm_multipole_values (struct efp * efp , double * mult )
2066+ {
2067+ assert (efp );
2068+ assert (mult );
2069+
2070+ for (size_t i = 0 ; i < efp -> n_frag ; i ++ )
2071+ if (efp -> frags [i ].multipole_rank == 0 ) {
2072+ struct frag * frag = efp -> frags + i ;
2073+
2074+ for (size_t j = 0 ; j < frag -> n_multipole_pts ; j ++ ) {
2075+ struct multipole_pt * pt = frag -> multipole_pts + j ;
2076+
2077+ // monopole and nuclear charges are added together as of 2025: LVS
2078+ * mult ++ = pt -> monopole + pt -> znuc ;
2079+ }
2080+ }
2081+ return EFP_RESULT_SUCCESS ;
2082+ }
19462083
2084+ /*
19472085EFP_EXPORT enum efp_result
19482086efp_get_mono_values(struct efp *efp, double *monopoles)
19492087{
@@ -1961,7 +2099,28 @@ efp_get_mono_values(struct efp *efp, double *monopoles)
19612099 }
19622100 return EFP_RESULT_SUCCESS;
19632101}
2102+ */
19642103
2104+ EFP_EXPORT enum efp_result
2105+ efp_get_ho_mono_values (struct efp * efp , double * monopoles )
2106+ {
2107+ assert (efp );
2108+ assert (monopoles );
2109+
2110+ for (size_t i = 0 ; i < efp -> n_frag ; i ++ )
2111+ if (efp -> frags [i ].multipole_rank > 0 ) {
2112+ struct frag * frag = efp -> frags + i ;
2113+
2114+ for (size_t j = 0 ; j < frag -> n_multipole_pts ; j ++ ) {
2115+ struct multipole_pt * pt = frag -> multipole_pts + j ;
2116+
2117+ * monopoles ++ = pt -> monopole ;
2118+ }
2119+ }
2120+ return EFP_RESULT_SUCCESS ;
2121+ }
2122+
2123+ /*
19652124EFP_EXPORT enum efp_result
19662125efp_get_dipole_values(struct efp *efp, double *dipoles)
19672126{
@@ -2017,6 +2176,7 @@ efp_get_octupole_values(struct efp *efp, double *oct)
20172176 }
20182177 return EFP_RESULT_SUCCESS;
20192178}
2179+ */
20202180
20212181EFP_EXPORT enum efp_result
20222182efp_get_frag_induced_dipole_count (struct efp * efp , size_t frag_idx , size_t * n_dip )
@@ -2672,7 +2832,7 @@ save_ai_field_pol_pt(struct efp *efp, struct efp_pol_pt *pol_pt, size_t frag_idx
26722832 pt -> elec_field_wf .y = pol_pt -> ai_field [1 ];
26732833 pt -> elec_field_wf .z = pol_pt -> ai_field [2 ];
26742834
2675- if (efp -> opts .print > 1 )
2835+ if (efp -> opts .print > 3 )
26762836 print_pol_pt (efp ,frag_idx ,pt_idx );
26772837
26782838 return EFP_RESULT_SUCCESS ;
0 commit comments