eOn 3.2.0
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
// ILammpsLoader: injectable ABI. Production uses LammpsLoader::instance().
33
// ---------------------------------------------------------------------------
34
class
ILammpsLoader
{
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
47
open_no_mpi_fn
open_no_mpi
{
nullptr
};
48
close_fn
close
{
nullptr
};
49
command_fn
command
{
nullptr
};
50
file_fn
file
{
nullptr
};
51
scatter_atoms_fn
scatter_atoms
{
nullptr
};
52
extract_var_fn
extract_variable
{
nullptr
};
53
#ifdef EONMPI
54
open_mpi_fn open_mpi{
nullptr
};
55
#endif
56
57
virtual
~ILammpsLoader
() =
default
;
58
virtual
void
require_loaded
() = 0;
59
[[nodiscard]]
virtual
bool
is_loaded
() const noexcept = 0;
60
[[nodiscard]] virtual
bool
available
() const = 0;
61
[[nodiscard]] virtual const std::
string
&
last_error
() const noexcept = 0;
62
63
ILammpsLoader
(const
ILammpsLoader
&) = delete;
64
ILammpsLoader
&operator=(const
ILammpsLoader
&) = delete;
65
66
protected:
67
ILammpsLoader
() = default;
68
};
69
70
// ---------------------------------------------------------------------------
71
// LammpsLoader: process-default loader (Meyer's singleton). Does not dlopen
72
// until require_loaded().
73
// ---------------------------------------------------------------------------
74
class
LammpsLoader
: public
ILammpsLoader
{
75
public
:
77
static
LammpsLoader
&
instance
();
78
79
[[nodiscard]]
bool
is_loaded
() const noexcept
override
{
return
m_loaded
; }
80
83
[[nodiscard]]
bool
available
()
const override
;
84
86
[[nodiscard]]
const
std::string &
last_error
() const noexcept
override
{
87
return
m_last_error
;
88
}
89
91
void
require_loaded
()
override
;
92
93
LammpsLoader
(
const
LammpsLoader
&) =
delete
;
94
LammpsLoader
&
operator=
(
const
LammpsLoader
&) =
delete
;
95
96
private
:
97
LammpsLoader
() =
default
;
98
~LammpsLoader
()
override
;
99
100
void
ensure_loaded
();
101
102
bool
m_loaded
{
false
};
103
bool
m_tried
{
false
};
104
dynlib::Handle
m_handle
{};
105
std::string
m_last_error
{};
106
108
template
<
typename
Fn> Fn
load_sym
(
const
char
*name) {
109
return
reinterpret_cast<
Fn
>
(
dynlib::sym
(
m_handle
, name));
110
}
111
};
112
113
}
// namespace eonc
DynLib.h
eonc::ILammpsLoader::close
close_fn close
Definition
LammpsLoader.h:48
eonc::ILammpsLoader::file
file_fn file
Definition
LammpsLoader.h:50
eonc::ILammpsLoader::extract_var_fn
void *(*)(void *, const char *, const char *) extract_var_fn
Definition
LammpsLoader.h:42
eonc::ILammpsLoader::ILammpsLoader
ILammpsLoader(const ILammpsLoader &)=delete
eonc::ILammpsLoader::open_no_mpi
open_no_mpi_fn open_no_mpi
Definition
LammpsLoader.h:47
eonc::ILammpsLoader::open_no_mpi_fn
void *(*)(int, char **, void **) open_no_mpi_fn
Definition
LammpsLoader.h:37
eonc::ILammpsLoader::available
virtual bool available() const =0
eonc::ILammpsLoader::extract_variable
extract_var_fn extract_variable
Definition
LammpsLoader.h:52
eonc::ILammpsLoader::file_fn
void(*)(void *, const char *) file_fn
Definition
LammpsLoader.h:40
eonc::ILammpsLoader::scatter_atoms
scatter_atoms_fn scatter_atoms
Definition
LammpsLoader.h:51
eonc::ILammpsLoader::is_loaded
virtual bool is_loaded() const noexcept=0
eonc::ILammpsLoader::~ILammpsLoader
virtual ~ILammpsLoader()=default
eonc::ILammpsLoader::command
command_fn command
Definition
LammpsLoader.h:49
eonc::ILammpsLoader::close_fn
void(*)(void *) close_fn
Definition
LammpsLoader.h:38
eonc::ILammpsLoader::scatter_atoms_fn
void(*)(void *, const char *, int, int, void *) scatter_atoms_fn
Definition
LammpsLoader.h:41
eonc::ILammpsLoader::command_fn
char *(*)(void *, const char *) command_fn
Definition
LammpsLoader.h:39
eonc::ILammpsLoader::require_loaded
virtual void require_loaded()=0
eonc::ILammpsLoader::last_error
virtual const std::string & last_error() const noexcept=0
eonc::LammpsLoader::last_error
const std::string & last_error() const noexcept override
Why the last ensure_loaded() failed. Empty if unused or loaded.
Definition
LammpsLoader.h:86
eonc::LammpsLoader::is_loaded
bool is_loaded() const noexcept override
Definition
LammpsLoader.h:79
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:108
eonc::LammpsLoader::m_loaded
bool m_loaded
Definition
LammpsLoader.h:102
eonc::LammpsLoader::operator=
LammpsLoader & operator=(const LammpsLoader &)=delete
eonc::LammpsLoader::m_last_error
std::string m_last_error
Definition
LammpsLoader.h:105
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:104
eonc::LammpsLoader::LammpsLoader
LammpsLoader()=default
eonc::LammpsLoader::m_tried
bool m_tried
Definition
LammpsLoader.h:103
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:23
include
eon
potentials
LAMMPS
LammpsLoader.h
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf