From a39e75befe9fb20ec74dd3a526fa194e5b24d449 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 7 Jul 2026 12:05:11 -0400 Subject: [PATCH 01/37] Add tanh --- src/Exec_Help.cpp | 1 + src/RPNcalc.cpp | 3 +++ src/RPNcalc.h | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Exec_Help.cpp b/src/Exec_Help.cpp index 635b557b26..aba68931fc 100644 --- a/src/Exec_Help.cpp +++ b/src/Exec_Help.cpp @@ -149,6 +149,7 @@ int Exec_Help::Math(ArgList& argIn) const { "\tsin() : Sine\n" "\tcos() : Cosine\n" "\ttan() : Tangent\n" + "\ttanh() : Hyperbolic Tangent\n" " Data set functions\n" "\tsum() : Summation\n" "\tavg() : Average\n" diff --git a/src/RPNcalc.cpp b/src/RPNcalc.cpp index 6af5bf28f7..acece3e30d 100644 --- a/src/RPNcalc.cpp +++ b/src/RPNcalc.cpp @@ -62,6 +62,7 @@ const RPNcalc::FnIdType RPNcalc::FnIdArray_[] = { { FN_SIN, 4, "sin(" }, { FN_COS, 4, "cos(" }, { FN_TAN, 4, "tan(" }, + { FN_TANH, 5, "tanh(" }, { FN_SUM, 4, "sum(" }, { FN_AVG, 4, "avg(" }, { FN_STDEV, 6, "stdev(" }, @@ -372,6 +373,7 @@ double RPNcalc::DoOperation(double d1, double d2, TokenType op_type) { case FN_SIN: return sin(d1); case FN_COS: return cos(d1); case FN_TAN: return tan(d1); + case FN_TANH: return tanh(d1); case FN_STDEV: return 0.0; case FN_SUM: case FN_AVG: @@ -1142,6 +1144,7 @@ const RPNcalc::OpType RPNcalc::Token::OpArray_[] = { { 0, 1, NO_A, FN, 0, "Sine" }, // FN_SIN { 0, 1, NO_A, FN, 0, "Cosine" }, // FN_COS { 0, 1, NO_A, FN, 0, "Tangent" }, // FN_TAN + { 0, 1, NO_A, FN, 0, "Hyperbolic Tangent" }, // FN_TANH { 0, 1, NO_A, FN, 1, "Summation" }, // FN_SUM { 0, 1, NO_A, FN, 1, "Average" }, // FN_AVG { 0, 1, NO_A, FN, 1, "Standard Dev"}, // FN_STDEV diff --git a/src/RPNcalc.h b/src/RPNcalc.h index b57bd147ee..0e6916642a 100644 --- a/src/RPNcalc.h +++ b/src/RPNcalc.h @@ -37,7 +37,7 @@ class RPNcalc { // Functions FN_SQRT, FN_EXP, FN_LN, FN_ABS, // Trig functions - FN_SIN, FN_COS, FN_TAN, + FN_SIN, FN_COS, FN_TAN, FN_TANH, // Functions that take a data set FN_SUM, FN_AVG, FN_STDEV, FN_MIN, FN_MAX, // Parentheses (for infix conversion only) From 9fca5d33044833568160b64072c21894e3bedd53 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Jul 2026 08:50:00 -0400 Subject: [PATCH 02/37] Add hyperbolic sin/cos --- src/Exec_Help.cpp | 2 ++ src/RPNcalc.cpp | 6 ++++++ src/RPNcalc.h | 4 +++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Exec_Help.cpp b/src/Exec_Help.cpp index aba68931fc..23fdcb5f2a 100644 --- a/src/Exec_Help.cpp +++ b/src/Exec_Help.cpp @@ -149,6 +149,8 @@ int Exec_Help::Math(ArgList& argIn) const { "\tsin() : Sine\n" "\tcos() : Cosine\n" "\ttan() : Tangent\n" + "\tsinh() : Hyperbolic Sine\n" + "\tcosh() : Hyperbolic Cosine\n" "\ttanh() : Hyperbolic Tangent\n" " Data set functions\n" "\tsum() : Summation\n" diff --git a/src/RPNcalc.cpp b/src/RPNcalc.cpp index acece3e30d..9d68305949 100644 --- a/src/RPNcalc.cpp +++ b/src/RPNcalc.cpp @@ -62,6 +62,8 @@ const RPNcalc::FnIdType RPNcalc::FnIdArray_[] = { { FN_SIN, 4, "sin(" }, { FN_COS, 4, "cos(" }, { FN_TAN, 4, "tan(" }, + { FN_SINH, 5, "sinh(" }, + { FN_COSH, 5, "cosh(" }, { FN_TANH, 5, "tanh(" }, { FN_SUM, 4, "sum(" }, { FN_AVG, 4, "avg(" }, @@ -373,6 +375,8 @@ double RPNcalc::DoOperation(double d1, double d2, TokenType op_type) { case FN_SIN: return sin(d1); case FN_COS: return cos(d1); case FN_TAN: return tan(d1); + case FN_SINH: return sinh(d1); + case FN_COSH: return cosh(d1); case FN_TANH: return tanh(d1); case FN_STDEV: return 0.0; case FN_SUM: @@ -1144,6 +1148,8 @@ const RPNcalc::OpType RPNcalc::Token::OpArray_[] = { { 0, 1, NO_A, FN, 0, "Sine" }, // FN_SIN { 0, 1, NO_A, FN, 0, "Cosine" }, // FN_COS { 0, 1, NO_A, FN, 0, "Tangent" }, // FN_TAN + { 0, 1, NO_A, FN, 0, "Hyperbolic Sine" }, // FN_SINH + { 0, 1, NO_A, FN, 0, "Hyperbolic Cosine" }, // FN_COSH { 0, 1, NO_A, FN, 0, "Hyperbolic Tangent" }, // FN_TANH { 0, 1, NO_A, FN, 1, "Summation" }, // FN_SUM { 0, 1, NO_A, FN, 1, "Average" }, // FN_AVG diff --git a/src/RPNcalc.h b/src/RPNcalc.h index 0e6916642a..aebc15f00e 100644 --- a/src/RPNcalc.h +++ b/src/RPNcalc.h @@ -37,7 +37,9 @@ class RPNcalc { // Functions FN_SQRT, FN_EXP, FN_LN, FN_ABS, // Trig functions - FN_SIN, FN_COS, FN_TAN, FN_TANH, + FN_SIN, FN_COS, FN_TAN, + // Hyperbolic Trig Functions + FN_SINH, FN_COSH, FN_TANH, // Functions that take a data set FN_SUM, FN_AVG, FN_STDEV, FN_MIN, FN_MAX, // Parentheses (for infix conversion only) From adc73d43147f7d21da6f2443735f7aa75379bc8b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Jul 2026 08:56:56 -0400 Subject: [PATCH 03/37] Add a test that segfaults --- test/Test_General/RunTest.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/test/Test_General/RunTest.sh b/test/Test_General/RunTest.sh index 1c31b5d003..3161efd175 100755 --- a/test/Test_General/RunTest.sh +++ b/test/Test_General/RunTest.sh @@ -5,7 +5,7 @@ # Clean CleanFiles general.in distance.dat rmsd.dat rmsda.dat phi2.dat PhiPsi.dat \ test.crd a1.dat Restart/* Restart test.nc r4.dat a2.dat.gz \ - a3.dat.bz2 r2.dat r3-nofit.dat r5.dat + a3.dat.bz2 r2.dat r3-nofit.dat r5.dat combined.nc TESTNAME='General tests' # Required environment @@ -83,6 +83,16 @@ DoTest r2.dat.save r2.dat DoTest r3-nofit.dat.save r3-nofit.dat DoTest r5.dat.save r5.dat +UNITNAME='Trajin Tests' +cat > general.in < Date: Thu, 9 Jul 2026 09:04:03 -0400 Subject: [PATCH 04/37] Put into separate functions --- test/Test_General/RunTest.sh | 73 +++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/test/Test_General/RunTest.sh b/test/Test_General/RunTest.sh index 3161efd175..4b5c700e09 100755 --- a/test/Test_General/RunTest.sh +++ b/test/Test_General/RunTest.sh @@ -11,13 +11,15 @@ TESTNAME='General tests' # Required environment Requires notparallel netcdf zlib bzlib +INPUT="general.in" +TOP="../tz2.parm7" +GeneralTests() { + if [ ! -e 'Restart' ] ; then + mkdir Restart + fi -if [ ! -e 'Restart' ] ; then - mkdir Restart -fi - -cat > general.in < general.in < general.in < general.in < Date: Thu, 9 Jul 2026 10:53:00 -0400 Subject: [PATCH 05/37] Add test for changing velocity information --- test/Test_General/RunTest.sh | 9 +- test/Test_General/combined.nc.save | Bin 0 -> 16604 bytes test/Test_General/tz2.vel.rst7 | 226 +++++++++++++++++++++++++++++ 3 files changed, 231 insertions(+), 4 deletions(-) create mode 100644 test/Test_General/combined.nc.save create mode 100644 test/Test_General/tz2.vel.rst7 diff --git a/test/Test_General/RunTest.sh b/test/Test_General/RunTest.sh index 4b5c700e09..67f9ffd410 100755 --- a/test/Test_General/RunTest.sh +++ b/test/Test_General/RunTest.sh @@ -87,15 +87,16 @@ EOF TrajinTests() { UNITNAME='Trajin Tests' cat > general.in <6M% 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 A>i_@% literal 0 HcmV?d00001 diff --git a/test/Test_General/tz2.vel.rst7 b/test/Test_General/tz2.vel.rst7 new file mode 100644 index 0000000000..42e56e4b00 --- /dev/null +++ b/test/Test_General/tz2.vel.rst7 @@ -0,0 +1,226 @@ +Cpptraj Generated Restart + 223 + -1.8890000 9.1590000 7.5690000 -1.0370000 8.6910000 7.2960000 + -1.9000000 9.2980000 8.5690000 -2.5380000 8.4470000 7.2650000 + -2.0640000 10.5010000 6.9930000 -3.1000000 10.8240000 7.1020000 + -1.2300000 11.5610000 7.7070000 -1.6700000 11.8110000 8.6730000 + -1.2480000 12.5030000 7.1590000 0.1230000 11.2160000 7.9040000 + 0.2740000 11.7280000 8.7010000 -1.6130000 10.4180000 5.5420000 + -2.4980000 10.4330000 4.6890000 -0.3660000 10.5720000 5.0900000 + 0.3440000 10.6120000 5.8080000 0.1950000 10.6970000 3.7600000 + -0.2180000 11.5690000 3.2540000 1.7100000 10.8790000 3.7090000 + 2.2080000 9.9860000 4.0870000 1.9270000 11.6410000 4.4580000 + 2.2650000 11.2910000 2.3840000 2.0320000 12.5000000 1.8270000 + 1.5380000 13.3330000 2.3050000 2.8600000 12.5800000 0.7240000 + 2.9290000 13.4040000 0.1430000 3.6620000 11.4600000 0.6460000 + 4.6200000 11.1600000 -0.3300000 5.0590000 11.8630000 -1.0230000 + 5.0910000 9.8430000 -0.3770000 5.8540000 9.6100000 -1.1050000 + 4.5450000 8.8500000 0.4450000 4.8230000 7.8400000 0.1820000 + 3.5490000 9.1590000 1.3790000 3.1350000 8.4300000 2.0590000 + 3.0750000 10.4770000 1.4830000 -0.1900000 9.6090000 2.7680000 + -0.4520000 9.9630000 1.6210000 -0.2680000 8.4020000 3.3340000 + -0.2600000 8.2750000 4.3360000 -0.6060000 7.1720000 2.6470000 + -0.1800000 7.2660000 1.6480000 -0.0930000 5.9920000 3.4680000 + -0.5860000 5.0810000 3.1280000 1.3430000 5.6480000 3.0810000 + 1.3060000 5.0050000 2.2020000 1.9550000 6.5430000 2.9670000 + 1.8280000 5.0680000 3.8660000 -0.2730000 6.2460000 4.8430000 + 0.4280000 5.7500000 5.2710000 -2.0730000 6.8820000 2.3630000 + -2.8840000 6.6850000 3.2650000 -2.4140000 6.7960000 1.0750000 + -1.6310000 6.7560000 0.4390000 -3.6890000 6.2860000 0.6130000 + -4.2880000 6.0200000 1.4850000 -4.4650000 7.2750000 -0.2530000 + -5.4500000 6.8210000 -0.3660000 -4.0220000 7.1620000 -1.2420000 + -4.6320000 8.7230000 0.0770000 -3.9020000 9.7130000 -0.4830000 + -3.0890000 9.5530000 -1.1760000 -4.4730000 10.9230000 -0.1410000 + -4.1360000 11.8610000 -0.3060000 -5.4690000 10.7460000 0.7980000 + -6.3300000 11.6930000 1.3650000 -6.2760000 12.7460000 1.1300000 + -7.3740000 11.1960000 2.1540000 -8.2300000 11.8220000 2.3620000 + -7.6300000 9.8240000 2.2590000 -8.3790000 9.4820000 2.9590000 + -6.7760000 8.9050000 1.6380000 -6.9740000 7.8720000 1.8840000 + -5.7030000 9.3470000 0.8480000 -3.6320000 4.9260000 -0.0680000 + -4.2790000 3.9520000 0.3090000 -2.7950000 4.8720000 -1.1060000 + -2.2780000 5.7080000 -1.3390000 -2.5350000 3.7230000 -1.9500000 + -3.0070000 2.9480000 -1.3460000 -3.4130000 3.5240000 -3.1830000 + -3.1390000 4.1410000 -4.0380000 -4.3860000 3.7870000 -2.7670000 + -3.4700000 2.1080000 -3.7480000 -2.4470000 1.7930000 -3.9530000 + -4.0390000 2.4250000 -4.6230000 -4.1890000 1.1230000 -2.8370000 + -3.8030000 0.7710000 -1.7020000 -5.2630000 0.6010000 -3.2070000 + -1.0580000 3.5180000 -2.2550000 -0.3010000 4.4140000 -2.6190000 + -0.6680000 2.2650000 -2.0090000 -1.3230000 1.6560000 -1.5390000 + 0.6390000 1.6960000 -2.2670000 1.2390000 2.4530000 -2.7720000 + 1.4120000 1.3660000 -0.9930000 2.2240000 0.7030000 -1.2910000 + 0.7120000 0.8820000 -0.3110000 2.1540000 2.5500000 -0.3910000 + 2.8090000 3.3470000 -1.0580000 2.3590000 2.5190000 0.9280000 + 1.8690000 1.8970000 1.5560000 3.0240000 3.1960000 1.2720000 + 0.5090000 0.4880000 -3.1850000 -0.4570000 -0.2500000 -3.0040000 + 1.4630000 0.2470000 -4.0870000 2.3720000 0.6580000 -3.9320000 + 1.3990000 -0.9020000 -4.9670000 2.1800000 -0.8820000 -5.7280000 + 0.5010000 -0.7990000 -5.5760000 1.4480000 -2.2750000 -4.3130000 + 0.7270000 -2.5760000 -3.3640000 2.3610000 -3.1180000 -4.8010000 + 3.0800000 -2.7840000 -5.4260000 2.5410000 -4.5140000 -4.4580000 + 1.6270000 -5.0150000 -4.1380000 3.1230000 -5.2830000 -5.6410000 + 2.4350000 -5.2430000 -6.4860000 3.3350000 -6.3180000 -5.3720000 + 4.4160000 -4.7460000 -6.2480000 5.3080000 -4.9600000 -5.6600000 + 4.3930000 -3.6740000 -6.4390000 4.7260000 -5.5030000 -7.5360000 + 3.9920000 -5.2720000 -8.3080000 4.5840000 -6.5430000 -7.2410000 + 6.1480000 -5.3380000 -8.0660000 6.5210000 -6.2900000 -8.4440000 + 6.8480000 -5.0250000 -7.2900000 6.1770000 -4.4200000 -9.2140000 + 6.0460000 -3.5470000 -8.7220000 7.1310000 -4.3920000 -9.5460000 + 5.4710000 -4.5500000 -9.9250000 3.5120000 -4.5190000 -3.2860000 + 4.6240000 -5.0420000 -3.2860000 2.9250000 -4.2560000 -2.1160000 + 2.0100000 -3.8790000 -2.3160000 3.3410000 -4.2620000 -0.7280000 + 4.4100000 -4.0450000 -0.7240000 2.6250000 -3.0680000 -0.1040000 + 1.5890000 -3.2940000 0.1480000 2.8350000 -2.1940000 -0.7210000 + 3.2880000 -2.4620000 1.0910000 2.9250000 -2.4360000 2.3930000 + 1.9490000 -2.7990000 2.6780000 3.8550000 -1.8450000 3.2240000 + 3.8850000 -1.8480000 4.2340000 4.8270000 -1.3030000 2.4080000 + 5.9110000 -0.4710000 2.7140000 6.1390000 -0.1560000 3.7210000 + 6.8410000 -0.1410000 1.7220000 7.7250000 0.4050000 2.0180000 + 6.5840000 -0.5900000 0.4210000 7.2310000 -0.2350000 -0.3680000 + 5.4240000 -1.2970000 0.0820000 5.1390000 -1.4650000 -0.9460000 + 4.4790000 -1.6200000 1.0690000 2.9450000 -5.5930000 -0.1050000 + 3.0220000 -6.6750000 -0.6820000 2.5310000 -5.6090000 1.1640000 + 2.7110000 -4.7940000 1.7310000 2.2540000 -6.8740000 1.8150000 + 2.9820000 -7.6670000 1.6440000 2.2070000 -6.6220000 3.3200000 + 1.7220000 -5.6670000 3.5260000 1.4560000 -7.6590000 4.1490000 + 1.5810000 -7.4640000 5.2140000 0.4020000 -7.4680000 3.9460000 + 1.7250000 -8.6400000 3.7550000 3.4600000 -6.5010000 3.9540000 + 3.3850000 -6.0970000 4.8220000 0.8890000 -7.3540000 1.3440000 + -0.1720000 -6.7600000 1.5240000 0.9060000 -8.5220000 0.6990000 + 1.7230000 -9.1150000 0.7340000 -0.1880000 -9.0660000 -0.0800000 + -0.7370000 -8.2200000 -0.4950000 0.4120000 -10.0100000 -1.1170000 + 1.1130000 -10.7100000 -0.6610000 0.8870000 -9.3680000 -1.8590000 + -0.5390000 -10.9280000 -1.8160000 -1.3130000 -10.6860000 -2.8980000 + -1.3370000 -9.7640000 -3.4600000 -1.9710000 -11.7860000 -3.4110000 + -2.3840000 -11.8640000 -4.3300000 -1.9570000 -12.7630000 -2.4370000 + -2.7850000 -13.8650000 -2.1910000 -3.6310000 -14.0120000 -2.8460000 + -2.6000000 -14.7090000 -1.0890000 -3.3150000 -15.4730000 -0.8230000 + -1.5180000 -14.3450000 -0.2780000 -1.3250000 -14.9360000 0.6040000 + -0.8090000 -13.1460000 -0.4190000 -0.0380000 -12.8340000 0.2700000 + -1.0340000 -12.2590000 -1.4840000 -1.0790000 -9.7520000 0.9460000 + -0.7100000 -10.6730000 1.6720000 -2.3440000 -9.3260000 0.9490000 + -2.4560000 -8.3390000 0.7700000 -3.4700000 -9.9260000 1.6360000 + -3.0970000 -10.4390000 2.5220000 -4.3840000 -8.8140000 2.1420000 + -5.3890000 -9.1120000 2.4400000 -4.4390000 -8.0090000 1.4090000 + -3.7990000 -8.0920000 3.3520000 -2.8890000 -7.5660000 3.0640000 + -3.6910000 -8.7240000 4.2330000 -4.8480000 -7.0240000 3.6500000 + -5.6910000 -7.4110000 4.2220000 -5.1300000 -6.4950000 2.7400000 + -4.1080000 -6.0190000 4.5290000 -3.1830000 -5.6350000 4.0990000 + -3.8850000 -6.5530000 5.4520000 -4.8770000 -4.8020000 4.8290000 + -5.1320000 -4.3050000 3.9870000 -5.7180000 -4.9680000 5.3620000 + -4.2500000 -4.2630000 5.4100000 -4.3950000 -10.7780000 0.7790000 + -4.4830000 -11.9390000 1.1720000 -4.8320000 -10.2020000 -0.3440000 + -4.6470000 -9.2390000 -0.5870000 -5.7200000 -10.8660000 -1.2770000 + -5.5910000 -11.9460000 -1.3400000 -6.7570000 -10.8860000 -0.9420000 + -5.7770000 -10.3580000 -2.2400000 + 0.0547434 -0.3863038 -0.1240506 -0.2978057 1.5780459 -0.1397029 + 1.2267314 0.5925332 -0.3346056 -0.4529751 0.9871550 -0.7590258 + 0.1663210 -0.0327643 -0.5980249 2.4782222 -0.4611223 -0.4350702 + -0.0847781 -0.2090299 -0.1793017 -0.4033420 0.2255529 0.3197205 + 0.9580499 0.0238303 0.6399930 -0.3711566 -0.2333562 0.0400708 + 0.1194208 0.0406422 0.7110277 0.0622766 -0.1848759 0.4106830 + -0.4871517 -0.1007548 -0.1481857 -0.2500103 0.1469673 0.0388508 + -0.2750869 0.9168774 0.2942982 0.0938348 0.2758434 0.0729436 + -0.2666607 0.2586097 0.7201510 -0.4070623 0.1830691 -0.0065740 + -1.1816992 -1.0352282 1.1558501 -0.9691545 0.7857435 -0.1599647 + -0.2352021 0.1411684 0.2102438 0.2322043 0.3335957 0.0085027 + -0.7815973 -0.6419565 1.4152101 -0.1433415 0.2444969 0.3335867 + 0.3783893 0.6425411 -0.0520009 0.2011373 -0.3443307 0.1418342 + 0.2736814 0.1873510 -0.1673464 -0.5303400 0.2607459 -0.0983095 + -0.1134938 -0.0561522 0.2442389 -0.0296254 -0.8331012 0.7745664 + -0.1750099 0.2285181 0.1223498 1.7918184 -0.3985037 -0.2028204 + -0.0640872 0.5681802 -0.0682513 0.3612443 0.3996443 -0.1860393 + 0.5079065 0.3812210 -0.2349593 0.1071107 0.2371504 -0.2537300 + -0.2817093 -0.4792675 -0.1589299 -0.1076251 0.2759074 0.2991809 + 0.9074194 1.6662782 0.6643899 -0.1300840 -0.2047785 -0.0740091 + 0.8811699 -0.1923910 -0.4625477 0.0742325 -0.5063060 0.2228581 + 0.6034084 0.5554236 -1.0168310 0.3204623 0.0439673 -0.1770484 + 0.4189903 -0.4318978 0.0209982 0.4997734 0.0929072 0.4775914 + 0.9283304 1.0069072 -0.0011419 0.1788385 0.0994416 0.1451189 + 0.2576537 0.0832060 -0.1272222 0.0863772 0.0089012 0.0321364 + -0.1403666 0.0151946 0.1849750 0.0138257 0.0746125 -0.3779900 + -0.1186708 0.2004000 0.6037116 0.3466421 0.0554068 -0.0587876 + 0.6911740 1.0438085 1.4019045 0.3155226 -0.0233523 -0.1247762 + -0.3536534 2.0797502 0.2139900 0.0051553 -0.2655433 -0.5004795 + 0.0553623 -0.3720510 -0.3088252 -0.2323945 0.0860860 0.0356066 + 0.0758522 -0.2500084 -0.5461287 0.0941423 0.1870602 0.0664573 + -0.0096440 -0.9945429 0.1447836 0.2344582 -0.2873922 0.1138581 + -0.1465619 0.1503472 0.0596710 -0.0869742 0.6431100 -0.1594178 + -0.0512010 0.1206152 0.1405005 -0.7623004 -0.9295127 0.2540072 + 0.0883095 -0.3179484 -0.3108666 0.0371703 -0.6706913 -1.5468457 + 0.0865744 -0.1181899 0.3754453 0.1789382 0.0767361 0.1875570 + -0.2631927 0.0716968 -0.0522311 0.2968705 -0.2110929 0.0228989 + -0.0515570 -0.1215160 -0.1332356 -0.0543281 0.1426465 -0.2065814 + -0.0484443 0.5072538 -2.8223275 0.2862471 -0.0238525 -0.2552325 + -0.7653522 0.3141927 -0.6159849 -0.4389216 -0.0702888 -0.3814458 + 0.2199558 0.8316342 1.2798325 0.3686718 0.5130598 -0.8212701 + -0.0785542 0.1867149 0.2060094 0.2096432 -0.8373043 -1.1724027 + -0.9732679 0.3194770 0.9595921 0.3590575 0.0863940 -0.3148488 + 0.0395477 -0.1843603 0.4871030 0.2329082 -0.2612473 -0.1897845 + 0.1437612 0.1298068 -0.2835875 0.0977076 0.0440273 -0.0424796 + 0.0043583 0.1295104 0.1583435 -0.4830074 -1.4871248 0.6415602 + -0.2344128 -0.0611091 0.0105492 0.9221968 1.5367165 0.7830127 + 0.0198903 -0.1752434 -0.2482151 -0.1388117 -0.7923544 0.6709322 + 0.6119407 0.7529585 -0.1571193 0.0225847 0.1826278 0.4200531 + 0.0943166 -0.2121696 0.0665912 0.0093115 -0.4419462 0.0429224 + 2.0572483 -0.8089621 -0.5342880 -1.3053037 0.4685613 -0.6391071 + -0.2527540 -0.2157405 -0.2758879 -0.0645909 0.0588454 -0.0551618 + 0.3704764 -0.1788612 -0.0058990 0.0867493 -0.4289120 -0.1221480 + 0.1471906 -0.1944441 -0.0115881 -1.0999850 -0.1018464 0.6374822 + 1.0639529 -0.2084368 1.1961429 -0.1582563 -0.0513387 0.1539085 + 0.1377298 -0.1863872 -0.2302887 0.3154738 0.1935430 -0.1746228 + 0.1919807 -0.8412662 -0.9437840 -0.0405059 -0.0241053 -0.0981520 + -0.0968549 -0.1759065 -0.5324546 -0.2486189 0.2046266 0.1726698 + -0.3003885 1.0798109 -0.2175733 0.3840817 0.4104736 -0.4835813 + 0.0163109 -0.3687432 0.1960262 0.8120932 1.8241763 1.3619309 + 1.3248443 -0.0408193 -0.0897859 0.0772878 -0.2474344 -0.2176540 + -0.6914970 -0.2900584 0.3804720 -0.4416955 -0.0954379 -0.0976407 + -0.1114436 -0.0381719 -0.1408793 -0.4024290 0.5480422 -0.1912934 + -0.7309744 -1.1907920 1.0911982 -0.1635584 -0.2659122 0.0319611 + 1.5499171 -0.2711420 -0.3918096 0.7413178 -0.2187560 0.8504833 + -0.2929541 -1.2886344 0.2888709 -0.3330136 -0.2640647 0.1627160 + -0.0105612 -0.1365155 0.2765756 -0.3667477 -0.1707570 -0.2882650 + -0.9752767 0.9035094 1.5131547 -0.0502131 -0.0314619 -0.0424924 + 0.7553662 -1.9523320 -1.0484727 0.0593669 -0.0289457 -0.2839191 + 0.3483053 -0.1890363 -0.7343902 -0.5027944 1.2377934 -0.6126090 + -0.2834628 -0.1554498 -0.0349151 -0.0184965 0.0577119 0.2686425 + -0.1774795 1.4969248 -0.8716483 -0.1059600 -0.0630935 -0.4451470 + 1.0811353 0.4325097 0.3497325 -0.2248313 -0.1642516 -0.3021058 + -0.2438096 -0.5036045 -0.4781470 -0.8257949 -1.1229575 -0.1222300 + -0.1196888 0.2219674 0.1734955 -0.5138906 -0.4455106 0.4552779 + -0.2412086 0.1957478 0.5159797 -0.1238419 -0.3647849 1.9136971 + 0.1423874 -0.0699794 0.3385726 -0.9892214 0.1087017 0.7647551 + 0.3701640 -0.0217102 0.2573963 -0.2248247 0.1903963 -0.0003187 + -0.1006348 -0.1842085 -0.1447363 0.4844615 -0.1628847 -0.1250182 + -0.8474376 1.0197912 -1.1009814 -0.0577555 -0.0443326 -0.0032329 + -0.5376465 0.8061592 -1.0576802 -0.0178816 -0.1644061 -0.1732303 + -0.3244715 -1.0928751 0.1976143 0.1332064 0.3885228 -0.0258532 + 0.3225998 0.5690364 0.4258089 0.3355563 1.0723524 0.7851051 + 0.2127256 0.3008165 1.1475923 0.1293051 -0.1068750 0.0346383 + 0.0124856 -0.7276419 0.0490132 -0.3623739 0.0798528 0.0327046 + 0.1102143 0.0383639 0.0520567 0.1564973 -0.2699199 -0.2424946 + 0.7143205 0.0935480 -0.6772322 -0.1028018 0.5045492 0.5024982 + -0.0221915 0.6182339 0.1831388 -0.2384318 0.3055248 -0.1531303 + 0.9028880 -0.8988383 0.7202539 0.0068841 0.3670015 0.8121139 + 0.1171550 -0.1613477 0.0917261 -0.2923673 -0.1215770 -0.2208613 + 0.0459414 -0.1489650 0.5340743 -0.0486546 0.0300099 0.1076531 + 0.0457606 -1.3507046 -0.1332619 0.0534488 0.3019518 -0.1750877 + 0.2193216 -0.2940069 -0.6275384 -0.1141683 0.0176980 0.1278316 + 0.1473438 0.1174694 0.3858556 -0.7937881 0.5504449 -0.1575457 + -0.0198612 0.0492143 -0.1487297 0.3049539 -0.5764902 -0.6098738 + 0.1615162 0.1707213 0.0265536 -0.5432450 -0.5548491 -0.5906300 + 0.2563992 0.1211065 0.4951428 0.2322948 0.1183144 0.2535316 + -0.1123611 -0.0752703 0.0905735 0.3325083 0.1644512 0.4538205 + 0.5157739 -0.6898952 -0.5593918 0.3674197 0.2058955 0.1289286 + -2.2645140 -0.9248035 1.6897022 0.0783037 0.2255440 0.4705207 + 0.2440045 0.1117553 -0.7160550 0.3271985 1.4744742 -0.0239934 + 0.6550737 -0.0116089 -0.2697664 0.1774573 0.6093621 -0.1963410 + 0.6821292 0.1486484 -1.4956748 0.2817811 0.3935739 0.1504638 + -0.2812543 0.0956964 1.2556510 -0.2342449 -0.3689634 -0.3368234 + 0.1092904 -0.6091692 -0.1721046 0.6215230 -0.0757027 0.1418294 + -0.0214967 0.1752136 -0.2358933 -0.3464382 -0.0753536 0.0266631 + -0.4197954 1.1642818 0.7958454 0.0896339 -0.5992634 -0.2579443 + 1.3919549 -0.4088196 -0.6633779 0.7530802 -0.1083498 -0.0094726 + -0.0343197 0.2547297 -0.0896135 0.1497147 -0.0298383 0.0980396 + -0.7182071 -0.0359009 1.8643021 -0.1432668 -0.3039085 -0.0744325 + -0.5429616 -0.9076073 -0.1662527 0.7659108 1.4164974 -0.3537643 + 0.3699048 0.7460196 0.7374227 From 77410eee1b245b9f9375edac34900ca82fc5f380 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Jul 2026 10:53:39 -0400 Subject: [PATCH 06/37] Check if the current coordinate info (specifically velocity/force info) differs from the coordinate info output trajectories were set up with. If set up for velocities/forces and no velocity/force info in the current frame, set all zeroes in the current frame. --- src/CpptrajState.cpp | 2 ++ src/TrajoutList.cpp | 35 +++++++++++++++++++++++++++++++++++ src/TrajoutList.h | 2 ++ src/Trajout_Single.cpp | 3 +++ src/Trajout_Single.h | 2 ++ 5 files changed, 44 insertions(+) diff --git a/src/CpptrajState.cpp b/src/CpptrajState.cpp index 1144e785d8..d160d9d9c6 100644 --- a/src/CpptrajState.cpp +++ b/src/CpptrajState.cpp @@ -1337,6 +1337,8 @@ int CpptrajState::RunNormal() { currentSetup.Nframes() ); lastPindex = currentSetup.Top().Pindex(); } + // Check output trajectories against current coord info + trajoutList_.CheckTrajoutCoordInfo(currentSetup.CoordInfo(), TrajFrame); # ifdef TIMER setup_time.Stop(); # endif diff --git a/src/TrajoutList.cpp b/src/TrajoutList.cpp index 671f1a88b3..a0ab074da9 100644 --- a/src/TrajoutList.cpp +++ b/src/TrajoutList.cpp @@ -96,6 +96,41 @@ int TrajoutList::SetupTrajout(Topology* CurrentParm, CoordinateInfo const& cInfo return 0; } +/** Check active output trajectories against the current coordinate info. */ +int TrajoutList::CheckTrajoutCoordInfo(CoordinateInfo const& currentCoordInfo, + Frame& currentFrame) +const +{ + for (ListType::const_iterator it = active_.begin(); it != active_.end(); ++it) + { + Trajout_Single* activeTraj = *it; + CoordinateInfo const& trajoutCoordInfo = activeTraj->TrajoutCoordInfo(); + // Velocities + if (currentCoordInfo.HasVel() != trajoutCoordInfo.HasVel()) { + if (currentCoordInfo.HasVel()) { + mprintf("Warning: Input trajectory has velocity information but output trajectory was set up without velocities.\n"); + mprintf("Warning: Velocity information will not be written to output trajectory.\n"); + } else { + mprintf("Warning: Input trajectory has no velocity information but output trajectory was set up with velocities.\n"); + mprintf("Warning: All zeroes will be written for velocities.\n"); + currentFrame.AddVelocities(Frame::Darray(currentFrame.size(), 0.0)); + } + } + // Forces + if (currentCoordInfo.HasForce() != trajoutCoordInfo.HasForce()) { + if (currentCoordInfo.HasForce()) { + mprintf("Warning: Input trajectory has force information but output trajectory was set up without forces.\n"); + mprintf("Warning: Force information will not be written to output trajectory.\n"); + } else { + mprintf("Warning: Input trajectory has no force information but output trajectory was set up with forces.\n"); + mprintf("Warning: All zeroes will be written for forces.\n"); + currentFrame.AddForces(Frame::Darray(currentFrame.size(), 0.0)); + } + } + } + return 0; +} + /** List only active output trajectories. */ void TrajoutList::ListActive() const { if (!trajout_.empty()) { diff --git a/src/TrajoutList.h b/src/TrajoutList.h index 292e3ba4d2..6a75bc2c96 100644 --- a/src/TrajoutList.h +++ b/src/TrajoutList.h @@ -25,6 +25,8 @@ class TrajoutList { int AddTrajout(std::string const&, ArgList const&, DataSetList const&, Topology*); /// Set up trajectories for given topology. int SetupTrajout(Topology*, CoordinateInfo const&, int); + /// Check active trajectories against given CoordinateInfo + int CheckTrajoutCoordInfo(CoordinateInfo const&, Frame&) const; /// Write frame to normal output trajectories. int WriteTrajout(int, Frame const&); /// Call end for all trajectories diff --git a/src/Trajout_Single.cpp b/src/Trajout_Single.cpp index f796975c08..1bc587ae18 100644 --- a/src/Trajout_Single.cpp +++ b/src/Trajout_Single.cpp @@ -11,6 +11,9 @@ Trajout_Single::~Trajout_Single() { if (trajio_!=0) delete trajio_; } +/** \return CoordinateInfo for TrajectoryIO object. Should not be called when uninitialized. */ +CoordinateInfo const& Trajout_Single::TrajoutCoordInfo() const { return trajio_->CoordInfo(); } + // Trajout_Single::InitTrajWrite() /** Initialize output trajectory with appropriate TrajectoryIO class and * process arguments. diff --git a/src/Trajout_Single.h b/src/Trajout_Single.h index e1988f2d76..e047512297 100644 --- a/src/Trajout_Single.h +++ b/src/Trajout_Single.h @@ -41,6 +41,8 @@ class Trajout_Single { /// Init traj; if given, append ensemble number to name (use in Actions) int InitEnsembleTrajWrite(FileName const&, ArgList const&, DataSetList const&, TrajectoryFile::TrajFormatType, int); + /// \return CoordinateInfo + CoordinateInfo const& TrajoutCoordInfo() const; # ifdef MPI // Set the parallel communicator. int SetTrajComm(Parallel::Comm const& c) { trajComm_ = c; return 0; } From af93997d8c2f71e2ee9e0e0fdcc978fa6b3f016b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Jul 2026 10:58:23 -0400 Subject: [PATCH 07/37] Move to Test_VelFrc --- test/Test_VelFrc/RunTest.sh | 13 ++++++++++++- .../{Test_General => Test_VelFrc}/combined.nc.save | Bin test/{Test_General => Test_VelFrc}/tz2.vel.rst7 | 0 3 files changed, 12 insertions(+), 1 deletion(-) rename test/{Test_General => Test_VelFrc}/combined.nc.save (100%) rename test/{Test_General => Test_VelFrc}/tz2.vel.rst7 (100%) diff --git a/test/Test_VelFrc/RunTest.sh b/test/Test_VelFrc/RunTest.sh index 5184cf5ae4..f6cf30649e 100755 --- a/test/Test_VelFrc/RunTest.sh +++ b/test/Test_VelFrc/RunTest.sh @@ -3,7 +3,7 @@ . ../MasterTest.sh CleanFiles cpptraj.in CrdFrcVel.nc Vel.crd Frc.crd Vel1.crd Frc1.crd \ - CrdFrcVel.ncrst.? fromncrst.nc trpzip2.*.crd + CrdFrcVel.ncrst.? fromncrst.nc trpzip2.*.crd combined.nc TESTNAME='Read separate velocity/force trajectory data tests' Requires notparallel netcdf @@ -86,5 +86,16 @@ DoTest trpzip2.pos.crd.save trpzip2.pos.crd DoTest trpzip2.vel.crd.save trpzip2.vel.crd DoTest trpzip2.frc.crd.save trpzip2.frc.crd +UNITNAME='Trajin Tests with mixed velocity info' +cat > cpptraj.in < Date: Thu, 9 Jul 2026 10:58:55 -0400 Subject: [PATCH 08/37] Revert general tests --- test/Test_General/RunTest.sh | 78 ++++++++++++++---------------------- 1 file changed, 31 insertions(+), 47 deletions(-) diff --git a/test/Test_General/RunTest.sh b/test/Test_General/RunTest.sh index 67f9ffd410..1c31b5d003 100755 --- a/test/Test_General/RunTest.sh +++ b/test/Test_General/RunTest.sh @@ -5,21 +5,19 @@ # Clean CleanFiles general.in distance.dat rmsd.dat rmsda.dat phi2.dat PhiPsi.dat \ test.crd a1.dat Restart/* Restart test.nc r4.dat a2.dat.gz \ - a3.dat.bz2 r2.dat r3-nofit.dat r5.dat combined.nc + a3.dat.bz2 r2.dat r3-nofit.dat r5.dat TESTNAME='General tests' # Required environment Requires notparallel netcdf zlib bzlib -INPUT="general.in" -TOP="../tz2.parm7" -GeneralTests() { - if [ ! -e 'Restart' ] ; then - mkdir Restart - fi - cat > general.in < general.in < general.in < Date: Thu, 9 Jul 2026 11:12:25 -0400 Subject: [PATCH 09/37] Add test with forces --- test/Test_VelFrc/RunTest.sh | 14 +++++++++++++- test/Test_VelFrc/combined2.nc.save | Bin 0 -> 24816 bytes 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 test/Test_VelFrc/combined2.nc.save diff --git a/test/Test_VelFrc/RunTest.sh b/test/Test_VelFrc/RunTest.sh index f6cf30649e..488a246bd5 100755 --- a/test/Test_VelFrc/RunTest.sh +++ b/test/Test_VelFrc/RunTest.sh @@ -3,7 +3,8 @@ . ../MasterTest.sh CleanFiles cpptraj.in CrdFrcVel.nc Vel.crd Frc.crd Vel1.crd Frc1.crd \ - CrdFrcVel.ncrst.? fromncrst.nc trpzip2.*.crd combined.nc + CrdFrcVel.ncrst.? fromncrst.nc trpzip2.*.crd combined.nc \ + combined2.nc TESTNAME='Read separate velocity/force trajectory data tests' Requires notparallel netcdf @@ -97,5 +98,16 @@ EOF RunCpptraj "$UNITNAME" NcTest combined.nc.save combined.nc +UNITNAME='Trajin Tests with mixed velocity/force info' +cat > cpptraj.in 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 BAeI0C literal 0 HcmV?d00001 From dba73cf953a5ad745b53fab5467f6ca1981d9113 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Jul 2026 13:01:51 -0400 Subject: [PATCH 10/37] Use OutputTrajCommon instead of trajio --- src/Trajout_Single.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Trajout_Single.cpp b/src/Trajout_Single.cpp index 1bc587ae18..93f015cab1 100644 --- a/src/Trajout_Single.cpp +++ b/src/Trajout_Single.cpp @@ -12,7 +12,7 @@ Trajout_Single::~Trajout_Single() { } /** \return CoordinateInfo for TrajectoryIO object. Should not be called when uninitialized. */ -CoordinateInfo const& Trajout_Single::TrajoutCoordInfo() const { return trajio_->CoordInfo(); } +CoordinateInfo const& Trajout_Single::TrajoutCoordInfo() const { return traj_.CoordInfo(); } // Trajout_Single::InitTrajWrite() /** Initialize output trajectory with appropriate TrajectoryIO class and From 6ea3e6b6475a6250d68adf4fd036492e22d7665a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Jul 2026 13:16:28 -0400 Subject: [PATCH 11/37] Add ensemble test --- test/Test_VelFrc/RST/001.rst7 | Bin 0 -> 11552 bytes test/Test_VelFrc/RST/002.rst7 | Bin 0 -> 11552 bytes test/Test_VelFrc/RunTest.sh | 11 ++++++++++- test/Test_VelFrc/TRAJ/rem.crd.001 | Bin 0 -> 8832 bytes test/Test_VelFrc/TRAJ/rem.crd.002 | Bin 0 -> 8832 bytes 5 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 test/Test_VelFrc/RST/001.rst7 create mode 100644 test/Test_VelFrc/RST/002.rst7 create mode 100644 test/Test_VelFrc/TRAJ/rem.crd.001 create mode 100644 test/Test_VelFrc/TRAJ/rem.crd.002 diff --git a/test/Test_VelFrc/RST/001.rst7 b/test/Test_VelFrc/RST/001.rst7 new file mode 100644 index 0000000000000000000000000000000000000000..c7a71129a7e278d52c78dd01c61c041902ad2448 GIT binary patch literal 11552 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 cpptraj.in <7Ns&B}F+)j{B9$RM8bpYQB0~}t?!8Wl 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 C4z;WR literal 0 HcmV?d00001 diff --git a/test/Test_VelFrc/TRAJ/rem.crd.002 b/test/Test_VelFrc/TRAJ/rem.crd.002 new file mode 100644 index 0000000000000000000000000000000000000000..c6c00d17801d6826f0e3aa9eb520394e750c6dce GIT binary patch literal 8832 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 DpGe`4 literal 0 HcmV?d00001 From 56dff22626487cbe8e2e3129983d0f4595db3247 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Jul 2026 13:16:56 -0400 Subject: [PATCH 12/37] No need for separate CoordInfo function, already stored in OutputTrajCommon --- src/TrajoutList.cpp | 2 +- src/Trajout_Single.cpp | 3 --- src/Trajout_Single.h | 4 +--- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/TrajoutList.cpp b/src/TrajoutList.cpp index a0ab074da9..11b09ec09c 100644 --- a/src/TrajoutList.cpp +++ b/src/TrajoutList.cpp @@ -104,7 +104,7 @@ const for (ListType::const_iterator it = active_.begin(); it != active_.end(); ++it) { Trajout_Single* activeTraj = *it; - CoordinateInfo const& trajoutCoordInfo = activeTraj->TrajoutCoordInfo(); + CoordinateInfo const& trajoutCoordInfo = activeTraj->Traj().CoordInfo(); // Velocities if (currentCoordInfo.HasVel() != trajoutCoordInfo.HasVel()) { if (currentCoordInfo.HasVel()) { diff --git a/src/Trajout_Single.cpp b/src/Trajout_Single.cpp index 93f015cab1..f796975c08 100644 --- a/src/Trajout_Single.cpp +++ b/src/Trajout_Single.cpp @@ -11,9 +11,6 @@ Trajout_Single::~Trajout_Single() { if (trajio_!=0) delete trajio_; } -/** \return CoordinateInfo for TrajectoryIO object. Should not be called when uninitialized. */ -CoordinateInfo const& Trajout_Single::TrajoutCoordInfo() const { return traj_.CoordInfo(); } - // Trajout_Single::InitTrajWrite() /** Initialize output trajectory with appropriate TrajectoryIO class and * process arguments. diff --git a/src/Trajout_Single.h b/src/Trajout_Single.h index e047512297..10292acf2d 100644 --- a/src/Trajout_Single.h +++ b/src/Trajout_Single.h @@ -33,7 +33,7 @@ class Trajout_Single { /// Print information on trajectory to be written. void PrintInfo(int) const; // ------------------------------------------- - OutputTrajCommon Traj() const { return traj_; } + OutputTrajCommon const& Traj() const { return traj_; } bool IsInitialized() const { return trajio_ != 0; } /// Init and setup/open traj. int PrepareTrajWrite(FileName const&, ArgList const&, DataSetList const&, Topology*, @@ -41,8 +41,6 @@ class Trajout_Single { /// Init traj; if given, append ensemble number to name (use in Actions) int InitEnsembleTrajWrite(FileName const&, ArgList const&, DataSetList const&, TrajectoryFile::TrajFormatType, int); - /// \return CoordinateInfo - CoordinateInfo const& TrajoutCoordInfo() const; # ifdef MPI // Set the parallel communicator. int SetTrajComm(Parallel::Comm const& c) { trajComm_ = c; return 0; } From 1601bdc55a7e5a63e991bdd4b90b029092d6f084 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Jul 2026 13:17:16 -0400 Subject: [PATCH 13/37] Add function to check ensembles as well --- src/CpptrajState.cpp | 2 ++ src/EnsembleOutList.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/EnsembleOutList.h | 2 ++ 3 files changed, 41 insertions(+) diff --git a/src/CpptrajState.cpp b/src/CpptrajState.cpp index d160d9d9c6..1a29d45bc2 100644 --- a/src/CpptrajState.cpp +++ b/src/CpptrajState.cpp @@ -682,6 +682,8 @@ int CpptrajState::RunEnsemble() { EnsembleParm[0].Nframes() ); lastPindex = currentTop->Pindex(); } + // Check output trajectories against current coord info + ensembleOut_.CheckEnsembleOutCoordInfo(currentCoordInfo, CurrentFrames); # ifdef TIMER setup_time.Stop(); # endif diff --git a/src/EnsembleOutList.cpp b/src/EnsembleOutList.cpp index 371c707ccd..5c6cba60ac 100644 --- a/src/EnsembleOutList.cpp +++ b/src/EnsembleOutList.cpp @@ -90,6 +90,43 @@ int EnsembleOutList::SetupEnsembleOut(Topology* CurrentParm, CoordinateInfo cons return 0; } +/** Check active output ensembles against the current coordinate info. */ +int EnsembleOutList::CheckEnsembleOutCoordInfo(CoordinateInfo const& currentCoordInfo, + FramePtrArray const& currentFrames) +const +{ + for (EnsArray::const_iterator it = active_.begin(); it != active_.end(); ++it) + { + EnsembleOut* activeTraj = *it; + CoordinateInfo const& ensembleoutCoordInfo = activeTraj->Traj().CoordInfo(); + // Velocities + if (currentCoordInfo.HasVel() != ensembleoutCoordInfo.HasVel()) { + if (currentCoordInfo.HasVel()) { + mprintf("Warning: Input ensemble has velocity information but output ensemble was set up without velocities.\n"); + mprintf("Warning: Velocity information will not be written to output ensemble.\n"); + } else { + mprintf("Warning: Input ensemble has no velocity information but output ensemble was set up with velocities.\n"); + mprintf("Warning: All zeroes will be written for velocities.\n"); + for (FramePtrArray::const_iterator frm = currentFrames.begin(); frm != currentFrames.end(); ++frm) + (*frm)->AddVelocities(Frame::Darray((*frm)->size(), 0.0)); + } + } + // Forces + if (currentCoordInfo.HasForce() != ensembleoutCoordInfo.HasForce()) { + if (currentCoordInfo.HasForce()) { + mprintf("Warning: Input ensemble has force information but output ensemble was set up without forces.\n"); + mprintf("Warning: Force information will not be written to output ensemble.\n"); + } else { + mprintf("Warning: Input ensemble has no force information but output ensemble was set up with forces.\n"); + mprintf("Warning: All zeroes will be written for forces.\n"); + for (FramePtrArray::const_iterator frm = currentFrames.begin(); frm != currentFrames.end(); ++frm) + (*frm)->AddForces(Frame::Darray((*frm)->size(), 0.0)); + } + } + } + return 0; +} + /** List only active output trajectories. */ void EnsembleOutList::ListActive() const { if (!ensout_.empty()) { diff --git a/src/EnsembleOutList.h b/src/EnsembleOutList.h index dcafea62eb..e3ae479bee 100644 --- a/src/EnsembleOutList.h +++ b/src/EnsembleOutList.h @@ -24,6 +24,8 @@ class EnsembleOutList { int AddEnsembleOut(std::string const&, ArgList const&, DataSetList const&, Topology*, int); /// Set up ensembles for given topology. int SetupEnsembleOut(Topology*, CoordinateInfo const&, int); //TODO const Topology? + /// Check active ensembles against given CoordinateInfo + int CheckEnsembleOutCoordInfo(CoordinateInfo const&, FramePtrArray const&) const; /// Write array of Frames to ensemble int WriteEnsembleOut(int, FramePtrArray const&); /// Close all ensembles From 9f381d07de11f9b6f3c3328e5bd39b1b092991dd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 9 Jul 2026 14:38:22 -0400 Subject: [PATCH 14/37] If initial traj had vel/frc info but this one does not, make sure the velocity/force info is zeroed out. --- src/DataSet_Coords.cpp | 1 + src/DataSet_Coords_TRJ.cpp | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/DataSet_Coords.cpp b/src/DataSet_Coords.cpp index ed097df7ac..64146e7f19 100644 --- a/src/DataSet_Coords.cpp +++ b/src/DataSet_Coords.cpp @@ -10,6 +10,7 @@ Frame DataSet_Coords::AllocateFrame() const { void DataSet_Coords::CommonInfo() const { if (cInfo_.HasBox()) mprintf(" Box Coords,"); if (cInfo_.HasVel()) mprintf(" Velocities,"); + if (cInfo_.HasForce()) mprintf(" Forces,"); mprintf(" %i atoms", top_.Natom()); } diff --git a/src/DataSet_Coords_TRJ.cpp b/src/DataSet_Coords_TRJ.cpp index 6b43eeb7e1..7b87947b45 100644 --- a/src/DataSet_Coords_TRJ.cpp +++ b/src/DataSet_Coords_TRJ.cpp @@ -111,8 +111,18 @@ void DataSet_Coords_TRJ::GetFrame(int idx, Frame& fIn) { Traj_ = trajinList_[ IDX_.CurrentTrajNum() ]; // NOTE: Currently enforcing all traj have same # atoms, no need to check topology. // See if frame needs (re-)allocation. - if (previousTraj == 0 || previousTraj->TrajCoordInfo() != Traj_->TrajCoordInfo()) + if (previousTraj == 0 || previousTraj->TrajCoordInfo() != Traj_->TrajCoordInfo()) { readFrame_.SetupFrameV( Traj_->Traj().Parm()->Atoms(), Traj_->TrajCoordInfo() ); + // If previously had vel/frc info but now do not, zero it out. + if (CoordsInfo().HasVel() && !Traj_->TrajCoordInfo().HasVel()) + readFrame_.AddVelocities(Frame::Darray(readFrame_.size(), 0.0)); + if (fIn.HasVelocity() && !Traj_->TrajCoordInfo().HasVel()) + fIn.ZeroVelocities(); + if (CoordsInfo().HasForce() && !Traj_->TrajCoordInfo().HasForce()) + readFrame_.AddForces(Frame::Darray(readFrame_.size(), 0.0)); + if (fIn.HasForce() && !Traj_->TrajCoordInfo().HasForce()) + fIn.ZeroForces(); + } // Open traj. if (Traj_->BeginTraj()) { mprinterr("Error: Could not open trajectory %i '%s'\n", IDX_.CurrentTrajNum(), From 51fbc4a7fbd4888d84883fb4bc4f80a9906dc7ed Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 10 Jul 2026 08:50:41 -0400 Subject: [PATCH 15/37] Add test trajectory files --- test/Test_VelFrc/run0.nc | Bin 0 -> 3148 bytes test/Test_VelFrc/run1.nc | Bin 0 -> 8728 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/Test_VelFrc/run0.nc create mode 100644 test/Test_VelFrc/run1.nc diff --git a/test/Test_VelFrc/run0.nc b/test/Test_VelFrc/run0.nc new file mode 100644 index 0000000000000000000000000000000000000000..8e4313581c5967f4fbadc58db7cb1de8a022a4e3 GIT binary patch literal 3148 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 K+YdFJ6#oNN!Dk8p literal 0 HcmV?d00001 diff --git a/test/Test_VelFrc/run1.nc b/test/Test_VelFrc/run1.nc new file mode 100644 index 0000000000000000000000000000000000000000..f6ec6d54106811d6c3f7049c7e7ab6a1c699e92c GIT binary patch literal 8728 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 AQUCw| literal 0 HcmV?d00001 From 84048caea4d32858b254a09a1cce45ff4372af9c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 10 Jul 2026 13:45:55 -0400 Subject: [PATCH 16/37] Protect tests in parallel --- test/Test_VelFrc/RunTest.sh | 81 +++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/test/Test_VelFrc/RunTest.sh b/test/Test_VelFrc/RunTest.sh index b1d41247a8..b651a93939 100755 --- a/test/Test_VelFrc/RunTest.sh +++ b/test/Test_VelFrc/RunTest.sh @@ -7,67 +7,73 @@ CleanFiles cpptraj.in CrdFrcVel.nc Vel.crd Frc.crd Vel1.crd Frc1.crd \ combined2.nc ensemble.nc.? TESTNAME='Read separate velocity/force trajectory data tests' -Requires notparallel netcdf +Requires netcdf INPUT="-i cpptraj.in" -cat > cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < cpptraj.in < Date: Fri, 10 Jul 2026 16:13:44 -0400 Subject: [PATCH 17/37] Need to modify FrameArray, not FramePtrArray --- src/CpptrajState.cpp | 2 +- src/EnsembleOutList.cpp | 11 ++++++----- src/EnsembleOutList.h | 3 ++- src/cpptrajdepend | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/CpptrajState.cpp b/src/CpptrajState.cpp index 1a29d45bc2..dfa988d3be 100644 --- a/src/CpptrajState.cpp +++ b/src/CpptrajState.cpp @@ -683,7 +683,7 @@ int CpptrajState::RunEnsemble() { lastPindex = currentTop->Pindex(); } // Check output trajectories against current coord info - ensembleOut_.CheckEnsembleOutCoordInfo(currentCoordInfo, CurrentFrames); + ensembleOut_.CheckEnsembleOutCoordInfo(currentCoordInfo, FrameEnsemble); # ifdef TIMER setup_time.Stop(); # endif diff --git a/src/EnsembleOutList.cpp b/src/EnsembleOutList.cpp index 5c6cba60ac..70828370fa 100644 --- a/src/EnsembleOutList.cpp +++ b/src/EnsembleOutList.cpp @@ -4,6 +4,7 @@ #include "EnsembleOut_Single.h" #include "EnsembleOut_Multi.h" #include "ArgList.h" +#include "FrameArray.h" /// CONSTRUCTOR EnsembleOutList::EnsembleOutList() : debug_(0) {} @@ -92,7 +93,7 @@ int EnsembleOutList::SetupEnsembleOut(Topology* CurrentParm, CoordinateInfo cons /** Check active output ensembles against the current coordinate info. */ int EnsembleOutList::CheckEnsembleOutCoordInfo(CoordinateInfo const& currentCoordInfo, - FramePtrArray const& currentFrames) + FrameArray& FrameEnsemble) const { for (EnsArray::const_iterator it = active_.begin(); it != active_.end(); ++it) @@ -107,8 +108,8 @@ const } else { mprintf("Warning: Input ensemble has no velocity information but output ensemble was set up with velocities.\n"); mprintf("Warning: All zeroes will be written for velocities.\n"); - for (FramePtrArray::const_iterator frm = currentFrames.begin(); frm != currentFrames.end(); ++frm) - (*frm)->AddVelocities(Frame::Darray((*frm)->size(), 0.0)); + for (unsigned int idx = 0; idx < FrameEnsemble.Size(); idx++) + FrameEnsemble[idx].AddVelocities(Frame::Darray(FrameEnsemble[idx].size(), 0.0)); } } // Forces @@ -119,8 +120,8 @@ const } else { mprintf("Warning: Input ensemble has no force information but output ensemble was set up with forces.\n"); mprintf("Warning: All zeroes will be written for forces.\n"); - for (FramePtrArray::const_iterator frm = currentFrames.begin(); frm != currentFrames.end(); ++frm) - (*frm)->AddForces(Frame::Darray((*frm)->size(), 0.0)); + for (unsigned int idx = 0; idx < FrameEnsemble.Size(); idx++) + FrameEnsemble[idx].AddForces(Frame::Darray(FrameEnsemble[idx].size(), 0.0)); } } } diff --git a/src/EnsembleOutList.h b/src/EnsembleOutList.h index e3ae479bee..0bf5f7e2ac 100644 --- a/src/EnsembleOutList.h +++ b/src/EnsembleOutList.h @@ -13,6 +13,7 @@ class ArgList; class DataSetList; class Topology; class CoordinateInfo; +class FrameArray; /// Hold output ensembles. class EnsembleOutList { public: @@ -25,7 +26,7 @@ class EnsembleOutList { /// Set up ensembles for given topology. int SetupEnsembleOut(Topology*, CoordinateInfo const&, int); //TODO const Topology? /// Check active ensembles against given CoordinateInfo - int CheckEnsembleOutCoordInfo(CoordinateInfo const&, FramePtrArray const&) const; + int CheckEnsembleOutCoordInfo(CoordinateInfo const&, FrameArray&) const; /// Write array of Frames to ensemble int WriteEnsembleOut(int, FramePtrArray const&); /// Close all ensembles diff --git a/src/cpptrajdepend b/src/cpptrajdepend index b1256246a6..0ecdc64ff1 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -312,7 +312,7 @@ EnsembleIn_Multi.o : EnsembleIn_Multi.cpp ArgList.h AssociatedData.h Atom.h Atom EnsembleIn_Single.o : EnsembleIn_Single.cpp ArgList.h Atom.h AtomMask.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h EnsembleIn.h EnsembleIn_Single.h FileName.h FileTypes.h Frame.h FrameArray.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h ModXNA_Info.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h Timer.h Topology.h TrajFrameCounter.h TrajectoryFile.h TrajectoryIO.h Unit.h Vec3.h EnsembleNavigator.o : EnsembleNavigator.cpp Atom.h AtomMask.h Box.h CoordinateInfo.h CpptrajStdio.h EnsembleIn.h EnsembleNavigator.h FileName.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h Timer.h TrajFrameCounter.h TrajFrameIndex.h Trajin.h TrajinList.h Unit.h Vec3.h EnsembleOut.o : EnsembleOut.cpp ActionFrameCounter.h BaseIOtype.h Box.h CoordinateInfo.h CpptrajStdio.h EnsembleOut.h FileName.h FileTypes.h FramePtrArray.h Matrix_3x3.h OutputTrajCommon.h Parallel.h Range.h ReplicaDimArray.h TrajectoryFile.h Vec3.h -EnsembleOutList.o : EnsembleOutList.cpp ActionFrameCounter.h ArgList.h Atom.h AtomMask.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h EnsembleOut.h EnsembleOutList.h EnsembleOut_Multi.h EnsembleOut_Single.h FileName.h FileTypes.h Frame.h FramePtrArray.h MaskToken.h Matrix_3x3.h ModXNA_Info.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TrajectoryFile.h Unit.h Vec3.h +EnsembleOutList.o : EnsembleOutList.cpp ActionFrameCounter.h ArgList.h Atom.h AtomMask.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h EnsembleOut.h EnsembleOutList.h EnsembleOut_Multi.h EnsembleOut_Single.h FileName.h FileTypes.h Frame.h FrameArray.h FramePtrArray.h MaskToken.h Matrix_3x3.h ModXNA_Info.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TrajectoryFile.h Unit.h Vec3.h EnsembleOut_Multi.o : EnsembleOut_Multi.cpp ActionFrameCounter.h ArgList.h Atom.h AtomMask.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h EnsembleOut.h EnsembleOut_Multi.h FileName.h FileTypes.h Frame.h FramePtrArray.h MaskToken.h Matrix_3x3.h ModXNA_Info.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h StringRoutines.h SymbolExporting.h Topology.h TrajectoryFile.h TrajectoryIO.h Unit.h Vec3.h EnsembleOut_Single.o : EnsembleOut_Single.cpp ActionFrameCounter.h ArgList.h Atom.h AtomMask.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h EnsembleOut.h EnsembleOut_Single.h FileName.h FileTypes.h Frame.h FramePtrArray.h MaskToken.h Matrix_3x3.h ModXNA_Info.h Molecule.h NameType.h OutputTrajCommon.h Parallel.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TrajectoryFile.h TrajectoryIO.h Unit.h Vec3.h EwaldOptions.o : EwaldOptions.cpp ArgList.h CpptrajStdio.h EwaldOptions.h From 9a1d35a58b26b81bda5fe57a98c4ce5bab960e92 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Fri, 10 Jul 2026 16:14:54 -0400 Subject: [PATCH 18/37] Enable the ensemble test --- test/Test_VelFrc/RunTest.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Test_VelFrc/RunTest.sh b/test/Test_VelFrc/RunTest.sh index b651a93939..e2a991a47a 100755 --- a/test/Test_VelFrc/RunTest.sh +++ b/test/Test_VelFrc/RunTest.sh @@ -127,7 +127,7 @@ ensemble RST/001.rst7 trajnames RST/002.rst7 ensemble TRAJ/rem.crd.001 trajout ensemble.nc EOF -#RunCpptraj "$UNITNAME" +RunCpptraj "$UNITNAME" EndTest exit 0 From 0f950112b5d7bed82114b72f25199999975f9b2b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 13 Jul 2026 15:36:48 -0400 Subject: [PATCH 19/37] Save index/value maps for each ensemble so we can tell if the index value mapping is the same between different trajectories. --- src/EnsembleIn.cpp | 72 ++++++++++++++++++++++++++++++++++++++++ src/EnsembleIn.h | 18 ++++++++-- src/EnsembleIn_Multi.cpp | 26 +++++++++++++-- src/TrajinList.cpp | 3 ++ 4 files changed, 114 insertions(+), 5 deletions(-) diff --git a/src/EnsembleIn.cpp b/src/EnsembleIn.cpp index 5d43debfff..31db03dc45 100644 --- a/src/EnsembleIn.cpp +++ b/src/EnsembleIn.cpp @@ -93,3 +93,75 @@ int EnsembleIn::SetIndicesMap(std::vector const& allIndices) { } return 0; } + +int EnsembleIn::SetIdxValMap(std::vector const& allIndices, + std::vector const& allValues) +{ + if (allIndices.size() != allValues.size()) { + rprinterr("Internal Error: EnsembleIn::SetIdxValMap(): allIndices size %zu != allValues size %zu\n", + allIndices.size(), allValues.size()); + return 1; + } + + if (debug_ > 0) { + mprintf("DEBUG: index/value map:\n"); + for (unsigned int member = 0; member != allIndices.size(); member++) { + mprintf("\t"); + for (Frame::RemdIdxType::const_iterator idx = allIndices[member].begin(); + idx != allIndices[member].end(); ++idx) + mprintf(" %6i", *idx); + mprintf(" : "); + for (Darray::const_iterator dval = allValues[member].begin(); + dval != allValues[member].end(); ++dval) + mprintf(" %8.3f", *dval); + mprintf("\n"); + } + } + + typedef std::pair ivPair; + for (unsigned int idx = 0; idx != allIndices.size(); idx++) + RemdIdxValMap_.insert( ivPair(allIndices[idx], allValues[idx]) ); + return 0; +} + +static inline void indexprint(Frame::RemdIdxType const& IDXin) { + for (Frame::RemdIdxType::const_iterator idx = IDXin.begin(); + idx != IDXin.end(); ++idx) + mprintf(" %6i", *idx); +} + +static inline void valprint(std::vector const& VALin) { + for (std::vector::const_iterator dval = VALin.begin(); + dval != VALin.end(); ++dval) + mprintf(" %8.3f", *dval); +} + +int EnsembleIn::CheckIdxValMap(RemdIdxValMapType const& mapIn) const { + if (mapIn.size() != RemdIdxValMap_.size()) { + mprintf("Warning: REMD index/value map size %zu does not match previous map size %zu\n", + RemdIdxValMap_.size(), mapIn.size()); + return 1; + } + int match = 0; + for (RemdIdxValMapType::const_iterator it = RemdIdxValMap_.begin(); + it != RemdIdxValMap_.end(); ++it) + { + RemdIdxValMapType::const_iterator jt = mapIn.find( it->first ); + if (jt == mapIn.end()) { + mprintf("Warning: Index"); + indexprint( it->first ); + mprintf(" for this ensemble not found in previous ensemble.\n"); + match = 1; + } else if (jt->second != it->second) { + mprintf("Warning: Index"); + indexprint( it->first ); + mprintf(" values "); + valprint( it->second ); + mprintf(" do not match previous map values "); + valprint( jt->second ); + mprintf("\n"); + match = 1; + } + } + return match; +} diff --git a/src/EnsembleIn.h b/src/EnsembleIn.h index 7cca6da76a..a238efae49 100644 --- a/src/EnsembleIn.h +++ b/src/EnsembleIn.h @@ -16,7 +16,12 @@ class FrameArray; class CoordinateInfo; /// Read in an array of frames at a time. class EnsembleIn { + protected: + typedef Frame::RemdIdxType RemdIdxType; + typedef std::vector Darray; public: + typedef std::map RemdIdxValMapType; + EnsembleIn(); virtual ~EnsembleIn() {} virtual int SetupEnsembleRead(FileName const&, ArgList&, Topology*) = 0; @@ -36,19 +41,26 @@ class EnsembleIn { InputTrajCommon const& Traj() const { return traj_; } /// \return true if there was a problem reading the ensemble. int BadEnsemble() const { return badEnsemble_; } + /// \return 1 if this index/value map does not match the given map + int CheckIdxValMap(RemdIdxValMapType const&) const; + /// \return index/value map + RemdIdxValMapType const& RemdIdxValMap() const { return RemdIdxValMap_; } + /// Set the debug level void SetDebug(int d) { debug_ = d; } /// Write current replica mapping to STDOUT. void PrintReplicaInfo() const; protected: - typedef Frame::RemdIdxType RemdIdxType; int SetTemperatureMap(std::vector const&); int SetIndicesMap(std::vector const&); + int SetIdxValMap(std::vector const&, std::vector const&); InputTrajCommon& SetTraj() { return traj_; } /// For converting temperature to replica index ReplicaInfo::Map TemperatureMap_; /// For converting indices to replica index ReplicaInfo::Map IndicesMap_; + + RemdIdxValMapType RemdIdxValMap_; ReplicaInfo::TargetType targetType_; ///< Hold type of REMD frame being searched for. int badEnsemble_; ///< Set to 1 if problem reading ensemble, 0 otherwise. int debug_; @@ -68,8 +80,8 @@ class EnsembleIn { # endif # endif private: - static void PrintReplicaTmap(ReplicaInfo::Map const&); - static void PrintReplicaImap(ReplicaInfo::Map const&); + //static void PrintReplicaTmap(ReplicaInfo::Map const&); + //static void PrintReplicaImap(ReplicaInfo::Map const&); InputTrajCommon traj_; # ifdef MPI diff --git a/src/EnsembleIn_Multi.cpp b/src/EnsembleIn_Multi.cpp index feff51061b..7aad3146f4 100644 --- a/src/EnsembleIn_Multi.cpp +++ b/src/EnsembleIn_Multi.cpp @@ -147,10 +147,14 @@ int EnsembleIn_Multi::SetupEnsembleRead(FileName const& tnameIn, ArgList& argIn, frameIn.SetupFrameV( Traj().Parm()->Atoms(), cInfo_ ); std::vector allTemps; std::vector allIndices; + std::vector allValues; if (targetType_ == ReplicaInfo::TEMP) allTemps.assign(REMDtraj_.size(), -1.0); - else if (targetType_ == ReplicaInfo::INDICES) + else if (targetType_ == ReplicaInfo::INDICES) { allIndices.resize( REMDtraj_.size() ); + if (cInfo_.UseRemdValues()) + allValues.resize( REMDtraj_.size(), Darray(cInfo_.ReplicaDimensions().Ndims(), -1.0) ); + } # ifdef MPI int err = 0; if (Parallel::TrajComm().Master()) { @@ -205,14 +209,32 @@ int EnsembleIn_Multi::SetupEnsembleRead(FileName const& tnameIn, ArgList& argIn, REMDtraj_[member]->closeTraj(); if (targetType_ == ReplicaInfo::TEMP) allTemps[member] = frameIn.Temperature(); - else if (targetType_ == ReplicaInfo::INDICES) + else if (targetType_ == ReplicaInfo::INDICES) { allIndices[member] = frameIn.RemdIndices(); + if (cInfo_.UseRemdValues()) { + for (int idim = 0; idim != cInfo_.ReplicaDimensions().Ndims(); idim++) { + double dval = -1.0; + switch (cInfo_.ReplicaDimensions().DimType(idim)) { + case ReplicaDimArray::RXSGLD : // FIXME double check this + case ReplicaDimArray::TEMPERATURE : dval = frameIn.Temperature(); break; + case ReplicaDimArray::PH : dval = frameIn.pH(); break; + case ReplicaDimArray::REDOX : dval = frameIn.RedOx(); break; + // Default to replica index + default : dval = (double)frameIn.RemdIndices()[idim]; break; + } + allValues[member][idim] = dval; + } + } // END if UseRemdValues + } } # endif /* MPI */ if (targetType_ == ReplicaInfo::TEMP) { if (SetTemperatureMap(allTemps)) return 1; } else if (targetType_ == ReplicaInfo::INDICES) { if (SetIndicesMap(allIndices)) return 1; + if (cInfo_.UseRemdValues()) { + if (SetIdxValMap(allIndices, allValues)) return 1; + } } } // Otherwise NONE, no sorting diff --git a/src/TrajinList.cpp b/src/TrajinList.cpp index cabcc56f1b..9ec9b626ae 100644 --- a/src/TrajinList.cpp +++ b/src/TrajinList.cpp @@ -87,6 +87,9 @@ int TrajinList::AddEnsembleIn(std::string const& fname, Topology* topIn, ArgList err++; continue; } + if (ensemble->EnsembleCoordInfo().UseRemdValues() && !ensemble_.empty()) { + ensemble->CheckIdxValMap( ensemble_.back()->RemdIdxValMap() ); + } if (args.CheckForMoreArgs()) { delete ensemble; return 1; From 2cae59ec2d98ef8594478152227273cf8293337a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Mon, 13 Jul 2026 15:41:54 -0400 Subject: [PATCH 20/37] Do a better FP comparison --- src/EnsembleIn.cpp | 20 +++++++++++++++++++- src/cpptrajdepend | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/EnsembleIn.cpp b/src/EnsembleIn.cpp index 31db03dc45..08d2d94bbb 100644 --- a/src/EnsembleIn.cpp +++ b/src/EnsembleIn.cpp @@ -1,5 +1,6 @@ #include "EnsembleIn.h" #include "CpptrajStdio.h" +#include "Constants.h" // FNE EnsembleIn::EnsembleIn() : targetType_(ReplicaInfo::NONE), badEnsemble_(0), debug_(0) @@ -136,6 +137,23 @@ static inline void valprint(std::vector const& VALin) { mprintf(" %8.3f", *dval); } +/// Floating point not equals. +static inline bool FNE(double v1, double v2) { + double delta = v1 - v2; + if (delta < 0.0) delta = -delta; + return (delta > Constants::SMALL); +} + +// Compare Darrays +static inline bool DNE(std::vector const& lhs, + std::vector const& rhs) +{ + if (lhs.size() != rhs.size()) return true; + for (unsigned int idx = 0; idx < lhs.size(); idx++) + if (FNE(lhs[idx], rhs[idx])) return true; + return false; +} + int EnsembleIn::CheckIdxValMap(RemdIdxValMapType const& mapIn) const { if (mapIn.size() != RemdIdxValMap_.size()) { mprintf("Warning: REMD index/value map size %zu does not match previous map size %zu\n", @@ -152,7 +170,7 @@ int EnsembleIn::CheckIdxValMap(RemdIdxValMapType const& mapIn) const { indexprint( it->first ); mprintf(" for this ensemble not found in previous ensemble.\n"); match = 1; - } else if (jt->second != it->second) { + } else if (DNE(jt->second, it->second)) { mprintf("Warning: Index"); indexprint( it->first ); mprintf(" values "); diff --git a/src/cpptrajdepend b/src/cpptrajdepend index 0ecdc64ff1..0ec3c0e47b 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -307,7 +307,7 @@ Energy/PME_RecipParams.o : Energy/PME_RecipParams.cpp Box.h CpptrajStdio.h Energ Energy/VDW_LongRange_Correction.o : Energy/VDW_LongRange_Correction.cpp Atom.h AtomMask.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h Energy/VDW_LongRange_Correction.h FileName.h Frame.h MaskToken.h Matrix_3x3.h ModXNA_Info.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h Unit.h Vec3.h EnergyArray.o : EnergyArray.cpp CpptrajFile.h CpptrajStdio.h EnergyArray.h FileIO.h FileName.h Parallel.h Energy_Sander.o : Energy_Sander.cpp ArgList.h Atom.h AtomMask.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h Energy_Sander.h FileName.h FileTypes.h File_TempName.h Frame.h MaskToken.h Matrix_3x3.h ModXNA_Info.h Molecule.h NameType.h Parallel.h ParameterTypes.h ParmFile.h Range.h ReplicaDimArray.h Residue.h Segment.h StringRoutines.h SymbolExporting.h Topology.h Unit.h Vec3.h -EnsembleIn.o : EnsembleIn.cpp Atom.h AtomMask.h Box.h CoordinateInfo.h CpptrajStdio.h EnsembleIn.h FileName.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h Timer.h TrajFrameCounter.h Unit.h Vec3.h +EnsembleIn.o : EnsembleIn.cpp Atom.h AtomMask.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h EnsembleIn.h FileName.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h Timer.h TrajFrameCounter.h Unit.h Vec3.h EnsembleIn_Multi.o : EnsembleIn_Multi.cpp ArgList.h AssociatedData.h Atom.h AtomMask.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_RemLog.h Dimension.h EnsembleIn.h EnsembleIn_Multi.h FileIO.h FileName.h FileTypes.h Frame.h FrameArray.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h ModXNA_Info.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h TrajIOarray.h TrajectoryIO.h Unit.h Vec3.h EnsembleIn_Single.o : EnsembleIn_Single.cpp ArgList.h Atom.h AtomMask.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h EnsembleIn.h EnsembleIn_Single.h FileName.h FileTypes.h Frame.h FrameArray.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h ModXNA_Info.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h Timer.h Topology.h TrajFrameCounter.h TrajectoryFile.h TrajectoryIO.h Unit.h Vec3.h EnsembleNavigator.o : EnsembleNavigator.cpp Atom.h AtomMask.h Box.h CoordinateInfo.h CpptrajStdio.h EnsembleIn.h EnsembleNavigator.h FileName.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h SymbolExporting.h Timer.h TrajFrameCounter.h TrajFrameIndex.h Trajin.h TrajinList.h Unit.h Vec3.h From 21d6b9a8f3efd6f4786c573587409f3b904b679c Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 09:31:53 -0400 Subject: [PATCH 21/37] When replica indices do not map to same values as in the previous ensemble force sorting by value --- src/EnsembleIn.h | 2 ++ src/EnsembleIn_Multi.cpp | 27 ++++++++++++++++----------- src/EnsembleIn_Multi.h | 1 - src/Frame.cpp | 15 +++++++++++++++ src/Frame.h | 2 ++ src/TrajinList.cpp | 9 ++++++++- 6 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/EnsembleIn.h b/src/EnsembleIn.h index a238efae49..5ed5c4ac9e 100644 --- a/src/EnsembleIn.h +++ b/src/EnsembleIn.h @@ -45,6 +45,8 @@ class EnsembleIn { int CheckIdxValMap(RemdIdxValMapType const&) const; /// \return index/value map RemdIdxValMapType const& RemdIdxValMap() const { return RemdIdxValMap_; } + /// \return The sorting mode + ReplicaInfo::TargetType TargetMode() const { return targetType_; } /// Set the debug level void SetDebug(int d) { debug_ = d; } /// Write current replica mapping to STDOUT. diff --git a/src/EnsembleIn_Multi.cpp b/src/EnsembleIn_Multi.cpp index 7aad3146f4..0e355dfabf 100644 --- a/src/EnsembleIn_Multi.cpp +++ b/src/EnsembleIn_Multi.cpp @@ -23,6 +23,7 @@ int EnsembleIn_Multi::SetupEnsembleRead(FileName const& tnameIn, ArgList& argIn, double remlog_ntwx = argIn.getKeyDouble("ntwx", 1.0); bool no_sort = argIn.hasKey("nosort"); bool by_crdidx = argIn.hasKey("bycrdidx"); + bool by_temp = argIn.hasKey("bytemp"); if (no_sort && by_crdidx) { mprinterr("Error: Should only specify either 'nosort' or 'bycrdidx', not both.\n"); return 1; @@ -35,6 +36,12 @@ int EnsembleIn_Multi::SetupEnsembleRead(FileName const& tnameIn, ArgList& argIn, mprinterr("Error: Should only specify either 'bycrdidx' or 'remlog', not both.\n"); return 1; } + if (by_temp) { + if (by_crdidx || no_sort) { + mprinterr("Error: 'bycrdidx'/'nosort' should not be specified with 'bytemp'\n"); + return 1; + } + } // CRDIDXARG: Parse out 'crdidx ' now so it is not processed // by SetupTrajIO. ArgList crdidxarg; @@ -127,8 +134,14 @@ int EnsembleIn_Multi::SetupEnsembleRead(FileName const& tnameIn, ArgList& argIn, } } else { // If dimensions are present index by replica indices, otherwise index - // by temperature. - if (cInfo_.ReplicaDimensions().Ndims() > 0) + // by temperature. + if (by_temp) { + targetType_ = ReplicaInfo::TEMP; + if (cInfo_.ReplicaDimensions().Ndims() > 1) { + mprinterr("Error: 'bytemp' not compatible with multiple dimensions.\n"); + return 1; + } + } else if (cInfo_.ReplicaDimensions().Ndims() > 0) targetType_ = ReplicaInfo::INDICES; else targetType_ = ReplicaInfo::TEMP; @@ -213,15 +226,7 @@ int EnsembleIn_Multi::SetupEnsembleRead(FileName const& tnameIn, ArgList& argIn, allIndices[member] = frameIn.RemdIndices(); if (cInfo_.UseRemdValues()) { for (int idim = 0; idim != cInfo_.ReplicaDimensions().Ndims(); idim++) { - double dval = -1.0; - switch (cInfo_.ReplicaDimensions().DimType(idim)) { - case ReplicaDimArray::RXSGLD : // FIXME double check this - case ReplicaDimArray::TEMPERATURE : dval = frameIn.Temperature(); break; - case ReplicaDimArray::PH : dval = frameIn.pH(); break; - case ReplicaDimArray::REDOX : dval = frameIn.RedOx(); break; - // Default to replica index - default : dval = (double)frameIn.RemdIndices()[idim]; break; - } + double dval = frameIn.RemdValue(idim, cInfo_.ReplicaDimensions()); allValues[member][idim] = dval; } } // END if UseRemdValues diff --git a/src/EnsembleIn_Multi.h b/src/EnsembleIn_Multi.h index dc19fc90a7..ef1ac4663f 100644 --- a/src/EnsembleIn_Multi.h +++ b/src/EnsembleIn_Multi.h @@ -20,7 +20,6 @@ class EnsembleIn_Multi : public EnsembleIn { std::string FinalCrdIndices() const; // TODO Remove /// \return true if sorting crdidx by remlog bool SortingByRemlog() const; - ReplicaInfo::TargetType TargetMode() const { return targetType_; } // TODO Remove private: TrajIOarray REMDtraj_; CoordinateInfo cInfo_; diff --git a/src/Frame.cpp b/src/Frame.cpp index fe1207a06f..265f69dc7c 100644 --- a/src/Frame.cpp +++ b/src/Frame.cpp @@ -262,6 +262,21 @@ Frame &Frame::operator=(Frame rhs) { } // ---------- ACCESS INTERNAL DATA --------------------------------------------- +/** \return Replica value for specified dimension */ +double Frame::RemdValue(int idim, ReplicaDimArray const& repDim) const { + if (remd_indices_.empty()) return -1.0; + double dval = -1.0; + switch (repDim.DimType(idim)) { + case ReplicaDimArray::RXSGLD : // FIXME double check this + case ReplicaDimArray::TEMPERATURE : dval = Temperature(); break; + case ReplicaDimArray::PH : dval = pH(); break; + case ReplicaDimArray::REDOX : dval = RedOx(); break; + // Default to replica index + default : dval = (double)RemdIndices()[idim]; break; + } + return dval; +} + /** \return CoordinateInfo describing the Frame. */ CoordinateInfo Frame::CoordsInfo() const { // TODO no good way to tell about time yet. diff --git a/src/Frame.h b/src/Frame.h index d45d0221ad..7fb807db01 100644 --- a/src/Frame.h +++ b/src/Frame.h @@ -78,6 +78,8 @@ class Frame { double pH() const { return pH_; } double RedOx() const { return redox_; } double Time() const { return time_; } + /// \return Replica value for specified dimension. + double RemdValue(int, ReplicaDimArray const&) const; /// \return CoordinateInfo that describes the Frame CoordinateInfo CoordsInfo() const; /// \return pointer to start of XYZ coords for given atom. diff --git a/src/TrajinList.cpp b/src/TrajinList.cpp index 9ec9b626ae..790688d2b4 100644 --- a/src/TrajinList.cpp +++ b/src/TrajinList.cpp @@ -87,8 +87,15 @@ int TrajinList::AddEnsembleIn(std::string const& fname, Topology* topIn, ArgList err++; continue; } + // Check that replica indices match to the same values as previous ensemble if (ensemble->EnsembleCoordInfo().UseRemdValues() && !ensemble_.empty()) { - ensemble->CheckIdxValMap( ensemble_.back()->RemdIdxValMap() ); + if (ensemble->CheckIdxValMap( ensemble_.back()->RemdIdxValMap() )) { + if (ensemble->TargetMode() == ReplicaInfo::INDICES) { + mprinterr("Error: Ensemble replica indices do not map to the same values as previous ensemble.\n" + "Error: Use the 'bytemp' keyword for this ensemble.\n"); + return 1; + } + } } if (args.CheckForMoreArgs()) { delete ensemble; From 34dbca01cabea5c3209dc499c9e17ecd5e810024 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 12:07:23 -0400 Subject: [PATCH 22/37] Fix frames in parallel ensemble --- src/CpptrajState.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/CpptrajState.cpp b/src/CpptrajState.cpp index dfa988d3be..ab14b39d72 100644 --- a/src/CpptrajState.cpp +++ b/src/CpptrajState.cpp @@ -897,6 +897,8 @@ int CpptrajState::RunParaEnsemble() { return 1; // Allocate FrameEnsemble here in case preload is needed. FrameEnsemble.SetupFrames( NAV.FirstParm()->Atoms(), NAV.EnsCoordInfo() ); + // Check output trajectories against current coord info + ensembleOut_.CheckEnsembleOutCoordInfo(NAV.EnsCoordInfo(), FrameEnsemble); // Figure out if any frames need to be preloaded on ranks int preload_err = 0; if (!TrajComm.Master()) { From 830bd31cf8a04cae9bcfcd0797613b052cb016a7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 12:07:51 -0400 Subject: [PATCH 23/37] Update ensemble test files with good ones from pmemd (with correct replica indices) --- test/Test_VelFrc/RST/001.rst7 | Bin 11552 -> 11560 bytes test/Test_VelFrc/RST/002.rst7 | Bin 11552 -> 11560 bytes test/Test_VelFrc/TRAJ/rem.crd.001 | Bin 8832 -> 14240 bytes test/Test_VelFrc/TRAJ/rem.crd.002 | Bin 8832 -> 14240 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/Test_VelFrc/RST/001.rst7 b/test/Test_VelFrc/RST/001.rst7 index c7a71129a7e278d52c78dd01c61c041902ad2448..f6d5e49e6503647ba699459795a48d6eb43ec376 100644 GIT binary patch literal 11560 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 YHe$=3Q3yrC8~C3)qW{o8cR@-22SAvwH2?qr delta 10900 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 n5Nu56;}<;7 diff --git a/test/Test_VelFrc/RST/002.rst7 b/test/Test_VelFrc/RST/002.rst7 index 4dee33e94cdd19116b102439ed9c6382c80b2b98..2d2a0b304692409d65ed399206972b63de9fb325 100644 GIT binary patch delta 10908 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 delta 10900 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 diff --git a/test/Test_VelFrc/TRAJ/rem.crd.001 b/test/Test_VelFrc/TRAJ/rem.crd.001 index 42ad866bc92a28b093d8a578a2d2944eb8512e3c..d8081783eccfa99ae5302606a55936b8d9c2e4bd 100644 GIT binary patch literal 14240 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 literal 8832 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 C4z;WR diff --git a/test/Test_VelFrc/TRAJ/rem.crd.002 b/test/Test_VelFrc/TRAJ/rem.crd.002 index c6c00d17801d6826f0e3aa9eb520394e750c6dce..a2281daeb1cb988d2f183c06c8fa689f14ed5a72 100644 GIT binary patch literal 14240 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 C(EVxv literal 8832 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 DpGe`4 From 375f01c7fbb6305d2300a2ff0666901678d55abd Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 12:11:35 -0400 Subject: [PATCH 24/37] Used the wrong restarts --- test/Test_VelFrc/RST/001.rst7 | Bin 11560 -> 11560 bytes test/Test_VelFrc/RST/002.rst7 | Bin 11560 -> 11560 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/Test_VelFrc/RST/001.rst7 b/test/Test_VelFrc/RST/001.rst7 index f6d5e49e6503647ba699459795a48d6eb43ec376..b28e2a8ca96b13c8637f59efd2680a35a545bdc2 100644 GIT binary patch delta 10811 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 I!gP%5e{IH0%>V!Z delta 10811 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 AfdBvi diff --git a/test/Test_VelFrc/RST/002.rst7 b/test/Test_VelFrc/RST/002.rst7 index 2d2a0b304692409d65ed399206972b63de9fb325..149042c2a25bc50041a21a3871592650aea9c7ef 100644 GIT binary patch delta 10811 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 JPb@Or{{tL8UHJe2 delta 10811 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 J3}BQw`ac`%P9XpQ From e03a05c977545dfa87fdad0b3ce88c3f56fc8b8e Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 12:12:10 -0400 Subject: [PATCH 25/37] Ensemble test --- test/Test_VelFrc/RunTest.sh | 2 ++ test/Test_VelFrc/ensemble.nc.0.save | Bin 0 -> 33152 bytes test/Test_VelFrc/ensemble.nc.1.save | Bin 0 -> 33152 bytes 3 files changed, 2 insertions(+) create mode 100644 test/Test_VelFrc/ensemble.nc.0.save create mode 100644 test/Test_VelFrc/ensemble.nc.1.save diff --git a/test/Test_VelFrc/RunTest.sh b/test/Test_VelFrc/RunTest.sh index e2a991a47a..d63fe93665 100755 --- a/test/Test_VelFrc/RunTest.sh +++ b/test/Test_VelFrc/RunTest.sh @@ -128,6 +128,8 @@ ensemble TRAJ/rem.crd.001 trajout ensemble.nc EOF RunCpptraj "$UNITNAME" +DoTest ensemble.nc.0.save ensemble.nc.0 +DoTest ensemble.nc.1.save ensemble.nc.1 EndTest exit 0 diff --git a/test/Test_VelFrc/ensemble.nc.0.save b/test/Test_VelFrc/ensemble.nc.0.save new file mode 100644 index 0000000000000000000000000000000000000000..6a56e530c4bccc73677e4cd262b6fac758a0155d GIT binary patch literal 33152 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 mtfq(MPf7XBdKmP+1qfC1M literal 0 HcmV?d00001 From 38bd9b569d25f05b3439bc39069390b941a338a4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 12:44:07 -0400 Subject: [PATCH 26/37] Protect in parallel --- test/Test_VelFrc/RunTest.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/Test_VelFrc/RunTest.sh b/test/Test_VelFrc/RunTest.sh index d63fe93665..6f2478169d 100755 --- a/test/Test_VelFrc/RunTest.sh +++ b/test/Test_VelFrc/RunTest.sh @@ -121,15 +121,18 @@ EOF fi UNITNAME='Ensemble Tests with mixed velocity/force info' -cat > cpptraj.in < cpptraj.in < Date: Tue, 14 Jul 2026 15:06:39 -0400 Subject: [PATCH 27/37] Handle case where outgoing Frame already has forces and/or velocities allocated --- src/EnsembleOutList.cpp | 16 ++++++++++++---- src/TrajoutList.cpp | 12 +++++++++--- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/EnsembleOutList.cpp b/src/EnsembleOutList.cpp index 70828370fa..2306e8afab 100644 --- a/src/EnsembleOutList.cpp +++ b/src/EnsembleOutList.cpp @@ -108,8 +108,12 @@ const } else { mprintf("Warning: Input ensemble has no velocity information but output ensemble was set up with velocities.\n"); mprintf("Warning: All zeroes will be written for velocities.\n"); - for (unsigned int idx = 0; idx < FrameEnsemble.Size(); idx++) - FrameEnsemble[idx].AddVelocities(Frame::Darray(FrameEnsemble[idx].size(), 0.0)); + for (unsigned int idx = 0; idx < FrameEnsemble.Size(); idx++) { + if (FrameEnsemble[idx].HasVelocity()) + FrameEnsemble[idx].ZeroVelocities(); + else + FrameEnsemble[idx].AddVelocities(Frame::Darray(FrameEnsemble[idx].size(), 0.0)); + } } } // Forces @@ -120,8 +124,12 @@ const } else { mprintf("Warning: Input ensemble has no force information but output ensemble was set up with forces.\n"); mprintf("Warning: All zeroes will be written for forces.\n"); - for (unsigned int idx = 0; idx < FrameEnsemble.Size(); idx++) - FrameEnsemble[idx].AddForces(Frame::Darray(FrameEnsemble[idx].size(), 0.0)); + for (unsigned int idx = 0; idx < FrameEnsemble.Size(); idx++) { + if (FrameEnsemble[idx].HasForce()) + FrameEnsemble[idx].ZeroForces(); + else + FrameEnsemble[idx].AddForces(Frame::Darray(FrameEnsemble[idx].size(), 0.0)); + } } } } diff --git a/src/TrajoutList.cpp b/src/TrajoutList.cpp index 11b09ec09c..f5dff1b551 100644 --- a/src/TrajoutList.cpp +++ b/src/TrajoutList.cpp @@ -96,7 +96,7 @@ int TrajoutList::SetupTrajout(Topology* CurrentParm, CoordinateInfo const& cInfo return 0; } -/** Check active output trajectories against the current coordinate info. */ +/** Check active output trajectories against the current input coordinate info. */ int TrajoutList::CheckTrajoutCoordInfo(CoordinateInfo const& currentCoordInfo, Frame& currentFrame) const @@ -113,7 +113,10 @@ const } else { mprintf("Warning: Input trajectory has no velocity information but output trajectory was set up with velocities.\n"); mprintf("Warning: All zeroes will be written for velocities.\n"); - currentFrame.AddVelocities(Frame::Darray(currentFrame.size(), 0.0)); + if (currentFrame.HasVelocity()) + currentFrame.ZeroVelocities(); + else + currentFrame.AddVelocities(Frame::Darray(currentFrame.size(), 0.0)); } } // Forces @@ -124,7 +127,10 @@ const } else { mprintf("Warning: Input trajectory has no force information but output trajectory was set up with forces.\n"); mprintf("Warning: All zeroes will be written for forces.\n"); - currentFrame.AddForces(Frame::Darray(currentFrame.size(), 0.0)); + if (currentFrame.HasForce()) + currentFrame.ZeroForces(); + else + currentFrame.AddForces(Frame::Darray(currentFrame.size(), 0.0)); } } } From e4f9cb5fbcb64ad748a3764493454a65940f0896 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 15:07:05 -0400 Subject: [PATCH 28/37] Record when ensemble changes --- src/EnsembleNavigator.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/EnsembleNavigator.h b/src/EnsembleNavigator.h index 4377265076..e90167be22 100644 --- a/src/EnsembleNavigator.h +++ b/src/EnsembleNavigator.h @@ -9,13 +9,14 @@ */ class EnsembleNavigator { public: - EnsembleNavigator() : currentEns_(0), FirstParm_(0) {} + EnsembleNavigator() : currentEns_(0), FirstParm_(0), ensembleHasChanged_(false) {} int AddEnsembles(TrajinList::ensemble_it const&, TrajinList::ensemble_it const&); inline int GetEnsemble(int, FrameArray&, FramePtrArray&); EnsembleIn* CurrentEns() { return currentEns_; } Topology* FirstParm() { return FirstParm_; } CoordinateInfo const& EnsCoordInfo() const { return ensCoordInfo_; } TrajFrameIndex const& IDX() const { return IDX_; } + bool EnsembleHasChanged() const { return ensembleHasChanged_; } private: typedef std::vector Earray; Earray Ensembles_; ///< Array of input ensembles @@ -23,14 +24,17 @@ class EnsembleNavigator { TrajFrameIndex IDX_; ///< Used to convert global index to individual index EnsembleIn* currentEns_; ///< Currently open ensemble Topology* FirstParm_; ///< Topology associated with first ensemble + bool ensembleHasChanged_; ///< Set to true if the last call to GetEnsemble() was the start of another ensemble. }; /// Get ensemble set specified by global set index int EnsembleNavigator::GetEnsemble(int set, FrameArray& FrameEnsemble, FramePtrArray& SortedFrames) { + ensembleHasChanged_ = false; int internalIdx = IDX_.FindIndex( set ); // If desired ensemble is different than current, open desired ensemble. if (IDX_.TrajHasChanged()) { + ensembleHasChanged_ = true; if (currentEns_ != 0) currentEns_->EndEnsemble(); currentEns_ = Ensembles_[ IDX_.CurrentTrajNum() ]; // NOTE: Need to check for reallocation? TODO better error check From 7556795308a1f9304cdbef4bee35973f41a78f0f Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 15:10:05 -0400 Subject: [PATCH 29/37] If the input ensemble changes see if the outgoing frame needs to be modified --- src/CpptrajState.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/CpptrajState.cpp b/src/CpptrajState.cpp index ab14b39d72..77bf9a1a6d 100644 --- a/src/CpptrajState.cpp +++ b/src/CpptrajState.cpp @@ -935,6 +935,12 @@ int CpptrajState::RunParaEnsemble() { break; } if (!NAV.CurrentEns()->BadEnsemble()) { + // Has the ensemble changed? + if (set != my_start && NAV.EnsembleHasChanged()) { + rprintf("DEBUG: Ensemble has changed at set %i\n", set); + // Check output trajectories against current input ensemble + ensembleOut_.CheckEnsembleOutCoordInfo(NAV.CurrentEns()->EnsembleCoordInfo(), FrameEnsemble); + } // Since Frame can be modified by actions, save original and use currentFrame ActionFrame currentFrame( SortedFrames[0], set ); if ( currentFrame.Frm().CheckCoordsInvalid() ) From 02c35fad18647fc94036b6a199c2413f98d87746 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 15:37:30 -0400 Subject: [PATCH 30/37] Code to gather ensemble values in parallel --- src/EnsembleIn.cpp | 21 +++++++++++++++++++++ src/EnsembleIn.h | 2 ++ src/EnsembleIn_Multi.cpp | 16 ++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/src/EnsembleIn.cpp b/src/EnsembleIn.cpp index 08d2d94bbb..d27ac2eab7 100644 --- a/src/EnsembleIn.cpp +++ b/src/EnsembleIn.cpp @@ -36,6 +36,27 @@ int EnsembleIn::GatherIndices(int* iAddress, std::vector& allIndice return 0; } +int EnsembleIn::GatherValues(Frame const& frameIn, ReplicaDimArray const& replicaDims, + std::vector& allValues, + Parallel::Comm const& commIn) +{ + int Ndims = replicaDims.Ndims(); + std::vector all_values(allValues.size() * Ndims, 0); + std::vector dtemp(Ndims); + for (int idim = 0; idim != replicaDims.Ndims(); idim++) + dtemp[idim] = frameIn.RemdValue(idim, replicaDims); + if (commIn.AllGather( &dtemp[0], Ndims, MPI_DOUBLE, &all_values[0])) { + rprinterr("Error: Gathering replica values.\n"); + return 1; + } + std::vector::const_iterator idx_it = all_values.begin(); + for (std::vector::iterator it = allValues.begin(); + it != allValues.end(); + ++it, idx_it += Ndims) + it->assign(idx_it, idx_it + Ndims); + return 0; +} + #ifdef TIMER double EnsembleIn::total_mpi_allgather_ = 0.0; double EnsembleIn::total_mpi_sendrecv_ = 0.0; diff --git a/src/EnsembleIn.h b/src/EnsembleIn.h index 5ed5c4ac9e..11d8b99d4d 100644 --- a/src/EnsembleIn.h +++ b/src/EnsembleIn.h @@ -74,6 +74,8 @@ class EnsembleIn { Parallel::Comm const& EnsembleComm() const { return Parallel::EnsembleComm(); } static int GatherTemperatures(double*, std::vector&, Parallel::Comm const&); static int GatherIndices(int*, std::vector&, int, Parallel::Comm const&); + static int GatherValues(Frame const&, ReplicaDimArray const&, + std::vector&, Parallel::Comm const&); # ifdef TIMER Timer mpi_allgather_timer_; Timer mpi_sendrecv_timer_; diff --git a/src/EnsembleIn_Multi.cpp b/src/EnsembleIn_Multi.cpp index 0e355dfabf..b2af096e7f 100644 --- a/src/EnsembleIn_Multi.cpp +++ b/src/EnsembleIn_Multi.cpp @@ -191,6 +191,10 @@ int EnsembleIn_Multi::SetupEnsembleRead(FileName const& tnameIn, ArgList& argIn, if (GatherIndices(frameIn.iAddress(), allIndices, cInfo_.ReplicaDimensions().Ndims(), EnsembleComm())) err = 4; + if (cInfo_.UseRemdValues()) { + if (GatherValues(frameIn, cInfo_.ReplicaDimensions(), allValues, EnsembleComm())) + err = 5; + } } } } @@ -213,6 +217,18 @@ int EnsembleIn_Multi::SetupEnsembleRead(FileName const& tnameIn, ArgList& argIn, Parallel::TrajComm().MasterBcast( &((*it)[0]), it->size(), MPI_INT ); } } + if (cInfo_.UseRemdValues()) { + for (std::vector::iterator it = allValues.begin(); + it != allValues.end(); ++it) + { + if (Parallel::TrajComm().Master()) + Parallel::TrajComm().MasterBcast( &((*it)[0]), it->size(), MPI_DOUBLE ); + else { + it->resize( cInfo_.ReplicaDimensions().Ndims() ); + Parallel::TrajComm().MasterBcast( &((*it)[0]), it->size(), MPI_DOUBLE ); + } + } + } } } # else /* MPI */ From 784e9fd9fd0aa6a0c3abaa48bd8739082a86cf2a Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 15:40:43 -0400 Subject: [PATCH 31/37] Hide debug info --- src/CpptrajState.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/CpptrajState.cpp b/src/CpptrajState.cpp index 77bf9a1a6d..aba2c0565d 100644 --- a/src/CpptrajState.cpp +++ b/src/CpptrajState.cpp @@ -937,7 +937,8 @@ int CpptrajState::RunParaEnsemble() { if (!NAV.CurrentEns()->BadEnsemble()) { // Has the ensemble changed? if (set != my_start && NAV.EnsembleHasChanged()) { - rprintf("DEBUG: Ensemble has changed at set %i\n", set); + if (debug_ > 0) + rprintf("DEBUG: Ensemble has changed at set %i\n", set); // Check output trajectories against current input ensemble ensembleOut_.CheckEnsembleOutCoordInfo(NAV.CurrentEns()->EnsembleCoordInfo(), FrameEnsemble); } From 066c404e430670a427abe7d694e02f88802a673b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Tue, 14 Jul 2026 16:12:44 -0400 Subject: [PATCH 32/37] Version 7.10.0. Minor version bump for fixing handling remd ensembles with changing vel/frc info. Also added 3 math funcitons. --- src/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Version.h b/src/Version.h index b58fa75374..de05d7979a 100644 --- a/src/Version.h +++ b/src/Version.h @@ -12,7 +12,7 @@ * Whenever a number that precedes is incremented, all subsequent * numbers should be reset to 0. */ -#define CPPTRAJ_INTERNAL_VERSION "V7.9.1" +#define CPPTRAJ_INTERNAL_VERSION "V7.10.0" /// PYTRAJ relies on this #define CPPTRAJ_VERSION_STRING CPPTRAJ_INTERNAL_VERSION #endif From 781e32adb106f48a2c3b443aa2b38340e19f8a0b Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 15 Jul 2026 15:08:52 -0400 Subject: [PATCH 33/37] Add bytemp to ensemble help --- src/Exec_Traj.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Exec_Traj.cpp b/src/Exec_Traj.cpp index 55cc32df02..1b5beeec07 100644 --- a/src/Exec_Traj.cpp +++ b/src/Exec_Traj.cpp @@ -37,12 +37,17 @@ void Exec_Ensemble::Help() const { mprintf("\t [trajnames ,,...,]\n" "\t [{nosort |\n" "\t bycrdidx |\n" + "\t bytemp |\n" "\t remlog [nstlim ntwx ]}]\n" " Load an ensemble of trajectories starting with that will be\n" " processed together as an ensemble.\n" " The default behavior is to sort the ensemble by replica. If 'nosort'\n" " is specified the incoming ensemble will not be sorted; this is useful\n" " if the ensemble is already sorted or the trajectories are independent.\n" + " If 'bycrdidx' is specified the ensemble will be sorted by coordinate index\n" + " if it is present in the incoming trajectories.\n" + " If 'bytemp' is specified the ensemble will be sorted by temperature values\n" + " instead of replica indices.\n" " If 'remlog' is specified the ensemble will be sorted by coordinate index;\n" " 'nstlim' specifies the number of steps between exchanges and 'ntwx'\n" " specifies the number of steps between trajectory writes.\n" From 5e849ddca5f88439b08f7fbeb9f754355e3da3b1 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Wed, 15 Jul 2026 15:11:18 -0400 Subject: [PATCH 34/37] Add bytemp option to ensemble help --- doc/CpptrajManual.pdf | Bin 1127940 -> 1128299 bytes doc/DocumentChecksums.txt | 2 +- doc/cpptraj.lyx | 8 ++++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/CpptrajManual.pdf b/doc/CpptrajManual.pdf index 77c319d9b3de65db21459a828858b5bcc9cc4632..396e8254096270ea8d2940f32154c84464910940 100644 GIT binary patch delta 33718 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 z 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 {[] [ | last] [offset]} | lastframe bycrdidx | \end_layout +\begin_layout LyX-Code + bytemp | +\end_layout + \begin_layout LyX-Code remlog [nstlim ntwx ]}] \begin_inset Separator latexpar @@ -20628,6 +20632,10 @@ last] Frame to stop reading ensemble at; This is preferred over sorting via 'remlog'. \end_layout +\begin_layout Description +[bytemp] If specified the ensemble will be sorted by temperature values instead of replica indices. +\end_layout + \begin_layout Description [remlog \begin_inset space ~ From 9b4feb221294fffc0ce1c578793091b7cc9c2baf Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 16 Jul 2026 10:34:09 -0400 Subject: [PATCH 35/37] Need to use NcTest to compare NetCDF files, not DoTest... --- test/Test_VelFrc/RunTest.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Test_VelFrc/RunTest.sh b/test/Test_VelFrc/RunTest.sh index 6f2478169d..a9c83e8c3e 100755 --- a/test/Test_VelFrc/RunTest.sh +++ b/test/Test_VelFrc/RunTest.sh @@ -130,8 +130,8 @@ ensemble TRAJ/rem.crd.001 trajout ensemble.nc EOF RunCpptraj "$UNITNAME" - DoTest ensemble.nc.0.save ensemble.nc.0 - DoTest ensemble.nc.1.save ensemble.nc.1 + NcTest ensemble.nc.0.save ensemble.nc.0 + NcTest ensemble.nc.1.save ensemble.nc.1 fi EndTest From 9c71fc54620e6a21a9b58e4e77925cde73de4fa4 Mon Sep 17 00:00:00 2001 From: "Daniel R. Roe" Date: Thu, 16 Jul 2026 11:34:50 -0400 Subject: [PATCH 36/37] More protections in parallel --- test/Test_VelFrc/RunTest.sh | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/test/Test_VelFrc/RunTest.sh b/test/Test_VelFrc/RunTest.sh index a9c83e8c3e..f80dc4623f 100755 --- a/test/Test_VelFrc/RunTest.sh +++ b/test/Test_VelFrc/RunTest.sh @@ -11,9 +11,18 @@ Requires netcdf INPUT="-i cpptraj.in" +# ------------- +# These tests all depend on CrdFrcVel.nc being generated UNITNAME='Short velocity/force tests' CheckFor maxthreads 2 -if [ $? -eq 0 ] ; then +skip_run=$? +if [ $skip_run -eq 0 ] ; then + if [ ! -z "$DO_PARALLEL" -a $N_THREADS -gt 1 ] ; then + CheckFor pnetcdf + skip_run=$? + fi +fi +if [ $skip_run -eq 0 ] ; then cat > cpptraj.in < cpptraj.in < cpptraj.in < Date: Thu, 16 Jul 2026 11:45:24 -0400 Subject: [PATCH 37/37] In serial N_THREADS is not set --- test/Test_VelFrc/RunTest.sh | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/test/Test_VelFrc/RunTest.sh b/test/Test_VelFrc/RunTest.sh index f80dc4623f..890c070209 100755 --- a/test/Test_VelFrc/RunTest.sh +++ b/test/Test_VelFrc/RunTest.sh @@ -17,9 +17,11 @@ UNITNAME='Short velocity/force tests' CheckFor maxthreads 2 skip_run=$? if [ $skip_run -eq 0 ] ; then - if [ ! -z "$DO_PARALLEL" -a $N_THREADS -gt 1 ] ; then - CheckFor pnetcdf - skip_run=$? + if [ ! -z "$DO_PARALLEL" ] ; then + if [ $N_THREADS -gt 1 ] ; then + CheckFor pnetcdf + skip_run=$? + fi fi fi if [ $skip_run -eq 0 ] ; then @@ -108,9 +110,11 @@ UNITNAME='Mixed velocity/force info tests' CheckFor maxthreads 3 skip_run=$? if [ $skip_run -eq 0 ] ; then - if [ ! -z "$DO_PARALLEL" -a $N_THREADS -gt 1 ] ; then - CheckFor pnetcdf - skip_run=$? + if [ ! -z "$DO_PARALLEL" ] ; then + if [ $N_THREADS -gt 1 ] ; then + CheckFor pnetcdf + skip_run=$? + fi fi fi if [ $skip_run -eq 0 ] ; then @@ -141,9 +145,11 @@ UNITNAME='Ensemble Tests with mixed velocity/force info' CheckFor maxthreads 6 nthreads 2 skip_run=$? if [ $skip_run -eq 0 ] ; then - if [ ! -z "$DO_PARALLEL" -a $N_THREADS -gt 2 ] ; then - CheckFor pnetcdf - skip_run=$? + if [ ! -z "$DO_PARALLEL" ] ; then + if [ "$N_THREADS" -gt 2 ] ; then + CheckFor pnetcdf + skip_run=$? + fi fi fi if [ $skip_run -eq 0 ] ; then