Skip to content

Commit

Permalink
add USER-BFIELD package/plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
akohlmey committed Aug 4, 2023
1 parent 3abfff9 commit 7dbe3f9
Show file tree
Hide file tree
Showing 7 changed files with 891 additions and 6 deletions.
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ include(LAMMPSInterfacePlugin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})

if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
add_custom_target(package DEPENDS package-USER-AEAM package-USER-REBOMOS)
add_custom_target(package DEPENDS package-USER-AEAM package-USER-BFIELD package-USER-REBOMOS)
endif()
add_subdirectory(USER-AEAM)
add_subdirectory(USER-BFIELD)
add_subdirectory(USER-REBOMOS)
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
This repository contains source code written for LAMMPS from
various sources that is not part of the LAMMPS distribution
for a number of reasons, but ported to be compatible with the
23 June 2022 LAMMPS release and converted to create plugins.
2 August 2023 LAMMPS release and converted to create plugins.

| Folders | Origin of source code |
|--------------|----------------------------------------------------|
| USER-AEAM | https://github.com/psaidi/AEAM |
| USER-REBOMOS | https://matsci.org/t/pair-rebomos/30503 |
| Folders | Origin of source code |
|--------------|-----------------------------------------------------------------------------|
| USER-AEAM | https://github.com/psaidi/AEAM |
| USER-BFIELD | https://matsci.org/t/discrepency-beween-old-version-and-new-version/50014/5 |
| USER-REBOMOS | https://matsci.org/t/pair-rebomos/30503 |

As of the 22 December 2022 LAMMPS release, the USER-VCSGC package
code has been merged with upstream and the corresponding fix is now
Expand Down
71 changes: 71 additions & 0 deletions USER-BFIELD/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
##########################################
# CMake build system for plugin examples.
# The is meant to be used as a template for plugins that are
# distributed independent from the LAMMPS package.
##########################################

cmake_minimum_required(VERSION 3.10)
if(POLICY CMP0077)
cmake_policy(SET CMP0077 NEW)
endif()

project(bfieldplugin VERSION 1.0 LANGUAGES CXX)

if(NOT LAMMPS_SOURCE_DIR)
message(FATAL_ERROR "Must set LAMMPS_SOURCE_DIR variable")
endif()
set(CMAKE_MODULE_PATH "${LAMMPS_SOURCE_DIR}/../cmake/Modules")
if (NOT TARGET lammps)
include(CheckIncludeFileCXX)
include(LAMMPSInterfacePlugin)
endif()

##########################
# building the plugins

add_library(bfieldplugin MODULE bfieldplugin.cpp ${CMAKE_CURRENT_SOURCE_DIR}/fix_bfield.cpp)
target_link_libraries(bfieldplugin PRIVATE lammps)
set_target_properties(bfieldplugin PROPERTIES PREFIX "" SUFFIX ".so")

# MacOS seems to need this
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
set_target_properties(bfieldplugin PROPERTIES LINK_FLAGS "-Wl,-undefined,dynamic_lookup")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
# tell CMake to export all symbols to a .dll on Windows with special case for MinGW cross-compilers
set_target_properties(bfieldplugin PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
if(CMAKE_CROSSCOMPILING)
set_target_properties(bfieldplugin PROPERTIES LINK_FLAGS "-Wl,--export-all-symbols")
endif()

get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h LAMMPS_VERSION)
find_program(MAKENSIS_PATH makensis)
if(MAKENSIS_PATH)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../lammps.ico
${CMAKE_CURRENT_SOURCE_DIR}/../lammps-text-logo-wide.bmp ${CMAKE_CURRENT_SOURCE_DIR}/bfieldplugin.nsis ${CMAKE_BINARY_DIR})
if(TARGET package)
set(mytarget package-USER-BFIELD)
else()
set(mytarget package)
endif()
if(BUILD_MPI)
if(USE_MSMPI AND CMAKE_CROSSCOMPILING)
add_custom_target(${mytarget} ${MAKENSIS_PATH} -V1 -DVERSION=${LAMMPS_VERSION}-MSMPI bfieldplugin.nsis
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS bfieldplugin ${CMAKE_BINARY_DIR}/lammps.ico ${CMAKE_BINARY_DIR}/lammps-text-logo-wide.bmp ${CMAKE_BINARY_DIR}/bfieldplugin.nsis
BYPRODUCTS ${CMAKE_BINARY_DIR}/LAMMPS-USER-BFIELD-plugin-${LAMMPS_VERSION}-MSMPI.exe)
else()
add_custom_target(${mytarget} ${MAKENSIS_PATH} -V1 -DVERSION=${LAMMPS_VERSION}-MPI bfieldplugin.nsis
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS bfieldplugin ${CMAKE_BINARY_DIR}/lammps.ico ${CMAKE_BINARY_DIR}/lammps-text-logo-wide.bmp ${CMAKE_BINARY_DIR}/bfieldplugin.nsis
BYPRODUCTS ${CMAKE_BINARY_DIR}/LAMMPS-USER-BFIELD-plugin-${LAMMPS_VERSION}-MPI.exe)
endif()
else()
add_custom_target(${mytarget} ${MAKENSIS_PATH} -V1 -DVERSION=${LAMMPS_VERSION} bfieldplugin.nsis
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS bfieldplugin ${CMAKE_BINARY_DIR}/lammps.ico ${CMAKE_BINARY_DIR}/lammps-text-logo-wide.bmp ${CMAKE_BINARY_DIR}/bfieldplugin.nsis
BYPRODUCTS LAMMPS-USER-BFIELD-plugin-${LAMMPS_VERSION}.exe)
endif()
endif()
else()
set_target_properties(bfieldplugin PROPERTIES LINK_FLAGS "-rdynamic")
endif()
29 changes: 29 additions & 0 deletions USER-BFIELD/bfieldplugin.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

#include "lammpsplugin.h"

#include "version.h"

#include "fix_bfield.h"

using namespace LAMMPS_NS;

static Fix *bfieldcreator(LAMMPS *lmp, int argc, char **argv)
{
return new FixBfield(lmp, argc, argv);
}

extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc)
{
lammpsplugin_t plugin;
lammpsplugin_regfunc register_plugin = (lammpsplugin_regfunc) regfunc;

// register bfield fix style
plugin.version = LAMMPS_VERSION;
plugin.style = "fix";
plugin.name = "bfield";
plugin.info = "fix bfield plugin v1.0";
plugin.author = "Axel Kohlmeyer ([email protected])";
plugin.creator.v2 = (lammpsplugin_factory2 *) &bfieldcreator;
plugin.handle = handle;
(*register_plugin)(&plugin, lmp);
}
157 changes: 157 additions & 0 deletions USER-BFIELD/bfieldplugin.nsis
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
#!Nsis Installer Command Script
#
# The following external defines are recognized:
# ${VERSION} = YYYYMMDD

!include "MUI2.nsh"
!include "FileFunc.nsh"

!define MUI_ICON "lammps.ico"
!define MUI_UNICON "lammps.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "lammps-text-logo-wide.bmp"
!define MUI_HEADERIMAGE_RIGHT

Unicode true
XPStyle on

!include "LogicLib.nsh"
!addplugindir "envvar/Plugins/x86-unicode"
!include "x64.nsh"

RequestExecutionLevel user

!macro VerifyUserIsAdmin
UserInfo::GetAccountType
pop $0
${If} $0 != "admin"
messageBox mb_iconstop "Administrator rights required!"
setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
quit
${EndIf}
!macroend

!define BFIELDPLUGIN "LAMMPS USER-BFIELD Plugin ${VERSION}"
OutFile "LAMMPS-USER-BFIELD-plugin-${VERSION}.exe"

Name "${BFIELDPLUGIN}"
InstallDir "$LOCALAPPDATA\${BFIELDPLUGIN}"

ShowInstDetails show
ShowUninstDetails show
SetCompressor lzma

!define MUI_ABORTWARNING

!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"

function .onInit
# Determine if LAMMPS was already installed and check whether it was in 32-bit
# or 64-bit. Then look up path to uninstaller and offer to uninstall or quit
SetRegView 32
ReadRegDWORD $0 HKCU "Software\LAMMPS-USER-BFIELD" "Bits"
SetRegView LastUsed
${If} $0 == "32"
SetRegView 32
${ElseIf} $0 == "64"
SetRegView 64
${Else}
SetRegView 64
${EndIf}
ClearErrors
ReadRegStr $R0 HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" "UninstallString"
SetRegView LastUsed
${If} ${Errors}
DetailPrint "LAMMPS USER-BFIELD plugin not (yet) installed"
${Else}
MessageBox MB_YESNO "LAMMPS USER-BFIELD plugin ($0 bit) is already installed. Uninstall existing version?" /SD IDYES IDNO Quit
Pop $R1
StrCmp $R1 2 Quit +1
Exec $R0
Quit:
Quit
${EndIf}
setShellVarContext all
functionEnd

Section "${BFIELDPLUGIN}" SecPaceplugin
SectionIn RO
# Write LAMMPS installation bitness marker. Always use 32-bit registry view
SetRegView 32
IntFmt $0 "0x%08X" 64
WriteRegDWORD HKCU "Software\LAMMPS-USER-BFIELD" "Bits" $0

# Switch to "native" registry view
SetRegView 64
SetShellVarContext current

SetOutPath "$INSTDIR"
File lammps.ico
File bfieldplugin.so

# Register Application and its uninstaller
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" \
"DisplayName" "${BFIELDPLUGIN}"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" \
"Publisher" "The LAMMPS and USER-BFIELD Developers"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" \
"URLInfoAbout" "lammps.org"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" \
"DisplayIcon" "$INSTDIR\lammps.ico"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" \
"DisplayVersion" "${VERSION}"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" \
"InstallLocation" "$INSTDIR"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" \
"UninstallString" "$\"$INSTDIR\uninstall.exe$\""
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" \
"QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"

${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
IntFmt $0 "0x%08X" $0
WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD" \
"EstimatedSize" "$0"

# update path variables
EnVar::SetHKCU
# add to LAMMPS plugin search path
EnVar::AddValue "LAMMPS_PLUGIN_PATH" "$INSTDIR"

WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd

function un.onInit
SetShellVarContext current
functionEnd

Section "Uninstall"
# remove LAMMPS bitness/installation indicator always in 32-bit registry view
SetRegView 32
DeleteRegKey HKCU "Software\LAMMPS-USER-BFIELD"

# unregister extension, and uninstall info
SetRegView 64
SetShellVarContext current
# unregister installation
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-USER-BFIELD"

# update path variables
EnVar::SetHKCU
# remove entry from LAMMPS plugin search path
EnVar::DeleteValue "LAMMPS_PLUGIN_PATH" "$INSTDIR"

Delete /REBOOTOK "$INSTDIR\bfieldplugin.so"
Delete /REBOOTOK "$INSTDIR\Uninstall.exe"
Delete /REBOOTOK "$INSTDIR\lammps.ico"
RMDir /REBOOTOK "$INSTDIR"
SectionEnd

# Local Variables:
# mode: sh
# End:
Loading

0 comments on commit 7dbe3f9

Please sign in to comment.