1
1
#include " ff/energy.h"
2
+ #include " ff/nblist.h"
3
+ #include " tool/iofortstr.h"
2
4
#include " tool/ioprint.h"
5
+ #include < tinker/detail/files.hh>
3
6
#include < tinker/detail/inform.hh>
4
7
#include < tinker/routines.h>
5
8
6
9
#include " tinker9.h"
7
10
11
+ #include < fstream>
12
+
8
13
#define TINKER_TESTGRAD_VIRIAL 0
9
14
10
15
namespace tinker {
@@ -26,21 +31,6 @@ void xTestgrad(int, char**)
26
31
27
32
rc_flag = flags;
28
33
initialize ();
29
- energy (rc_flag);
30
-
31
- std::vector<double > gdx (n), gdy (n), gdz (n);
32
- copyGradient (calc::grad, gdx.data (), gdy.data (), gdz.data ());
33
-
34
- const int len_e = 20 + digits;
35
- const char * fmt_e = " \n Total Potential Energy :%1$*2$.*3$f Kcal/mole\n\n " ;
36
- print (out, fmt_e, esum, len_e, digits);
37
-
38
- #if TINKER_TESTGRAD_VIRIAL
39
- const char * fmt_v = " %-36s%12.3f %12.3f %12.3f\n " ;
40
- print (out, fmt_v, " Internal Virial Tensor :" , vir[0 ], vir[1 ], vir[2 ]);
41
- print (out, fmt_v, " " , vir[3 ], vir[4 ], vir[5 ]);
42
- print (out, fmt_v, " " , vir[6 ], vir[7 ], vir[8 ]);
43
- #endif
44
34
45
35
std::string fmt_t ;
46
36
std::string fmt;
@@ -57,41 +47,71 @@ void xTestgrad(int, char**)
57
47
" dE/dX %1$5s dE/dY %1$5s dE/dZ %1$8s Norm\n " ;
58
48
fmt = " \n Anlyt%10d %12.4f%12.4f%12.4f %12.4f" ;
59
49
}
60
- print (out, fmt_t , " " );
61
- // auto do_print = [](int i, int n, int top_m) {
62
- // if (n <= 2 * top_m)
63
- // return true;
64
- // else if (i < top_m)
65
- // return true;
66
- // else if (i >= n - top_m)
67
- // return true;
68
- // else
69
- // return false;
70
- // };
71
- // int print_top_n = 15;
72
- for (int i = 0 ; i < n; ++i) {
73
- // if (not do_print(i, n, print_top_n))
74
- // continue;
75
-
76
- real x1 = gdx[i];
77
- real y1 = gdy[i];
78
- real z1 = gdz[i];
79
- real norm = x1 * x1 + y1 * y1 + z1 * z1;
80
- norm = std::sqrt (norm);
81
- print (out, fmt, i + 1 , x1, y1, z1, norm);
82
- }
83
50
84
- double totnorm = 0 ;
85
- for (int i = 0 ; i < n; ++i) {
86
- totnorm += gdx[i] * gdx[i] + gdy[i] * gdy[i] + gdz[i] * gdz[i];
87
- }
88
- totnorm = std::sqrt (totnorm);
89
- double rms = totnorm / std::sqrt (n);
90
- print (out, " \n\n Total Gradient Norm and RMS Gradient per Atom :\n " );
91
- const char * fmt3 = " \n Anlyt %1$-30s%2$*3$.*4$f\n " ;
92
- const int len3 = 13 + digits;
93
- print (out, fmt3, " Total Gradient Norm Value" , totnorm, len3, digits);
94
- print (out, fmt3, " RMS Gradient over All Atoms" , rms, len3, digits);
51
+ FstrView fsw = files::filename;
52
+ std::string fname = fsw.trim ();
53
+ std::ifstream ipt (fname);
54
+ bool done = false ;
55
+ int nframe_processed = 0 ;
56
+ do {
57
+ readFrameCopyinToXyz (ipt, done);
58
+ nblistRefresh ();
59
+ nframe_processed++;
60
+ if (nframe_processed > 1 )
61
+ print (out, " \n Analysis for Archive Structure :%16d\n " , nframe_processed);
62
+
63
+ energy (rc_flag);
64
+
65
+ std::vector<double > gdx (n), gdy (n), gdz (n);
66
+ copyGradient (calc::grad, gdx.data (), gdy.data (), gdz.data ());
67
+
68
+ const int len_e = 20 + digits;
69
+ const char * fmt_e = " \n Total Potential Energy :%1$*2$.*3$f Kcal/mole\n\n " ;
70
+ print (out, fmt_e, esum, len_e, digits);
71
+
72
+ #if TINKER_TESTGRAD_VIRIAL
73
+ const char * fmt_v = " %-36s%12.3f %12.3f %12.3f\n " ;
74
+ print (out, fmt_v, " Internal Virial Tensor :" , vir[0 ], vir[1 ], vir[2 ]);
75
+ print (out, fmt_v, " " , vir[3 ], vir[4 ], vir[5 ]);
76
+ print (out, fmt_v, " " , vir[6 ], vir[7 ], vir[8 ]);
77
+ #endif
78
+
79
+ print (out, fmt_t , " " );
80
+ // auto do_print = [](int i, int n, int top_m) {
81
+ // if (n <= 2 * top_m)
82
+ // return true;
83
+ // else if (i < top_m)
84
+ // return true;
85
+ // else if (i >= n - top_m)
86
+ // return true;
87
+ // else
88
+ // return false;
89
+ // };
90
+ // int print_top_n = 15;
91
+ for (int i = 0 ; i < n; ++i) {
92
+ // if (not do_print(i, n, print_top_n))
93
+ // continue;
94
+
95
+ real x1 = gdx[i];
96
+ real y1 = gdy[i];
97
+ real z1 = gdz[i];
98
+ real norm = x1 * x1 + y1 * y1 + z1 * z1;
99
+ norm = std::sqrt (norm);
100
+ print (out, fmt, i + 1 , x1, y1, z1, norm);
101
+ }
102
+
103
+ double totnorm = 0 ;
104
+ for (int i = 0 ; i < n; ++i) {
105
+ totnorm += gdx[i] * gdx[i] + gdy[i] * gdy[i] + gdz[i] * gdz[i];
106
+ }
107
+ totnorm = std::sqrt (totnorm);
108
+ double rms = totnorm / std::sqrt (n);
109
+ print (out, " \n\n Total Gradient Norm and RMS Gradient per Atom :\n " );
110
+ const char * fmt3 = " \n Anlyt %1$-30s%2$*3$.*4$f\n " ;
111
+ const int len3 = 13 + digits;
112
+ print (out, fmt3, " Total Gradient Norm Value" , totnorm, len3, digits);
113
+ print (out, fmt3, " RMS Gradient over All Atoms" , rms, len3, digits);
114
+ } while (not done);
95
115
96
116
finish ();
97
117
tinker_f_final ();
0 commit comments