source: tests/Calculations/testsuite-calculations-jobmarket-mpqc.at@ 9eed14

ForceAnnealing_goodresults ForceAnnealing_tocheck
Last change on this file since 9eed14 was fbf005, checked in by Frederik Heber <heber@…>, 8 years ago

HUGE: Extracted libmolecuilder_mpqc that is now linked to poolworker.

  • This stops the problems with MemDebug and mpqc when linking against libLinearAlgebra in debug mode: static global variables in libLinAlg are allocated using MemDebug (prefixed with a checksum) but are deallocated using normal libc's free() on exit. This causes an invalid free() as the ptr given to free points inside the block and not at its start. The problem comes from mpqc's use of own new and delete implementation. I'm guessing its reference counting is the culprit. Hence, we need to separate these two compilations from another in different units/libraries. Therefore, we have split off libmolecuilder_mpqc, .._mpqc_extract and additionally place the MPQCJob::Work() implementation inside libMolecuilderJobs_Work.
  • libmolecuilder_mpqc contains all MPQC's code in mpqc.cc (and linked libraries) that is not the main() function.
  • libmolecuilder_mpqc_extract contains functions that extract results such as energies, forces, charge grids from the obtained mpqc solution. These were added by myself to the mpqc code before.
  • molecuilder_mpqc is then linked against a NoOp .._extract library version. Thereby, it does not use any of the Molecuilder or related libraries and does not come in contact with MemDebug.
  • molecuilder_poolworker however is linked with the full .._extract library and hence performs these extractions.
  • poolworker now executes MPQCJob, MPQCCommandJob, and VMGJob and therefore needs to enforce binding to all of them.
  • TESTS: renamed molecuilder_mpqc.in to molecuilder_poolworker.in.
  • Property mode set to 100644
File size: 3.1 KB
Line 
1#
2# MoleCuilder - creates and alters molecular systems
3# Copyright (C) 2014 Frederik Heber
4#
5# This program is free software: you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation, either version 3 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program. If not, see <http://www.gnu.org/licenses/>.
17#
18AT_SETUP([Checking for present and working mpqc])
19AT_KEYWORDS([Calculations mpqc])
20AT_TESTED([mpqc])
21
22# check that ports are unique over all tests such that they may run in parallel
23WORKERPORT=3090
24CONTROLLERPORT=3091
25WORKERLISTENPORT=3092
26
27# start service in background
28${AUTOTEST_PATH}/molecuilder_server --workerport $WORKERPORT --controllerport $CONTROLLERPORT &
29server_pid=$!
30AT_CHECK([sleep 2], 0, [ignore], [ignore], [kill $server_pid])
31AT_CHECK([kill -s 0 $server_pid], 0, [ignore], [ignore], [kill $server_pid])
32
33# enlist a worker to work on jobs
34../../molecuilder_poolworker -v 5 --server 127.0.0.1:${WORKERPORT} --hostname 127.0.0.1 --listen $WORKERLISTENPORT &
35worker_pid=$!
36AT_CHECK([sleep 2], 0, [ignore], [ignore], [kill $worker_pid $server_pid])
37AT_CHECK([kill -s 0 $worker_pid], 0, [ignore], [ignore], [kill $worker_pid $server_pid])
38
39file=input.in
40AT_CHECK([cp -f $abs_top_srcdir/tests/Calculations/pre/water.in $file], 0, ignore, ignore)
41AT_CHECK([chmod u+w $file], 0)
42AT_CHECK([mpqc -o output.out input.in], 0, ignore, ignore)
43AT_CHECK(
44 [grep -E 'Value of the MolecularEnergy:' output.out | tr -d \ | awk -F":" 'function abs(x){return ((x < 0.0) ? -x : x)} {if (abs($2 - -74.9598807973) > 1e-5) exit(1)}'],
45 0,
46 ignore,
47 ignore)
48AT_CHECK([tail -n 1 ${FILENAME}_Energy.dat | awk '{print $2}' >energy_stdout], 0, [stdout], [stderr], [kill $worker_pid $server_pid])
49
50# send removeall to server such that all workers shutdown
51AT_CHECK([${AUTOTEST_PATH}/molecuilder_controller --server 127.0.0.1:$CONTROLLERPORT --command removeall], 0, [ignore], [ignore], [kill $worker_pid $server_pid])
52
53# shutdown controller socket
54AT_CHECK([sleep 1], 0, [ignore], [ignore], [kill $worker_pid $server_pid])
55AT_CHECK([${AUTOTEST_PATH}/molecuilder_controller --server 127.0.0.1:$CONTROLLERPORT --command shutdown], 0, [stdout], [ignore], [kill $worker_pid $server_pid])
56
57# check that worker is truly down
58AT_CHECK([sleep 1], 0, [ignore], [ignore], [kill $worker_pid $server_pid])
59AT_CHECK([kill $worker_pid], 1, [ignore], [ignore], [kill $server_pid])
60
61# check that server is truly down
62AT_CHECK([sleep 1], 0, [ignore], [ignore], [kill $server_pid])
63AT_CHECK([kill $server_pid], 1, [ignore], [ignore])
64
65# check calculated energy
66AT_CHECK([cat energy_stdout | awk -v energy=$ENERGY 'function abs(x){return ((x < 0.0) ? -x : x)} {if (abs(($1 - energy)/energy) > 1e-5) exit(1)}'], 0, [stdout], [stderr])
67
68AT_CLEANUP
Note: See TracBrowser for help on using the repository browser.