add lammps_kokos_finalize() support to various LAMMPS wrappers and document
This commit is contained in:
@ -9,6 +9,7 @@ This section documents the following functions:
|
|||||||
- :cpp:func:`lammps_close`
|
- :cpp:func:`lammps_close`
|
||||||
- :cpp:func:`lammps_mpi_init`
|
- :cpp:func:`lammps_mpi_init`
|
||||||
- :cpp:func:`lammps_mpi_finalize`
|
- :cpp:func:`lammps_mpi_finalize`
|
||||||
|
- :cpp:func:`lammps_kokkos_finalize`
|
||||||
|
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
|||||||
@ -134,7 +134,10 @@ compiled with.
|
|||||||
The :py:func:`lmp.close() <lammps.lammps.close()>` call is
|
The :py:func:`lmp.close() <lammps.lammps.close()>` call is
|
||||||
optional since the LAMMPS class instance will also be deleted
|
optional since the LAMMPS class instance will also be deleted
|
||||||
automatically during the :py:class:`lammps <lammps.lammps>` class
|
automatically during the :py:class:`lammps <lammps.lammps>` class
|
||||||
destructor.
|
destructor. Instead of :py:func:`lmp.close() <lammps.lammps.close()>`
|
||||||
|
it is also possible to call :py:func:`lmp.finalize() <lammps.lammps.finalize()>`;
|
||||||
|
this will destruct the LAMMPS instance, but also finalized and release
|
||||||
|
the MPI and/or Kokkos environment if enabled and active.
|
||||||
|
|
||||||
Note that you can create multiple LAMMPS objects in your Python
|
Note that you can create multiple LAMMPS objects in your Python
|
||||||
script, and coordinate and run multiple simulations, e.g.
|
script, and coordinate and run multiple simulations, e.g.
|
||||||
|
|||||||
@ -76,17 +76,15 @@ MODULE LIBLAMMPS
|
|||||||
TYPE(c_ptr), VALUE :: handle
|
TYPE(c_ptr), VALUE :: handle
|
||||||
END SUBROUTINE lammps_close
|
END SUBROUTINE lammps_close
|
||||||
|
|
||||||
SUBROUTINE lammps_mpi_init(handle) BIND(C, name='lammps_mpi_init')
|
SUBROUTINE lammps_mpi_init() BIND(C, name='lammps_mpi_init')
|
||||||
IMPORT :: c_ptr
|
|
||||||
TYPE(c_ptr), VALUE :: handle
|
|
||||||
END SUBROUTINE lammps_mpi_init
|
END SUBROUTINE lammps_mpi_init
|
||||||
|
|
||||||
SUBROUTINE lammps_mpi_finalize(handle) &
|
SUBROUTINE lammps_mpi_finalize() BIND(C, name='lammps_mpi_finalize')
|
||||||
BIND(C, name='lammps_mpi_finalize')
|
|
||||||
IMPORT :: c_ptr
|
|
||||||
TYPE(c_ptr), VALUE :: handle
|
|
||||||
END SUBROUTINE lammps_mpi_finalize
|
END SUBROUTINE lammps_mpi_finalize
|
||||||
|
|
||||||
|
SUBROUTINE lammps_kokkos_finalize() BIND(C, name='lammps_kokkos_finalize')
|
||||||
|
END SUBROUTINE lammps_kokkos_finalize
|
||||||
|
|
||||||
SUBROUTINE lammps_file(handle,filename) BIND(C, name='lammps_file')
|
SUBROUTINE lammps_file(handle,filename) BIND(C, name='lammps_file')
|
||||||
IMPORT :: c_ptr
|
IMPORT :: c_ptr
|
||||||
TYPE(c_ptr), VALUE :: handle
|
TYPE(c_ptr), VALUE :: handle
|
||||||
@ -188,7 +186,8 @@ CONTAINS
|
|||||||
|
|
||||||
IF (PRESENT(finalize)) THEN
|
IF (PRESENT(finalize)) THEN
|
||||||
IF (finalize) THEN
|
IF (finalize) THEN
|
||||||
CALL lammps_mpi_finalize(self%handle)
|
CALL lammps_kokkos_finalize()
|
||||||
|
CALL lammps_mpi_finalize()
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
END SUBROUTINE lmp_close
|
END SUBROUTINE lmp_close
|
||||||
|
|||||||
@ -460,10 +460,16 @@ class lammps(object):
|
|||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
|
|
||||||
def finalize(self):
|
def finalize(self):
|
||||||
"""Shut down the MPI communication through the library interface by calling :cpp:func:`lammps_finalize`.
|
"""Shut down the MPI communication and Kokkos environment (if active) through the
|
||||||
|
library interface by calling :cpp:func:`lammps_mpi_finalize` and
|
||||||
|
:cpp:func:`lammps_kokkos_finalize`.
|
||||||
|
|
||||||
|
You cannot create or use any LAMMPS instances after this function is called
|
||||||
|
unless LAMMPS was compiled without MPI and without Kokkos support.
|
||||||
"""
|
"""
|
||||||
self.close()
|
self.close()
|
||||||
self.lib.lammps_finalize()
|
self.lib.lammps_kokkos_finalize()
|
||||||
|
self.lib.lammps_mpi_finalize()
|
||||||
|
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -334,8 +334,8 @@ The MPI standard requires that any MPI application calls
|
|||||||
do any MPI calls, MPI is still initialized internally to avoid errors
|
do any MPI calls, MPI is still initialized internally to avoid errors
|
||||||
accessing any MPI functions. This function should then be called right
|
accessing any MPI functions. This function should then be called right
|
||||||
before exiting the program to wait until all (parallel) tasks are
|
before exiting the program to wait until all (parallel) tasks are
|
||||||
completed and then MPI is cleanly shut down. After this function no
|
completed and then MPI is cleanly shut down. After calling this
|
||||||
more MPI calls may be made.
|
function no more MPI calls may be made.
|
||||||
|
|
||||||
.. versionadded:: 18Sep2020
|
.. versionadded:: 18Sep2020
|
||||||
|
|
||||||
@ -354,6 +354,23 @@ void lammps_mpi_finalize()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/** Shut down the Kokkos library environment.
|
||||||
|
*
|
||||||
|
\verbatim embed:rst
|
||||||
|
|
||||||
|
The Kokkos library may only be initialized once during the execution of
|
||||||
|
a process. This is done automatically the first time Kokkos
|
||||||
|
functionality is used. This requires that the Kokkos environment
|
||||||
|
must be explicitly shut down after any LAMMPS instance using it is
|
||||||
|
closed (to release associated resources).
|
||||||
|
After calling this function no Kokkos functionality may be used.
|
||||||
|
|
||||||
|
.. versionadded:: TBD
|
||||||
|
|
||||||
|
\endverbatim */
|
||||||
|
|
||||||
void lammps_kokkos_finalize()
|
void lammps_kokkos_finalize()
|
||||||
{
|
{
|
||||||
KokkosLMP::finalize();
|
KokkosLMP::finalize();
|
||||||
|
|||||||
@ -63,6 +63,7 @@ extern void *lammps_open_fortran(int argc, char **argv, int f_comm);
|
|||||||
extern void lammps_close(void *handle);
|
extern void lammps_close(void *handle);
|
||||||
extern void lammps_mpi_init();
|
extern void lammps_mpi_init();
|
||||||
extern void lammps_mpi_finalize();
|
extern void lammps_mpi_finalize();
|
||||||
|
extern void lammps_kokkos_finalize();
|
||||||
extern void lammps_file(void *handle, const char *file);
|
extern void lammps_file(void *handle, const char *file);
|
||||||
extern char *lammps_command(void *handle, const char *cmd);
|
extern char *lammps_command(void *handle, const char *cmd);
|
||||||
extern void lammps_commands_list(void *handle, int ncmd, const char **cmds);
|
extern void lammps_commands_list(void *handle, int ncmd, const char **cmds);
|
||||||
@ -185,6 +186,7 @@ extern void *lammps_open_fortran(int argc, char **argv, int f_comm);
|
|||||||
extern void lammps_close(void *handle);
|
extern void lammps_close(void *handle);
|
||||||
extern void lammps_mpi_init();
|
extern void lammps_mpi_init();
|
||||||
extern void lammps_mpi_finalize();
|
extern void lammps_mpi_finalize();
|
||||||
|
extern void lammps_kokkos_finalize();
|
||||||
extern void lammps_file(void *handle, const char *file);
|
extern void lammps_file(void *handle, const char *file);
|
||||||
extern char *lammps_command(void *handle, const char *cmd);
|
extern char *lammps_command(void *handle, const char *cmd);
|
||||||
extern void lammps_commands_list(void *handle, int ncmd, const char **cmds);
|
extern void lammps_commands_list(void *handle, int ncmd, const char **cmds);
|
||||||
|
|||||||
Reference in New Issue
Block a user