diff --git a/Makefile b/Makefile
index 5a8f1cd..f275cce 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,7 @@ TARGET = MDBench-$(TAG)-$(OPT_SCHEME)
BUILD_DIR = ./$(TAG)-$(OPT_SCHEME)
SRC_DIR = ./$(OPT_SCHEME)
ASM_DIR = ./asm
+COMMON_DIR = ./common
CUDA_DIR = ./$(SRC_DIR)/cuda
MAKE_DIR = ./
Q ?= @
@@ -13,7 +14,7 @@ include $(MAKE_DIR)/include_$(TAG).mk
include $(MAKE_DIR)/include_LIKWID.mk
include $(MAKE_DIR)/include_ISA.mk
include $(MAKE_DIR)/include_GROMACS.mk
-INCLUDES += -I./$(SRC_DIR)/includes
+INCLUDES += -I./$(SRC_DIR)/includes -I./$(COMMON_DIR)/includes
ifeq ($(strip $(DATA_LAYOUT)),AOS)
DEFINES += -DAOS
@@ -89,6 +90,7 @@ ASM = $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.s,$(wildcard $(SRC_DIR)/*.
OVERWRITE:= $(patsubst $(ASM_DIR)/%-new.s, $(BUILD_DIR)/%.o,$(wildcard $(ASM_DIR)/*-new.s))
OBJ = $(filter-out $(BUILD_DIR)/main% $(OVERWRITE),$(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o,$(wildcard $(SRC_DIR)/*.c)))
OBJ += $(patsubst $(ASM_DIR)/%.s, $(BUILD_DIR)/%.o,$(wildcard $(ASM_DIR)/*.s))
+OBJ += $(patsubst $(COMMON_DIR)/%.c, $(BUILD_DIR)/%-common.o,$(wildcard $(COMMON_DIR)/*.c))
ifeq ($(strip $(TAG)),NVCC)
OBJ += $(patsubst $(CUDA_DIR)/%.cu, $(BUILD_DIR)/%-cuda.o,$(wildcard $(CUDA_DIR)/*.cu))
endif
@@ -114,6 +116,11 @@ $(BUILD_DIR)/%.o: %.c
$(Q)$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
$(Q)$(CC) $(CPPFLAGS) -MT $@ -MM $< > $(BUILD_DIR)/$*.d
+$(BUILD_DIR)/%-common.o: $(COMMON_DIR)/%.c
+ $(info ===> COMPILE $@)
+ $(Q)$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
+ $(Q)$(CC) $(CPPFLAGS) -MT $@ -MM $< > $(BUILD_DIR)/$*.d
+
$(BUILD_DIR)/%-cuda.o: %.cu
$(info ===> COMPILE $@)
$(Q)$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
diff --git a/lammps/includes/util.h b/common/includes/util.h
similarity index 100%
rename from lammps/includes/util.h
rename to common/includes/util.h
diff --git a/lammps/util.c b/common/util.c
similarity index 100%
rename from lammps/util.c
rename to common/util.c
diff --git a/gromacs/includes/util.h b/gromacs/includes/util.h
deleted file mode 100644
index 3da0bfc..0000000
--- a/gromacs/includes/util.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * =======================================================================================
- *
- * Author: Jan Eitzinger (je), jan.eitzinger@fau.de
- * Copyright (c) 2020 RRZE, University Erlangen-Nuremberg
- *
- * This file is part of MD-Bench.
- *
- * MD-Bench is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * MD-Bench 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 Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public License along
- * with MD-Bench. If not, see .
- * =======================================================================================
- */
-#ifndef __UTIL_H_
-#define __UTIL_H_
-
-#ifndef MIN
-# define MIN(x,y) ((x)<(y)?(x):(y))
-#endif
-
-#ifndef MAX
-# define MAX(x,y) ((x)>(y)?(x):(y))
-#endif
-
-#ifndef ABS
-# define ABS(a) ((a) >= 0 ? (a) : -(a))
-#endif
-
-#ifdef DEBUG
-# define DEBUG_MESSAGE printf
-#else
-# define DEBUG_MESSAGE
-#endif
-
-#ifndef MAXLINE
-# define MAXLINE 4096
-#endif
-
-#if PRECISION == 1
-# define PRECISION_STRING "single"
-#else
-# define PRECISION_STRING "double"
-#endif
-
-#define FF_LJ 0
-#define FF_EAM 1
-
-extern double myrandom(int*);
-extern void random_reset(int *seed, int ibase, double *coord);
-extern int str2ff(const char *string);
-extern const char* ff2str(int ff);
-#endif
diff --git a/gromacs/util.c b/gromacs/util.c
deleted file mode 100644
index 0347ab6..0000000
--- a/gromacs/util.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * =======================================================================================
- *
- * Author: Jan Eitzinger (je), jan.eitzinger@fau.de
- * Copyright (c) 2020 RRZE, University Erlangen-Nuremberg
- *
- * This file is part of MD-Bench.
- *
- * MD-Bench is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * MD-Bench 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 Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public License along
- * with MD-Bench. If not, see .
- * =======================================================================================
- */
-#include
-
-#include
-
-/* Park/Miller RNG w/out MASKING, so as to be like f90s version */
-#define IA 16807
-#define IM 2147483647
-#define AM (1.0/IM)
-#define IQ 127773
-#define IR 2836
-#define MASK 123459876
-
-double myrandom(int* seed)
-{
- int k= (*seed) / IQ;
- double ans;
-
- *seed = IA * (*seed - k * IQ) - IR * k;
- if(*seed < 0) *seed += IM;
- ans = AM * (*seed);
- return ans;
-}
-
-void random_reset(int *seed, int ibase, double *coord)
-{
- int i;
- char *str = (char *) &ibase;
- int n = sizeof(int);
- unsigned int hash = 0;
-
- for (i = 0; i < n; i++) {
- hash += str[i];
- hash += (hash << 10);
- hash ^= (hash >> 6);
- }
-
- str = (char *) coord;
- n = 3 * sizeof(double);
- for (i = 0; i < n; i++) {
- hash += str[i];
- hash += (hash << 10);
- hash ^= (hash >> 6);
- }
-
- hash += (hash << 3);
- hash ^= (hash >> 11);
- hash += (hash << 15);
-
- // keep 31 bits of unsigned int as new seed
- // do not allow seed = 0, since will cause hang in gaussian()
-
- *seed = hash & 0x7ffffff;
- if (!(*seed)) *seed = 1;
-
- // warm up the RNG
-
- for (i = 0; i < 5; i++) myrandom(seed);
- //save = 0;
-}
-
-int str2ff(const char *string)
-{
- if(strncmp(string, "lj", 2) == 0) return FF_LJ;
- if(strncmp(string, "eam", 3) == 0) return FF_EAM;
- return -1;
-}
-
-const char* ff2str(int ff)
-{
- if(ff == FF_LJ) { return "lj"; }
- if(ff == FF_EAM) { return "eam"; }
- return "invalid";
-}