Introduction


PUPIL,Program for User Package Interface and Linking, is a software environment - the program - that allows developers to link quickly and efficiently together multiple pieces of software in a fully automated multi-scale simulation. More specifically, it supports QM/MM MD simulations where the user might choose among any of the different MD engines and QM engines, which are connected to PUPIL as external programs through a tiny specific interface. One of the main advantages here is that the user can use most of the functionalities that may have those external programs interfaced without the necessity to be implemented again on independent interfaces. In fact, this simulation interface concentrates all the common code involved in the coupling terms of the QM/MM approach.


The design philosophy of PUPIL was to provide an environment for the software developer of user packages for simulation in material science and engineering in which it is possible to pass control and data from one user package to another in a straightforward manner. A requirement of the design is that the changes any developer must make to any of the user packages must be small. To make such changes, it is obviously required to understand the user package, but we wanted to avoid the need to have a complete and exhaustive understanding such as would be required when one wants to create a combined user package from to independently developed user packages.


The architecture of PUPIL is that of a supervisor program that coordinates the execution and communication between the user packages, which are called calculation units (CU). The supervisor is implemented as a distributed program with one manager and several workers, one for each calculation unit. The manager and the workers communicate via the RMI (remote method invocation) protocol. The worker code is part of the calculation unit executable and the communication with the calculation unit and its worker is by subroutine calls. The manager and the worker code are written in Java. The worker’s Java code calls C-code in the calculation unit through the JNI (Java Native Interface). The calculation code, often written in Fortran or C, calls C-code in the PUPIL library to.


Capabilities

Current version: 4.0 (August 4th, 2022)
Electrostatic Embedding Start-Stop Behavior Cyclic Behavior Tightly Coupled Interface MPI execution
QM codes
deMon2k
Gaussian - a,b
NWChem
Siesta
Orca - a
MOPAC 2016
MM codes
AMBER22
DL_CLASSIC

a Conventional parallel execution using threads.
b Parallel execution using LINDA software.

ChangeLog


New release: version 4.0 (August 4th, 2022)
New release: version 3.1 (November 1, 2016)
New release: version 3.0 (December 8, 2014)
New release: version 2.0 (January 12, 2013)


New release: version 1.4 (August 4, 2011)
New release: version 1.3 (December 12, 2009)
New documentation release (May 10, 2009)
New bugfix release: Version 1.2-1 (March 15, 2009)
2006-2022 PUPIL Authors, All Rights Reserved | Website created by Montse Casajuana