From 520ff84941af3b6ef2b0a0f1bdb2a465a30d4909 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 16 Feb 2020 17:18:42 +0100 Subject: [PATCH] vortex film GL test: starting point. --- src/tests/vortex-film/CMakeLists.txt | 95 +++++++++++++++++++++++++++ src/tests/vortex-film/vortex_film.cpp | 85 ++++++++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 src/tests/vortex-film/CMakeLists.txt create mode 100644 src/tests/vortex-film/vortex_film.cpp diff --git a/src/tests/vortex-film/CMakeLists.txt b/src/tests/vortex-film/CMakeLists.txt new file mode 100644 index 00000000..66fcb57a --- /dev/null +++ b/src/tests/vortex-film/CMakeLists.txt @@ -0,0 +1,95 @@ +# - musrfit +cmake_minimum_required(VERSION 3.9) + +if (CMAKE_VERSION GREATER_EQUAL 3.12) + cmake_policy(SET CMP0075 NEW) +endif (CMAKE_VERSION GREATER_EQUAL 3.12) + +project(vortex-film VERSION 1.0.0 LANGUAGES C CXX) + +set(CMAKE_CXX_STANDARD 11) +#set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +#--- set a default build type if none was specified --------------------------- +set(default_build_type "Debug") + +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to '${default_build_type}' as none was specified.") + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE + STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + +#--- perform some checks and generate the config.h ---------------------------- + +#--- the next two lines are needed that the math functions are found ---------- +set(CMAKE_REQUIRED_INCLUDES math.h) +set(CMAKE_REQUIRED_LIBRARIES m) + +include(CheckTypeSize) +include(CheckIncludeFiles) +include(CheckFunctionExists) +check_include_files(alloca.h HAVE_ALLOCA_H) +check_include_files("sys/ipc.h;sys/shm.h" HAVE_SHMGET) +check_include_files(dlfcn.h HAVE_DLFCN_H) +check_function_exists(erf HAVE_ERF) +check_function_exists(getloadavg HAVE_GETLOADAVG) +check_include_files(inttypes.h HAVE_INTTYPES_H) +check_include_files(memory.h HAVE_MEMORY_H) +check_function_exists(powl HAVE_POWL) +check_include_files(memory.h HAVE_MEMORY_H) +check_include_files(stdint.h HAVE_STDINT_H) +check_include_files(stdlib.h HAVE_STDLIB_H) +check_include_files(string.h HAVE_STRING_H) +check_include_files(strings.h HAVE_STRINGS_H) +check_include_files(sys/stat.h HAVE_SYS_STAT_H) +check_include_files(sys/types.h HAVE_SYS_TYPES_H) +check_include_files(sys/unistd.h HAVE_UNISTD_H) +check_type_size("long double" LONG_DOUBLE) +check_type_size("double" DOUBLE) +if (${LONG_DOUBLE} GREATER ${DOUBLE}) + set(HAVE_LONG_DOUBLE 1) + set(HAVE_LONG_DOUBLE_WIDER 1) +endif (${LONG_DOUBLE} GREATER ${DOUBLE}) + +#--- check for all the needed packages ---------------------------------------- + +#--- check for git ------------------------------------------------------------ +find_package(Git REQUIRED) + +#--- check for ROOT ----------------------------------------------------------- +find_package(ROOT 6.18 REQUIRED COMPONENTS Gui MathMore Minuit2 XMLParser) +if (ROOT_mathmore_FOUND) + execute_process(COMMAND root-config --bindir OUTPUT_VARIABLE ROOT_BINDIR) + string(STRIP ${ROOT_BINDIR} ROOT_BINDIR) + execute_process(COMMAND root-config --version OUTPUT_VARIABLE ROOT_VERSION) + string(STRIP ${ROOT_VERSION} ROOT_VERSION) + message("-- Found ROOT: ${ROOT_BINDIR} (found version: ${ROOT_VERSION})") + #---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY) + include(${ROOT_USE_FILE}) +endif (ROOT_mathmore_FOUND) + +#--- define the BMWlibs ------------------------------------------------------- +set(BMWlibs + BMWtools + FitPofB +) + +#--- add all executables ------------------------------------------------------ +add_executable(vortex_film + vortex_film.cpp +) +target_include_directories(vortex_film + BEFORE PRIVATE + $ +) +target_link_directories(vortex_film + BEFORE PRIVATE + $ENV{ROOTSYS}/lib +) +target_link_libraries(vortex_film ${ROOT_LIBRARIES} ${BMWlibs}) + +#--- end ---------------------------------------------------------------------- diff --git a/src/tests/vortex-film/vortex_film.cpp b/src/tests/vortex-film/vortex_film.cpp new file mode 100644 index 00000000..ba9466be --- /dev/null +++ b/src/tests/vortex-film/vortex_film.cpp @@ -0,0 +1,85 @@ +/*************************************************************************** + + vortex-film.cpp + + Author: Andreas Suter + e-mail: andreas.suter@psi.ch + +***************************************************************************/ + +/*************************************************************************** + * Copyright (C) 2020 by Andreas Suter * + * andreas.suter@psi.ch * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include + +#include +#include + +#include "TFilmTriVortexFieldCalc.h" + +void vortex_film_syntax() +{ + std::cout << std::endl; + std::cout << "usage: vortex_film field penetration_depth coherence_length layer_thickness [stepXY stepZ]" << std::endl; + std::cout << std::endl; +} + +int main(int argc, char *argv[]) +{ + if ((argc != 5) && (argc != 7)) { + vortex_film_syntax(); + return -1; + } + + std::vector param; + for (unsigned int i=1; i<5; i++) + param.push_back((float)atof(argv[i])); + + unsigned int stepXY = 256; + unsigned int stepZ = 32; + + if (argc == 7) { + stepXY = (unsigned int)strtol(argv[5], nullptr, 10); + stepZ = (unsigned int)strtol(argv[6], nullptr, 10); + } + + std::string wisdom(""); + // c++11 + std::unique_ptr vl(new TFilmTriVortexNGLFieldCalc(wisdom)); +/* will only work for c++14 + std::unique_ptr vl = std::make_unique(wisdom); +*/ + // set parameter + vl->SetParameters(param); + + // calculate the vortex lattice + vl->CalculateGrid(); + + std::cout << ">> Bmin: " << vl->GetBmin() << std::endl; + std::cout << ">> Bmax: " << vl->GetBmax() << std::endl; + + std::vector field = vl->DataB(); + + for (unsigned int i=0; i