NWChem is being developed by a consortium of scientists and maintained at the EMSL at PNNL. A current list of developers can be found here. This page provides important information for current and new developers.
Downloading from and Committing to the NWChem source tree
The NWChem source is maintained with subversion, an open-source version control system. To download NWChem you must have subversion installed on your development platform. For an extensive descriptio of the SVN functionality and commands, please check the svn documentation.
Direct access to the source tree is password restricted. To gain access to the NWChem SVN tree see the section on Obtaining Read/Write access to NWChem source tree.
The development version of NWChem can be downloaded using the command
% svn checkout https://svn.pnl.gov/svn/nwchem/trunk nwchem
- Committing changes adding new files
Committing changes to existing source files can be done using the command
% svn commit -m <information about the changes made>
New files and directories can be added using the commands
% svn add <files or directories to add> % svn commit -m <information about the changes made>
- Before committing any changes or additions, make sure the NWChem tree compiles properly
- When adding new files, make sure to properly update the GNUMakefile in the directory you are working in, so that the new file gets compiled
- Do document your changes and additions using the "-m" option of svn
Obtaining Read/Write access to NWChem source tree
Developer access to the NWChem source tree branches in svn is password restricted. New potential developers should contact members of the NWChem Core Developer Team. Before contributions from this new developer can be incorporated into NWChem, this person will have to provide written feedback that the contributions can be released within NWChem under a ECL 2.0 open-source license. A (Trusted) Developer will receive the appropriate access to svn. If a Developer consistently incorporates code changes that negatively affect the development tree, access to svn can be revoked.
The type of developer and their level of access are:
- NWChem Core Developer: Developer has full svn access to release and development branches of the NWChem source tree. Owns and is responsible for one or more modules.
- Trusted Developer: Developer may be internal or external to PNNL but has full svn access to release and development branches of the NWChem source tree. May own or be responsible for one or more modules.
- Developer: Developer may be internal or external to PNNL and has selected svn access to the development branch of the NWChem source tree. Each Developer closely coordinates code contributions with the assigned Point of Contact (POC) from the NWChem Core Developer Team, primarily the Core Developer owning the module in which the contributions will reside. If the development leads to a new module, the NWChem Core Developer Team will assign a POC with responsibility for the new module.
- Contributor: Contributor may be internal or external to PNNL and has no access to the development branch of the NWChem source tree. Contributor’s code will be incorporated by the Point of Contact from the NWChem Core Developer Team. This is the main mechanism for external users to contribute developments or enhancements to NWChem.
Compiling NWChem from source
A detailed step-by-step description of the build process and necessary and optional environment variables is outlined on the Compiling NWChem page.
Development Contribution Requirements
All new functionality or capability contributions require:
- Proper documentation in the user manual
- QA Test Cases that adequately test the added functionality
Proposed new modules and tasks, and their impact on existing modules and functionality need to be documented for review. New modules or tasks will require agreement from the full team before they can be added.
Programming Model and Languages
The programming model in is based on independent "task" modules that perform various functions in the code and are build on modular APIs. Modules and APIs can share data, or share access to files containing data, only through a (most of the time) disk-resident run time database, which is similar to the GAMESS-UK dumpfile or the Gaussian checkpoint file. The run time database contains all the information necessary to restart a task.
The structure and flow of the program and input are such that it allows for performing multiple tasks within one job. Input is read and stored into the run time database until a TASK directive is encountered. When a TASK directive is found in the input, the appropriate module will extract relevant data from the database and any associated files and perform the requested calculation. Upon completion of the task, the module will store significant results in the database, and may also modify other database entries in order to affect the behavior of subsequent computations.
- Programming rules:
- All routines should start with "implicit none" and all variables used in the routine should be specified explicitly.
- Minimize or avoid sharing of data through common blocks. Instead use the run time database.
- Memory Allocation will be done through the MA and GA memory infrastructure.
- Global Arrays Toolkit and MPI for parallel programming.
- NWChem consists of the programming languages:
- FORTRAN77 and FORTRAN90. For FORTRAN90, avoid using allocates and deallocates. Dynamic memory access should be performed using the memory access (MA) layer.
- C and C++. Only simple constructs should be used in C++.
- OpenMP directives and CUDA/OpenCL.
- Python scripts can be uploaded into the contrib directory. Bindings to additional functionality require QA and documentation.
Testing of development version
- Code will be build nightly on a Redhat Linux64 Platform using gfortran and gcc.
- Code will be tested nightly against QA suite.
- Exhaustive coverage analysis of the QA suite will be performed twice a year.
NWChem Mailing List Archive
The archive of the NWChem Mailing list can be found here.
NWChem Wiki Page Guidelines
Follow the link to the NWChem Wiki Page Guidelines.