********> bugfix.86 Author: Tom Cheatham (UCSF), Jean-Marie Teuler, CNRS-IDRIS, France Date: May 96, August 96; 'officialized' 2/18/97 Programs: Gibbs Severity: For MPI, severe. Problem: When > 1 processor. Cheatham: coredumping. Teuler: erroneous free energies. Cause: Cheatham: uninitialized variable (NUMPK). Teuler: variables not summed across nodes. Fix: Make the following changes to machinedep.f: ----------------------------------------------------------------------------- *** OLD machinedep.f --- NEW machinedep.f *************** *** 418,423 **** --- 418,424 ---- ILAST = NSOLW end if C + NUMPK=1 DO 1900 I = 1,ILAST C C LPR is number of n-b (not incl. LPRC) *************** *** 2604,2609 **** --- 2605,2615 ---- C C IMPLICIT DOUBLE PRECISION (A-H,O-Z) + #ifdef MPI + # include "mpif.h" + #endif + DOUBLE PRECISION E58, E59, E60 + COMMON/JMTE/E58, E59, E60 LOGICAL DIELD,SLTIMG,IFNB C C *************** *** 3805,3814 **** --- 3811,3838 ---- C Note that only the 6-12/10-12 energies are included in ENBCT/EHBCT. The C electrostatic contributions are already in EELPT/EEPG. C + #ifdef MPI + e58 = 0. + e59 = 0. + call mpi_reduce(EPERT(58),e58,1, + + MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_WORLD,ierr) + call mpi_reduce(EPERT(59),e59,1, + + MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_WORLD,ierr) + EPERT(58) = e58 + EPERT(59) = e59 + C + IF (ITER.EQ.1 .AND. IFR.EQ.1) THEN + e60 = 0. + call mpi_reduce(EPERT(60),e60,1, + + MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_WORLD,ierr) + EPERT(60) = e60 + END IF + #else EPERT(58) = EELPT(1) + ENBPN(1) + EHBCT + ENBCT EPERT(59) = EEPG(1) + EEPGN(1) + EHBCT + ENBCT C IF (ITER.EQ.1 .AND. IFR.EQ.1) EPERT(60) = EELPT(2) + ENBPN(2) + #endif C C ----- TRANSFORM THE OBLIQUE COORDINATES TO CARTESIAN IF NEEDED C ----------------------------------------------------------------------------- Temporary workarounds: Run with 1 processor. ---