eOn client
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
LammpsLoader.h
Go to the documentation of this file.
1
/*
2
** This file is part of eOn.
3
**
4
** SPDX-License-Identifier: BSD-3-Clause
5
**
6
** Copyright (c) 2010--present, eOn Development Team
7
** All rights reserved.
8
**
9
** Repo:
10
** https://github.com/TheochemUI/eOn
11
*/
12
#pragma once
13
19
20
#include "
eon/DynLib.h
"
21
22
#include <stdexcept>
23
#include <string>
24
25
#ifdef EONMPI
26
#include <mpi.h>
27
#endif
28
29
namespace
eonc
{
30
31
// ---------------------------------------------------------------------------
32
// LammpsLoader: singleton that loads liblammps function pointers at runtime
33
// ---------------------------------------------------------------------------
34
class
LammpsLoader
{
35
public
:
36
// LAMMPS C API function pointer types (from library.h)
37
using
open_no_mpi_fn
=
void
*(*)(
int
,
char
**,
void
**);
38
using
close_fn
= void (*)(
void
*);
39
using
command_fn
=
char
*(*)(
void
*,
const
char
*);
40
using
file_fn
= void (*)(
void
*,
const
char
*);
41
using
scatter_atoms_fn
= void (*)(
void
*,
const
char
*, int, int,
void
*);
42
using
extract_var_fn
=
void
*(*)(
void
*,
const
char
*,
const
char
*);
43
#ifdef EONMPI
44
using
open_mpi_fn =
void
*(*)(
int
,
char
**, MPI_Comm,
void
**);
45
#endif
46
48
static
LammpsLoader
&
instance
();
49
50
// Loaded function pointers (null if library not found)
51
open_no_mpi_fn
open_no_mpi
{
nullptr
};
52
close_fn
close
{
nullptr
};
53
command_fn
command
{
nullptr
};
54
file_fn
file
{
nullptr
};
55
scatter_atoms_fn
scatter_atoms
{
nullptr
};
56
extract_var_fn
extract_variable
{
nullptr
};
57
#ifdef EONMPI
58
open_mpi_fn open_mpi{
nullptr
};
59
#endif
60
62
[[nodiscard]]
bool
is_loaded
() const noexcept {
return
m_loaded
; }
63
66
[[nodiscard]]
bool
available
()
const
;
67
69
void
require_loaded
();
70
71
LammpsLoader
(
const
LammpsLoader
&) =
delete
;
72
LammpsLoader
&
operator=
(
const
LammpsLoader
&) =
delete
;
73
74
private
:
75
LammpsLoader
() =
default
;
76
~LammpsLoader
();
77
78
void
ensure_loaded
();
79
80
bool
m_loaded
{
false
};
81
bool
m_tried
{
false
};
82
dynlib::Handle
m_handle
{};
83
85
template
<
typename
Fn> Fn
load_sym
(
const
char
*name) {
86
return
reinterpret_cast<
Fn
>
(
dynlib::sym
(
m_handle
, name));
87
}
88
};
89
90
}
// namespace eonc
DynLib.h
eonc::LammpsLoader::command_fn
char *(*)(void *, const char *) command_fn
Definition
LammpsLoader.h:39
eonc::LammpsLoader::extract_var_fn
void *(*)(void *, const char *, const char *) extract_var_fn
Definition
LammpsLoader.h:42
eonc::LammpsLoader::scatter_atoms
scatter_atoms_fn scatter_atoms
Definition
LammpsLoader.h:55
eonc::LammpsLoader::available
bool available() const
Filesystem probe: a candidate liblammps file is visible without dlopen, so LAMMPS static initializers...
Definition
LammpsLoader.cpp:120
eonc::LammpsLoader::~LammpsLoader
~LammpsLoader()
Definition
LammpsLoader.cpp:118
eonc::LammpsLoader::require_loaded
void require_loaded()
Load on first use, then throw if liblammps is not available.
Definition
LammpsLoader.cpp:124
eonc::LammpsLoader::open_no_mpi
open_no_mpi_fn open_no_mpi
Definition
LammpsLoader.h:51
eonc::LammpsLoader::scatter_atoms_fn
void(*)(void *, const char *, int, int, void *) scatter_atoms_fn
Definition
LammpsLoader.h:41
eonc::LammpsLoader::LammpsLoader
LammpsLoader(const LammpsLoader &)=delete
eonc::LammpsLoader::load_sym
Fn load_sym(const char *name)
Try to load a symbol; returns nullptr on failure.
Definition
LammpsLoader.h:85
eonc::LammpsLoader::file
file_fn file
Definition
LammpsLoader.h:54
eonc::LammpsLoader::command
command_fn command
Definition
LammpsLoader.h:53
eonc::LammpsLoader::m_loaded
bool m_loaded
Definition
LammpsLoader.h:80
eonc::LammpsLoader::operator=
LammpsLoader & operator=(const LammpsLoader &)=delete
eonc::LammpsLoader::close_fn
void(*)(void *) close_fn
Definition
LammpsLoader.h:38
eonc::LammpsLoader::open_no_mpi_fn
void *(*)(int, char **, void **) open_no_mpi_fn
Definition
LammpsLoader.h:37
eonc::LammpsLoader::close
close_fn close
Definition
LammpsLoader.h:52
eonc::LammpsLoader::ensure_loaded
void ensure_loaded()
Definition
LammpsLoader.cpp:84
eonc::LammpsLoader::instance
static LammpsLoader & instance()
Thread-safe singleton accessor (Meyer's pattern). Does not dlopen.
Definition
LammpsLoader.cpp:79
eonc::LammpsLoader::m_handle
dynlib::Handle m_handle
Definition
LammpsLoader.h:82
eonc::LammpsLoader::LammpsLoader
LammpsLoader()=default
eonc::LammpsLoader::file_fn
void(*)(void *, const char *) file_fn
Definition
LammpsLoader.h:40
eonc::LammpsLoader::extract_variable
extract_var_fn extract_variable
Definition
LammpsLoader.h:56
eonc::LammpsLoader::m_tried
bool m_tried
Definition
LammpsLoader.h:81
eonc::LammpsLoader::is_loaded
bool is_loaded() const noexcept
True if liblammps was successfully dlopened and the C ABI resolved.
Definition
LammpsLoader.h:62
eonc::dynlib::sym
void * sym(Handle h, const char *name) noexcept
Definition
DynLib.h:75
eonc::dynlib::Handle
void * Handle
Definition
DynLib.h:60
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:19
include
eon
potentials
LAMMPS
LammpsLoader.h
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf