diff --git a/regtest/rt41/Makefile b/regtest/rt41/Makefile new file mode 120000 index 0000000000000000000000000000000000000000..a19fbb5e94242934cf3be817c2bd68f92897f19d --- /dev/null +++ b/regtest/rt41/Makefile @@ -0,0 +1 @@ +../scripts/test.make \ No newline at end of file diff --git a/regtest/rt41/colvar.reference b/regtest/rt41/colvar.reference new file mode 100644 index 0000000000000000000000000000000000000000..14ce541c160f8075eba6f4d89353692c0f9a1879 --- /dev/null +++ b/regtest/rt41/colvar.reference @@ -0,0 +1,29 @@ +#! FIELDS time r1.X r2.X r2.Y r2.zzz + 0.000000 1.9434 1.9434 2.9434 0.0001 + 5.000000 1.3261 1.3261 2.3261 0.0001 + 10.000000 3.1900 3.1900 4.1900 0.0001 + 15.000000 5.5554 5.5554 6.5554 0.0001 + 20.000000 6.8811 6.8811 7.8811 0.0000 + 25.000000 8.1518 8.1518 9.1518 0.0000 + 30.000000 10.1206 10.1206 11.1206 0.0000 + 35.000000 10.9254 10.9254 11.9254 0.0001 + 40.000000 13.4767 13.4767 14.4767 0.0001 + 45.000000 14.5201 14.5201 15.5201 0.0001 + 50.000000 15.0187 15.0187 16.0187 0.0000 + 55.000000 15.7926 15.7926 16.7926 0.0001 + 60.000000 19.5301 19.5301 20.5301 0.0000 + 65.000000 20.1734 20.1734 21.1734 0.0001 + 70.000000 22.1538 22.1538 23.1538 0.0001 + 75.000000 23.5398 23.5398 24.5398 0.0001 + 80.000000 24.3638 24.3638 25.3638 0.0001 + 85.000000 26.9164 26.9164 27.9164 0.0000 + 90.000000 28.4074 28.4074 29.4074 0.0001 + 95.000000 29.6254 29.6254 30.6254 0.0001 + 100.000000 31.1434 31.1434 32.1434 0.0001 + 105.000000 33.3878 33.3878 34.3878 0.0000 + 110.000000 34.5353 34.5353 35.5353 0.0001 + 115.000000 36.8600 36.8600 37.8600 0.0001 + 120.000000 37.7380 37.7380 38.7380 0.0001 + 125.000000 38.9521 38.9521 39.9521 0.0000 + 130.000000 41.9895 41.9895 42.9895 0.0001 + 135.000000 41.9978 41.9978 42.9978 0.0001 diff --git a/regtest/rt41/config b/regtest/rt41/config new file mode 100644 index 0000000000000000000000000000000000000000..2c148d2022107d8a8fc489c0fb6bb16dc38cf45f --- /dev/null +++ b/regtest/rt41/config @@ -0,0 +1,2 @@ +type=driver +arg="--plumed plumed.dat --trajectory-stride 50 --timestep 0.005 --noatoms" diff --git a/regtest/rt41/input_colvar b/regtest/rt41/input_colvar new file mode 100644 index 0000000000000000000000000000000000000000..5ef6c8256607307d3ad74f6c909127bb4e48fd88 --- /dev/null +++ b/regtest/rt41/input_colvar @@ -0,0 +1,547 @@ +#! FIELDS time p2.X p2.Y p2.zzz p3.X p3.Y p3.zzz + 0.000000 1.9434 2.9434 0.0001 1.9434 2.9434 0.0001 + 0.250000 1.0090 2.0090 0.0001 1.0090 2.0090 0.0001 + 0.500000 1.0579 2.0579 0.0001 1.0579 2.0579 0.0001 + 0.750000 1.0331 2.0331 0.0000 1.0331 2.0331 0.0000 + 1.000000 1.3768 2.3768 0.0001 1.3768 2.3768 0.0001 + 1.250000 1.4149 2.4149 0.0000 1.4149 2.4149 0.0000 + 1.500000 1.0652 2.0652 0.0001 1.0652 2.0652 0.0001 + 1.750000 1.0157 2.0157 0.0000 1.0157 2.0157 0.0000 + 2.000000 1.1453 2.1453 0.0001 1.1453 2.1453 0.0001 + 2.250000 1.3270 2.3270 0.0000 1.3270 2.3270 0.0000 + 2.500000 1.0513 2.0513 0.0000 1.0513 2.0513 0.0000 + 2.750000 1.3269 2.3269 0.0000 1.3269 2.3269 0.0000 + 3.000000 1.0317 2.0317 0.0001 1.0317 2.0317 0.0001 + 3.250000 3.1167 4.1167 0.0001 3.1167 4.1167 0.0001 + 3.500000 1.2525 2.2525 0.0001 1.2525 2.2525 0.0001 + 3.750000 1.2615 2.2615 0.0001 1.2615 2.2615 0.0001 + 4.000000 1.4116 2.4116 0.0001 1.4116 2.4116 0.0001 + 4.250000 2.2825 3.2825 0.0001 2.2825 3.2825 0.0001 + 4.500000 2.0832 3.0832 0.0000 2.0832 3.0832 0.0000 + 4.750000 1.5973 2.5973 0.0001 1.5973 2.5973 0.0001 + 5.000000 1.3261 2.3261 0.0001 1.3261 2.3261 0.0001 + 5.250000 2.4515 3.4515 0.0001 2.4515 3.4515 0.0001 + 5.500000 2.5412 3.5412 0.0001 2.5412 3.5412 0.0001 + 5.750000 1.8538 2.8538 0.0000 1.8538 2.8538 0.0000 + 6.000000 1.3933 2.3933 0.0001 1.3933 2.3933 0.0001 + 6.250000 1.7948 2.7948 0.0000 1.7948 2.7948 0.0000 + 6.500000 3.8916 4.8916 0.0001 3.8916 4.8916 0.0001 + 6.750000 2.4106 3.4106 0.0001 2.4106 3.4106 0.0001 + 7.000000 2.9130 3.9130 0.0000 2.9130 3.9130 0.0000 + 7.250000 2.7856 3.7856 0.0000 2.7856 3.7856 0.0000 + 7.500000 3.0248 4.0248 0.0001 3.0248 4.0248 0.0001 + 7.750000 3.0256 4.0256 0.0001 3.0256 4.0256 0.0001 + 8.000000 2.8465 3.8465 0.0001 2.8465 3.8465 0.0001 + 8.250000 1.7385 2.7385 0.0001 1.7385 2.7385 0.0001 + 8.500000 3.2267 4.2267 0.0001 3.2267 4.2267 0.0001 + 8.750000 3.4119 4.4119 0.0000 3.4119 4.4119 0.0000 + 9.000000 2.6281 3.6281 0.0000 2.6281 3.6281 0.0000 + 9.250000 2.4505 3.4505 0.0001 2.4505 3.4505 0.0001 + 9.500000 2.9935 3.9935 0.0001 2.9935 3.9935 0.0001 + 9.750000 4.2826 5.2826 0.0001 4.2826 5.2826 0.0001 + 10.000000 3.1900 4.1900 0.0001 3.1900 4.1900 0.0001 + 10.250000 3.5456 4.5456 0.0000 3.5456 4.5456 0.0000 + 10.500000 3.5451 4.5451 0.0000 3.5451 4.5451 0.0000 + 10.750000 4.1587 5.1587 0.0001 4.1587 5.1587 0.0001 + 11.000000 3.9178 4.9178 0.0000 3.9178 4.9178 0.0000 + 11.250000 3.8826 4.8826 0.0001 3.8826 4.8826 0.0001 + 11.500000 3.2615 4.2615 0.0001 3.2615 4.2615 0.0001 + 11.750000 4.2869 5.2869 0.0001 4.2869 5.2869 0.0001 + 12.000000 4.5757 5.5757 0.0000 4.5757 5.5757 0.0000 + 12.250000 3.2142 4.2142 0.0000 3.2142 4.2142 0.0000 + 12.500000 3.9086 4.9086 0.0001 3.9086 4.9086 0.0001 + 12.750000 3.7618 4.7618 0.0001 3.7618 4.7618 0.0001 + 13.000000 4.8157 5.8157 0.0001 4.8157 5.8157 0.0001 + 13.250000 3.9568 4.9568 0.0001 3.9568 4.9568 0.0001 + 13.500000 4.8524 5.8524 0.0000 4.8524 5.8524 0.0000 + 13.750000 4.4105 5.4105 0.0000 4.4105 5.4105 0.0000 + 14.000000 4.9450 5.9450 0.0001 4.9450 5.9450 0.0001 + 14.250000 4.7719 5.7719 0.0001 4.7719 5.7719 0.0001 + 14.500000 4.5365 5.5365 0.0001 4.5365 5.5365 0.0001 + 14.750000 4.0972 5.0972 0.0001 4.0972 5.0972 0.0001 + 15.000000 5.5554 6.5554 0.0001 5.5554 6.5554 0.0001 + 15.250000 5.1352 6.1352 0.0001 5.1352 6.1352 0.0001 + 15.500000 4.2067 5.2067 0.0000 4.2067 5.2067 0.0000 + 15.750000 4.5249 5.5249 0.0001 4.5249 5.5249 0.0001 + 16.000000 4.7725 5.7725 0.0001 4.7725 5.7725 0.0001 + 16.250000 5.9837 6.9837 0.0001 5.9837 6.9837 0.0001 + 16.500000 4.7753 5.7753 0.0000 4.7753 5.7753 0.0000 + 16.750000 6.0804 7.0804 0.0001 6.0804 7.0804 0.0001 + 17.000000 5.7243 6.7243 0.0000 5.7243 6.7243 0.0000 + 17.250000 6.0755 7.0755 0.0001 6.0755 7.0755 0.0001 + 17.500000 5.7907 6.7907 0.0000 5.7907 6.7907 0.0000 + 17.750000 5.5556 6.5556 0.0001 5.5556 6.5556 0.0001 + 18.000000 5.4734 6.4734 0.0001 5.4734 6.4734 0.0001 + 18.250000 6.8349 7.8349 0.0001 6.8349 7.8349 0.0001 + 18.500000 6.1115 7.1115 0.0001 6.1115 7.1115 0.0001 + 18.750000 5.4763 6.4763 0.0001 5.4763 6.4763 0.0001 + 19.000000 6.0577 7.0577 0.0000 6.0577 7.0577 0.0000 + 19.250000 5.8285 6.8285 0.0001 5.8285 6.8285 0.0001 + 19.500000 5.8165 6.8165 0.0001 5.8165 6.8165 0.0001 + 19.750000 5.4695 6.4695 0.0000 5.4695 6.4695 0.0000 + 20.000000 6.8811 7.8811 0.0000 6.8811 7.8811 0.0000 + 20.250000 7.1282 8.1282 0.0000 7.1282 8.1282 0.0000 + 20.500000 7.0992 8.0992 0.0001 7.0992 8.0992 0.0001 + 20.750000 6.0105 7.0105 0.0001 6.0105 7.0105 0.0001 + 21.000000 6.8671 7.8671 0.0000 6.8671 7.8671 0.0000 + 21.250000 6.2864 7.2864 0.0001 6.2864 7.2864 0.0001 + 21.500000 7.2471 8.2471 0.0000 7.2471 8.2471 0.0000 + 21.750000 7.2481 8.2481 0.0000 7.2481 8.2481 0.0000 + 22.000000 5.9782 6.9782 0.0001 5.9782 6.9782 0.0001 + 22.250000 6.8523 7.8523 0.0001 6.8523 7.8523 0.0001 + 22.500000 6.8326 7.8326 0.0001 6.8326 7.8326 0.0001 + 22.750000 6.5175 7.5175 0.0000 6.5175 7.5175 0.0000 + 23.000000 6.4000 7.4000 0.0000 6.4000 7.4000 0.0000 + 23.250000 8.0028 9.0028 0.0000 8.0028 9.0028 0.0000 + 23.500000 8.1695 9.1695 0.0000 8.1695 9.1695 0.0000 + 23.750000 7.9851 8.9851 0.0001 7.9851 8.9851 0.0001 + 24.000000 6.8908 7.8908 0.0001 6.8908 7.8908 0.0001 + 24.250000 7.4686 8.4686 0.0001 7.4686 8.4686 0.0001 + 24.500000 7.0070 8.0070 0.0001 7.0070 8.0070 0.0001 + 24.750000 8.5092 9.5092 0.0001 8.5092 9.5092 0.0001 + 25.000000 8.1518 9.1518 0.0000 8.1518 9.1518 0.0000 + 25.250000 7.3926 8.3926 0.0001 7.3926 8.3926 0.0001 + 25.500000 7.9078 8.9078 0.0001 7.9078 8.9078 0.0001 + 25.750000 7.3901 8.3901 0.0001 7.3901 8.3901 0.0001 + 26.000000 7.5108 8.5108 0.0000 7.5108 8.5108 0.0000 + 26.250000 7.3993 8.3993 0.0000 7.3993 8.3993 0.0000 + 26.500000 9.0054 10.0054 0.0000 9.0054 10.0054 0.0000 + 26.750000 9.0212 10.0212 0.0001 9.0212 10.0212 0.0001 + 27.000000 9.2067 10.2067 0.0000 9.2067 10.2067 0.0000 + 27.250000 7.3974 8.3974 0.0001 7.3974 8.3974 0.0001 + 27.500000 8.4983 9.4983 0.0000 8.4983 9.4983 0.0000 + 27.750000 8.4074 9.4074 0.0001 8.4074 9.4074 0.0001 + 28.000000 9.4812 10.4812 0.0000 9.4812 10.4812 0.0000 + 28.250000 8.9480 9.9480 0.0000 8.9480 9.9480 0.0000 + 28.500000 8.8156 9.8156 0.0001 8.8156 9.8156 0.0001 + 28.750000 9.3383 10.3383 0.0001 9.3383 10.3383 0.0001 + 29.000000 8.6766 9.6766 0.0001 8.6766 9.6766 0.0001 + 29.250000 8.8167 9.8167 0.0001 8.8167 9.8167 0.0001 + 29.500000 8.8586 9.8586 0.0000 8.8586 9.8586 0.0000 + 29.750000 9.7681 10.7681 0.0000 9.7681 10.7681 0.0000 + 30.000000 10.1206 11.1206 0.0000 10.1206 11.1206 0.0000 + 30.250000 10.2048 11.2048 0.0000 10.2048 11.2048 0.0000 + 30.500000 8.8600 9.8600 0.0000 8.8600 9.8600 0.0000 + 30.750000 9.2746 10.2746 0.0000 9.2746 10.2746 0.0000 + 31.000000 9.5056 10.5056 0.0001 9.5056 10.5056 0.0001 + 31.250000 10.3959 11.3959 0.0000 10.3959 11.3959 0.0000 + 31.500000 10.0084 11.0084 0.0001 10.0084 11.0084 0.0001 + 31.750000 9.8521 10.8521 0.0000 9.8521 10.8521 0.0000 + 32.000000 10.3120 11.3120 0.0001 10.3120 11.3120 0.0001 + 32.250000 9.5696 10.5696 0.0001 9.5696 10.5696 0.0001 + 32.500000 10.2229 11.2229 0.0001 10.2229 11.2229 0.0001 + 32.750000 9.2246 10.2246 0.0000 9.2246 10.2246 0.0000 + 33.000000 11.0408 12.0408 0.0000 11.0408 12.0408 0.0000 + 33.250000 10.9355 11.9355 0.0001 10.9355 11.9355 0.0001 + 33.500000 11.0212 12.0212 0.0001 11.0212 12.0212 0.0001 + 33.750000 9.9950 10.9950 0.0000 9.9950 10.9950 0.0000 + 34.000000 10.8371 11.8371 0.0000 10.8371 11.8371 0.0000 + 34.250000 10.7630 11.7630 0.0000 10.7630 11.7630 0.0000 + 34.500000 11.3749 12.3749 0.0000 11.3749 12.3749 0.0000 + 34.750000 10.8268 11.8268 0.0000 10.8268 11.8268 0.0000 + 35.000000 10.9254 11.9254 0.0001 10.9254 11.9254 0.0001 + 35.250000 11.4695 12.4695 0.0001 11.4695 12.4695 0.0001 + 35.500000 10.3754 11.3754 0.0001 10.3754 11.3754 0.0001 + 35.750000 11.2141 12.2141 0.0001 11.2141 12.2141 0.0001 + 36.000000 10.9006 11.9006 0.0001 10.9006 11.9006 0.0001 + 36.250000 12.3187 13.3187 0.0000 12.3187 13.3187 0.0000 + 36.500000 12.0581 13.0581 0.0001 12.0581 13.0581 0.0001 + 36.750000 12.1095 13.1095 0.0001 12.1095 13.1095 0.0001 + 37.000000 10.9742 11.9742 0.0000 10.9742 11.9742 0.0000 + 37.250000 11.5190 12.5190 0.0000 11.5190 12.5190 0.0000 + 37.500000 11.6730 12.6730 0.0001 11.6730 12.6730 0.0001 + 37.750000 12.7361 13.7361 0.0001 12.7361 13.7361 0.0001 + 38.000000 12.1409 13.1409 0.0001 12.1409 13.1409 0.0001 + 38.250000 12.3599 13.3599 0.0000 12.3599 13.3599 0.0000 + 38.500000 12.3989 13.3989 0.0001 12.3989 13.3989 0.0001 + 38.750000 11.1104 12.1104 0.0001 11.1104 12.1104 0.0001 + 39.000000 11.8881 12.8881 0.0001 11.8881 12.8881 0.0001 + 39.250000 11.8041 12.8041 0.0000 11.8041 12.8041 0.0000 + 39.500000 13.5494 14.5494 0.0000 13.5494 14.5494 0.0000 + 39.750000 13.2306 14.2306 0.0001 13.2306 14.2306 0.0001 + 40.000000 13.4767 14.4767 0.0001 13.4767 14.4767 0.0001 + 40.250000 12.1017 13.1017 0.0000 12.1017 13.1017 0.0000 + 40.500000 12.7382 13.7382 0.0000 12.7382 13.7382 0.0000 + 40.750000 13.0408 14.0408 0.0001 13.0408 14.0408 0.0001 + 41.000000 13.6144 14.6144 0.0001 13.6144 14.6144 0.0001 + 41.250000 12.9117 13.9117 0.0001 12.9117 13.9117 0.0001 + 41.500000 12.9911 13.9911 0.0000 12.9911 13.9911 0.0000 + 41.750000 13.9208 14.9208 0.0001 13.9208 14.9208 0.0001 + 42.000000 12.6076 13.6076 0.0001 12.6076 13.6076 0.0001 + 42.250000 12.7982 13.7982 0.0001 12.7982 13.7982 0.0001 + 42.500000 12.8370 13.8370 0.0000 12.8370 13.8370 0.0000 + 42.750000 14.3876 15.3876 0.0000 14.3876 15.3876 0.0000 + 43.000000 14.4720 15.4720 0.0001 14.4720 15.4720 0.0001 + 43.250000 14.6719 15.6719 0.0001 14.6719 15.6719 0.0001 + 43.500000 12.8227 13.8227 0.0000 12.8227 13.8227 0.0000 + 43.750000 13.3502 14.3502 0.0000 13.3502 14.3502 0.0000 + 44.000000 13.8173 14.8173 0.0001 13.8173 14.8173 0.0001 + 44.250000 14.8745 15.8745 0.0000 14.8745 15.8745 0.0000 + 44.500000 13.9710 14.9710 0.0000 13.9710 14.9710 0.0000 + 44.750000 14.0178 15.0178 0.0001 14.0178 15.0178 0.0001 + 45.000000 14.5201 15.5201 0.0001 14.5201 15.5201 0.0001 + 45.250000 13.1381 14.1381 0.0001 13.1381 14.1381 0.0001 + 45.500000 14.5934 15.5934 0.0001 14.5934 15.5934 0.0001 + 45.750000 13.4843 14.4843 0.0001 13.4843 14.4843 0.0001 + 46.000000 15.4321 16.4321 0.0000 15.4321 16.4321 0.0000 + 46.250000 15.4231 16.4231 0.0000 15.4231 16.4231 0.0000 + 46.500000 15.6806 16.6806 0.0001 15.6806 16.6806 0.0001 + 46.750000 13.9386 14.9386 0.0000 13.9386 14.9386 0.0000 + 47.000000 14.5064 15.5064 0.0000 14.5064 15.5064 0.0000 + 47.250000 14.9508 15.9508 0.0001 14.9508 15.9508 0.0001 + 47.500000 15.5179 16.5179 0.0000 15.5179 16.5179 0.0000 + 47.750000 15.1034 16.1034 0.0001 15.1034 16.1034 0.0001 + 48.000000 14.9114 15.9114 0.0001 14.9114 15.9114 0.0001 + 48.250000 15.5412 16.5412 0.0002 15.5412 16.5412 0.0002 + 48.500000 14.3423 15.3423 0.0001 14.3423 15.3423 0.0001 + 48.750000 15.2094 16.2094 0.0001 15.2094 16.2094 0.0001 + 49.000000 15.1168 16.1168 0.0001 15.1168 16.1168 0.0001 + 49.250000 15.9575 16.9575 0.0000 15.9575 16.9575 0.0000 + 49.500000 16.2539 17.2539 0.0001 16.2539 17.2539 0.0001 + 49.750000 16.3489 17.3489 0.0001 16.3489 17.3489 0.0001 + 50.000000 15.0187 16.0187 0.0000 15.0187 16.0187 0.0000 + 50.250000 16.3272 17.3272 0.0001 16.3272 17.3272 0.0001 + 50.500000 16.0528 17.0528 0.0001 16.0528 17.0528 0.0001 + 50.750000 16.4196 17.4196 0.0001 16.4196 17.4196 0.0001 + 51.000000 16.8259 17.8259 0.0001 16.8259 17.8259 0.0001 + 51.250000 15.5587 16.5587 0.0000 15.5587 16.5587 0.0000 + 51.500000 16.3950 17.3950 0.0001 16.3950 17.3950 0.0001 + 51.750000 15.2996 16.2996 0.0001 15.2996 16.2996 0.0001 + 52.000000 16.0925 17.0925 0.0001 16.0925 17.0925 0.0001 + 52.250000 16.4335 17.4335 0.0001 16.4335 17.4335 0.0001 + 52.500000 17.1829 18.1829 0.0000 17.1829 18.1829 0.0000 + 52.750000 17.5384 18.5384 0.0001 17.5384 18.5384 0.0001 + 53.000000 17.2631 18.2631 0.0001 17.2631 18.2631 0.0001 + 53.250000 16.2614 17.2614 0.0001 16.2614 17.2614 0.0001 + 53.500000 17.0032 18.0032 0.0000 17.0032 18.0032 0.0000 + 53.750000 17.5027 18.5027 0.0001 17.5027 18.5027 0.0001 + 54.000000 17.0522 18.0522 0.0001 17.0522 18.0522 0.0001 + 54.250000 17.3532 18.3532 0.0001 17.3532 18.3532 0.0001 + 54.500000 16.6059 17.6059 0.0000 16.6059 17.6059 0.0000 + 54.750000 16.9281 17.9281 0.0001 16.9281 17.9281 0.0001 + 55.000000 15.7926 16.7926 0.0001 15.7926 16.7926 0.0001 + 55.250000 17.2110 18.2110 0.0000 17.2110 18.2110 0.0000 + 55.500000 17.5846 18.5846 0.0001 17.5846 18.5846 0.0001 + 55.750000 17.8666 18.8666 0.0001 17.8666 18.8666 0.0001 + 56.000000 18.2468 19.2468 0.0001 18.2468 19.2468 0.0001 + 56.250000 18.1218 19.1218 0.0001 18.1218 19.1218 0.0001 + 56.500000 16.9705 17.9705 0.0001 16.9705 17.9705 0.0001 + 56.750000 17.7506 18.7506 0.0000 17.7506 18.7506 0.0000 + 57.000000 18.1285 19.1285 0.0001 18.1285 19.1285 0.0001 + 57.250000 18.0247 19.0247 0.0001 18.0247 19.0247 0.0001 + 57.500000 18.0924 19.0924 0.0001 18.0924 19.0924 0.0001 + 57.750000 17.9847 18.9847 0.0001 17.9847 18.9847 0.0001 + 58.000000 17.8135 18.8135 0.0001 17.8135 18.8135 0.0001 + 58.250000 17.0656 18.0656 0.0001 17.0656 18.0656 0.0001 + 58.500000 17.6905 18.6905 0.0001 17.6905 18.6905 0.0001 + 58.750000 18.5188 19.5188 0.0001 18.5188 19.5188 0.0001 + 59.000000 18.9824 19.9824 0.0000 18.9824 19.9824 0.0000 + 59.250000 19.1426 20.1426 0.0000 19.1426 20.1426 0.0000 + 59.500000 19.0595 20.0595 0.0001 19.0595 20.0595 0.0001 + 59.750000 18.7700 19.7700 0.0001 18.7700 19.7700 0.0001 + 60.000000 19.5301 20.5301 0.0000 19.5301 20.5301 0.0000 + 60.250000 19.3457 20.3457 0.0001 19.3457 20.3457 0.0001 + 60.500000 19.0527 20.0527 0.0000 19.0527 20.0527 0.0000 + 60.750000 19.1799 20.1799 0.0001 19.1799 20.1799 0.0001 + 61.000000 18.9106 19.9106 0.0000 18.9106 19.9106 0.0000 + 61.250000 18.8817 19.8817 0.0001 18.8817 19.8817 0.0001 + 61.500000 18.0910 19.0910 0.0001 18.0910 19.0910 0.0001 + 61.750000 19.0315 20.0315 0.0001 19.0315 20.0315 0.0001 + 62.000000 19.4761 20.4761 0.0001 19.4761 20.4761 0.0001 + 62.250000 19.6156 20.6156 0.0001 19.6156 20.6156 0.0001 + 62.500000 20.5450 21.5450 0.0000 20.5450 21.5450 0.0000 + 62.750000 19.5918 20.5918 0.0001 19.5918 20.5918 0.0001 + 63.000000 19.4211 20.4211 0.0001 19.4211 20.4211 0.0001 + 63.250000 20.2402 21.2402 0.0000 20.2402 21.2402 0.0000 + 63.500000 20.5284 21.5284 0.0001 20.5284 21.5284 0.0001 + 63.750000 19.3983 20.3983 0.0001 19.3983 20.3983 0.0001 + 64.000000 20.0183 21.0183 0.0001 20.0183 21.0183 0.0001 + 64.250000 19.2567 20.2567 0.0000 19.2567 20.2567 0.0000 + 64.500000 19.9145 20.9145 0.0002 19.9145 20.9145 0.0002 + 64.750000 18.8479 19.8479 0.0000 18.8479 19.8479 0.0000 + 65.000000 20.1734 21.1734 0.0001 20.1734 21.1734 0.0001 + 65.250000 20.7230 21.7230 0.0000 20.7230 21.7230 0.0000 + 65.500000 20.9771 21.9771 0.0000 20.9771 21.9771 0.0000 + 65.750000 21.4568 22.4568 0.0000 21.4568 22.4568 0.0000 + 66.000000 20.5483 21.5483 0.0001 20.5483 21.5483 0.0001 + 66.250000 20.9015 21.9015 0.0001 20.9015 21.9015 0.0001 + 66.500000 21.1926 22.1926 0.0000 21.1926 22.1926 0.0000 + 66.750000 21.3126 22.3126 0.0001 21.3126 22.3126 0.0001 + 67.000000 20.2389 21.2389 0.0001 20.2389 21.2389 0.0001 + 67.250000 20.7179 21.7179 0.0001 20.7179 21.7179 0.0001 + 67.500000 20.4320 21.4320 0.0000 20.4320 21.4320 0.0000 + 67.750000 21.0638 22.0638 0.0001 21.0638 22.0638 0.0001 + 68.000000 19.9730 20.9730 0.0001 19.9730 20.9730 0.0001 + 68.250000 21.5699 22.5699 0.0001 21.5699 22.5699 0.0001 + 68.500000 21.6000 22.6000 0.0000 21.6000 22.6000 0.0000 + 68.750000 21.6405 22.6405 0.0000 21.6405 22.6405 0.0000 + 69.000000 22.3750 23.3750 0.0000 22.3750 23.3750 0.0000 + 69.250000 21.1910 22.1910 0.0001 21.1910 22.1910 0.0001 + 69.500000 21.6420 22.6420 0.0001 21.6420 22.6420 0.0001 + 69.750000 22.0399 23.0399 0.0000 22.0399 23.0399 0.0000 + 70.000000 22.1538 23.1538 0.0001 22.1538 23.1538 0.0001 + 70.250000 21.7350 22.7350 0.0000 21.7350 22.7350 0.0000 + 70.500000 22.1667 23.1667 0.0001 22.1667 23.1667 0.0001 + 70.750000 20.8745 21.8745 0.0000 20.8745 21.8745 0.0000 + 71.000000 22.1309 23.1309 0.0001 22.1309 23.1309 0.0001 + 71.250000 20.8508 21.8508 0.0000 20.8508 21.8508 0.0000 + 71.500000 22.0031 23.0031 0.0001 22.0031 23.0031 0.0001 + 71.750000 22.5268 23.5268 0.0000 22.5268 23.5268 0.0000 + 72.000000 22.4361 23.4361 0.0000 22.4361 23.4361 0.0000 + 72.250000 23.4168 24.4168 0.0001 23.4168 24.4168 0.0001 + 72.500000 22.6156 23.6156 0.0001 22.6156 23.6156 0.0001 + 72.750000 22.2523 23.2523 0.0001 22.2523 23.2523 0.0001 + 73.000000 23.4150 24.4150 0.0000 23.4150 24.4150 0.0000 + 73.250000 23.1197 24.1197 0.0001 23.1197 24.1197 0.0001 + 73.500000 22.6274 23.6274 0.0001 22.6274 23.6274 0.0001 + 73.750000 22.9903 23.9903 0.0001 22.9903 23.9903 0.0001 + 74.000000 22.1998 23.1998 0.0000 22.1998 23.1998 0.0000 + 74.250000 23.1016 24.1016 0.0001 23.1016 24.1016 0.0001 + 74.500000 22.2019 23.2019 0.0001 22.2019 23.2019 0.0001 + 74.750000 23.1618 24.1618 0.0001 23.1618 24.1618 0.0001 + 75.000000 23.5398 24.5398 0.0001 23.5398 24.5398 0.0001 + 75.250000 23.4311 24.4311 0.0000 23.4311 24.4311 0.0000 + 75.500000 24.1070 25.1070 0.0001 24.1070 25.1070 0.0001 + 75.750000 23.2174 24.2174 0.0001 23.2174 24.2174 0.0001 + 76.000000 23.3223 24.3223 0.0001 23.3223 24.3223 0.0001 + 76.250000 24.4679 25.4679 0.0000 24.4679 25.4679 0.0000 + 76.500000 24.1788 25.1788 0.0001 24.1788 25.1788 0.0001 + 76.750000 23.8679 24.8679 0.0000 23.8679 24.8679 0.0000 + 77.000000 24.4349 25.4349 0.0001 24.4349 25.4349 0.0001 + 77.250000 23.3146 24.3146 0.0000 23.3146 24.3146 0.0000 + 77.500000 24.2799 25.2799 0.0001 24.2799 25.2799 0.0001 + 77.750000 22.8923 23.8923 0.0001 22.8923 23.8923 0.0001 + 78.000000 23.9463 24.9463 0.0001 23.9463 24.9463 0.0001 + 78.250000 24.1507 25.1507 0.0001 24.1507 25.1507 0.0001 + 78.500000 24.9419 25.9419 0.0000 24.9419 25.9419 0.0000 + 78.750000 24.5084 25.5084 0.0000 24.5084 25.5084 0.0000 + 79.000000 24.4508 25.4508 0.0001 24.4508 25.4508 0.0001 + 79.250000 24.9320 25.9320 0.0000 24.9320 25.9320 0.0000 + 79.500000 25.6032 26.6032 0.0001 25.6032 26.6032 0.0001 + 79.750000 25.1812 26.1812 0.0001 25.1812 26.1812 0.0001 + 80.000000 24.3638 25.3638 0.0001 24.3638 25.3638 0.0001 + 80.250000 25.2763 26.2763 0.0001 25.2763 26.2763 0.0001 + 80.500000 24.1775 25.1775 0.0001 24.1775 25.1775 0.0001 + 80.750000 25.4439 26.4439 0.0001 25.4439 26.4439 0.0001 + 81.000000 24.0178 25.0178 0.0001 24.0178 25.0178 0.0001 + 81.250000 25.8796 26.8796 0.0001 25.8796 26.8796 0.0001 + 81.500000 25.1323 26.1323 0.0001 25.1323 26.1323 0.0001 + 81.750000 26.1321 27.1321 0.0000 26.1321 27.1321 0.0000 + 82.000000 25.3992 26.3992 0.0000 25.3992 26.3992 0.0000 + 82.250000 25.1701 26.1701 0.0000 25.1701 26.1701 0.0000 + 82.500000 25.7325 26.7325 0.0000 25.7325 26.7325 0.0000 + 82.750000 26.7783 27.7783 0.0000 26.7783 27.7783 0.0000 + 83.000000 26.0982 27.0982 0.0001 26.0982 27.0982 0.0001 + 83.250000 25.1358 26.1358 0.0001 25.1358 26.1358 0.0001 + 83.500000 26.1838 27.1838 0.0001 26.1838 27.1838 0.0001 + 83.750000 24.7608 25.7608 0.0000 24.7608 25.7608 0.0000 + 84.000000 26.6122 27.6122 0.0001 26.6122 27.6122 0.0001 + 84.250000 24.6686 25.6686 0.0001 24.6686 25.6686 0.0001 + 84.500000 27.0565 28.0565 0.0001 27.0563 28.0563 0.0001 + 84.750000 26.3199 27.3199 0.0000 26.3199 27.3199 0.0000 + 85.000000 26.9164 27.9164 0.0000 26.9164 27.9164 0.0000 + 85.250000 27.0967 28.0967 0.0000 27.0967 28.0967 0.0000 + 85.500000 26.3207 27.3207 0.0001 26.3207 27.3207 0.0001 + 85.750000 26.8933 27.8933 0.0001 26.8933 27.8933 0.0001 + 86.000000 27.9389 28.9389 0.0000 27.9389 28.9389 0.0000 + 86.250000 27.2855 28.2855 0.0000 27.2855 28.2855 0.0000 + 86.500000 26.5680 27.5680 0.0001 26.5680 27.5680 0.0001 + 86.750000 27.3561 28.3561 0.0001 27.3561 28.3561 0.0001 + 87.000000 25.8892 26.8892 0.0001 25.8892 26.8892 0.0001 + 87.250000 27.6517 28.6517 0.0001 27.6517 28.6517 0.0001 + 87.500000 26.0048 27.0048 0.0001 26.0048 27.0048 0.0001 + 87.750000 28.2374 29.2374 0.0001 28.2374 29.2374 0.0001 + 88.000000 27.7457 28.7457 0.0000 27.7457 28.7457 0.0000 + 88.250000 27.7768 28.7768 0.0000 27.7768 28.7768 0.0000 + 88.500000 28.1172 29.1172 0.0001 28.1172 29.1172 0.0001 + 88.750000 27.4677 28.4677 0.0001 27.4677 28.4677 0.0001 + 89.000000 28.3160 29.3160 0.0000 28.3160 29.3160 0.0000 + 89.250000 29.2626 30.2626 0.0000 29.2626 30.2626 0.0000 + 89.500000 28.9803 29.9803 0.0001 28.9803 29.9803 0.0001 + 89.750000 27.7864 28.7864 0.0001 27.7864 28.7864 0.0001 + 90.000000 28.4074 29.4074 0.0001 28.4074 29.4074 0.0001 + 90.250000 27.3048 28.3048 0.0001 27.3048 28.3048 0.0001 + 90.500000 28.6134 29.6134 0.0001 28.6134 29.6134 0.0001 + 90.750000 26.7885 27.7885 0.0001 26.7885 27.7885 0.0001 + 91.000000 28.6276 29.6276 0.0001 28.6276 29.6276 0.0001 + 91.250000 29.0343 30.0343 0.0000 29.0343 30.0343 0.0000 + 91.500000 28.9067 29.9067 0.0000 28.9067 29.9067 0.0000 + 91.750000 29.4537 30.4537 0.0000 29.4537 30.4537 0.0000 + 92.000000 29.0662 30.0662 0.0001 29.0662 30.0662 0.0001 + 92.250000 29.7005 30.7005 0.0001 29.7005 30.7005 0.0001 + 92.500000 29.6141 30.6141 0.0001 29.6141 30.6141 0.0001 + 92.750000 29.6393 30.6393 0.0000 29.6393 30.6393 0.0000 + 93.000000 29.4964 30.4964 0.0001 29.4964 30.4964 0.0001 + 93.250000 29.7888 30.7888 0.0001 29.7888 30.7888 0.0001 + 93.500000 28.0586 29.0586 0.0001 28.0587 29.0587 0.0001 + 93.750000 29.9872 30.9872 0.0001 29.9872 30.9872 0.0001 + 94.000000 28.1782 29.1782 0.0001 28.1784 29.1784 0.0001 + 94.250000 28.7693 29.7693 0.0001 28.7693 29.7693 0.0001 + 94.500000 29.3541 30.3541 0.0000 29.3541 30.3541 0.0000 + 94.750000 29.2034 30.2034 0.0000 29.2034 30.2034 0.0000 + 95.000000 29.6254 30.6254 0.0001 29.6254 30.6254 0.0001 + 95.250000 29.1481 30.1481 0.0000 29.1481 30.1481 0.0000 + 95.500000 29.7590 30.7590 0.0000 29.7590 30.7590 0.0000 + 95.750000 29.6971 30.6971 0.0000 29.6971 30.6971 0.0000 + 96.000000 29.8248 30.8248 0.0001 29.8248 30.8248 0.0001 + 96.250000 29.4804 30.4804 0.0001 29.4804 30.4804 0.0001 + 96.500000 30.1150 31.1150 0.0001 30.1150 31.1150 0.0001 + 96.750000 29.2877 30.2877 0.0001 29.2877 30.2877 0.0001 + 97.000000 30.9275 31.9275 0.0001 30.9275 31.9275 0.0001 + 97.250000 28.2932 29.2932 0.0001 28.2932 29.2932 0.0001 + 97.500000 31.3549 32.3549 0.0001 31.3438 32.3438 0.0001 + 97.750000 31.1175 32.1175 0.0000 31.1172 32.1172 0.0000 + 98.000000 30.7921 31.7921 0.0001 30.7921 31.7921 0.0001 + 98.250000 31.1990 32.1990 0.0001 31.1990 32.1990 0.0001 + 98.500000 30.6488 31.6488 0.0001 30.6488 31.6488 0.0001 + 98.750000 31.3462 32.3462 0.0000 31.3462 32.3462 0.0000 + 99.000000 31.4013 32.4013 0.0000 31.4013 32.4013 0.0000 + 99.250000 31.1480 32.1480 0.0000 31.1480 32.1480 0.0000 + 99.500000 31.2079 32.2079 0.0000 31.2079 32.2079 0.0000 + 99.750000 31.4616 32.4616 0.0001 31.4616 32.4616 0.0001 + 100.000000 31.1434 32.1434 0.0001 31.1434 32.1434 0.0001 + 100.250000 31.8777 32.8777 0.0001 31.8777 32.8777 0.0001 + 100.500000 29.9216 30.9216 0.0001 29.9216 30.9216 0.0001 + 100.750000 33.5430 34.5430 0.0001 33.5430 34.5430 0.0001 + 101.000000 33.1555 34.1555 0.0000 33.1555 34.1555 0.0000 + 101.250000 31.6932 32.6932 0.0000 31.6932 32.6932 0.0000 + 101.500000 32.5199 33.5199 0.0001 32.5199 33.5199 0.0001 + 101.750000 31.5930 32.5930 0.0001 31.5930 32.5930 0.0001 + 102.000000 32.2981 33.2981 0.0000 32.2981 33.2981 0.0000 + 102.250000 32.2886 33.2886 0.0000 32.2886 33.2886 0.0000 + 102.500000 32.4482 33.4482 0.0001 32.4482 33.4482 0.0001 + 102.750000 32.8988 33.8988 0.0001 32.8988 33.8988 0.0001 + 103.000000 32.6250 33.6250 0.0001 32.6250 33.6250 0.0001 + 103.250000 31.8492 32.8492 0.0001 31.8492 32.8492 0.0001 + 103.500000 33.2489 34.2489 0.0001 33.2489 34.2489 0.0001 + 103.750000 31.5151 32.5151 0.0001 31.5151 32.5151 0.0001 + 104.000000 35.1123 36.1123 0.0001 34.9958 35.9958 0.0001 + 104.250000 33.5786 34.5786 0.0000 33.5786 34.5786 0.0000 + 104.500000 33.3743 34.3743 0.0000 33.3743 34.3743 0.0000 + 104.750000 32.8565 33.8565 0.0001 32.8565 33.8565 0.0001 + 105.000000 33.3878 34.3878 0.0000 33.3878 34.3878 0.0000 + 105.250000 33.5407 34.5407 0.0001 33.5407 34.5407 0.0001 + 105.500000 33.5782 34.5782 0.0001 33.5782 34.5782 0.0001 + 105.750000 33.4424 34.4424 0.0001 33.4424 34.4424 0.0001 + 106.000000 33.5877 34.5877 0.0000 33.5877 34.5877 0.0000 + 106.250000 33.6673 34.6673 0.0001 33.6673 34.6673 0.0001 + 106.500000 33.4228 34.4228 0.0001 33.4228 34.4228 0.0001 + 106.750000 34.7414 35.7414 0.0001 34.7414 35.7414 0.0001 + 107.000000 33.3332 34.3332 0.0001 33.3332 34.3332 0.0001 + 107.250000 35.0870 36.0870 0.0001 35.0870 36.0870 0.0001 + 107.500000 33.5445 34.5445 0.0001 33.5445 34.5445 0.0001 + 107.750000 33.5552 34.5552 0.0000 33.5552 34.5552 0.0000 + 108.000000 33.3770 34.3770 0.0000 33.3770 34.3770 0.0000 + 108.250000 32.8967 33.8967 0.0001 32.8967 33.8967 0.0001 + 108.500000 33.6200 34.6200 0.0001 33.6200 34.6200 0.0001 + 108.750000 33.5640 34.5640 0.0001 33.5640 34.5640 0.0001 + 109.000000 33.5274 34.5274 0.0000 33.5274 34.5274 0.0000 + 109.250000 33.8522 34.8522 0.0000 33.8522 34.8522 0.0000 + 109.500000 33.6961 34.6961 0.0001 33.6961 34.6961 0.0001 + 109.750000 33.5290 34.5290 0.0000 33.5290 34.5290 0.0000 + 110.000000 34.5353 35.5353 0.0001 34.5353 35.5353 0.0001 + 110.250000 33.5084 34.5084 0.0001 33.5084 34.5084 0.0001 + 110.500000 37.9057 38.9057 0.0001 36.9972 37.9972 0.0001 + 110.750000 35.4568 36.4568 0.0001 35.4568 36.4568 0.0001 + 111.000000 35.2015 36.2015 0.0001 35.2015 36.2015 0.0001 + 111.250000 34.8816 35.8816 0.0001 34.8816 35.8816 0.0001 + 111.500000 35.0138 36.0138 0.0001 35.0138 36.0138 0.0001 + 111.750000 35.2748 36.2748 0.0001 35.2748 36.2748 0.0001 + 112.000000 35.1521 36.1521 0.0000 35.1521 36.1521 0.0000 + 112.250000 35.0458 36.0458 0.0001 35.0458 36.0458 0.0001 + 112.500000 35.1097 36.1097 0.0001 35.1097 36.1097 0.0001 + 112.750000 35.2703 36.2703 0.0000 35.2703 36.2703 0.0000 + 113.000000 35.2164 36.2164 0.0000 35.2164 36.2164 0.0000 + 113.250000 35.6830 36.6830 0.0000 35.6830 36.6830 0.0000 + 113.500000 35.1352 36.1352 0.0001 35.1352 36.1352 0.0001 + 113.750000 37.9694 38.9694 0.0001 37.9691 38.9691 0.0001 + 114.000000 36.1329 37.1329 0.0000 36.1329 37.1329 0.0000 + 114.250000 36.0489 37.0489 0.0001 36.0489 37.0489 0.0001 + 114.500000 35.7678 36.7678 0.0001 35.7678 36.7678 0.0001 + 114.750000 35.9607 36.9607 0.0000 35.9607 36.9607 0.0000 + 115.000000 36.8600 37.8600 0.0001 36.8600 37.8600 0.0001 + 115.250000 36.0576 37.0576 0.0001 36.0576 37.0576 0.0001 + 115.500000 36.3707 37.3707 0.0001 36.3707 37.3707 0.0001 + 115.750000 36.7418 37.7418 0.0000 36.7418 37.7418 0.0000 + 116.000000 36.1698 37.1698 0.0000 36.1698 37.1698 0.0000 + 116.250000 35.9551 36.9551 0.0000 35.9551 36.9551 0.0000 + 116.500000 36.8455 37.8455 0.0000 36.8455 37.8455 0.0000 + 116.750000 36.7463 37.7463 0.0001 36.7463 37.7463 0.0001 + 117.000000 39.4013 40.4013 0.0001 38.9881 39.9881 0.0001 + 117.250000 37.0099 38.0099 0.0001 37.0099 38.0099 0.0001 + 117.500000 37.0492 38.0492 0.0001 37.0492 38.0492 0.0001 + 117.750000 36.0642 37.0642 0.0000 36.0642 37.0642 0.0000 + 118.000000 36.7462 37.7462 0.0000 36.7462 37.7462 0.0000 + 118.250000 37.6375 38.6375 0.0001 37.6375 38.6375 0.0001 + 118.500000 37.0123 38.0123 0.0001 37.0123 38.0123 0.0001 + 118.750000 37.6777 38.6777 0.0001 37.6777 38.6777 0.0001 + 119.000000 37.6633 38.6633 0.0001 37.6633 38.6633 0.0001 + 119.250000 37.0775 38.0775 0.0000 37.0775 38.0775 0.0000 + 119.500000 37.7632 38.7632 0.0000 37.7632 38.7632 0.0000 + 119.750000 37.8503 38.8503 0.0001 37.8503 38.8503 0.0001 + 120.000000 37.7380 38.7380 0.0001 37.7380 38.7380 0.0001 + 120.250000 40.6057 41.6057 0.0001 40.6057 41.6057 0.0001 + 120.500000 37.9875 38.9875 0.0001 37.9875 38.9875 0.0001 + 120.750000 38.2308 39.2308 0.0001 38.2308 39.2308 0.0001 + 121.000000 37.0110 38.0110 0.0000 37.0110 38.0110 0.0000 + 121.250000 38.1251 39.1251 0.0001 38.1251 39.1251 0.0001 + 121.500000 38.9580 39.9580 0.0000 38.9580 39.9580 0.0000 + 121.750000 37.4896 38.4896 0.0001 37.4896 38.4896 0.0001 + 122.000000 38.1362 39.1362 0.0001 38.1362 39.1362 0.0001 + 122.250000 38.2823 39.2823 0.0000 38.2823 39.2823 0.0000 + 122.500000 38.0283 39.0283 0.0000 38.0283 39.0283 0.0000 + 122.750000 38.2731 39.2731 0.0000 38.2731 39.2731 0.0000 + 123.000000 38.5351 39.5351 0.0000 38.5351 39.5351 0.0000 + 123.250000 38.6889 39.6889 0.0001 38.6889 39.6889 0.0001 + 123.500000 41.0177 42.0177 0.0001 41.0177 42.0177 0.0001 + 123.750000 39.0327 40.0327 0.0001 39.0327 40.0327 0.0001 + 124.000000 39.2150 40.2150 0.0001 39.2150 40.2150 0.0001 + 124.250000 38.3662 39.3662 0.0001 38.3662 39.3662 0.0001 + 124.500000 39.3881 40.3881 0.0001 39.3881 40.3881 0.0001 + 124.750000 39.7801 40.7801 0.0000 39.7801 40.7801 0.0000 + 125.000000 38.9521 39.9521 0.0000 38.9521 39.9521 0.0000 + 125.250000 39.2335 40.2335 0.0000 39.2335 40.2335 0.0000 + 125.500000 39.4236 40.4236 0.0001 39.4236 40.4236 0.0001 + 125.750000 39.0332 40.0332 0.0001 39.0332 40.0332 0.0001 + 126.000000 39.0309 40.0309 0.0000 39.0309 40.0309 0.0000 + 126.250000 40.0990 41.0990 0.0000 40.0990 41.0990 0.0000 + 126.500000 39.5974 40.5974 0.0001 39.5974 40.5974 0.0001 + 126.750000 41.4831 42.4831 0.0001 41.4831 42.4831 0.0001 + 127.000000 39.5779 40.5779 0.0001 39.5779 40.5779 0.0001 + 127.250000 39.9957 40.9957 0.0000 39.9957 40.9957 0.0000 + 127.500000 39.1887 40.1887 0.0001 39.1887 40.1887 0.0001 + 127.750000 39.7603 40.7603 0.0000 39.7603 40.7603 0.0000 + 128.000000 40.9212 41.9212 0.0001 40.9212 41.9212 0.0001 + 128.250000 39.6202 40.6202 0.0000 39.6202 40.6202 0.0000 + 128.500000 40.1471 41.1471 0.0000 40.1471 41.1471 0.0000 + 128.750000 40.2331 41.2331 0.0001 40.2331 41.2331 0.0001 + 129.000000 40.0902 41.0902 0.0001 40.0902 41.0902 0.0001 + 129.250000 39.6322 40.6322 0.0000 39.6322 40.6322 0.0000 + 129.500000 41.0105 42.0105 0.0000 41.0105 42.0105 0.0000 + 129.750000 40.2607 41.2607 0.0001 40.2607 41.2607 0.0001 + 130.000000 41.9895 42.9895 0.0001 41.9895 42.9895 0.0001 + 130.250000 40.9519 41.9519 0.0001 40.9519 41.9519 0.0001 + 130.500000 40.8069 41.8069 0.0001 40.8069 41.8069 0.0001 + 130.750000 39.7650 40.7650 0.0001 39.7650 40.7650 0.0001 + 131.000000 40.2980 41.2980 0.0001 40.2980 41.2980 0.0001 + 131.250000 41.9747 42.9747 0.0001 41.9747 42.9747 0.0001 + 131.500000 40.3756 41.3756 0.0000 40.3756 41.3756 0.0000 + 131.750000 41.2743 42.2743 0.0001 41.2743 42.2743 0.0001 + 132.000000 40.8975 41.8975 0.0001 40.8975 41.8975 0.0001 + 132.250000 40.9555 41.9555 0.0001 40.9555 41.9555 0.0001 + 132.500000 40.6201 41.6201 0.0000 40.6201 41.6201 0.0000 + 132.750000 41.5831 42.5831 0.0001 41.5831 42.5831 0.0001 + 133.000000 41.1452 42.1452 0.0000 41.1452 42.1452 0.0000 + 133.250000 41.9675 42.9675 0.0001 41.9675 42.9675 0.0001 + 133.500000 41.8360 42.8360 0.0001 41.8360 42.8360 0.0001 + 133.750000 41.9216 42.9216 0.0000 41.9216 42.9216 0.0000 + 134.000000 41.8315 42.8315 0.0001 41.8315 42.8315 0.0001 + 134.250000 41.3247 42.3247 0.0001 41.3247 42.3247 0.0001 + 134.500000 41.9998 42.9998 0.0001 41.9998 42.9998 0.0001 + 134.750000 41.0553 42.0553 0.0001 41.0553 42.0553 0.0001 + 135.000000 41.9978 42.9978 0.0001 41.9978 42.9978 0.0001 + 135.250000 41.9695 42.9695 0.0000 41.9695 42.9695 0.0000 + 135.500000 41.9529 42.9529 0.0001 41.9529 42.9529 0.0001 + 135.750000 41.8093 42.8093 0.0000 41.8093 42.8093 0.0000 + 136.000000 41.9968 42.9968 0.0001 41.9968 42.9968 0.0001 + 136.250000 41.9985 42.9985 0.0001 41.9985 42.9985 0.0001 diff --git a/regtest/rt41/plumed.dat b/regtest/rt41/plumed.dat new file mode 100644 index 0000000000000000000000000000000000000000..f6acab8e81dec4e0da687224c68eb2d7c4977209 --- /dev/null +++ b/regtest/rt41/plumed.dat @@ -0,0 +1,3 @@ +r1: READ VALUES=p2.X FILE=input_colvar +r2: READ VALUES=p3.* FILE=input_colvar +PRINT ARG=r1.*,r2.* STRIDE=1000 FILE=colvar FMT=%8.4f diff --git a/src/basic/ActionAtomistic.cpp b/src/basic/ActionAtomistic.cpp index aa54b740dcbfcb8ef510e98febc45ca291b5cc00..b430a561ebc73f25dd4588173a40521f62af0643 100644 --- a/src/basic/ActionAtomistic.cpp +++ b/src/basic/ActionAtomistic.cpp @@ -48,6 +48,7 @@ lockRequestAtoms(false), atoms(plumed.getAtoms()) { atoms.add(this); + if(atoms.getNatoms()==0) error("Cannot perform calculations involving atoms without atoms"); } void ActionAtomistic::registerKeywords( Keywords& keys ){ diff --git a/src/basic/ColvarEnergy.cpp b/src/basic/ColvarEnergy.cpp index 848603ebc15590168070592d01cb6d977dba0e6a..2b0b295e511b5e5ead6b6bf680bdef68c0575052 100644 --- a/src/basic/ColvarEnergy.cpp +++ b/src/basic/ColvarEnergy.cpp @@ -22,6 +22,7 @@ #include "Colvar.h" #include "ActionRegister.h" #include "PlumedMain.h" +#include "Atoms.h" #include <string> #include <cmath> @@ -53,6 +54,7 @@ class ColvarEnergy : public Colvar { public: ColvarEnergy(const ActionOptions&); // active methods: + void prepare(); virtual void calculate(); static void registerKeywords( Keywords& keys ); }; @@ -80,6 +82,9 @@ void ColvarEnergy::registerKeywords( Keywords& keys ){ keys.remove("NUMERICAL_DERIVATIVES"); } +void ColvarEnergy::prepare(){ + plumed.getAtoms().setCollectEnergy(true); +} // calculator void ColvarEnergy::calculate(){ diff --git a/src/basic/GenericRead.cpp b/src/basic/GenericRead.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4e1d95e48f1b80ba3d5ceadedcd4defec6afe2e8 --- /dev/null +++ b/src/basic/GenericRead.cpp @@ -0,0 +1,179 @@ +/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Copyright (c) 2012 The plumed team + (see the PEOPLE file at the root of the distribution for a list of names) + + See http://www.plumed-code.org for more information. + + This file is part of plumed, version 2.0. + + plumed is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + plumed is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with plumed. If not, see <http://www.gnu.org/licenses/>. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#include "ActionPilot.h" +#include "ActionWithValue.h" +#include "ActionRegister.h" +#include "PlumedMain.h" +#include "ActionSet.h" +#include "Atoms.h" + +namespace PLMD{ + +//+PLUMEDOC GENERIC READ +/* +Read quantities from a colvar file. + +\par Examples + +*/ +//+ENDPLUMEDOC + +class GenericRead : +public ActionPilot, +public ActionWithValue +{ +friend class ActionPilot; +private: + bool cloned_file; + unsigned nlinesPerStep; + std::string filename; + PlumedIFile* ifile; + std::vector<Value*> readvals; +public: + static void registerKeywords( Keywords& keys ); + GenericRead(const ActionOptions&); + ~GenericRead(); + void prepare(); + void apply(){}; + void calculate(); + void update(); + std::string getFilename() const; + PlumedIFile* getFile(); +}; + +PLUMED_REGISTER_ACTION(GenericRead,"READ") + +void GenericRead::registerKeywords(Keywords& keys){ + Action::registerKeywords(keys); + ActionPilot::registerKeywords(keys); + ActionWithValue::registerKeywords(keys); + keys.add("compulsory","STRIDE","1","the frequency with which the file should be read."); + keys.add("compulsory","EVERY","1","only read every ith line of the colvar file. This should be used if the colvar was written more frequently than the trajectory."); + keys.add("compulsory","VALUES","the values to read from the file"); + keys.add("compulsory","FILE","the name of the file from which to read these quantities"); + keys.remove("NUMERICAL_DERIVATIVES"); +} + +GenericRead::GenericRead(const ActionOptions&ao): +Action(ao), +ActionPilot(ao), +ActionWithValue(ao), +nlinesPerStep(1) +{ + // Read the file name from the input line + parse("FILE",filename); + // Open the file if it is not already opened + cloned_file=false; + std::vector<GenericRead*> other_reads=plumed.getActionSet().select<GenericRead*>(); + for(unsigned i=0;i<other_reads.size();++i){ + if( other_reads[i]->getFilename()==filename ){ + ifile=other_reads[i]->getFile(); + cloned_file=true; + } + } + if( !cloned_file ){ + ifile=new PlumedIFile(); + if( !ifile->FileExist(filename) ) error("could not find file named " + filename); + ifile->link(*this); + ifile->open(filename); + ifile->allowIgnoredFields(); + } + parse("EVERY",nlinesPerStep); + if(nlinesPerStep>1) log.printf(" only reading every %dth line of file %s\n",nlinesPerStep,filename.c_str() ); + else log.printf(" reading data from file %s\n",filename.c_str() ); + // Find out what we are reading + std::vector<std::string> valread; parseVector("VALUES",valread); + + std::size_t dot=valread[0].find_first_of('.'); + if( valread[0].find(".")!=std::string::npos ){ + std::string label=valread[0].substr(0,dot); + std::string name=valread[0].substr(dot+1); + if( name=="*" ){ + if( valread.size()>1 ) error("all values must be from the same Action when using READ"); + std::vector<std::string> fieldnames; + ifile->scanFieldList( fieldnames ); + for(unsigned i=0;i<fieldnames.size();++i){ + if( fieldnames[i].substr(0,dot)==label ){ + readvals.push_back(new Value(this, fieldnames[i], false) ); + addComponent( fieldnames[i].substr(dot+1) ); componentIsNotPeriodic( fieldnames[i].substr(dot+1) ); + } + } + } else { + readvals.push_back(new Value(this, valread[0], false) ); + addComponent( name ); componentIsNotPeriodic( valread[0].substr(dot+1) ); + for(unsigned i=1;i<valread.size();++i) { + if( valread[i].substr(0,dot)!=label ) error("all values must be from the same Action when using READ");; + readvals.push_back(new Value(this, valread[i], false) ); + addComponent( valread[i].substr(dot+1) ); componentIsNotPeriodic( valread[i].substr(dot+1) ); + } + } + } else { + if( valread.size()!=1 ) error("all values must be from the same Action when using READ"); + readvals.push_back(new Value(this, valread[0], false) ); + addValue(); setNotPeriodic(); + log.printf(" reading value %s and storing as %s\n",valread[0].c_str() ,getLabel().c_str() ); + } + checkRead(); +} + +GenericRead::~GenericRead(){ + if( !cloned_file ){ ifile->close(); delete ifile; } + for(unsigned i=0;i<readvals.size();++i) delete readvals[i]; +} + +std::string GenericRead::getFilename() const { + return filename; +} + +PlumedIFile* GenericRead::getFile(){ + return ifile; +} + +void GenericRead::prepare(){ + if( !cloned_file ){ + double du_time; + if( !ifile->scanField("time",du_time) ){ + error("Reached end of file " + filename + " before end of trajectory"); + } else if( fabs( du_time-getTime() )>epsilon ){ + std::string str_dutime,str_ptime; Tools::convert(du_time,str_dutime); Tools::convert(getTime(),str_ptime); + error("mismatched times in colvar files : colvar time=" + str_dutime + " plumed time=" + str_ptime ); + } + } +} + +void GenericRead::calculate(){ + for(unsigned i=0;i<readvals.size();++i){ + ifile->scanField( readvals[i] ); + getPntrToComponent(i)->set( readvals[i]->get() ); + } +} + +void GenericRead::update(){ + if( !cloned_file ){ + for(unsigned i=0;i<nlinesPerStep;++i){ + ifile->scanField(); double du_time; + if( plumed.getAtoms().getNatoms()==0 && !ifile->scanField("time",du_time) ) plumed.stop(); + } + } +} + +} diff --git a/src/basic/PlumedMain.cpp b/src/basic/PlumedMain.cpp index 886e84c40b8fb28ec611dc24c316a61a3993f552..8c3ce20ac66a40fd66ea2603973f004ff70e4cbf 100644 --- a/src/basic/PlumedMain.cpp +++ b/src/basic/PlumedMain.cpp @@ -29,7 +29,6 @@ #include "Atoms.h" #include <set> #include "config/PlumedConfig.h" -#include "Colvar.h" #include <cstdlib> #include "ActionRegister.h" #include "GREX.h" @@ -63,7 +62,9 @@ PlumedMain::PlumedMain(): bias(0.0), exchangePatterns(*new(ExchangePatterns)), novirial(false), - restart(false) + restart(false), + stopFlag(NULL), + stopNow(false) { log.link(comm); log.setLinePrefix("PLUMED: "); @@ -272,6 +273,10 @@ void PlumedMain::cmd(const std::string & word,void*val){ CHECK_NOTINIT(initialized,word); CHECK_NULL(val,word); log.open(static_cast<char*>(val),"w"); + } else if(word=="setStopFlag"){ + CHECK_NOTINIT(initialized,word); + CHECK_NULL(val,word); + stopFlag=static_cast<int*>(val); } else if(word=="getExchangesFlag"){ CHECK_INIT(initialized,word); CHECK_NULL(val,word); @@ -455,16 +460,11 @@ void PlumedMain::prepareDependencies(){ }; // also, if one of them is the total energy, tell to atoms that energy should be collected - bool collectEnergy=false; for(ActionSet::iterator p=actionSet.begin();p!=actionSet.end();++p){ if((*p)->isActive()){ - if(Colvar *c=dynamic_cast<Colvar*>(*p)) { - if(c->checkIsEnergy()) collectEnergy=true; - } if((*p)->checkNeedsGradients()) (*p)->setOption("GRADIENTS"); } } - atoms.setCollectEnergy(collectEnergy); stopwatch.stop("1 Prepare dependencies"); @@ -541,6 +541,11 @@ void PlumedMain::justApply(){ for(ActionSet::iterator p=actionSet.begin();p!=actionSet.end();++p){ if((*p)->isActive()) (*p)->update(); } +// Check that no action has told the calculation to stop + if(stopNow){ + if(stopFlag) (*stopFlag)=1; + else plumed_merror("your md code cannot handle plumed stop events - add a call to plumed.comm(stopFlag,stopCondition)"); + } stopwatch.stop("5 Applying (backward loop)"); } @@ -614,6 +619,9 @@ void PlumedMain::eraseFile(PlumedFileBase&f){ files.erase(&f); } +void PlumedMain::stop(){ + stopNow=true; +} diff --git a/src/basic/PlumedMain.h b/src/basic/PlumedMain.h index b3fc8ab5c97f66d0293d889019a08bc68262a92f..164f0253d6137c2061addeb863f8caea10679193 100644 --- a/src/basic/PlumedMain.h +++ b/src/basic/PlumedMain.h @@ -129,6 +129,10 @@ private: std::set<PlumedFileBase*> files; typedef std::set<PlumedFileBase*>::iterator files_iterator; +/// Stuff to make plumed stop the MD code cleanly + int* stopFlag; + bool stopNow; + public: /// Flag to switch off virial calculation (for debug) bool novirial; @@ -237,6 +241,8 @@ public: void fflush(); /// Check if restarting bool getRestart()const; +/// Stop the calculation cleanly (both the MD code and plumed) + void stop(); }; ///// diff --git a/src/cltools/CLToolDriver.cpp b/src/cltools/CLToolDriver.cpp index a8b6a0f5aeb2e5895b1e567a7501e3fdcb2f4031..36641c791cfe0e67b7759f71122aed2b5c42f7dd 100644 --- a/src/cltools/CLToolDriver.cpp +++ b/src/cltools/CLToolDriver.cpp @@ -80,6 +80,7 @@ void CLToolDriver<real>::registerKeywords( Keywords& keys ){ keys.add("compulsory","--plumed","plumed.dat","specify the name of the plumed input file"); keys.add("compulsory","--timestep","1.0","the timestep that was used in the calculation that produced this trajectory in picoseconds"); keys.add("compulsory","--trajectory-stride","1","the frequency with which frames were output to this trajectory during the simulation"); + keys.addFlag("--noatoms",false,"don't read in a trajectory. Just use colvar files as specified in plumed.dat"); keys.add("atoms","--ixyz","the trajectory in xyz format"); keys.add("optional","--length-units","units for length, either as a string or a number"); keys.add("optional","--dump-forces","dump the forces on a file"); @@ -124,6 +125,9 @@ int CLToolDriver<real>::main(FILE* in,FILE*out,PlumedCommunicator& pc){ ); return 0; } + // Are we reading trajectory data + bool noatoms; parseFlag("--noatoms",noatoms); + std::string fakein; bool debugfloat=parse("--debug-float",fakein); if(debugfloat && sizeof(real)!=sizeof(float)){ @@ -136,12 +140,14 @@ int CLToolDriver<real>::main(FILE* in,FILE*out,PlumedCommunicator& pc){ bool debug_pd=parse("--debug-pd",fakein); bool debug_dd=parse("--debug-dd",fakein); + if( debug_pd || debug_dd ) plumed_massert(!noatoms,"cannot debug without atoms"); int multi=1; FILE*multi_log=NULL; bool debug_grex=parse("--debug-grex",fakein); PlumedCommunicator intracomm; PlumedCommunicator intercomm; if(debug_grex){ + plumed_massert( !noatoms, "must have atoms to debug_grex"); Tools::convert(fakein,multi); int ntot=pc.Get_size(); int nintra=ntot/multi; @@ -168,58 +174,68 @@ int CLToolDriver<real>::main(FILE* in,FILE*out,PlumedCommunicator& pc){ unsigned stride; parse("--trajectory-stride",stride); // are we writing forces string dumpforces(""), dumpforcesFmt("%f");; - parse("--dump-forces",dumpforces); + if(!noatoms) parse("--dump-forces",dumpforces); if(dumpforces!="") parse("--dump-forces-fmt",dumpforcesFmt); // Read in an xyz file - string trajectoryFile(""); - std::string traj_xyz; parse("--ixyz",traj_xyz); - if(traj_xyz.length()>0 && trajectoryFile.length()==0) trajectoryFile=traj_xyz; - if(trajectoryFile.length()==0){ - fprintf(out,"ERROR: missing trajectory data\n"); - return 0; - } - string lengthUnits(""); parse("--length-units",lengthUnits); - if(lengthUnits.length()>0) units.setLength(lengthUnits); - - string pdbfile; parse("--pdb",pdbfile); - if(pdbfile.length()>0){ - bool check=pdb.read(pdbfile,false,1.0); - plumed_massert(check,"error reading pdb file"); - } + string trajectoryFile(""), pdbfile(""); + bool pbc_cli_given=false; vector<double> pbc_cli_box(9,0.0); + if(!noatoms){ + std::string traj_xyz; parse("--ixyz",traj_xyz); + if(traj_xyz.length()>0 && trajectoryFile.length()==0) trajectoryFile=traj_xyz; + if(trajectoryFile.length()==0){ + fprintf(stderr,"ERROR: missing trajectory data\n"); + return 1; + } + string lengthUnits(""); parse("--length-units",lengthUnits); + if(lengthUnits.length()>0) units.setLength(lengthUnits); + + parse("--pdb",pdbfile); + if(pdbfile.length()>0){ + bool check=pdb.read(pdbfile,false,1.0); + plumed_massert(check,"error reading pdb file"); + } - string pbc_cli_list; parse("--box",pbc_cli_list); - bool pbc_cli_given=false; - vector<double> pbc_cli_box(9,0.0); - if(pbc_cli_list.length()>0) { - pbc_cli_given=true; - vector<string> words=Tools::getWords(pbc_cli_list,","); - if(words.size()==3){ - for(int i=0;i<3;i++) sscanf(words[i].c_str(),"%lf",&(pbc_cli_box[4*i])); - } else if(words.size()==9) { - for(int i=0;i<9;i++) sscanf(words[i].c_str(),"%lf",&(pbc_cli_box[i])); - } else { - string msg="ERROR: cannot parse command-line box "+pbc_cli_list; - fprintf(stderr,"%s\n",msg.c_str()); - return 1; - } + string pbc_cli_list; parse("--box",pbc_cli_list); + if(pbc_cli_list.length()>0) { + pbc_cli_given=true; + vector<string> words=Tools::getWords(pbc_cli_list,","); + if(words.size()==3){ + for(int i=0;i<3;i++) sscanf(words[i].c_str(),"%lf",&(pbc_cli_box[4*i])); + } else if(words.size()==9) { + for(int i=0;i<9;i++) sscanf(words[i].c_str(),"%lf",&(pbc_cli_box[i])); + } else { + string msg="ERROR: cannot parse command-line box "+pbc_cli_list; + fprintf(stderr,"%s\n",msg.c_str()); + return 1; + } + } } - + plumed_massert(!(debug_dd&debug_pd),"cannot use debug-dd and debug-pd at the same time"); if(debug_pd || debug_dd) plumed_massert(PlumedCommunicator::initialized(),"needs mpi for debug-pd"); - if(trajectoryFile.length()==0){ - string msg="ERROR: please specify a trajectory"; - fprintf(stderr,"%s\n",msg.c_str()); - return 1; - } - Plumed p; int rr=sizeof(real); p.cmd("setRealPrecision",&rr); - int checknatoms=0; + int checknatoms=-1; + int plumedStopCondition=0; + p.cmd("setStopFlag",&plumedStopCondition); int step=0; + if(PlumedCommunicator::initialized()){ + if(multi>1){ + if(intracomm.Get_rank()==0) p.cmd("GREX setMPIIntercomm",&intercomm.Get_comm()); + p.cmd("GREX setMPIIntracomm",&intracomm.Get_comm()); + p.cmd("GREX init"); + } + p.cmd("setMPIComm",&intracomm.Get_comm()); + } + p.cmd("setMDLengthUnits",&units.getLength()); + p.cmd("setMDEngine","driver"); + p.cmd("setTimestep",×tep); + p.cmd("setPlumedDat",plumedFile.c_str()); + p.cmd("setLog",out); if(debug_grex){ string n; @@ -227,29 +243,29 @@ int CLToolDriver<real>::main(FILE* in,FILE*out,PlumedCommunicator& pc){ trajectoryFile+="."+n; } - FILE* fp; - if (trajectoryFile=="-") - fp=in; - else { - fp=fopen(trajectoryFile.c_str(),"r"); - if(!fp){ - string msg="ERROR: Error opening XYZ file "+trajectoryFile; - fprintf(stderr,"%s\n",msg.c_str()); - return 1; - } - } - - - FILE* fp_forces=NULL; - if(dumpforces.length()>0){ - if(PlumedCommunicator::initialized() && pc.Get_size()>1){ - string n; - Tools::convert(pc.Get_rank(),n); - dumpforces+="."+n; - } - fp_forces=fopen(dumpforces.c_str(),"w"); + FILE* fp=NULL; FILE* fp_forces=NULL; + if(!noatoms){ + if (trajectoryFile=="-") + fp=in; + else { + fp=fopen(trajectoryFile.c_str(),"r"); + if(!fp){ + string msg="ERROR: Error opening XYZ file "+trajectoryFile; + fprintf(stderr,"%s\n",msg.c_str()); + return 1; + } + } + + if(dumpforces.length()>0){ + if(PlumedCommunicator::initialized() && pc.Get_size()>1){ + string n; + Tools::convert(pc.Get_rank(),n); + dumpforces+="."+n; + } + fp_forces=fopen(dumpforces.c_str(),"w"); + } } - + std::string line; std::vector<real> coordinates; std::vector<real> forces; @@ -272,29 +288,16 @@ int CLToolDriver<real>::main(FILE* in,FILE*out,PlumedCommunicator& pc){ // random stream to choose decompositions Random rnd; - while(Tools::getline(fp,line)){ + while(true){ + if(!noatoms){ + if(!Tools::getline(fp,line)) break; + } else if ( plumedStopCondition ) break; int natoms; bool ok; bool first_step=false; - sscanf(line.c_str(),"%d",&natoms); - if(checknatoms==0){ - checknatoms=natoms; - if(PlumedCommunicator::initialized()){ - if(multi>1){ - if(intracomm.Get_rank()==0) p.cmd("GREX setMPIIntercomm",&intercomm.Get_comm()); - p.cmd("GREX setMPIIntracomm",&intracomm.Get_comm()); - p.cmd("GREX init"); - } - p.cmd("setMPIComm",&intracomm.Get_comm()); - } - p.cmd("setMDLengthUnits",&units.getLength()); - p.cmd("setNatoms",&natoms); - p.cmd("setMDEngine","driver"); - p.cmd("setTimestep",×tep); - p.cmd("setPlumedDat",plumedFile.c_str()); - p.cmd("setLog",out); - p.cmd("init"); + if(!noatoms) sscanf(line.c_str(),"%d",&natoms); + if(checknatoms<0 && !noatoms){ pd_nlocal=natoms; pd_start=0; first_step=true; @@ -309,7 +312,13 @@ int CLToolDriver<real>::main(FILE* in,FILE*out,PlumedCommunicator& pc){ charges[index]=pdb.getBeta()[i]; } } - + } else if( checknatoms<0 && noatoms ){ + natoms=0; + } + if( checknatoms<0 ){ + checknatoms=natoms; + p.cmd("setNatoms",&natoms); + p.cmd("init"); } plumed_massert(checknatoms==natoms,"number of atom changed"); @@ -371,61 +380,63 @@ int CLToolDriver<real>::main(FILE* in,FILE*out,PlumedCommunicator& pc){ } } - ok=Tools::getline(fp,line); - plumed_massert(ok,"premature end of file"); - - std::vector<double> celld(9,0.0); - if(pbc_cli_given==false) { - std::vector<std::string> words; - words=Tools::getWords(line); - if(words.size()==3){ - sscanf(line.c_str(),"%lf %lf %lf",&celld[0],&celld[4],&celld[8]); - } else if(words.size()==9){ - sscanf(line.c_str(),"%lf %lf %lf %lf %lf %lf %lf %lf %lf", - &celld[0], &celld[1], &celld[2], - &celld[3], &celld[4], &celld[5], - &celld[6], &celld[7], &celld[8]); - } else plumed_merror("needed box in second line"); - } else { // from command line - celld=pbc_cli_box; - } - for(unsigned i=0;i<9;i++)cell[i]=real(celld[i]); - - // Read coordinates - for(int i=0;i<natoms;i++){ - ok=Tools::getline(fp,line); - plumed_massert(ok,"premature end of file"); - char dummy[1000]; - double cc[3]; - std::sscanf(line.c_str(),"%s %lf %lf %lf",dummy,&cc[0],&cc[1],&cc[2]); - if(!debug_pd || ( i>=pd_start && i<pd_start+pd_nlocal) ){ - coordinates[3*i]=real(cc[0]); - coordinates[3*i+1]=real(cc[1]); - coordinates[3*i+2]=real(cc[2]); - } - if(debug_dd){ - for(int i=0;i<dd_nlocal;++i){ - int kk=dd_gatindex[i]; - dd_coordinates[3*i+0]=coordinates[3*kk+0]; - dd_coordinates[3*i+1]=coordinates[3*kk+1]; - dd_coordinates[3*i+2]=coordinates[3*kk+2]; - } - } - } + if(!noatoms){ + ok=Tools::getline(fp,line); + plumed_massert(ok,"premature end of file"); + + std::vector<double> celld(9,0.0); + if(pbc_cli_given==false) { + std::vector<std::string> words; + words=Tools::getWords(line); + if(words.size()==3){ + sscanf(line.c_str(),"%lf %lf %lf",&celld[0],&celld[4],&celld[8]); + } else if(words.size()==9){ + sscanf(line.c_str(),"%lf %lf %lf %lf %lf %lf %lf %lf %lf", + &celld[0], &celld[1], &celld[2], + &celld[3], &celld[4], &celld[5], + &celld[6], &celld[7], &celld[8]); + } else plumed_merror("needed box in second line"); + } else { // from command line + celld=pbc_cli_box; + } + for(unsigned i=0;i<9;i++)cell[i]=real(celld[i]); + + // Read coordinates + for(int i=0;i<natoms;i++){ + ok=Tools::getline(fp,line); + plumed_massert(ok,"premature end of file"); + char dummy[1000]; + double cc[3]; + std::sscanf(line.c_str(),"%s %lf %lf %lf",dummy,&cc[0],&cc[1],&cc[2]); + if(!debug_pd || ( i>=pd_start && i<pd_start+pd_nlocal) ){ + coordinates[3*i]=real(cc[0]); + coordinates[3*i+1]=real(cc[1]); + coordinates[3*i+2]=real(cc[2]); + } + if(debug_dd){ + for(int i=0;i<dd_nlocal;++i){ + int kk=dd_gatindex[i]; + dd_coordinates[3*i+0]=coordinates[3*kk+0]; + dd_coordinates[3*i+1]=coordinates[3*kk+1]; + dd_coordinates[3*i+2]=coordinates[3*kk+2]; + } + } + } - if(debug_dd){ - p.cmd("setForces",&dd_forces[0]); - p.cmd("setPositions",&dd_coordinates[0]); - p.cmd("setMasses",&dd_masses[0]); - p.cmd("setCharges",&dd_charges[0]); - } else { - p.cmd("setForces",&forces[3*pd_start]); - p.cmd("setPositions",&coordinates[3*pd_start]); - p.cmd("setMasses",&masses[pd_start]); - p.cmd("setCharges",&charges[pd_start]); + if(debug_dd){ + p.cmd("setForces",&dd_forces[0]); + p.cmd("setPositions",&dd_coordinates[0]); + p.cmd("setMasses",&dd_masses[0]); + p.cmd("setCharges",&dd_charges[0]); + } else { + p.cmd("setForces",&forces[3*pd_start]); + p.cmd("setPositions",&coordinates[3*pd_start]); + p.cmd("setMasses",&masses[pd_start]); + p.cmd("setCharges",&charges[pd_start]); + } + p.cmd("setBox",&cell[0]); + p.cmd("setVirial",&virial[0]); } - p.cmd("setBox",&cell[0]); - p.cmd("setVirial",&virial[0]); p.cmd("setStep",&step); p.cmd("calc"); diff --git a/src/tools/PlumedFile.cpp b/src/tools/PlumedFile.cpp index 18db9242066db9e2104a743d47e73cea4a3ed729..36459164436a194087a04259b969ab4cca3fd2b0 100644 --- a/src/tools/PlumedFile.cpp +++ b/src/tools/PlumedFile.cpp @@ -492,15 +492,18 @@ PlumedIFile& PlumedIFile::scanField(Value* val){ } PlumedIFile& PlumedIFile::scanField(){ - for(unsigned i=0;i<fields.size();i++){ - plumed_assert(fields[i].read); + if(!ignoreFields){ + for(unsigned i=0;i<fields.size();i++){ + plumed_assert(fields[i].read); + } } inMiddleOfField=false; return *this; } PlumedIFile::PlumedIFile(): - inMiddleOfField(false) + inMiddleOfField(false), + ignoreFields(false) { } @@ -537,3 +540,7 @@ void PlumedIFile::reset(bool reset){ if(!reset) clearerr(fp); return; } + +void PlumedIFile::allowIgnoredFields(){ + ignoreFields=true; +} diff --git a/src/tools/PlumedFile.h b/src/tools/PlumedFile.h index a402c4427db57ef6b7fbb5cc7ba17668a736316d..430553be851de6587c06fdc0cb9bcfc0ef47051c 100644 --- a/src/tools/PlumedFile.h +++ b/src/tools/PlumedFile.h @@ -278,6 +278,8 @@ public virtual PlumedFileBase{ std::vector<Field> fields; /// Flag set in the middle of a field reading bool inMiddleOfField; +/// Set to true if you want to allow fields to be ignored in the read in file + bool ignoreFields; /// Advance to next field (= read one line) PlumedIFile& advanceField(); /// Find field index by name @@ -314,6 +316,8 @@ Typically used as bool FieldExist(const std::string& s); /// Read in a value PlumedIFile& scanField(Value* val); +/// Allow some of the fields in the input to be ignored + void allowIgnoredFields(); }; /// Write using << syntax