From e60bd807a346fb8f808dcfe2236164c9ba2dcb37 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Tue, 3 Feb 2026 14:32:19 +0000 Subject: [PATCH 01/19] Pull out Java compilation from sub-Makefiles into main Makefile. And remove Makefiles that are unnecessary as a result. --- prism/Makefile | 86 +++++++++++++++++--------------- prism/src/automata/Makefile | 44 ---------------- prism/src/cex/Makefile | 44 ---------------- prism/src/common/Makefile | 44 ---------------- prism/src/dv/Makefile | 15 +----- prism/src/explicit/Makefile | 42 ---------------- prism/src/hybrid/Makefile | 15 +----- prism/src/jdd/Makefile | 15 +----- prism/src/jltl2ba/Makefile | 42 ---------------- prism/src/jltl2dstar/Makefile | 42 ---------------- prism/src/mtbdd/Makefile | 15 +----- prism/src/odd/Makefile | 15 +----- prism/src/param/Makefile | 43 ---------------- prism/src/parser/Makefile | 14 +----- prism/src/pepa/compiler/Makefile | 42 ---------------- prism/src/prism/Makefile | 15 +----- prism/src/pta/Makefile | 45 ----------------- prism/src/settings/Makefile | 42 ---------------- prism/src/simulator/Makefile | 44 ---------------- prism/src/sparse/Makefile | 15 +----- prism/src/strat/Makefile | 44 ---------------- prism/src/userinterface/Makefile | 42 ---------------- prism/unit-tests/Makefile | 46 ----------------- 23 files changed, 61 insertions(+), 750 deletions(-) delete mode 100644 prism/src/automata/Makefile delete mode 100644 prism/src/cex/Makefile delete mode 100644 prism/src/common/Makefile delete mode 100644 prism/src/explicit/Makefile delete mode 100644 prism/src/jltl2ba/Makefile delete mode 100644 prism/src/jltl2dstar/Makefile delete mode 100644 prism/src/param/Makefile delete mode 100644 prism/src/pepa/compiler/Makefile delete mode 100644 prism/src/pta/Makefile delete mode 100644 prism/src/settings/Makefile delete mode 100644 prism/src/simulator/Makefile delete mode 100644 prism/src/strat/Makefile delete mode 100644 prism/src/userinterface/Makefile delete mode 100644 prism/unit-tests/Makefile diff --git a/prism/Makefile b/prism/Makefile index 8ad48c954..fb8c0bfb7 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -14,13 +14,25 @@ # If this is a problem, the best solution is to create symlinks. export PRISM_SRC_DIR = src -export PRISM_CLASSES_DIR = classes export PRISM_OBJ_DIR = obj export PRISM_LIB_DIR = lib export PRISM_INCLUDE_DIR = include export PRISM_IMAGES_DIR = images export PRISM_DTDS_DIR = dtds -export PRISM_TESTS_DIR = unit-tests + +# Java locations, files + +JAVA_SRC_DIR := src +JAVA_CLASSES_DIR := classes +JAVA_TESTS_SRC_DIR := unit-tests +JAVA_TESTS_CLASSES_DIR := $(JAVA_CLASSES_DIR) + +JAVA_SRC_FILES := $(shell find $(JAVA_SRC_DIR) -name "*.java") +JAVA_SRC_FILES_LIST := $(JAVA_CLASSES_DIR)/java_sources.txt +JAVA_COMPILED_STAMP := $(JAVA_CLASSES_DIR)/java_compiled.stamp +JAVA_TESTS_SRC_FILES := $(shell find $(JAVA_TESTS_SRC_DIR) -name "*.java") +JAVA_TESTS_SRC_FILES_LIST := $(JAVA_TESTS_CLASSES_DIR)/java_tests_sources.txt +JAVA_TESTS_COMPILED_STAMP := $(JAVA_TESTS_CLASSES_DIR)/java_tests_compiled.stamp # Location of CUDD (used to be variable; now mainly fixed with the git repo layout) @@ -350,7 +362,7 @@ export CFLAGS CXXFLAGS LDFLAGS JFLAGS LIBPREFIX LIBSUFFIX # Main part of Makefile: Compiling PRISM # ########################################## -MAKE_DIRS = dd jdd odd dv prism mtbdd sparse hybrid parser settings userinterface pepa/compiler simulator jltl2ba jltl2dstar explicit pta param strat automata common cex +MAKE_DIRS = dd jdd odd dv prism mtbdd sparse hybrid parser EXT_PACKAGES = lpsolve55 lp_solve_5.5_java @@ -374,7 +386,7 @@ cuddpackage: checks # Use this to force a rebuild (with javacc) of the main parser parser: @echo Making parser ...; \ - cd $(PRISM_SRC_DIR)/parser && \ + cd $(JAVA_SRC_DIR)/parser && \ $(MAKE) touch && \ $(MAKE) \ CLASSPATHSEP="$(CLASSPATHSEP)" @@ -399,11 +411,21 @@ extpackages: checks # Compile main PRISM code # (we also do some preparatory checks, and build launch scripts afterwards) -prism: checks make_dirs bin_scripts +prism: checks prism_java make_dirs bin_scripts + +# Compile all Java code, build JNI headers +prism_java: $(JAVA_COMPILED_STAMP) + +$(JAVA_COMPILED_STAMP): $(JAVA_SRC_FILES) + @mkdir -p $(JAVA_CLASSES_DIR) $(PRISM_INCLUDE_DIR)/jni + @find $(JAVA_SRC_DIR) -name "*.java" > $(JAVA_SRC_FILES_LIST) + @echo "Compiling Java files..." + $(JAVAC) $(JFLAGS) -classpath "$(PRISM_LIB_DIR)/*" -d $(JAVA_CLASSES_DIR) -h $(PRISM_INCLUDE_DIR)/jni @$(JAVA_SRC_FILES_LIST) + @touch $@ # Compile each (top-level) source directory separately make_dirs: - @mkdir -p bin $(PRISM_CLASSES_DIR) $(PRISM_OBJ_DIR)/dd $(PRISM_OBJ_DIR)/jdd $(PRISM_OBJ_DIR)/odd $(PRISM_OBJ_DIR)/dv $(PRISM_OBJ_DIR)/prism $(PRISM_OBJ_DIR)/mtbdd $(PRISM_OBJ_DIR)/sparse $(PRISM_OBJ_DIR)/hybrid $(PRISM_OBJ_DIR)/simulator + @mkdir -p bin $(PRISM_OBJ_DIR)/dd $(PRISM_OBJ_DIR)/jdd $(PRISM_OBJ_DIR)/odd $(PRISM_OBJ_DIR)/dv $(PRISM_OBJ_DIR)/prism $(PRISM_OBJ_DIR)/mtbdd $(PRISM_OBJ_DIR)/sparse $(PRISM_OBJ_DIR)/hybrid $(PRISM_OBJ_DIR)/simulator @for dir in $(MAKE_DIRS); do \ echo Making $(PRISM_SRC_DIR)/$$dir ...; \ (cd $(PRISM_SRC_DIR)/$$dir && \ @@ -426,13 +448,13 @@ make_dirs: dos2unix "$(PRISM_SRC_DIR)"/bin/prism.cygwin; \ fi -# Compile unit tests -make_tests: - @echo Making $(PRISM_TESTS_DIR) ...; \ - (cd $(PRISM_TESTS_DIR) && \ - $(MAKE) \ - CLASSPATHSEP="$(CLASSPATHSEP)") \ - || exit 1; +# Compile (Java) unit tests +$(JAVA_TESTS_COMPILED_STAMP): $(JAVA_TESTS_SRC_FILES) + @mkdir -p $(JAVA_TESTS_CLASSES_DIR) + @find $(JAVA_TESTS_SRC_DIR) -name "*.java" > $(JAVA_TESTS_SRC_FILES_LIST) + @echo "Compiling Java unit tests..." + $(JAVAC) $(JFLAGS) -sourcepath $(JAVA_SRC_DIR) -classpath $(PRISM_CLASSPATH) -d $(JAVA_TESTS_CLASSES_DIR) -h $(PRISM_INCLUDE_DIR)/jni @$(JAVA_TESTS_SRC_FILES_LIST) + @touch $@ # Copy/modify the launch scripts and put in the bin directory bin_scripts: @@ -505,7 +527,7 @@ checks: # Misc: count the number of lines of code count_loc: - find $(PRISM_SRC_DIR) -name '*.java' -o -name '*.cc' | xargs wc -l + find $(PRISM_SRC_DIR) $(JAVA_SRC_DIR) -name '*.java' -o -name '*.cc' | xargs wc -l ########### # Testing # @@ -513,7 +535,7 @@ count_loc: # Run all unit tests JUNIT_JAR = $(wildcard $(PRISM_LIB_DIR)/junit-platform-console-standalone*.jar) -unittests: make_tests +unittests: $(JAVA_TESTS_COMPILED_STAMP) # Provide Regex to match our test classes. If none is given, only certain test classes are excluded by default. $(JAVA) -jar $(JUNIT_JAR) -cp classes --include-classname '^(Test.*|.+[.$$]Test.*|.+Tests?[.$$].+|.*Tests?)$$' -scan-classpath --details=summary @@ -565,12 +587,12 @@ testsfull: # Build prism.jar binary: @echo "Generating JAR file ($(PRISM_LIB_DIR)/prism.jar)..." - @jar cmf $(PRISM_SRC_DIR)/manifest.txt $(PRISM_LIB_DIR)/prism.jar -C $(PRISM_CLASSES_DIR) . -C . $(PRISM_IMAGES_DIR) $(PRISM_DTDS_DIR) + @jar cmf $(JAVA_SRC_DIR)/manifest.txt $(PRISM_LIB_DIR)/prism.jar -C $(JAVA_CLASSES_DIR) . -C . $(PRISM_IMAGES_DIR) $(PRISM_DTDS_DIR) # Build prism-sources.jar source-jar: @echo "Generating sources JAR file ($(PRISM_LIB_DIR)/prism-sources.jar)..." - @find $(PRISM_SRC_DIR) -type f -name '*.java' -o -name '*.form' -o -name '*.jj' | sed -e "s/^$(PRISM_SRC_DIR)./-C $(PRISM_SRC_DIR) /" > prism-sources.txt + @find $(JAVA_SRC_DIR) -type f -name '*.java' -o -name '*.form' -o -name '*.jj' | sed -e "s/^$(JAVA_SRC_DIR)./-C $(JAVA_SRC_DIR) /" > prism-sources.txt @jar cf $(PRISM_LIB_DIR)/prism-sources.jar @prism-sources.txt @rm -f prism-sources.txt @@ -636,10 +658,10 @@ build_release_source: # Build Javadoc (and put in javadoc directory) -PRISM_CLASSPATH = "$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(PRISM_LIB_DIR)/*" +PRISM_CLASSPATH = "$(JAVA_CLASSES_DIR)$(CLASSPATHSEP)$(PRISM_LIB_DIR)/*" javadoc: - @JAVADOC_DIRS=`echo $(MAKE_DIRS) | sed 's/\//./g' | sed 's/ /:/g'` && \mkdir -p javadoc; javadoc $(JFLAGS) -d javadoc -overview $(PRISM_SRC_DIR)/overview.html -sourcepath $(PRISM_SRC_DIR) -classpath $(PRISM_SRC_DIR)$(CLASSPATHSEP)$(PRISM_CLASSPATH) -subpackages $$JAVADOC_DIRS -exclude parser + @JAVADOC_DIRS=`echo $(MAKE_DIRS) | sed 's/\//./g' | sed 's/ /:/g'` && \mkdir -p javadoc; javadoc $(JFLAGS) -d javadoc -overview $(JAVA_SRC_DIR)/overview.html -sourcepath $(JAVA_SRC_DIR) -classpath $(JAVA_SRC_DIR)$(CLASSPATHSEP)$(PRISM_CLASSPATH) -subpackages $$JAVADOC_DIRS -exclude parser ############### # Cleaning up # @@ -653,7 +675,10 @@ clean: checks $(MAKE) -s EXE="$(EXE)" clean) \ || exit 1; \ done; \ - find $(PRISM_CLASSES_DIR) -name '*.class' -exec rm {} \; ; \ + rm -rf $(JAVA_CLASSES_DIR) ; \ + rm -f $(JAVA_SRC_FILES_LIST) $(JAVA_COMPILED_STAMP) ; \ + rm -f $(JAVA_TESTS_SRC_FILES_LIST) $(JAVA_TESTS_COMPILED_STAMP) ; \ + rm -f $(PRISM_INCLUDE_DIR)/jni/*.h \ rm -f $(PRISM_LIB_DIR)/*jnilib; \ rm -f $(PRISM_LIB_DIR)/prism.jar; \ rm -f $(PRISM_LIB_DIR)/prism-sources.jar; \ @@ -662,7 +687,7 @@ clean: checks celan: clean # Clean PRISM + CUDD and external libs -clean_all: checks clean_cudd clean_ext clean clean_tests +clean_all: checks clean_cudd clean_ext clean clean_cudd: @(cd $(CUDD_DIR) && ./clean.sh) @@ -675,9 +700,6 @@ clean_ext: || exit 1; \ done ) -clean_tests: - @(cd $(PRISM_TESTS_DIR) && $(MAKE) clean) - # Remove just the prism.jar binary clean_binary: @echo "Removing JAR file ($(PRISM_LIB_DIR)/prism.jar)..." @@ -702,22 +724,6 @@ clean_hybrid: checks @(cd $(PRISM_SRC_DIR)/hybrid && $(MAKE) -s EXE="$(EXE)" clean) clean_parser: checks @(cd $(PRISM_SRC_DIR)/parser && $(MAKE) -s EXE="$(EXE)" clean) -clean_userinterface: checks - @(cd $(PRISM_SRC_DIR)/userinterface && $(MAKE) -s EXE="$(EXE)" clean) -clean_simulator: checks - @(cd $(PRISM_SRC_DIR)/simulator && $(MAKE) -s EXE="$(EXE)" clean) -clean_jltl2ba: checks - @(cd $(PRISM_SRC_DIR)/jltl2ba && $(MAKE) -s EXE="$(EXE)" clean) -clean_jltl2dstar: checks - @(cd $(PRISM_SRC_DIR)/jltl2dstar && $(MAKE) -s EXE="$(EXE)" clean) -clean_explicit: checks - @(cd $(PRISM_SRC_DIR)/explicit && $(MAKE) -s EXE="$(EXE)" clean) -clean_pta: checks - @(cd $(PRISM_SRC_DIR)/pta && $(MAKE) -s EXE="$(EXE)" clean) -clean_param: checks - @(cd $(PRISM_SRC_DIR)/param && $(MAKE) -s EXE="$(EXE)" clean) -clean_strat: checks - @(cd $(PRISM_SRC_DIR)/strat && $(MAKE) -s EXE="$(EXE)" clean) ############### # IDE support # diff --git a/prism/src/automata/Makefile b/prism/src/automata/Makefile deleted file mode 100644 index a06e69710..000000000 --- a/prism/src/automata/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = automata -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/cex/Makefile b/prism/src/cex/Makefile deleted file mode 100644 index 63859a332..000000000 --- a/prism/src/cex/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = cex -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/common/Makefile b/prism/src/common/Makefile deleted file mode 100644 index b22ca64d7..000000000 --- a/prism/src/common/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = common -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java iterable/*.java functions/*.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/dv/Makefile b/prism/src/dv/Makefile index c5f82a60a..97b8adb9a 100644 --- a/prism/src/dv/Makefile +++ b/prism/src/dv/Makefile @@ -24,20 +24,12 @@ LIBRARIES = \ -ldd \ $(LIBMATH) -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - CC_FILES = $(wildcard *.cc) O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) default: all -all: checks $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dv$(LIBSUFFIX) +all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dv$(LIBSUFFIX) # inhibit building in parallel (-j option) .NOTPARALLEL: @@ -48,9 +40,6 @@ checks: (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ fi; -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dv$(LIBSUFFIX): $(O_FILES) $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) @@ -58,7 +47,7 @@ $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) clean: checks - @rm -f $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dv$(LIBSUFFIX) $(O_FILES) + @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dv$(LIBSUFFIX) $(O_FILES) celan: clean diff --git a/prism/src/explicit/Makefile b/prism/src/explicit/Makefile deleted file mode 100644 index 60183a307..000000000 --- a/prism/src/explicit/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = explicit -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java rewards/*.java modelviews/*.java graphviz/*.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/hybrid/Makefile b/prism/src/hybrid/Makefile index 766714cb0..b94beeedc 100644 --- a/prism/src/hybrid/Makefile +++ b/prism/src/hybrid/Makefile @@ -27,20 +27,12 @@ LIBRARIES = \ -lprism \ $(LIBMATH) -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - CC_FILES = $(wildcard *.cc) O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) default: all -all: checks $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismhybrid$(LIBSUFFIX) +all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismhybrid$(LIBSUFFIX) # inhibit building in parallel (-j option) .NOTPARALLEL: @@ -51,9 +43,6 @@ checks: (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ fi; -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismhybrid$(LIBSUFFIX): $(O_FILES) $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) @@ -61,7 +50,7 @@ $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) clean: checks - @rm -f $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismhybrid$(LIBSUFFIX) $(O_FILES) + @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismhybrid$(LIBSUFFIX) $(O_FILES) celan: clean diff --git a/prism/src/jdd/Makefile b/prism/src/jdd/Makefile index 3bfdd39fd..daa2f3110 100644 --- a/prism/src/jdd/Makefile +++ b/prism/src/jdd/Makefile @@ -22,20 +22,12 @@ LIBRARIES = \ -L$(PRISM_DIR_REL)/$(PRISM_LIB_DIR) \ -ldd -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - CC_FILES = $(wildcard *.cc) O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) default: all -all: checks $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)jdd$(LIBSUFFIX) +all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)jdd$(LIBSUFFIX) # inhibit building in parallel (-j option) .NOTPARALLEL: @@ -46,9 +38,6 @@ checks: (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ fi; -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)jdd$(LIBSUFFIX): $(O_FILES) $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) @@ -56,7 +45,7 @@ $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) clean: checks - @rm -f $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)jdd$(LIBSUFFIX) $(O_FILES) + @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)jdd$(LIBSUFFIX) $(O_FILES) celan: clean diff --git a/prism/src/jltl2ba/Makefile b/prism/src/jltl2ba/Makefile deleted file mode 100644 index 1566dee69..000000000 --- a/prism/src/jltl2ba/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = jltl2ba -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/jltl2dstar/Makefile b/prism/src/jltl2dstar/Makefile deleted file mode 100644 index f5666cf37..000000000 --- a/prism/src/jltl2dstar/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = jltl2dstar -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/mtbdd/Makefile b/prism/src/mtbdd/Makefile index dd2f32874..2039d94ef 100644 --- a/prism/src/mtbdd/Makefile +++ b/prism/src/mtbdd/Makefile @@ -29,20 +29,12 @@ LIBRARIES = \ -lprism \ $(LIBMATH) -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - CC_FILES = $(wildcard *.cc) O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) default: all -all: checks $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismmtbdd$(LIBSUFFIX) +all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismmtbdd$(LIBSUFFIX) # Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) checks: @@ -50,9 +42,6 @@ checks: (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ fi; -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismmtbdd$(LIBSUFFIX): $(O_FILES) $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) @@ -60,7 +49,7 @@ $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) clean: checks - @rm -f $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismmtbdd$(LIBSUFFIX) $(O_FILES) + @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismmtbdd$(LIBSUFFIX) $(O_FILES) celan: clean diff --git a/prism/src/odd/Makefile b/prism/src/odd/Makefile index 54cfd0456..068bd0286 100644 --- a/prism/src/odd/Makefile +++ b/prism/src/odd/Makefile @@ -22,20 +22,12 @@ LIBRARIES = \ -L$(PRISM_DIR_REL)/$(PRISM_LIB_DIR) \ -ldd -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - CC_FILES = $(wildcard *.cc) O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - default: all -all: checks $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)odd$(LIBSUFFIX) +all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)odd$(LIBSUFFIX) # inhibit building in parallel (-j option) .NOTPARALLEL: @@ -46,9 +38,6 @@ checks: (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ fi; -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)odd$(LIBSUFFIX): $(O_FILES) $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) @@ -56,7 +45,7 @@ $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) clean: checks - @rm -f $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)odd$(LIBSUFFIX) $(O_FILES) + @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)odd$(LIBSUFFIX) $(O_FILES) celan: clean diff --git a/prism/src/param/Makefile b/prism/src/param/Makefile deleted file mode 100644 index a2dea2839..000000000 --- a/prism/src/param/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = param -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -#PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/commons-math3-3.0.jar:$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/blas.jar:$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/lapack.jar:$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/xerbla.jar:$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/f2jutil.jar" -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/parser/Makefile b/prism/src/parser/Makefile index 3d5bd695b..c1b7b08db 100644 --- a/prism/src/parser/Makefile +++ b/prism/src/parser/Makefile @@ -10,17 +10,9 @@ THIS_DIR = parser PRISM_DIR_REL = ../.. -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java ast/*.java type/*.java visitor/*.java) -JAVA_FILES = $(patsubst %package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - default: all -all: checks PrismParser.java Prism3To4.java $(CLASS_FILES) +all: checks PrismParser.java Prism3To4.java # inhibit building in parallel (-j option) .NOTPARALLEL: @@ -37,11 +29,7 @@ PrismParser.java: PrismParser.jj Prism3To4.java: Prism3To4.jj $(JAVACC) $< || echo "Warning: Did not recompile Prism3To4.jj" -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - clean: checks - @rm -f $(CLASS_FILES) touch: checks @touch PrismParser.jj diff --git a/prism/src/pepa/compiler/Makefile b/prism/src/pepa/compiler/Makefile deleted file mode 100644 index 6f742c3d4..000000000 --- a/prism/src/pepa/compiler/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = pepa/compiler -PRISM_DIR_REL = ../../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ../..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/prism/Makefile b/prism/src/prism/Makefile index ecc325baa..ff274eca7 100644 --- a/prism/src/prism/Makefile +++ b/prism/src/prism/Makefile @@ -20,20 +20,12 @@ INCLUDES = \ LIBRARIES = \ $(LIBMATH) -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - CC_FILES = $(wildcard *.cc) O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) default: all -all: checks $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) +all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) # inhibit building in parallel (-j option) .NOTPARALLEL: @@ -44,9 +36,6 @@ checks: (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ fi; -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX): $(O_FILES) $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) @@ -62,7 +51,7 @@ $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE): ngprism.c fi; clean: checks - @rm -f $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) $(O_FILES) $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) + @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) $(O_FILES) $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) celan: clean diff --git a/prism/src/pta/Makefile b/prism/src/pta/Makefile deleted file mode 100644 index 54b00c944..000000000 --- a/prism/src/pta/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = pta -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java parser/*.java) -JAVA_FILES = $(patsubst %package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks parser/PTAParser.java $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -parser/PTAParser.java: parser/PTAParser.jj - @(cd parser; $(JAVACC) PTAParser.jj || echo "Warning: Did not recompile $<") - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/settings/Makefile b/prism/src/settings/Makefile deleted file mode 100644 index 686628052..000000000 --- a/prism/src/settings/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = settings -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/simulator/Makefile b/prism/src/simulator/Makefile deleted file mode 100644 index 2b9f71288..000000000 --- a/prism/src/simulator/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = simulator -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java sampler/*.java method/*.java) -JAVA_FILES = $(patsubst %package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)simengine$(LIBSUFFIX) $(O_FILES) - -celan: clean - -################################################# diff --git a/prism/src/sparse/Makefile b/prism/src/sparse/Makefile index b1113c435..b8b65a972 100644 --- a/prism/src/sparse/Makefile +++ b/prism/src/sparse/Makefile @@ -28,20 +28,12 @@ LIBRARIES = \ $(LIBMATH) \ -llpsolve55 -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - CC_FILES = $(wildcard *.cc) O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) default: all -all: checks $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismsparse$(LIBSUFFIX) +all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismsparse$(LIBSUFFIX) # inhibit building in parallel (-j option) .NOTPARALLEL: @@ -52,9 +44,6 @@ checks: (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ fi; -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismsparse$(LIBSUFFIX): $(O_FILES) $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) @@ -62,7 +51,7 @@ $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) clean: checks - @rm -f $(CLASS_FILES) $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismsparse$(LIBSUFFIX) $(O_FILES) + @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismsparse$(LIBSUFFIX) $(O_FILES) celan: clean diff --git a/prism/src/strat/Makefile b/prism/src/strat/Makefile deleted file mode 100644 index c498ad722..000000000 --- a/prism/src/strat/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = strat -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java) -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/src/userinterface/Makefile b/prism/src/userinterface/Makefile deleted file mode 100644 index dbaad54ba..000000000 --- a/prism/src/userinterface/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = userinterface -PRISM_DIR_REL = ../.. - -JNI_GEN_HEADER_DIR=$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR)/jni - -JAVA_FILES_ALL = $(wildcard *.java graph/*.java model/*.java model/computation/*.java model/pepaModel/*.java model/graphicModel/*.java util/*.java simulator/*.java properties/*.java properties/computation/*.java log/*.java) -JAVA_FILES = $(patsubst %package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class) - -PRISM_CLASSPATH = "$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks $(CLASS_FILES) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/$(THIS_DIR)/%.class: %.java - (cd ..; $(JAVAC) $(JFLAGS) -sourcepath $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_SRC_DIR) -classpath $(PRISM_CLASSPATH) -h $(JNI_GEN_HEADER_DIR) -d $(THIS_DIR)/$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR) $(THIS_DIR)/$<) - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# diff --git a/prism/unit-tests/Makefile b/prism/unit-tests/Makefile deleted file mode 100644 index 0a82ebcb9..000000000 --- a/prism/unit-tests/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -PRISM_DIR_REL = .. - -JAVA_FILES_ALL := $(shell find . -name '*.java') -JAVA_FILES = $(subst package-info.java,,$(JAVA_FILES_ALL)) -CLASS_FILES = $(JAVA_FILES:%.java=$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)/%.class) - -PRISM_CLASSPATH = "$(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)$(CLASSPATHSEP)$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/*" - -default: all - -all: checks class_files - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -class_files: - @echo "$(JAVA_FILES)" > java_files.txt - $(JAVAC) $(JFLAGS) -sourcepath "$(PRISM_DIR_REL)/$(PRISM_SRC_DIR)$(CLASSPATHSEP)$(PRISM_DIR_REL)/unit-tests"\ - -classpath $(PRISM_CLASSPATH)\ - -d $(PRISM_DIR_REL)/$(PRISM_CLASSES_DIR)\ - @java_files.txt - @rm -f java_files.txt - -clean: checks - @rm -f $(CLASS_FILES) - -celan: clean - -################################################# From 0c1f6305966b0661b69d5127f2465e7affe7d550 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Tue, 3 Feb 2026 19:26:17 +0000 Subject: [PATCH 02/19] Pull out parser (re)generation into main Makefile. --- prism/Makefile | 26 +++++++++++++++----------- prism/src/parser/Makefile | 39 --------------------------------------- 2 files changed, 15 insertions(+), 50 deletions(-) delete mode 100644 prism/src/parser/Makefile diff --git a/prism/Makefile b/prism/Makefile index fb8c0bfb7..a19c0c15f 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -30,6 +30,8 @@ JAVA_TESTS_CLASSES_DIR := $(JAVA_CLASSES_DIR) JAVA_SRC_FILES := $(shell find $(JAVA_SRC_DIR) -name "*.java") JAVA_SRC_FILES_LIST := $(JAVA_CLASSES_DIR)/java_sources.txt JAVA_COMPILED_STAMP := $(JAVA_CLASSES_DIR)/java_compiled.stamp +JAVA_PARSER_JJ := $(JAVA_SRC_DIR)/parser/PrismParser.jj +JAVA_PARSER_JAVA := $(JAVA_SRC_DIR)/parser/PrismParser.java JAVA_TESTS_SRC_FILES := $(shell find $(JAVA_TESTS_SRC_DIR) -name "*.java") JAVA_TESTS_SRC_FILES_LIST := $(JAVA_TESTS_CLASSES_DIR)/java_tests_sources.txt JAVA_TESTS_COMPILED_STAMP := $(JAVA_TESTS_CLASSES_DIR)/java_tests_compiled.stamp @@ -362,7 +364,7 @@ export CFLAGS CXXFLAGS LDFLAGS JFLAGS LIBPREFIX LIBSUFFIX # Main part of Makefile: Compiling PRISM # ########################################## -MAKE_DIRS = dd jdd odd dv prism mtbdd sparse hybrid parser +MAKE_DIRS = dd jdd odd dv prism mtbdd sparse hybrid EXT_PACKAGES = lpsolve55 lp_solve_5.5_java @@ -383,14 +385,6 @@ cuddpackage: checks @echo Making cudd ...; cd $(CUDD_DIR) && \ LD= LDFLAGS= ./install.sh -# Use this to force a rebuild (with javacc) of the main parser -parser: - @echo Making parser ...; \ - cd $(JAVA_SRC_DIR)/parser && \ - $(MAKE) touch && \ - $(MAKE) \ - CLASSPATHSEP="$(CLASSPATHSEP)" - # Build various external libraries needed by PRISM extpackages: checks @for ext in $(EXT_PACKAGES); do \ @@ -423,6 +417,18 @@ $(JAVA_COMPILED_STAMP): $(JAVA_SRC_FILES) $(JAVAC) $(JFLAGS) -classpath "$(PRISM_LIB_DIR)/*" -d $(JAVA_CLASSES_DIR) -h $(PRISM_INCLUDE_DIR)/jni @$(JAVA_SRC_FILES_LIST) @touch $@ +# Rebuild PRISM (JavaCC) compiler if needed +# Just emit warning if javacc not available and fall back to pre-compiled .java +$(JAVA_PARSER_JAVA): $(JAVA_PARSER_JJ) + @$(JAVACC) $< || echo "Warning: Did not recompile $@" + +# Use this to force a rebuild (with javacc) of the main parser +parser: parser_force prism_java + +parser_force: + @ echo "Forcing parser rebuild" + @$(JAVACC) $(JAVA_PARSER_JJ) + # Compile each (top-level) source directory separately make_dirs: @mkdir -p bin $(PRISM_OBJ_DIR)/dd $(PRISM_OBJ_DIR)/jdd $(PRISM_OBJ_DIR)/odd $(PRISM_OBJ_DIR)/dv $(PRISM_OBJ_DIR)/prism $(PRISM_OBJ_DIR)/mtbdd $(PRISM_OBJ_DIR)/sparse $(PRISM_OBJ_DIR)/hybrid $(PRISM_OBJ_DIR)/simulator @@ -722,8 +728,6 @@ clean_sparse: checks @(cd $(PRISM_SRC_DIR)/sparse && $(MAKE) -s EXE="$(EXE)" clean) clean_hybrid: checks @(cd $(PRISM_SRC_DIR)/hybrid && $(MAKE) -s EXE="$(EXE)" clean) -clean_parser: checks - @(cd $(PRISM_SRC_DIR)/parser && $(MAKE) -s EXE="$(EXE)" clean) ############### # IDE support # diff --git a/prism/src/parser/Makefile b/prism/src/parser/Makefile deleted file mode 100644 index c1b7b08db..000000000 --- a/prism/src/parser/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = parser -PRISM_DIR_REL = ../.. - -default: all - -all: checks PrismParser.java Prism3To4.java - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -PrismParser.java: PrismParser.jj - $(JAVACC) $< || echo "Warning: Did not recompile PrismParser.jj" - -Prism3To4.java: Prism3To4.jj - $(JAVACC) $< || echo "Warning: Did not recompile Prism3To4.jj" - -clean: checks - -touch: checks - @touch PrismParser.jj - -celan: clean - -################################################# From 60b277bf62aa9194e33a526137249dfef4393d7b Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Wed, 4 Feb 2026 16:42:57 +0000 Subject: [PATCH 03/19] C code tidy - remove some old/unused stuff (last_unif). --- prism/include/PrismHybridGlob.h | 3 --- prism/include/jni/hybrid_PrismHybrid.h | 8 -------- prism/src/hybrid/PH_StochBoundedUntil.cc | 3 +-- prism/src/hybrid/PH_StochCumulReward.cc | 3 +-- prism/src/hybrid/PH_StochTransient.cc | 3 +-- prism/src/hybrid/PrismHybrid.cc | 12 ------------ prism/src/hybrid/PrismHybrid.java | 10 ---------- 7 files changed, 3 insertions(+), 39 deletions(-) diff --git a/prism/include/PrismHybridGlob.h b/prism/include/PrismHybridGlob.h index 8d072425b..357c7f59e 100644 --- a/prism/include/PrismHybridGlob.h +++ b/prism/include/PrismHybridGlob.h @@ -37,9 +37,6 @@ // cudd manager extern DdManager *ddman; -// details from numerical computation which may be queried -extern double last_unif; - //------------------------------------------------------------------------------ // macros, function prototypes diff --git a/prism/include/jni/hybrid_PrismHybrid.h b/prism/include/jni/hybrid_PrismHybrid.h index 5d7526294..632adbfac 100644 --- a/prism/include/jni/hybrid_PrismHybrid.h +++ b/prism/include/jni/hybrid_PrismHybrid.h @@ -55,14 +55,6 @@ JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetExportIterations JNIEXPORT jstring JNICALL Java_hybrid_PrismHybrid_PH_1GetErrorMessage (JNIEnv *, jclass); -/* - * Class: hybrid_PrismHybrid - * Method: PH_GetLastUnif - * Signature: ()D - */ -JNIEXPORT jdouble JNICALL Java_hybrid_PrismHybrid_PH_1GetLastUnif - (JNIEnv *, jclass); - /* * Class: hybrid_PrismHybrid * Method: PH_ProbBoundedUntil diff --git a/prism/src/hybrid/PH_StochBoundedUntil.cc b/prism/src/hybrid/PH_StochBoundedUntil.cc index c45393fb8..a9b61b5fd 100644 --- a/prism/src/hybrid/PH_StochBoundedUntil.cc +++ b/prism/src/hybrid/PH_StochBoundedUntil.cc @@ -177,8 +177,7 @@ jlong __jlongpointer mu // probs for multiplying // constant for uniformization unif = 1.02*max_diag; - last_unif = unif; - + // modify diagonals if (!compact_d) { for (i = 0; i < n; i++) diags[i] = diags[i] / unif + 1; diff --git a/prism/src/hybrid/PH_StochCumulReward.cc b/prism/src/hybrid/PH_StochCumulReward.cc index 765d7ee06..b49b1259b 100644 --- a/prism/src/hybrid/PH_StochCumulReward.cc +++ b/prism/src/hybrid/PH_StochCumulReward.cc @@ -166,8 +166,7 @@ jdouble time // time bound // constant for uniformization unif = 1.02*max_diag; - last_unif = unif; - + // modify diagonals if (!compact_d) { for (i = 0; i < n; i++) diags[i] = diags[i] / unif + 1; diff --git a/prism/src/hybrid/PH_StochTransient.cc b/prism/src/hybrid/PH_StochTransient.cc index b85670a03..f27586e43 100644 --- a/prism/src/hybrid/PH_StochTransient.cc +++ b/prism/src/hybrid/PH_StochTransient.cc @@ -163,8 +163,7 @@ jdouble time // time bound // constant for uniformization unif = 1.02*max_diag; - last_unif = unif; - + // modify diagonals if (!compact_d) { for (i = 0; i < n; i++) diags[i] = diags[i] / unif + 1; diff --git a/prism/src/hybrid/PrismHybrid.cc b/prism/src/hybrid/PrismHybrid.cc index 0b2b08718..1c1e16893 100644 --- a/prism/src/hybrid/PrismHybrid.cc +++ b/prism/src/hybrid/PrismHybrid.cc @@ -63,9 +63,6 @@ static bool exportIterations = false; // error message static char error_message[MAX_ERR_STRING_LEN]; -// details from numerical computation which may be queried -double last_unif; - //------------------------------------------------------------------------------ // cudd manager //------------------------------------------------------------------------------ @@ -229,15 +226,6 @@ bool PH_GetFlagExportIterations() return exportIterations; } -//------------------------------------------------------------------------------ -// numerical computation detail queries -//------------------------------------------------------------------------------ - -JNIEXPORT jdouble JNICALL Java_hybrid_PrismHybrid_PH_1GetLastUnif(JNIEnv *env, jclass cls) -{ - return last_unif; -} - //------------------------------------------------------------------------------ // tidy up //------------------------------------------------------------------------------ diff --git a/prism/src/hybrid/PrismHybrid.java b/prism/src/hybrid/PrismHybrid.java index 09675b206..be0c6b9a0 100644 --- a/prism/src/hybrid/PrismHybrid.java +++ b/prism/src/hybrid/PrismHybrid.java @@ -157,16 +157,6 @@ private static PrismException generateExceptionForError() } } - //------------------------------------------------------------------------------ - // numerical computation detail queries - //------------------------------------------------------------------------------ - - private static native double PH_GetLastUnif(); - public static double getLastUnif() - { - return PH_GetLastUnif(); - } - //------------------------------------------------------------------------------ // JNI wrappers for blocks of hybrid code //------------------------------------------------------------------------------ From f5f0741ccefe2550e7f8501cd182ee3675ad6059 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Wed, 4 Feb 2026 17:18:10 +0000 Subject: [PATCH 04/19] C code tidy - remove some old/unused stuff (tech log). --- prism/include/PrismHybridGlob.h | 1 - prism/include/PrismMTBDDGlob.h | 1 - prism/include/PrismSparseGlob.h | 1 - prism/include/jni/hybrid_PrismHybrid.h | 8 ----- prism/include/jni/mtbdd_PrismMTBDD.h | 8 ----- prism/include/jni/sparse_PrismSparse.h | 8 ----- prism/src/hybrid/PrismHybrid.cc | 44 -------------------------- prism/src/hybrid/PrismHybrid.java | 16 +--------- prism/src/mtbdd/PrismMTBDD.cc | 44 -------------------------- prism/src/mtbdd/PrismMTBDD.java | 16 +--------- prism/src/prism/Prism.java | 6 ++-- prism/src/sparse/PrismSparse.cc | 44 -------------------------- prism/src/sparse/PrismSparse.java | 16 +--------- 13 files changed, 6 insertions(+), 207 deletions(-) diff --git a/prism/include/PrismHybridGlob.h b/prism/include/PrismHybridGlob.h index 357c7f59e..228b36e28 100644 --- a/prism/include/PrismHybridGlob.h +++ b/prism/include/PrismHybridGlob.h @@ -44,7 +44,6 @@ extern DdManager *ddman; #define logtwo(X) log((double)X)/log(2.0) void PH_PrintToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); void PH_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); -void PH_PrintToTechLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); void PH_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after); void PH_SetErrorMessage(const char *str, ...) IS_LIKE_PRINTF(1,2); char *PH_GetErrorMessage(); diff --git a/prism/include/PrismMTBDDGlob.h b/prism/include/PrismMTBDDGlob.h index 6cba3e17f..89feb54a9 100644 --- a/prism/include/PrismMTBDDGlob.h +++ b/prism/include/PrismMTBDDGlob.h @@ -46,7 +46,6 @@ extern JNIEnv *export_env; void PM_PrintToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); void PM_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); -void PM_PrintToTechLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); void PM_SetErrorMessage(const char *str, ...) IS_LIKE_PRINTF(1,2); char *PM_GetErrorMessage(); int store_export_info(int type, jstring fn, JNIEnv *env); diff --git a/prism/include/PrismSparseGlob.h b/prism/include/PrismSparseGlob.h index a6e8dc166..971b1d15d 100644 --- a/prism/include/PrismSparseGlob.h +++ b/prism/include/PrismSparseGlob.h @@ -47,7 +47,6 @@ extern JNIEnv *export_env; #define logtwo(X) log((double)X)/log(2.0) void PS_PrintToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); void PS_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); -void PS_PrintToTechLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); void PS_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after); void PS_SetErrorMessage(const char *str, ...) IS_LIKE_PRINTF(1,2); char *PS_GetErrorMessage(); diff --git a/prism/include/jni/hybrid_PrismHybrid.h b/prism/include/jni/hybrid_PrismHybrid.h index 632adbfac..d1b2a7953 100644 --- a/prism/include/jni/hybrid_PrismHybrid.h +++ b/prism/include/jni/hybrid_PrismHybrid.h @@ -31,14 +31,6 @@ JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetCUDDManager JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetMainLog (JNIEnv *, jclass, jobject); -/* - * Class: hybrid_PrismHybrid - * Method: PH_SetTechLog - * Signature: (Lprism/PrismLog;)V - */ -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetTechLog - (JNIEnv *, jclass, jobject); - /* * Class: hybrid_PrismHybrid * Method: PH_SetExportIterations diff --git a/prism/include/jni/mtbdd_PrismMTBDD.h b/prism/include/jni/mtbdd_PrismMTBDD.h index 10f90046a..41b858286 100644 --- a/prism/include/jni/mtbdd_PrismMTBDD.h +++ b/prism/include/jni/mtbdd_PrismMTBDD.h @@ -31,14 +31,6 @@ JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetCUDDManager JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetMainLog (JNIEnv *, jclass, jobject); -/* - * Class: mtbdd_PrismMTBDD - * Method: PM_SetTechLog - * Signature: (Lprism/PrismLog;)V - */ -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetTechLog - (JNIEnv *, jclass, jobject); - /* * Class: mtbdd_PrismMTBDD * Method: PM_SetExportIterations diff --git a/prism/include/jni/sparse_PrismSparse.h b/prism/include/jni/sparse_PrismSparse.h index 30e6607b0..f9173cd1c 100644 --- a/prism/include/jni/sparse_PrismSparse.h +++ b/prism/include/jni/sparse_PrismSparse.h @@ -31,14 +31,6 @@ JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetCUDDManager JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetMainLog (JNIEnv *, jclass, jobject); -/* - * Class: sparse_PrismSparse - * Method: PS_SetTechLog - * Signature: (Lprism/PrismLog;)V - */ -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetTechLog - (JNIEnv *, jclass, jobject); - /* * Class: sparse_PrismSparse * Method: PS_SetExportIterations diff --git a/prism/src/hybrid/PrismHybrid.cc b/prism/src/hybrid/PrismHybrid.cc index 1c1e16893..07f6df733 100644 --- a/prism/src/hybrid/PrismHybrid.cc +++ b/prism/src/hybrid/PrismHybrid.cc @@ -48,14 +48,11 @@ DdManager *ddman; // logs // global refs to log classes static jclass main_log_cls = NULL; -static jclass tech_log_cls = NULL; // global refs to log objects static jobject main_log_obj = NULL; -static jobject tech_log_obj = NULL; // method ids for print method in logs static jmethodID main_log_mid = NULL; static jmethodID main_log_warn = NULL; -static jmethodID tech_log_mid = NULL; // export stuff static bool exportIterations = false; @@ -97,26 +94,6 @@ JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetMainLog(JNIEnv *env, jclas //------------------------------------------------------------------------------ -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetTechLog(JNIEnv *env, jclass cls, jobject log) -{ - // if tech log has been set previously, we need to delete existing global refs first - if (tech_log_obj != NULL) { - env->DeleteGlobalRef(tech_log_cls); - tech_log_cls = NULL; - env->DeleteGlobalRef(tech_log_obj); - tech_log_obj = NULL; - } - - // make a global reference to the log object - tech_log_obj = env->NewGlobalRef(log); - // get the log class and make a global reference to it - tech_log_cls = (jclass)env->NewGlobalRef(env->GetObjectClass(tech_log_obj)); - // get the method id for the print method - tech_log_mid = env->GetMethodID(tech_log_cls, "print", "(Ljava/lang/String;)V"); -} - -//------------------------------------------------------------------------------ - void PH_PrintToMainLog(JNIEnv *env, const char *str, ...) { va_list argptr; @@ -151,23 +128,6 @@ void PH_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) //------------------------------------------------------------------------------ -void PH_PrintToTechLog(JNIEnv *env, const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (env) - env->CallVoidMethod(tech_log_obj, tech_log_mid, env->NewStringUTF(full_string)); - else - printf("%s", full_string); -} - -//------------------------------------------------------------------------------ - // Print formatted memory info to main log void PH_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after) @@ -235,12 +195,8 @@ JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1FreeGlobalRefs(JNIEnv *env, j // delete all global references env->DeleteGlobalRef(main_log_cls); main_log_cls = NULL; - env->DeleteGlobalRef(tech_log_cls); - tech_log_cls = NULL; env->DeleteGlobalRef(main_log_obj); main_log_obj = NULL; - env->DeleteGlobalRef(tech_log_obj); - tech_log_obj = NULL; } //------------------------------------------------------------------------------ diff --git a/prism/src/hybrid/PrismHybrid.java b/prism/src/hybrid/PrismHybrid.java index be0c6b9a0..80f5238da 100644 --- a/prism/src/hybrid/PrismHybrid.java +++ b/prism/src/hybrid/PrismHybrid.java @@ -54,11 +54,10 @@ public class PrismHybrid // initialise/close down methods //------------------------------------------------------------------------------ - public static void initialise(PrismLog mainLog, PrismLog techLog) + public static void initialise(PrismLog mainLog) { setCUDDManager(); setMainLog(mainLog); - setTechLog(techLog); } public static void closeDown() @@ -112,19 +111,6 @@ public static void setMainLog(PrismLog log) PH_SetMainLog(log); } - // tech log - - // place to store tech log for java code - private static PrismLog techLog; - // jni method to set tech log for native code - private static native void PH_SetTechLog(PrismLog log); - // method to set tech log both in java and c++ - public static void setTechLog(PrismLog log) - { - techLog = log; - PH_SetTechLog(log); - } - private static native void PH_SetExportIterations(boolean value); public static void SetExportIterations(boolean value) { diff --git a/prism/src/mtbdd/PrismMTBDD.cc b/prism/src/mtbdd/PrismMTBDD.cc index 6ae7aec11..9e5750e97 100644 --- a/prism/src/mtbdd/PrismMTBDD.cc +++ b/prism/src/mtbdd/PrismMTBDD.cc @@ -48,14 +48,11 @@ DdManager *ddman; // logs // global refs to log classes static jclass main_log_cls = NULL; -static jclass tech_log_cls = NULL; // global refs to log objects static jobject main_log_obj = NULL; -static jobject tech_log_obj = NULL; // method ids for print method in logs static jmethodID main_log_mid = NULL; static jmethodID main_log_warn = NULL; -static jmethodID tech_log_mid = NULL; // export stuff int export_type; @@ -100,26 +97,6 @@ JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetMainLog(JNIEnv *env, jclass //------------------------------------------------------------------------------ -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetTechLog(JNIEnv *env, jclass cls, jobject log) -{ - // if tech log has been set previously, we need to delete existing global refs first - if (tech_log_obj != NULL) { - env->DeleteGlobalRef(tech_log_cls); - tech_log_cls = NULL; - env->DeleteGlobalRef(tech_log_obj); - tech_log_obj = NULL; - } - - // make a global reference to the log object - tech_log_obj = env->NewGlobalRef(log); - // get the log class and make a global reference to it - tech_log_cls = (jclass)env->NewGlobalRef(env->GetObjectClass(tech_log_obj)); - // get the method id for the print method - tech_log_mid = env->GetMethodID(tech_log_cls, "print", "(Ljava/lang/String;)V"); -} - -//------------------------------------------------------------------------------ - void PM_PrintToMainLog(JNIEnv *env, const char *str, ...) { va_list argptr; @@ -152,23 +129,6 @@ void PM_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) printf("\nWarning: %s\n", full_string); } -//------------------------------------------------------------------------------ - -void PM_PrintToTechLog(JNIEnv *env, const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (env) - env->CallVoidMethod(tech_log_obj, tech_log_mid, env->NewStringUTF(full_string)); - else - printf("%s", full_string); -} - //------------------------------------------------------------------------------ // export stuff //------------------------------------------------------------------------------ @@ -260,12 +220,8 @@ JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1FreeGlobalRefs(JNIEnv *env, jcl // delete all global references env->DeleteGlobalRef(main_log_cls); main_log_cls = NULL; - env->DeleteGlobalRef(tech_log_cls); - tech_log_cls = NULL; env->DeleteGlobalRef(main_log_obj); main_log_obj = NULL; - env->DeleteGlobalRef(tech_log_obj); - tech_log_obj = NULL; } //------------------------------------------------------------------------------ diff --git a/prism/src/mtbdd/PrismMTBDD.java b/prism/src/mtbdd/PrismMTBDD.java index 712f740a7..166c6305c 100644 --- a/prism/src/mtbdd/PrismMTBDD.java +++ b/prism/src/mtbdd/PrismMTBDD.java @@ -56,11 +56,10 @@ public class PrismMTBDD // initialise/close down methods //------------------------------------------------------------------------------ - public static void initialise(PrismLog mainLog, PrismLog techLog) + public static void initialise(PrismLog mainLog) { setCUDDManager(); setMainLog(mainLog); - setTechLog(techLog); } public static void closeDown() @@ -102,19 +101,6 @@ public static void setMainLog(PrismLog log) PM_SetMainLog(log); } - // tech log - - // place to store tech log for java code - private static PrismLog techLog; - // jni method to set tech log for native code - private static native void PM_SetTechLog(PrismLog log); - // method to set tech log both in java and c++ - public static void setTechLog(PrismLog log) - { - techLog = log; - PM_SetTechLog(log); - } - private static native void PM_SetExportIterations(boolean value); public static void SetExportIterations(boolean value) { diff --git a/prism/src/prism/Prism.java b/prism/src/prism/Prism.java index fd805dcc2..7814e90e8 100644 --- a/prism/src/prism/Prism.java +++ b/prism/src/prism/Prism.java @@ -1256,9 +1256,9 @@ public void initialise() throws PrismException // initialise libraries/engines PrismNative.initialise(this); - PrismMTBDD.initialise(mainLog, mainLog); - PrismSparse.initialise(mainLog, mainLog); - PrismHybrid.initialise(mainLog, mainLog); + PrismMTBDD.initialise(mainLog); + PrismSparse.initialise(mainLog); + PrismHybrid.initialise(mainLog); // set cudd manager in other packages DoubleVector.setCUDDManager(); diff --git a/prism/src/sparse/PrismSparse.cc b/prism/src/sparse/PrismSparse.cc index 219c1685b..f1509789d 100644 --- a/prism/src/sparse/PrismSparse.cc +++ b/prism/src/sparse/PrismSparse.cc @@ -49,14 +49,11 @@ DdManager *ddman; // logs // global refs to log classes static jclass main_log_cls = NULL; -static jclass tech_log_cls = NULL; // global refs to log objects static jobject main_log_obj = NULL; -static jobject tech_log_obj = NULL; // method ids for print method in logs static jmethodID main_log_mid = NULL; static jmethodID main_log_warn = NULL; -static jmethodID tech_log_mid = NULL; // export stuff int export_type; @@ -101,26 +98,6 @@ JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetMainLog(JNIEnv *env, jclas //------------------------------------------------------------------------------ -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetTechLog(JNIEnv *env, jclass cls, jobject log) -{ - // if tech log has been set previously, we need to delete existing global refs first - if (tech_log_obj != NULL) { - env->DeleteGlobalRef(tech_log_cls); - tech_log_cls = NULL; - env->DeleteGlobalRef(tech_log_obj); - tech_log_obj = NULL; - } - - // make a global reference to the log object - tech_log_obj = env->NewGlobalRef(log); - // get the log class and make a global reference to it - tech_log_cls = (jclass)env->NewGlobalRef(env->GetObjectClass(tech_log_obj)); - // get the method id for the print method - tech_log_mid = env->GetMethodID(tech_log_cls, "print", "(Ljava/lang/String;)V"); -} - -//------------------------------------------------------------------------------ - void PS_PrintToMainLog(JNIEnv *env, const char *str, ...) { va_list argptr; @@ -155,23 +132,6 @@ void PS_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) //------------------------------------------------------------------------------ -void PS_PrintToTechLog(JNIEnv *env, const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (env) - env->CallVoidMethod(tech_log_obj, tech_log_mid, env->NewStringUTF(full_string)); - else - printf("%s", full_string); -} - -//------------------------------------------------------------------------------ - // Print formatted memory info to main log void PS_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after) @@ -290,12 +250,8 @@ JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1FreeGlobalRefs(JNIEnv *env, j // delete all global references env->DeleteGlobalRef(main_log_cls); main_log_cls = NULL; - env->DeleteGlobalRef(tech_log_cls); - tech_log_cls = NULL; env->DeleteGlobalRef(main_log_obj); main_log_obj = NULL; - env->DeleteGlobalRef(tech_log_obj); - tech_log_obj = NULL; } //------------------------------------------------------------------------------ diff --git a/prism/src/sparse/PrismSparse.java b/prism/src/sparse/PrismSparse.java index 1bbd6158d..ad8278f3b 100644 --- a/prism/src/sparse/PrismSparse.java +++ b/prism/src/sparse/PrismSparse.java @@ -66,11 +66,10 @@ public class PrismSparse // initialise/close down methods //---------------------------------------------------------------------------------------------- - public static void initialise(PrismLog mainLog, PrismLog techLog) + public static void initialise(PrismLog mainLog) { setCUDDManager(); setMainLog(mainLog); - setTechLog(techLog); } public static void closeDown() @@ -124,19 +123,6 @@ public static void setMainLog(PrismLog log) PS_SetMainLog(log); } - // tech log - - // place to store tech log for java code - private static PrismLog techLog; - // jni method to set tech log for native code - private static native void PS_SetTechLog(PrismLog log); - // method to set tech log both in java and c++ - public static void setTechLog(PrismLog log) - { - techLog = log; - PS_SetTechLog(log); - } - private static native void PS_SetExportIterations(boolean value); public static void SetExportIterations(boolean value) { From bd50fd5835b0eb83c6feb2da6e646798d7cf1bd8 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Wed, 4 Feb 2026 17:18:10 +0000 Subject: [PATCH 05/19] Merge/move fields/methods within the prism{,mtbdd,sparse,hybrid} shared libraries. --- prism/include/PrismHybridGlob.h | 52 ---- prism/include/PrismMTBDDGlob.h | 57 ----- prism/include/PrismNativeGlob.h | 45 +++- prism/include/PrismSparseGlob.h | 57 ----- prism/include/jni/hybrid_PrismHybrid.h | 40 --- prism/include/jni/mtbdd_PrismMTBDD.h | 40 --- prism/include/jni/prism_PrismNative.h | 32 +++ prism/include/jni/sparse_PrismSparse.h | 40 --- prism/src/hybrid/PH_JOR.cc | 48 ++-- prism/src/hybrid/PH_JORInterval.cc | 54 ++--- prism/src/hybrid/PH_NondetBoundedUntil.cc | 36 +-- prism/src/hybrid/PH_NondetReachReward.cc | 54 ++--- .../hybrid/PH_NondetReachRewardInterval.cc | 62 ++--- prism/src/hybrid/PH_NondetUntil.cc | 42 ++-- prism/src/hybrid/PH_NondetUntilInterval.cc | 56 ++--- prism/src/hybrid/PH_PSOR.cc | 58 ++--- prism/src/hybrid/PH_PSORInterval.cc | 64 ++--- prism/src/hybrid/PH_Power.cc | 42 ++-- prism/src/hybrid/PH_PowerInterval.cc | 46 ++-- prism/src/hybrid/PH_ProbBoundedUntil.cc | 36 +-- prism/src/hybrid/PH_ProbCumulReward.cc | 36 +-- prism/src/hybrid/PH_ProbInstReward.cc | 30 +-- prism/src/hybrid/PH_ProbReachReward.cc | 4 +- .../src/hybrid/PH_ProbReachRewardInterval.cc | 8 +- prism/src/hybrid/PH_ProbTransient.cc | 34 +-- prism/src/hybrid/PH_ProbUntil.cc | 4 +- prism/src/hybrid/PH_ProbUntilInterval.cc | 8 +- prism/src/hybrid/PH_SOR.cc | 58 ++--- prism/src/hybrid/PH_SORInterval.cc | 64 ++--- prism/src/hybrid/PH_StochBoundedUntil.cc | 48 ++-- prism/src/hybrid/PH_StochCumulReward.cc | 46 ++-- prism/src/hybrid/PH_StochSteadyState.cc | 8 +- prism/src/hybrid/PH_StochTransient.cc | 46 ++-- prism/src/hybrid/PrismHybrid.cc | 202 ---------------- prism/src/hybrid/PrismHybrid.java | 56 +---- prism/src/hybrid/hybrid.cc | 2 +- prism/src/mtbdd/PM_ExportLabels.cc | 2 +- prism/src/mtbdd/PM_ExportMatrix.cc | 2 +- prism/src/mtbdd/PM_ExportVector.cc | 2 +- prism/src/mtbdd/PM_JOR.cc | 20 +- prism/src/mtbdd/PM_JORInterval.cc | 24 +- prism/src/mtbdd/PM_NondetBoundedUntil.cc | 16 +- prism/src/mtbdd/PM_NondetInstReward.cc | 12 +- prism/src/mtbdd/PM_NondetReachReward.cc | 18 +- .../src/mtbdd/PM_NondetReachRewardInterval.cc | 26 +- prism/src/mtbdd/PM_NondetUntil.cc | 22 +- prism/src/mtbdd/PM_NondetUntilInterval.cc | 24 +- prism/src/mtbdd/PM_Power.cc | 18 +- prism/src/mtbdd/PM_PowerInterval.cc | 20 +- prism/src/mtbdd/PM_Prob0.cc | 4 +- prism/src/mtbdd/PM_Prob0A.cc | 4 +- prism/src/mtbdd/PM_Prob0E.cc | 4 +- prism/src/mtbdd/PM_Prob1.cc | 4 +- prism/src/mtbdd/PM_Prob1A.cc | 4 +- prism/src/mtbdd/PM_Prob1E.cc | 4 +- prism/src/mtbdd/PM_ProbBoundedUntil.cc | 14 +- prism/src/mtbdd/PM_ProbCumulReward.cc | 10 +- prism/src/mtbdd/PM_ProbInstReward.cc | 10 +- prism/src/mtbdd/PM_ProbReachReward.cc | 4 +- prism/src/mtbdd/PM_ProbReachRewardInterval.cc | 8 +- prism/src/mtbdd/PM_ProbTransient.cc | 12 +- prism/src/mtbdd/PM_ProbUntil.cc | 4 +- prism/src/mtbdd/PM_ProbUntilInterval.cc | 8 +- prism/src/mtbdd/PM_Reachability.cc | 20 +- prism/src/mtbdd/PM_StochBoundedUntil.cc | 58 ++--- prism/src/mtbdd/PM_StochCumulReward.cc | 26 +- prism/src/mtbdd/PM_StochSteadyState.cc | 4 +- prism/src/mtbdd/PM_StochTransient.cc | 56 ++--- prism/src/mtbdd/PrismMTBDD.cc | 227 ------------------ prism/src/mtbdd/PrismMTBDD.java | 58 +---- prism/src/prism/Makefile | 1 + prism/src/prism/Prism.java | 16 +- prism/src/prism/PrismNative.cc | 219 +++++++++++++++-- prism/src/prism/PrismNative.java | 39 ++- prism/src/sparse/PS_ExportMC.cc | 2 +- prism/src/sparse/PS_ExportMDP.cc | 2 +- prism/src/sparse/PS_ExportMatrix.cc | 2 +- prism/src/sparse/PS_ExportSubMDP.cc | 2 +- prism/src/sparse/PS_JOR.cc | 42 ++-- prism/src/sparse/PS_JORInterval.cc | 48 ++-- prism/src/sparse/PS_NondetBoundedUntil.cc | 28 +-- prism/src/sparse/PS_NondetCumulReward.cc | 33 ++- prism/src/sparse/PS_NondetInstReward.cc | 26 +- prism/src/sparse/PS_NondetMultiObj.cc | 67 +++--- prism/src/sparse/PS_NondetMultiObjGS.cc | 39 ++- prism/src/sparse/PS_NondetMultiReach.cc | 65 +++-- .../sparse/PS_NondetMultiReach.cc.withrewards | 132 +++++----- prism/src/sparse/PS_NondetMultiReach1.cc | 75 +++--- prism/src/sparse/PS_NondetMultiReachReward.cc | 83 ++++--- .../src/sparse/PS_NondetMultiReachReward1.cc | 93 ++++--- prism/src/sparse/PS_NondetReachReward.cc | 57 +++-- .../sparse/PS_NondetReachRewardInterval.cc | 73 +++--- prism/src/sparse/PS_NondetUntil.cc | 47 ++-- prism/src/sparse/PS_NondetUntilInterval.cc | 59 +++-- prism/src/sparse/PS_Power.cc | 36 +-- prism/src/sparse/PS_PowerInterval.cc | 40 +-- prism/src/sparse/PS_ProbBoundedUntil.cc | 30 +-- prism/src/sparse/PS_ProbCumulReward.cc | 30 +-- prism/src/sparse/PS_ProbInstReward.cc | 24 +- prism/src/sparse/PS_ProbReachReward.cc | 6 +- .../src/sparse/PS_ProbReachRewardInterval.cc | 10 +- prism/src/sparse/PS_ProbTransient.cc | 28 +-- prism/src/sparse/PS_ProbUntil.cc | 6 +- prism/src/sparse/PS_ProbUntilInterval.cc | 10 +- prism/src/sparse/PS_SOR.cc | 42 ++-- prism/src/sparse/PS_SORInterval.cc | 48 ++-- prism/src/sparse/PS_StochBoundedUntil.cc | 42 ++-- prism/src/sparse/PS_StochCumulReward.cc | 40 +-- prism/src/sparse/PS_StochSteadyState.cc | 10 +- prism/src/sparse/PS_StochTransient.cc | 40 +-- prism/src/sparse/PrismSparse.cc | 220 +---------------- prism/src/sparse/PrismSparse.java | 54 +---- prism/src/sparse/sparse.cc | 2 +- prism/src/sparse/sparse_adv.cc | 2 +- 114 files changed, 1754 insertions(+), 2580 deletions(-) delete mode 100644 prism/include/PrismHybridGlob.h delete mode 100644 prism/include/PrismMTBDDGlob.h delete mode 100644 prism/include/PrismSparseGlob.h delete mode 100644 prism/src/hybrid/PrismHybrid.cc delete mode 100644 prism/src/mtbdd/PrismMTBDD.cc diff --git a/prism/include/PrismHybridGlob.h b/prism/include/PrismHybridGlob.h deleted file mode 100644 index 228b36e28..000000000 --- a/prism/include/PrismHybridGlob.h +++ /dev/null @@ -1,52 +0,0 @@ -//============================================================================== -// -// Copyright (c) 2002- -// Authors: -// * Dave Parker (University of Oxford, formerly University of Birmingham) -// -//------------------------------------------------------------------------------ -// -// This file is part of PRISM. -// -// PRISM 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. -// -// PRISM 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 PRISM; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -//============================================================================== - -#include -#include -#include -#include -#include "PrismNativeGlob.h" - -//------------------------------------------------------------------------------ - -// externs to global variables - -// cudd manager -extern DdManager *ddman; - -//------------------------------------------------------------------------------ - -// macros, function prototypes - -#define logtwo(X) log((double)X)/log(2.0) -void PH_PrintToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); -void PH_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); -void PH_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after); -void PH_SetErrorMessage(const char *str, ...) IS_LIKE_PRINTF(1,2); -char *PH_GetErrorMessage(); -bool PH_GetFlagExportIterations(); - -//------------------------------------------------------------------------------ diff --git a/prism/include/PrismMTBDDGlob.h b/prism/include/PrismMTBDDGlob.h deleted file mode 100644 index 89feb54a9..000000000 --- a/prism/include/PrismMTBDDGlob.h +++ /dev/null @@ -1,57 +0,0 @@ -//============================================================================== -// -// Copyright (c) 2002- -// Authors: -// * Dave Parker (University of Oxford, formerly University of Birmingham) -// -//------------------------------------------------------------------------------ -// -// This file is part of PRISM. -// -// PRISM 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. -// -// PRISM 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 PRISM; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -//============================================================================== - -#include -#include -#include "PrismNativeGlob.h" - -//------------------------------------------------------------------------------ - -// externs to global variables - -// cudd manager -extern DdManager *ddman; - -// export stuff -extern int export_type; -extern FILE *export_file; -extern JNIEnv *export_env; - -//------------------------------------------------------------------------------ - -// function prototypes - -void PM_PrintToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); -void PM_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); -void PM_SetErrorMessage(const char *str, ...) IS_LIKE_PRINTF(1,2); -char *PM_GetErrorMessage(); -int store_export_info(int type, jstring fn, JNIEnv *env); - - -void export_string(const char *str, ...) IS_LIKE_PRINTF(1,2); -bool PM_GetFlagExportIterations(); - -//------------------------------------------------------------------------------ diff --git a/prism/include/PrismNativeGlob.h b/prism/include/PrismNativeGlob.h index 2c79635f9..615fe82fc 100644 --- a/prism/include/PrismNativeGlob.h +++ b/prism/include/PrismNativeGlob.h @@ -28,8 +28,11 @@ #define PRISMNATIVEGLOB_H //------------------------------------------------------------------------------ + +#include #include #include +#include // Flags for building Windows DLLs #ifdef __MINGW32__ @@ -69,6 +72,9 @@ //------------------------------------------------------------------------------ +#define MAX_LOG_STRING_LEN 1024 +#define MAX_ERR_STRING_LEN 1024 + // Constants - these need to match the definitions in prism/Prism.java const int EXPORT_PLAIN = 1; @@ -102,13 +108,31 @@ const int REACH_FRONTIER = 2; //------------------------------------------------------------------------------ +#define logtwo(X) log((double)X)/log(2.0) + // External refs to global variables // Prism object EXPORT extern jclass prism_cls; EXPORT extern jobject prism_obj; +// cudd manager +EXPORT extern DdManager *ddman; + +// Export stuff: + +EXPORT extern int export_type; +EXPORT extern FILE *export_file; +EXPORT extern JNIEnv *export_env; +// adversary export mode +EXPORT extern int export_adv; +// adversary export filename +EXPORT extern const char *export_adv_filename; +// export iterations filename +EXPORT extern const char *export_iterations_filename; + // Options: + // numerical method stuff EXPORT extern int lin_eq_method; EXPORT extern double lin_eq_method_param; @@ -126,18 +150,27 @@ EXPORT extern int sor_max_mem; EXPORT extern int num_sor_levels; // use steady-state detection for transient computation? EXPORT extern bool do_ss_detect; -// adversary EXPORT extern mode -EXPORT extern int export_adv; -// adversary export filename -EXPORT extern const char *export_adv_filename; -// export iterations filename -EXPORT extern const char *export_iterations_filename; // details from numerical computation which may be queried EXPORT extern double last_error_bound; //------------------------------------------------------------------------------ +// function prototypes + +EXPORT void PN_SetErrorMessage(const char *str, ...) IS_LIKE_PRINTF(1,2); +EXPORT char *PH_GetErrorMessage(); + +int store_export_info(int type, jstring fn, JNIEnv *env); +void export_string(const char *str, ...) IS_LIKE_PRINTF(1,2); +bool PN_GetFlagExportIterations(); + +void PN_PrintToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); +void PN_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); +void PN_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after); + +//------------------------------------------------------------------------------ + #endif //------------------------------------------------------------------------------ diff --git a/prism/include/PrismSparseGlob.h b/prism/include/PrismSparseGlob.h deleted file mode 100644 index 971b1d15d..000000000 --- a/prism/include/PrismSparseGlob.h +++ /dev/null @@ -1,57 +0,0 @@ -//============================================================================== -// -// Copyright (c) 2002- -// Authors: -// * Dave Parker (University of Oxford, formerly University of Birmingham) -// -//------------------------------------------------------------------------------ -// -// This file is part of PRISM. -// -// PRISM 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. -// -// PRISM 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 PRISM; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -//============================================================================== - -#include -#include -#include "PrismNativeGlob.h" - -//------------------------------------------------------------------------------ - -// externs to global variables - -// cudd manager -extern DdManager *ddman; - -// export stuff -extern int export_type; -extern FILE *export_file; -extern JNIEnv *export_env; - -//------------------------------------------------------------------------------ - -// macros, function prototypes - -#define logtwo(X) log((double)X)/log(2.0) -void PS_PrintToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); -void PS_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) IS_LIKE_PRINTF(2,3); -void PS_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after); -void PS_SetErrorMessage(const char *str, ...) IS_LIKE_PRINTF(1,2); -char *PS_GetErrorMessage(); -int store_export_info(int type, jstring fn, JNIEnv *env); -void export_string(const char *str, ...) IS_LIKE_PRINTF(1,2); -bool PS_GetFlagExportIterations(); - -//------------------------------------------------------------------------------ diff --git a/prism/include/jni/hybrid_PrismHybrid.h b/prism/include/jni/hybrid_PrismHybrid.h index d1b2a7953..04f2f0929 100644 --- a/prism/include/jni/hybrid_PrismHybrid.h +++ b/prism/include/jni/hybrid_PrismHybrid.h @@ -7,46 +7,6 @@ #ifdef __cplusplus extern "C" { #endif -/* - * Class: hybrid_PrismHybrid - * Method: PH_FreeGlobalRefs - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1FreeGlobalRefs - (JNIEnv *, jclass); - -/* - * Class: hybrid_PrismHybrid - * Method: PH_SetCUDDManager - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetCUDDManager - (JNIEnv *, jclass, jlong); - -/* - * Class: hybrid_PrismHybrid - * Method: PH_SetMainLog - * Signature: (Lprism/PrismLog;)V - */ -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetMainLog - (JNIEnv *, jclass, jobject); - -/* - * Class: hybrid_PrismHybrid - * Method: PH_SetExportIterations - * Signature: (Z)V - */ -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetExportIterations - (JNIEnv *, jclass, jboolean); - -/* - * Class: hybrid_PrismHybrid - * Method: PH_GetErrorMessage - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_hybrid_PrismHybrid_PH_1GetErrorMessage - (JNIEnv *, jclass); - /* * Class: hybrid_PrismHybrid * Method: PH_ProbBoundedUntil diff --git a/prism/include/jni/mtbdd_PrismMTBDD.h b/prism/include/jni/mtbdd_PrismMTBDD.h index 41b858286..c2a6251ff 100644 --- a/prism/include/jni/mtbdd_PrismMTBDD.h +++ b/prism/include/jni/mtbdd_PrismMTBDD.h @@ -7,46 +7,6 @@ #ifdef __cplusplus extern "C" { #endif -/* - * Class: mtbdd_PrismMTBDD - * Method: PM_FreeGlobalRefs - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1FreeGlobalRefs - (JNIEnv *, jclass); - -/* - * Class: mtbdd_PrismMTBDD - * Method: PM_SetCUDDManager - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetCUDDManager - (JNIEnv *, jclass, jlong); - -/* - * Class: mtbdd_PrismMTBDD - * Method: PM_SetMainLog - * Signature: (Lprism/PrismLog;)V - */ -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetMainLog - (JNIEnv *, jclass, jobject); - -/* - * Class: mtbdd_PrismMTBDD - * Method: PM_SetExportIterations - * Signature: (Z)V - */ -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetExportIterations - (JNIEnv *, jclass, jboolean); - -/* - * Class: mtbdd_PrismMTBDD - * Method: PM_GetErrorMessage - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_mtbdd_PrismMTBDD_PM_1GetErrorMessage - (JNIEnv *, jclass); - /* * Class: mtbdd_PrismMTBDD * Method: PM_Reachability diff --git a/prism/include/jni/prism_PrismNative.h b/prism/include/jni/prism_PrismNative.h index 33be832a4..9db7131ac 100644 --- a/prism/include/jni/prism_PrismNative.h +++ b/prism/include/jni/prism_PrismNative.h @@ -23,6 +23,38 @@ JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1FreeGlobalRefs JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1SetPrism (JNIEnv *, jclass, jobject); +/* + * Class: prism_PrismNative + * Method: PN_SetCUDDManager + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1SetCUDDManager + (JNIEnv *, jclass, jlong); + +/* + * Class: prism_PrismNative + * Method: PN_SetMainLog + * Signature: (Lprism/PrismLog;)V + */ +JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1SetMainLog + (JNIEnv *, jclass, jobject); + +/* + * Class: prism_PrismNative + * Method: PN_GetErrorMessage + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_prism_PrismNative_PN_1GetErrorMessage + (JNIEnv *, jclass); + +/* + * Class: prism_PrismNative + * Method: PN_SetExportIterations + * Signature: (Z)V + */ +JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1SetExportIterations + (JNIEnv *, jclass, jboolean); + /* * Class: prism_PrismNative * Method: PN_SetCompact diff --git a/prism/include/jni/sparse_PrismSparse.h b/prism/include/jni/sparse_PrismSparse.h index f9173cd1c..2019c3db3 100644 --- a/prism/include/jni/sparse_PrismSparse.h +++ b/prism/include/jni/sparse_PrismSparse.h @@ -7,46 +7,6 @@ #ifdef __cplusplus extern "C" { #endif -/* - * Class: sparse_PrismSparse - * Method: PS_FreeGlobalRefs - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1FreeGlobalRefs - (JNIEnv *, jclass); - -/* - * Class: sparse_PrismSparse - * Method: PS_SetCUDDManager - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetCUDDManager - (JNIEnv *, jclass, jlong); - -/* - * Class: sparse_PrismSparse - * Method: PS_SetMainLog - * Signature: (Lprism/PrismLog;)V - */ -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetMainLog - (JNIEnv *, jclass, jobject); - -/* - * Class: sparse_PrismSparse - * Method: PS_SetExportIterations - * Signature: (Z)V - */ -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetExportIterations - (JNIEnv *, jclass, jboolean); - -/* - * Class: sparse_PrismSparse - * Method: PS_GetErrorMessage - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_sparse_PrismSparse_PS_1GetErrorMessage - (JNIEnv *, jclass); - /* * Class: sparse_PrismSparse * Method: PS_ProbBoundedUntil diff --git a/prism/src/hybrid/PH_JOR.cc b/prism/src/hybrid/PH_JOR.cc index 80cf3dbcb..ba485cd4c 100644 --- a/prism/src/hybrid/PH_JOR.cc +++ b/prism/src/hybrid/PH_JOR.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -133,18 +133,18 @@ jdouble omega // omega (over-relaxation parameter) a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(a, rvars, cvars, num_rvars, odd, true, transpose); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false, transpose); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -154,12 +154,12 @@ jdouble omega // omega (over-relaxation parameter) } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix (and then setting to 1 if sum is 0) - PH_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -180,8 +180,8 @@ jdouble omega // omega (over-relaxation parameter) } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PH_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -192,7 +192,7 @@ jdouble omega // omega (over-relaxation parameter) // build b vector (if present) if (b != NULL) { - PH_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -204,30 +204,30 @@ jdouble omega // omega (over-relaxation parameter) } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PH_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, init, rvars, num_rvars, odd); soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PH_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PH_JOR ("); title += (omega == 1.0)?"Jacobi": ("JOR omega=" + std::to_string(omega)); title += ")"; iterationExport.reset(new ExportIterations(title.c_str())); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -240,7 +240,7 @@ jdouble omega // omega (over-relaxation parameter) // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -286,8 +286,8 @@ jdouble omega // omega (over-relaxation parameter) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -303,10 +303,10 @@ jdouble omega // omega (over-relaxation parameter) time_taken = (double)(stop - start1)/1000; // print iters/timing info - PH_PrintToMainLog(env, "\n%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // the difference between vector values is not a reliable error bound // but we store it anyway in case it is useful for estimating a bound @@ -314,7 +314,7 @@ jdouble omega // omega (over-relaxation parameter) // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_JORInterval.cc b/prism/src/hybrid/PH_JORInterval.cc index 304149027..c31e9a19b 100644 --- a/prism/src/hybrid/PH_JORInterval.cc +++ b/prism/src/hybrid/PH_JORInterval.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -114,7 +114,7 @@ jint flags MeasureSupNormInterval measure(term_crit == TERM_CRIT_RELATIVE); if (omega <= 0.0 || omega > 1.0) { - PH_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); + PN_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); return ptr_to_jlong(NULL); } @@ -146,18 +146,18 @@ jint flags a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(a, rvars, cvars, num_rvars, odd, true, transpose); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false, transpose); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -167,12 +167,12 @@ jint flags } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix (and then setting to 1 if sum is 0) - PH_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -193,8 +193,8 @@ jint flags } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PH_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -205,7 +205,7 @@ jint flags // build b vector (if present) if (b != NULL) { - PH_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -217,31 +217,31 @@ jint flags } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PH_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = mtbdd_to_double_vector(ddman, lower, rvars, num_rvars, odd); soln_above = mtbdd_to_double_vector(ddman, upper, rvars, num_rvars, odd); soln_below2 = new double[n]; soln_above2 = new double[n]; kb = n*8.0/1024.0; kbt += 4*kb; - PH_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PH_JOR_Interval ("); title += (omega == 1.0)?"Jacobi": ("JOR omega=" + std::to_string(omega)); title += ")"; iterationExport.reset(new ExportIterations(title.c_str())); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -255,7 +255,7 @@ jint flags // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -320,14 +320,14 @@ jint flags measure.reset(); measure.measure(soln_below2, soln_above2, n); if (measure.value() < term_crit_param) { - PH_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -346,14 +346,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iters/timing info - PH_PrintToMainLog(env, "\n%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PH_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PH_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -369,7 +369,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/hybrid/PH_NondetBoundedUntil.cc b/prism/src/hybrid/PH_NondetBoundedUntil.cc index f08856cc2..6cbed7384 100644 --- a/prism/src/hybrid/PH_NondetBoundedUntil.cc +++ b/prism/src/hybrid/PH_NondetBoundedUntil.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include @@ -117,24 +117,24 @@ jboolean min // min or max probabilities (true = min, false = max) n = odd->eoff + odd->toff; // build hdds for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); hddms = build_hdd_matrices_mdp(a, NULL, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); nm = hddms->nm; kb = hddms->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse bits - PH_PrintToMainLog(env, "Adding sparse bits... "); + PN_PrintToMainLog(env, "Adding sparse bits... "); add_sparse_matrices_mdp(hddms, compact); kb = hddms->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of yes - PH_PrintToMainLog(env, "Creating vector for yes... "); + PN_PrintToMainLog(env, "Creating vector for yes... "); yes_vec = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); compact_y = false; // try and convert to compact form if required @@ -146,21 +146,21 @@ jboolean min // min or max probabilities (true = min, false = max) } kb = (!compact_y) ? n*8.0/1024.0 : (yes_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_y) PH_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_y) PN_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); //for(i = 0; i < n; i++) printf("%f ", (!compact_y)?(yes_vec[i]):(yes_dist->dist[yes_dist->ptrs[i]])); printf("\n"); // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; soln3 = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PH_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is yes if (!compact_y) { @@ -176,7 +176,7 @@ jboolean min // min or max probabilities (true = min, false = max) start3 = stop; // start iterations - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -235,8 +235,8 @@ jboolean min // min or max probabilities (true = min, false = max) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PH_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -252,11 +252,11 @@ jboolean min // min or max probabilities (true = min, false = max) time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_NondetReachReward.cc b/prism/src/hybrid/PH_NondetReachReward.cc index 8511f3d18..0d6368af8 100644 --- a/prism/src/hybrid/PH_NondetReachReward.cc +++ b/prism/src/hybrid/PH_NondetReachReward.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -131,21 +131,21 @@ jboolean min // min or max probabilities (true = min, false = max) a = DD_Apply(ddman, APPLY_TIMES, trans, maybe); // build hdds for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); hddms = build_hdd_matrices_mdp(a, NULL, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); nm = hddms->nm; kb = hddms->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse bits - PH_PrintToMainLog(env, "Adding sparse bits... "); + PN_PrintToMainLog(env, "Adding sparse bits... "); add_sparse_matrices_mdp(hddms, compact); kb = hddms->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // multiply transition rewards by transition probs and sum rows // (note also filters out unwanted states at the same time) @@ -156,20 +156,20 @@ jboolean min // min or max probabilities (true = min, false = max) trans_rewards = DD_Apply(ddman, APPLY_TIMES, trans_rewards, DD_SetVectorElement(ddman, DD_Constant(ddman, 0), cvars, num_cvars, 0, 1)); // build hdds for transition rewards matrix - PH_PrintToMainLog(env, "Building hybrid MTBDD matrices for rewards... "); + PN_PrintToMainLog(env, "Building hybrid MTBDD matrices for rewards... "); hddms2 = build_hdd_matrices_mdp(trans_rewards, hddms, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); kb = hddms2->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms2->nm, hddms2->num_levels, hddms2->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms2->nm, hddms2->num_levels, hddms2->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse bits - PH_PrintToMainLog(env, "Adding sparse bits... "); + PN_PrintToMainLog(env, "Adding sparse bits... "); add_sparse_matrices_mdp(hddms2, compact); kb = hddms2->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms2->l_sm_min, hddms2->l_sm_max, hddms2->num_sm, hddms2->compact_sm, hddms2->nm); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms2->l_sm_min, hddms2->l_sm_max, hddms2->num_sm, hddms2->compact_sm, hddms2->nm); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // remove goal and infinity states from state rewards vector Cudd_Ref(state_rewards); @@ -177,7 +177,7 @@ jboolean min // min or max probabilities (true = min, false = max) state_rewards = DD_Apply(ddman, APPLY_TIMES, state_rewards, maybe); // put state rewards in a vector - PH_PrintToMainLog(env, "Creating rewards vector... "); + PN_PrintToMainLog(env, "Creating rewards vector... "); rew_vec = mtbdd_to_double_vector(ddman, state_rewards, rvars, num_rvars, odd); // try and convert to compact form if required compact_r = false; @@ -189,20 +189,20 @@ jboolean min // min or max probabilities (true = min, false = max) } kb = (!compact_r) ? n*8.0/1024.0 : (rew_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_r) PH_PrintToMainLog(env, "[dist=%d, compact] ", rew_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_r) PN_PrintToMainLog(env, "[dist=%d, compact] ", rew_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; soln3 = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PH_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is zero for (i = 0; i < n; i++) { @@ -210,9 +210,9 @@ jboolean min // min or max probabilities (true = min, false = max) } std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PH_NondetReachReward")); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -225,7 +225,7 @@ jboolean min // min or max probabilities (true = min, false = max) // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -309,8 +309,8 @@ jboolean min // min or max probabilities (true = min, false = max) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -326,10 +326,10 @@ jboolean min // min or max probabilities (true = min, false = max) time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // the difference between vector values is not a reliable error bound // but we store it anyway in case it is useful for estimating a bound @@ -337,7 +337,7 @@ jboolean min // min or max probabilities (true = min, false = max) // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_NondetReachRewardInterval.cc b/prism/src/hybrid/PH_NondetReachRewardInterval.cc index 0894396ea..a1de0e052 100644 --- a/prism/src/hybrid/PH_NondetReachRewardInterval.cc +++ b/prism/src/hybrid/PH_NondetReachRewardInterval.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "ExportIterations.h" @@ -126,10 +126,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PH_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PH_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // exception handling around whole function @@ -150,21 +150,21 @@ jint flags a = DD_Apply(ddman, APPLY_TIMES, trans, maybe); // build hdds for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); hddms = build_hdd_matrices_mdp(a, NULL, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); nm = hddms->nm; kb = hddms->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse bits - PH_PrintToMainLog(env, "Adding sparse bits... "); + PN_PrintToMainLog(env, "Adding sparse bits... "); add_sparse_matrices_mdp(hddms, compact); kb = hddms->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // multiply transition rewards by transition probs and sum rows // (note also filters out unwanted states at the same time) @@ -175,20 +175,20 @@ jint flags trans_rewards = DD_Apply(ddman, APPLY_TIMES, trans_rewards, DD_SetVectorElement(ddman, DD_Constant(ddman, 0), cvars, num_cvars, 0, 1)); // build hdds for transition rewards matrix - PH_PrintToMainLog(env, "Building hybrid MTBDD matrices for rewards... "); + PN_PrintToMainLog(env, "Building hybrid MTBDD matrices for rewards... "); hddms2 = build_hdd_matrices_mdp(trans_rewards, hddms, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); kb = hddms2->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms2->nm, hddms2->num_levels, hddms2->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms2->nm, hddms2->num_levels, hddms2->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse bits - PH_PrintToMainLog(env, "Adding sparse bits... "); + PN_PrintToMainLog(env, "Adding sparse bits... "); add_sparse_matrices_mdp(hddms2, compact); kb = hddms2->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms2->l_sm_min, hddms2->l_sm_max, hddms2->num_sm, hddms2->compact_sm, hddms2->nm); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms2->l_sm_min, hddms2->l_sm_max, hddms2->num_sm, hddms2->compact_sm, hddms2->nm); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // remove goal and infinity states from state rewards vector Cudd_Ref(state_rewards); @@ -196,7 +196,7 @@ jint flags state_rewards = DD_Apply(ddman, APPLY_TIMES, state_rewards, maybe); // put state rewards in a vector - PH_PrintToMainLog(env, "Creating rewards vector... "); + PN_PrintToMainLog(env, "Creating rewards vector... "); rew_vec = mtbdd_to_double_vector(ddman, state_rewards, rvars, num_rvars, odd); // try and convert to compact form if required compact_r = false; @@ -208,11 +208,11 @@ jint flags } kb = (!compact_r) ? n*8.0/1024.0 : (rew_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_r) PH_PrintToMainLog(env, "[dist=%d, compact] ", rew_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_r) PN_PrintToMainLog(env, "[dist=%d, compact] ", rew_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); // initial solution from below is lower soln_below = mtbdd_to_double_vector(ddman, lower, rvars, num_rvars, odd); soln_below2 = new double[n]; @@ -224,15 +224,15 @@ jint flags kb = n*8.0/1024.0; kbt += 6*kb; - PH_PrintMemoryToMainLog(env, "[6 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[6 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PH_NondetReachReward (interval)")); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -246,7 +246,7 @@ jint flags // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); + PN_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); while (!done && iters < max_iters) { @@ -352,14 +352,14 @@ jint flags measure.reset(); measure.measure(soln_below2, soln_above2, n); if (measure.value() < term_crit_param) { - PH_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -378,14 +378,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PH_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -401,7 +401,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/hybrid/PH_NondetUntil.cc b/prism/src/hybrid/PH_NondetUntil.cc index 5e69eb76f..424cad152 100644 --- a/prism/src/hybrid/PH_NondetUntil.cc +++ b/prism/src/hybrid/PH_NondetUntil.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -122,24 +122,24 @@ jboolean min // min or max probabilities (true = min, false = max) n = odd->eoff + odd->toff; // build hdds for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); hddms = build_hdd_matrices_mdp(a, NULL, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); nm = hddms->nm; kb = hddms->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse bits - PH_PrintToMainLog(env, "Adding sparse bits... "); + PN_PrintToMainLog(env, "Adding sparse bits... "); add_sparse_matrices_mdp(hddms, compact); kb = hddms->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of yes - PH_PrintToMainLog(env, "Creating vector for yes... "); + PN_PrintToMainLog(env, "Creating vector for yes... "); yes_vec = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); compact_y = false; // try and convert to compact form if required @@ -151,21 +151,21 @@ jboolean min // min or max probabilities (true = min, false = max) } kb = (!compact_y) ? n*8.0/1024.0 : (yes_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_y) PH_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_y) PN_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); //for(i = 0; i < n; i++) printf("%f ", (!compact_y)?(yes_vec[i]):(yes_dist->dist[yes_dist->ptrs[i]])); printf("\n"); // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; soln3 = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PH_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is yes if (!compact_y) { @@ -175,9 +175,9 @@ jboolean min // min or max probabilities (true = min, false = max) } std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PH_NondetUntil")); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -190,7 +190,7 @@ jboolean min // min or max probabilities (true = min, false = max) // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -260,8 +260,8 @@ jboolean min // min or max probabilities (true = min, false = max) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -277,10 +277,10 @@ jboolean min // min or max probabilities (true = min, false = max) time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // the difference between vector values is not a reliable error bound // but we store it anyway in case it is useful for estimating a bound @@ -288,7 +288,7 @@ jboolean min // min or max probabilities (true = min, false = max) // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_NondetUntilInterval.cc b/prism/src/hybrid/PH_NondetUntilInterval.cc index 5ce3d73d8..38b31a056 100644 --- a/prism/src/hybrid/PH_NondetUntilInterval.cc +++ b/prism/src/hybrid/PH_NondetUntilInterval.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -114,10 +114,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PH_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PH_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // exception handling around whole function @@ -135,24 +135,24 @@ jint flags n = odd->eoff + odd->toff; // build hdds for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrices... "); hddms = build_hdd_matrices_mdp(a, NULL, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); nm = hddms->nm; kb = hddms->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[nm=%d, levels=%d, nodes=%d] ", hddms->nm, hddms->num_levels, hddms->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse bits - PH_PrintToMainLog(env, "Adding sparse bits... "); + PN_PrintToMainLog(env, "Adding sparse bits... "); add_sparse_matrices_mdp(hddms, compact); kb = hddms->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d-%d, num=%d, compact=%d/%d] ", hddms->l_sm_min, hddms->l_sm_max, hddms->num_sm, hddms->compact_sm, hddms->nm); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of yes - PH_PrintToMainLog(env, "Creating vector for yes... "); + PN_PrintToMainLog(env, "Creating vector for yes... "); yes_vec = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); compact_y = false; // try and convert to compact form if required @@ -164,12 +164,12 @@ jint flags } kb = (!compact_y) ? n*8.0/1024.0 : (yes_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_y) PH_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_y) PN_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); //for(i = 0; i < n; i++) printf("%f ", (!compact_y)?(yes_vec[i]):(yes_dist->dist[yes_dist->ptrs[i]])); printf("\n"); // get vector of maybe - PH_PrintToMainLog(env, "Creating vector for maybe... "); + PN_PrintToMainLog(env, "Creating vector for maybe... "); maybe_vec = mtbdd_to_double_vector(ddman, maybe, rvars, num_rvars, odd); compact_maybe = false; // try and convert to compact form if required @@ -181,12 +181,12 @@ jint flags } kb = (!compact_maybe) ? n*8.0/1024.0 : (maybe_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_maybe) PH_PrintToMainLog(env, "[dist=%d, compact] ", maybe_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_maybe) PN_PrintToMainLog(env, "[dist=%d, compact] ", maybe_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); //for(i = 0; i < n; i++) printf("%f ", (!compact_maybe)?(maybe_vec[i]):(maybe_dist->dist[maybe_dist->ptrs[i]])); printf("\n"); // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = new double[n]; soln_below2 = new double[n]; soln_below3 = new double[n]; @@ -196,10 +196,10 @@ jint flags kb = n*8.0/1024.0; kbt += 6*kb; - PH_PrintMemoryToMainLog(env, "[6 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[6 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution from below is yes, from above 1 for yes or maybe states double yes_val, maybe_val; @@ -220,9 +220,9 @@ jint flags } std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PH_NondetUntil_Interval")); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -236,7 +236,7 @@ jint flags // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); + PN_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); while (!done && iters < max_iters) { @@ -326,14 +326,14 @@ jint flags measure.reset(); measure.measure(soln_below2, soln_above2, n); if (measure.value() < term_crit_param) { - PH_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -352,14 +352,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PH_PrintToMainLog(env, "\nIterative method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PH_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PH_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -375,7 +375,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/hybrid/PH_PSOR.cc b/prism/src/hybrid/PH_PSOR.cc index cda98f6de..1a15f8ff5 100644 --- a/prism/src/hybrid/PH_PSOR.cc +++ b/prism/src/hybrid/PH_PSOR.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "Measures.h" #include "ExportIterations.h" @@ -134,28 +134,28 @@ jboolean forwards // forwards or backwards? a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(a, rvars, cvars, num_rvars, odd, true, transpose); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // split hdd matrix into blocks // nb: in terms of memory, this gets precedence over sparse matrices - PH_PrintToMainLog(env, "Splitting into blocks... "); + PN_PrintToMainLog(env, "Splitting into blocks... "); split_hdd_matrix(hddm, compact, false, transpose); compact_b = hddm->compact_b; kb = hddm->mem_b; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, n=%d, nnz=%d%s] ", hddm->l_b, hddm->blocks->n, hddm->blocks->nnz, compact_b?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, n=%d, nnz=%d%s] ", hddm->l_b, hddm->blocks->n, hddm->blocks->nnz, compact_b?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false, transpose); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -165,13 +165,13 @@ jboolean forwards // forwards or backwards? } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix (and then setting to 1 if sum is 0) // (the latter is a fix for steady-state solution of a subsystem e.g. a BSCC) - PH_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -192,8 +192,8 @@ jboolean forwards // forwards or backwards? } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PH_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -204,7 +204,7 @@ jboolean forwards // forwards or backwards? // build b vector (if present) if (b != NULL) { - PH_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -216,32 +216,32 @@ jboolean forwards // forwards or backwards? } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PH_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, init, rvars, num_rvars, odd); soln2 = new double[hddm->blocks->max]; for (i = 0; i < hddm->blocks->max; i++) soln2[i] = 0; kb = (n*8.0/1024.0)+(hddm->blocks->max*8.0/1024.0); kbt += kb; - PH_PrintMemoryToMainLog(env, "[", (n*8.0/1024.0), ""); - PH_PrintMemoryToMainLog(env, " + ", (hddm->blocks->max*8.0/1024.0), ""); - PH_PrintMemoryToMainLog(env, " = ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", (n*8.0/1024.0), ""); + PN_PrintMemoryToMainLog(env, " + ", (hddm->blocks->max*8.0/1024.0), ""); + PN_PrintMemoryToMainLog(env, " = ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PH_PSOR ("); title += (omega == 1.0)?"Pseudo Gauss-Seidel": ("Pseudo SOR omega=" + std::to_string(omega)); title += ")"; iterationExport.reset(new ExportIterations(title.c_str())); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -253,13 +253,13 @@ jboolean forwards // forwards or backwards? // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { iters++; -// PH_PrintToMainLog(env, "Iteration %d: ", iters); +// PN_PrintToMainLog(env, "Iteration %d: ", iters); // start3 = util_cpu_time(); measure.reset(); @@ -347,7 +347,7 @@ jboolean forwards // forwards or backwards? done = true; } -// PH_PrintToMainLog(env, "%.2f %.2f sec\n", ((double)(util_cpu_time() - start3)/1000), ((double)(util_cpu_time() - start2)/1000)/iters); +// PN_PrintToMainLog(env, "%.2f %.2f sec\n", ((double)(util_cpu_time() - start3)/1000), ((double)(util_cpu_time() - start2)/1000)/iters); } // stop clocks @@ -356,10 +356,10 @@ jboolean forwards // forwards or backwards? time_taken = (double)(stop - start1)/1000; // print iters/timing info - PH_PrintToMainLog(env, "\n%sPseudo %s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%sPseudo %s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // the difference between vector values is not a reliable error bound // but we store it anyway in case it is useful for estimating a bound @@ -367,7 +367,7 @@ jboolean forwards // forwards or backwards? // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_PSORInterval.cc b/prism/src/hybrid/PH_PSORInterval.cc index 174ee82f4..5fb1a6c4b 100644 --- a/prism/src/hybrid/PH_PSORInterval.cc +++ b/prism/src/hybrid/PH_PSORInterval.cc @@ -36,7 +36,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "Measures.h" #include "ExportIterations.h" @@ -115,7 +115,7 @@ jint flags MeasureSupNormInterval measure(term_crit == TERM_CRIT_RELATIVE); if (omega <= 0.0 || omega > 1.0) { - PH_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); + PN_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); return ptr_to_jlong(NULL); } @@ -147,28 +147,28 @@ jint flags a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(a, rvars, cvars, num_rvars, odd, true, transpose); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // split hdd matrix into blocks // nb: in terms of memory, this gets precedence over sparse matrices - PH_PrintToMainLog(env, "Splitting into blocks... "); + PN_PrintToMainLog(env, "Splitting into blocks... "); split_hdd_matrix(hddm, compact, false, transpose); compact_b = hddm->compact_b; kb = hddm->mem_b; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, n=%d, nnz=%d%s] ", hddm->l_b, hddm->blocks->n, hddm->blocks->nnz, compact_b?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, n=%d, nnz=%d%s] ", hddm->l_b, hddm->blocks->n, hddm->blocks->nnz, compact_b?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false, transpose); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -178,13 +178,13 @@ jint flags } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix (and then setting to 1 if sum is 0) // (the latter is a fix for steady-state solution of a subsystem e.g. a BSCC) - PH_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -205,8 +205,8 @@ jint flags } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PH_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -217,7 +217,7 @@ jint flags // build b vector (if present) if (b != NULL) { - PH_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -229,33 +229,33 @@ jint flags } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PH_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = mtbdd_to_double_vector(ddman, lower, rvars, num_rvars, odd); soln_above = mtbdd_to_double_vector(ddman, upper, rvars, num_rvars, odd); soln2 = new double[hddm->blocks->max]; for (i = 0; i < hddm->blocks->max; i++) soln2[i] = 0; kb = 2*(n*8.0/1024.0)+(hddm->blocks->max*8.0/1024.0); kbt += kb; - PH_PrintMemoryToMainLog(env, "[2 x ", (n*8.0/1024.0), ""); - PH_PrintMemoryToMainLog(env, " + ", (hddm->blocks->max*8.0/1024.0), ""); - PH_PrintMemoryToMainLog(env, " = ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", (n*8.0/1024.0), ""); + PN_PrintMemoryToMainLog(env, " + ", (hddm->blocks->max*8.0/1024.0), ""); + PN_PrintMemoryToMainLog(env, " = ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PH_PSOR_Interval (Pseudo "); title += (omega == 1.0)?"Gauss-Seidel": ("SOR omega=" + std::to_string(omega)); title += ")"; iterationExport.reset(new ExportIterations(title.c_str())); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -268,13 +268,13 @@ jint flags // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { iters++; -// PH_PrintToMainLog(env, "Iteration %d: ", iters); +// PN_PrintToMainLog(env, "Iteration %d: ", iters); // start3 = util_cpu_time(); // stuff for block storage @@ -374,11 +374,11 @@ jint flags measure.reset(); measure.measure(soln_below, soln_above, n); if (measure.value() < term_crit_param) { - PH_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } -// PH_PrintToMainLog(env, "%.2f %.2f sec\n", ((double)(util_cpu_time() - start3)/1000), ((double)(util_cpu_time() - start2)/1000)/iters); +// PN_PrintToMainLog(env, "%.2f %.2f sec\n", ((double)(util_cpu_time() - start3)/1000), ((double)(util_cpu_time() - start2)/1000)/iters); } // stop clocks @@ -387,14 +387,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iters/timing info - PH_PrintToMainLog(env, "\n%sPseudo %s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%sPseudo %s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PH_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PH_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -410,7 +410,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/hybrid/PH_Power.cc b/prism/src/hybrid/PH_Power.cc index 2719ecb10..69a15c22a 100644 --- a/prism/src/hybrid/PH_Power.cc +++ b/prism/src/hybrid/PH_Power.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -117,18 +117,18 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) Cudd_Ref(a); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(a, rvars, cvars, num_rvars, odd, true, transpose); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false, transpose); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -138,12 +138,12 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // build b vector (if present) if (b != NULL) { - PH_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -155,25 +155,25 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PH_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, init, rvars, num_rvars, odd); soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PH_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PH_Power")); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -186,7 +186,7 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -218,8 +218,8 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -235,10 +235,10 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) time_taken = (double)(stop - start1)/1000; // print iters/timing info - PH_PrintToMainLog(env, "\nPower method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nPower method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // the difference between vector values is not a reliable error bound // but we store it anyway in case it is useful for estimating a bound @@ -246,7 +246,7 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_PowerInterval.cc b/prism/src/hybrid/PH_PowerInterval.cc index 0d18e3026..175b9e37f 100644 --- a/prism/src/hybrid/PH_PowerInterval.cc +++ b/prism/src/hybrid/PH_PowerInterval.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -125,18 +125,18 @@ jint flags Cudd_Ref(a); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(a, rvars, cvars, num_rvars, odd, true, transpose); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false, transpose); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -146,12 +146,12 @@ jint flags } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // build b vector (if present) if (b != NULL) { - PH_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -163,27 +163,27 @@ jint flags } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PH_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = mtbdd_to_double_vector(ddman, lower, rvars, num_rvars, odd); soln_above = mtbdd_to_double_vector(ddman, upper, rvars, num_rvars, odd); soln_below2 = new double[n]; soln_above2 = new double[n]; kb = n*8.0/1024.0; kbt += 4*kb; - PH_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PH_Power_Interval")); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -197,7 +197,7 @@ jint flags // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -245,14 +245,14 @@ jint flags measure.reset(); measure.measure(soln_below2, soln_above2, n); if (measure.value() < term_crit_param) { - PH_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -271,14 +271,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iters/timing info - PH_PrintToMainLog(env, "\nPower method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nPower method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PH_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PH_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -294,7 +294,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln = 0; } diff --git a/prism/src/hybrid/PH_ProbBoundedUntil.cc b/prism/src/hybrid/PH_ProbBoundedUntil.cc index 02fc14a7c..0e6fbafe6 100644 --- a/prism/src/hybrid/PH_ProbBoundedUntil.cc +++ b/prism/src/hybrid/PH_ProbBoundedUntil.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include @@ -112,18 +112,18 @@ jint bound // time bound a = DD_Apply(ddman, APPLY_TIMES, trans, maybe); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(a, rvars, cvars, num_rvars, odd, true); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -133,11 +133,11 @@ jint bound // time bound } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of yes - PH_PrintToMainLog(env, "Creating vector for yes... "); + PN_PrintToMainLog(env, "Creating vector for yes... "); yes_vec = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); compact_y = false; // try and convert to compact form if required @@ -149,20 +149,20 @@ jint bound // time bound } kb = (!compact_y) ? n*8.0/1024.0 : (yes_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_y) PH_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_y) PN_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); //for(i = 0; i < n; i++) printf("%f ", (!compact_y)?(yes_vec[i]):(yes_dist->dist[yes_dist->ptrs[i]])); printf("\n"); // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PH_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is yes if (!compact_y) { @@ -178,7 +178,7 @@ jint bound // time bound start3 = stop; // start iterations - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -199,8 +199,8 @@ jint bound // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PH_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -216,11 +216,11 @@ jint bound // time bound time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_ProbCumulReward.cc b/prism/src/hybrid/PH_ProbCumulReward.cc index d2be2f17a..9ee7f89f4 100644 --- a/prism/src/hybrid/PH_ProbCumulReward.cc +++ b/prism/src/hybrid/PH_ProbCumulReward.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include @@ -107,18 +107,18 @@ jint bound // time bound n = odd->eoff + odd->toff; // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(trans, rvars, cvars, num_rvars, odd, true); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -128,8 +128,8 @@ jint bound // time bound } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // multiply transition rewards by transition probs and sum rows // then combine state and transition rewards and put in a vector @@ -141,7 +141,7 @@ jint bound // time bound all_rewards = DD_Apply(ddman, APPLY_PLUS, state_rewards, all_rewards); // get vector of rewards - PH_PrintToMainLog(env, "Creating vector for rewards... "); + PN_PrintToMainLog(env, "Creating vector for rewards... "); rew_vec = mtbdd_to_double_vector(ddman, all_rewards, rvars, num_rvars, odd); // try and convert to compact form if required compact_r = false; @@ -153,19 +153,19 @@ jint bound // time bound } kb = (!compact_r) ? n*8.0/1024.0 : (rew_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_r) PH_PrintToMainLog(env, "[dist=%d, compact] ", rew_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_r) PN_PrintToMainLog(env, "[dist=%d, compact] ", rew_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PH_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is zero for (i = 0; i < n; i++) { @@ -179,7 +179,7 @@ jint bound // time bound start3 = stop; // start iterations - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -194,8 +194,8 @@ jint bound // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PH_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -211,11 +211,11 @@ jint bound // time bound time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_ProbInstReward.cc b/prism/src/hybrid/PH_ProbInstReward.cc index c05de54db..da772619d 100644 --- a/prism/src/hybrid/PH_ProbInstReward.cc +++ b/prism/src/hybrid/PH_ProbInstReward.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include @@ -100,18 +100,18 @@ jint bound // time bound n = odd->eoff + odd->toff; // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(trans, rvars, cvars, num_rvars, odd, true); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -121,20 +121,20 @@ jint bound // time bound } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors // (solution is initialised to the state rewards) - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, state_rewards, rvars, num_rvars, odd); soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PH_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // get setup time stop = util_cpu_time(); @@ -143,7 +143,7 @@ jint bound // time bound start3 = stop; // start iterations - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -158,8 +158,8 @@ jint bound // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PH_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -175,11 +175,11 @@ jint bound // time bound time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_ProbReachReward.cc b/prism/src/hybrid/PH_ProbReachReward.cc index fe0b63bc4..5d554f2cd 100644 --- a/prism/src/hybrid/PH_ProbReachReward.cc +++ b/prism/src/hybrid/PH_ProbReachReward.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include @@ -155,7 +155,7 @@ jlong __jlongpointer m // 'maybe' states // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_ProbReachRewardInterval.cc b/prism/src/hybrid/PH_ProbReachRewardInterval.cc index 809044b4c..8a1577574 100644 --- a/prism/src/hybrid/PH_ProbReachRewardInterval.cc +++ b/prism/src/hybrid/PH_ProbReachRewardInterval.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "IntervalIteration.h" #include "jnipointer.h" #include @@ -126,10 +126,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PH_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PH_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // call iterative method @@ -170,7 +170,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_ProbTransient.cc b/prism/src/hybrid/PH_ProbTransient.cc index 50bd5d5bb..f381018e2 100644 --- a/prism/src/hybrid/PH_ProbTransient.cc +++ b/prism/src/hybrid/PH_ProbTransient.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "Measures.h" #include @@ -104,18 +104,18 @@ jint time // time n = odd->eoff + odd->toff; // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(trans, rvars, cvars, num_rvars, odd, false); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -125,11 +125,11 @@ jint time // time } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); // for soln, we just use init (since we are free to modify/delete this vector) // we also report the memory usage of this vector here, even though it has already been created soln = init; @@ -137,10 +137,10 @@ jint time // time sum = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PH_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // get setup time stop = util_cpu_time(); @@ -151,7 +151,7 @@ jint time // time // start transient analysis iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < time && !done; iters++) { @@ -173,9 +173,9 @@ jint time // time // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)time); - if (do_ss_detect) PH_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)time); + if (do_ss_detect) PN_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -191,12 +191,12 @@ jint time // time time_taken = (double)(stop - start1)/1000; // print iters/timing info - if (done) PH_PrintToMainLog(env, "\nSteady state detected at iteration %d\n", iters); - PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + if (done) PN_PrintToMainLog(env, "\nSteady state detected at iteration %d\n", iters); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_ProbUntil.cc b/prism/src/hybrid/PH_ProbUntil.cc index 0788dc14b..8274dd84c 100644 --- a/prism/src/hybrid/PH_ProbUntil.cc +++ b/prism/src/hybrid/PH_ProbUntil.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include @@ -119,7 +119,7 @@ jlong __jlongpointer m // 'maybe' states // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_ProbUntilInterval.cc b/prism/src/hybrid/PH_ProbUntilInterval.cc index 51ca8ec9d..665c2f355 100644 --- a/prism/src/hybrid/PH_ProbUntilInterval.cc +++ b/prism/src/hybrid/PH_ProbUntilInterval.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "IntervalIteration.h" #include "jnipointer.h" #include @@ -103,10 +103,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PH_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PH_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // call iterative method @@ -138,7 +138,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_SOR.cc b/prism/src/hybrid/PH_SOR.cc index 9d9fa9b66..22edf8390 100644 --- a/prism/src/hybrid/PH_SOR.cc +++ b/prism/src/hybrid/PH_SOR.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -144,29 +144,29 @@ jboolean fwds // forwards or backwards? a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(a, rvars, cvars, num_rvars, odd, true, transpose); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // split hdd matrix into blocks // nb: in terms of memory, this gets precedence over sparse matrices - PH_PrintToMainLog(env, "Splitting into blocks... "); + PN_PrintToMainLog(env, "Splitting into blocks... "); split_hdd_matrix(hddm, compact, false, transpose); compact_b = hddm->compact_b; rearrange_hdd_blocks(hddm, false); kb = hddm->mem_b; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, n=%d, nnz=%d%s] ", hddm->l_b, hddm->blocks->n, hddm->blocks->nnz, compact_b?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, n=%d, nnz=%d%s] ", hddm->l_b, hddm->blocks->n, hddm->blocks->nnz, compact_b?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, true, transpose); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -177,12 +177,12 @@ jboolean fwds // forwards or backwards? l_b_max = (hddm->l_b == hddm->num_levels); kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix (and then setting to 1 if sum is 0) - PH_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -203,8 +203,8 @@ jboolean fwds // forwards or backwards? } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PH_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -215,7 +215,7 @@ jboolean fwds // forwards or backwards? // build b vector (if present) if (b != NULL) { - PH_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -227,32 +227,32 @@ jboolean fwds // forwards or backwards? } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PH_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, init, rvars, num_rvars, odd); soln2 = new double[hddm->blocks->max]; for (i = 0; i < hddm->blocks->max; i++) soln2[i] = 0; kb = (n*8.0/1024.0)+(hddm->blocks->max*8.0/1024.0); kbt += kb; - PH_PrintMemoryToMainLog(env, "[", (n*8.0/1024.0), ""); - PH_PrintMemoryToMainLog(env, " + ", (hddm->blocks->max*8.0/1024.0), ""); - PH_PrintMemoryToMainLog(env, " = ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", (n*8.0/1024.0), ""); + PN_PrintMemoryToMainLog(env, " + ", (hddm->blocks->max*8.0/1024.0), ""); + PN_PrintMemoryToMainLog(env, " = ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PH_SOR ("); title += (omega == 1.0)?"Gauss-Seidel": ("SOR omega=" + std::to_string(omega)); title += ")"; iterationExport.reset(new ExportIterations(title.c_str())); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -265,7 +265,7 @@ jboolean fwds // forwards or backwards? // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -387,8 +387,8 @@ jboolean fwds // forwards or backwards? // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure->isRelative()?"relative ":"", measure->value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure->isRelative()?"relative ":"", measure->value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } } @@ -399,10 +399,10 @@ jboolean fwds // forwards or backwards? time_taken = (double)(stop - start1)/1000; // print iters/timing info - PH_PrintToMainLog(env, "\n%s%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // the difference between vector values is not a reliable error bound // but we store it anyway in case it is useful for estimating a bound @@ -410,7 +410,7 @@ jboolean fwds // forwards or backwards? // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_SORInterval.cc b/prism/src/hybrid/PH_SORInterval.cc index e0a3146a4..82f43a40b 100644 --- a/prism/src/hybrid/PH_SORInterval.cc +++ b/prism/src/hybrid/PH_SORInterval.cc @@ -36,7 +36,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -125,7 +125,7 @@ jint flags MeasureSupNormInterval measure(term_crit == TERM_CRIT_RELATIVE); if (omega <= 0.0 || omega > 1.0) { - PH_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); + PN_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); return ptr_to_jlong(NULL); } @@ -158,29 +158,29 @@ jint flags a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(a, rvars, cvars, num_rvars, odd, true, transpose); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // split hdd matrix into blocks // nb: in terms of memory, this gets precedence over sparse matrices - PH_PrintToMainLog(env, "Splitting into blocks... "); + PN_PrintToMainLog(env, "Splitting into blocks... "); split_hdd_matrix(hddm, compact, false, transpose); compact_b = hddm->compact_b; rearrange_hdd_blocks(hddm, false); kb = hddm->mem_b; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, n=%d, nnz=%d%s] ", hddm->l_b, hddm->blocks->n, hddm->blocks->nnz, compact_b?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, n=%d, nnz=%d%s] ", hddm->l_b, hddm->blocks->n, hddm->blocks->nnz, compact_b?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, true, transpose); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -191,12 +191,12 @@ jint flags l_b_max = (hddm->l_b == hddm->num_levels); kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix (and then setting to 1 if sum is 0) - PH_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -217,8 +217,8 @@ jint flags } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PH_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -229,7 +229,7 @@ jint flags // build b vector (if present) if (b != NULL) { - PH_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -241,33 +241,33 @@ jint flags } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PH_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = mtbdd_to_double_vector(ddman, lower, rvars, num_rvars, odd); soln_above = mtbdd_to_double_vector(ddman, upper, rvars, num_rvars, odd); soln2 = new double[hddm->blocks->max]; for (i = 0; i < hddm->blocks->max; i++) soln2[i] = 0; kb = 2*(n*8.0/1024.0)+(hddm->blocks->max*8.0/1024.0); kbt += kb; - PH_PrintMemoryToMainLog(env, "[2 x ", (n*8.0/1024.0), ""); - PH_PrintMemoryToMainLog(env, " + ", (hddm->blocks->max*8.0/1024.0), ""); - PH_PrintMemoryToMainLog(env, " = ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", (n*8.0/1024.0), ""); + PN_PrintMemoryToMainLog(env, " + ", (hddm->blocks->max*8.0/1024.0), ""); + PN_PrintMemoryToMainLog(env, " = ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PH_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PH_SORInterval ("); title += (omega == 1.0)?"Gauss-Seidel": ("SOR omega=" + std::to_string(omega)); title += ")"; iterationExport.reset(new ExportIterations(title.c_str())); - PH_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -281,7 +281,7 @@ jint flags // start iterations iters = 0; done = false; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -411,14 +411,14 @@ jint flags measure.reset(); measure.measure(soln_below, soln_above, n); if (measure.value() < term_crit_param) { - PH_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } } @@ -429,14 +429,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iters/timing info - PH_PrintToMainLog(env, "\n%s%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PH_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PH_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -452,7 +452,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/hybrid/PH_StochBoundedUntil.cc b/prism/src/hybrid/PH_StochBoundedUntil.cc index a9b61b5fd..b74a218b7 100644 --- a/prism/src/hybrid/PH_StochBoundedUntil.cc +++ b/prism/src/hybrid/PH_StochBoundedUntil.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "Measures.h" #include @@ -116,7 +116,7 @@ jlong __jlongpointer mu // probs for multiplying // count number of states to be made absorbing x = DD_GetNumMinterms(ddman, maybe, num_rvars); - PH_PrintToMainLog(env, "\nNumber of non-absorbing states: %.0f of %d (%.1f%%)\n", x, n, 100.0*(x/n)); + PN_PrintToMainLog(env, "\nNumber of non-absorbing states: %.0f of %d (%.1f%%)\n", x, n, 100.0*(x/n)); // filter out rows from rate matrix Cudd_Ref(trans); @@ -124,18 +124,18 @@ jlong __jlongpointer mu // probs for multiplying r = DD_Apply(ddman, APPLY_TIMES, trans, maybe); // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(r, rvars, cvars, num_rvars, odd, false); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -145,11 +145,11 @@ jlong __jlongpointer mu // probs for multiplying } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diagonals - PH_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); diags = hdd_negative_row_sums(hddm, n); compact_d = false; // try and convert to compact form if required @@ -161,8 +161,8 @@ jlong __jlongpointer mu // probs for multiplying } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PH_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); //for(i = 0; i < n; i++) printf("%f ", (!compact_d)?(diags[i]):(diags_dist->dist[diags_dist->ptrs[i]])); printf("\n"); // find max diagonal element @@ -186,13 +186,13 @@ jlong __jlongpointer mu // probs for multiplying } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); soln2 = new double[n]; sum = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PH_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // multiply initial solution by 'mult' probs if (mult != NULL) { @@ -202,19 +202,19 @@ jlong __jlongpointer mu // probs for multiplying } // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // compute new termination criterion parameter (epsilon/8) term_crit_param_unif = term_crit_param / 8.0; // compute poisson probabilities (fox/glynn) - PH_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); + PN_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); fgw = fox_glynn(unif * time, 1.0e-300, 1.0e+300, term_crit_param_unif); if (fgw.right < 0) throw "Overflow in Fox-Glynn computation (time bound too big?)"; for (i = fgw.left; i <= fgw.right; i++) { fgw.weights[i-fgw.left] /= fgw.total_weight; } - PH_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); + PN_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); // set up vectors for (i = 0; i < n; i++) { @@ -230,7 +230,7 @@ jlong __jlongpointer mu // probs for multiplying // start transient analysis done = false; num_iters = -1; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // if necessary, do 0th element of summation (doesn't require any matrix powers) if (fgw.left == 0) for (i = 0; i < n; i++) { @@ -272,16 +272,16 @@ jlong __jlongpointer mu // probs for multiplying } // add to sum for (i = 0; i < n; i++) sum[i] += weight * soln2[i]; - PH_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); + PN_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); num_iters = iters; break; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); - if (do_ss_detect) PH_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); + if (do_ss_detect) PN_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -303,15 +303,15 @@ jlong __jlongpointer mu // probs for multiplying // print iters/timing info if (num_iters == -1) num_iters = fgw.right; - PH_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (sum) delete[] sum; sum = 0; } catch (const char *err) { - PH_SetErrorMessage("%s", err); + PN_SetErrorMessage("%s", err); if (sum) delete[] sum; sum = 0; } diff --git a/prism/src/hybrid/PH_StochCumulReward.cc b/prism/src/hybrid/PH_StochCumulReward.cc index b49b1259b..d786022cd 100644 --- a/prism/src/hybrid/PH_StochCumulReward.cc +++ b/prism/src/hybrid/PH_StochCumulReward.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "Measures.h" #include @@ -114,18 +114,18 @@ jdouble time // time bound n = odd->eoff + odd->toff; // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(trans, rvars, cvars, num_rvars, odd, false); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -135,11 +135,11 @@ jdouble time // time bound } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diagonals - PH_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); diags = hdd_negative_row_sums(hddm, n); compact_d = false; // try and convert to compact form if required @@ -151,8 +151,8 @@ jdouble time // time bound } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PH_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // find max diagonal element if (!compact_d) { @@ -190,29 +190,29 @@ jdouble time // time bound Cudd_RecursiveDeref(ddman, tmp); // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); // soln has already been created and initialised to rewards vector as required // need to create soln2 and sum soln2 = new double[n]; sum = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PH_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // compute new termination criterion parameter (epsilon/8) term_crit_param_unif = term_crit_param / 8.0; // compute poisson probabilities (fox/glynn) - PH_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); + PN_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); fgw = fox_glynn(unif * time, 1.0e-300, 1.0e+300, term_crit_param_unif); if (fgw.right < 0) throw "Overflow in Fox-Glynn computation (time bound too big?)"; for (i = fgw.left; i <= fgw.right; i++) { fgw.weights[i-fgw.left] /= fgw.total_weight; } - PH_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); + PN_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); // modify the poisson probabilities to what we need for this computation // first make the kth value equal to the sum of the values for 0...k @@ -238,7 +238,7 @@ jdouble time // time bound // start transient analysis done = false; num_iters = -1; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // do 0th element of summation (doesn't require any matrix powers) if (fgw.left == 0) { @@ -283,16 +283,16 @@ jdouble time // time bound // add to sum for (i = 0; i < n; i++) sum[i] += weight * soln2[i]; - PH_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); + PN_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); num_iters = iters; break; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); - if (do_ss_detect) PH_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); + if (do_ss_detect) PN_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -316,15 +316,15 @@ jdouble time // time bound // print iters/timing info if (num_iters == -1) num_iters = fgw.right; - PH_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (sum) delete[] sum; sum = 0; } catch (const char *err) { - PH_SetErrorMessage("%s", err); + PN_SetErrorMessage("%s", err); if (sum) delete[] sum; sum = 0; } diff --git a/prism/src/hybrid/PH_StochSteadyState.cc b/prism/src/hybrid/PH_StochSteadyState.cc index ae34e39ec..fc23df695 100644 --- a/prism/src/hybrid/PH_StochSteadyState.cc +++ b/prism/src/hybrid/PH_StochSteadyState.cc @@ -34,7 +34,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include @@ -101,7 +101,7 @@ jint num_cvars q = DD_Apply(ddman, APPLY_PLUS, trans, DD_Apply(ddman, APPLY_TIMES, DD_Identity(ddman, rvars, cvars, num_rvars), diags)); // build iteration matrix - PH_PrintToMainLog(env, "\nBuilding power method iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "\nBuilding power method iteration matrix MTBDD... "); // (includes a "fix" for when we are solving a subsystem e.g. BSCC) // (although i don't think we actually need this for the power method) Cudd_Ref(diags); @@ -109,7 +109,7 @@ jint num_cvars Cudd_Ref(q); a = DD_Apply(ddman, APPLY_PLUS, DD_Apply(ddman, APPLY_TIMES, DD_Constant(ddman, deltat), q), DD_Apply(ddman, APPLY_TIMES, DD_Identity(ddman, rvars, cvars, num_rvars), tmp)); i = DD_GetNumNodes(ddman, a); - PH_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]", i, i*20.0/1024.0); // deref unneeded mtbdds Cudd_RecursiveDeref(ddman, diags); @@ -163,7 +163,7 @@ jint num_cvars // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/hybrid/PH_StochTransient.cc b/prism/src/hybrid/PH_StochTransient.cc index f27586e43..2750edcb2 100644 --- a/prism/src/hybrid/PH_StochTransient.cc +++ b/prism/src/hybrid/PH_StochTransient.cc @@ -35,7 +35,7 @@ #include #include "sparse.h" #include "hybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "Measures.h" #include @@ -110,18 +110,18 @@ jdouble time // time bound n = odd->eoff + odd->toff; // build hdd for matrix - PH_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); + PN_PrintToMainLog(env, "\nBuilding hybrid MTBDD matrix... "); hddm = build_hdd_matrix(trans, rvars, cvars, num_rvars, odd, false); hdd = hddm->top; zero = hddm->zero; num_levels = hddm->num_levels; kb = hddm->mem_nodes; kbt = kb; - PH_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, nodes=%d] ", hddm->num_levels, hddm->num_nodes); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // add sparse matrices - PH_PrintToMainLog(env, "Adding explicit sparse matrices... "); + PN_PrintToMainLog(env, "Adding explicit sparse matrices... "); add_sparse_matrices(hddm, compact, false); compact_sm = hddm->compact_sm; if (compact_sm) { @@ -131,11 +131,11 @@ jdouble time // time bound } kb = hddm->mem_sm; kbt += kb; - PH_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[levels=%d, num=%d%s] ", hddm->l_sm, hddm->num_sm, compact_sm?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diagonals - PH_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); diags = hdd_negative_row_sums(hddm, n); compact_d = false; // try and convert to compact form if required @@ -147,8 +147,8 @@ jdouble time // time bound } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PH_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PH_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); //for(i = 0; i < n; i++) printf("%f ", (!compact_d)?(diags[i]):(diags_dist->dist[diags_dist->ptrs[i]])); printf("\n"); // find max diagonal element @@ -172,7 +172,7 @@ jdouble time // time bound } // create solution/iteration vectors - PH_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); // for soln, we just use init (since we are free to modify/delete this vector) // we also report the memory usage of this vector here, even though it has already been created soln = init; @@ -180,22 +180,22 @@ jdouble time // time bound sum = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PH_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // print total memory usage - PH_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // compute new termination criterion parameter (epsilon/8) term_crit_param_unif = term_crit_param / 8.0; // compute poisson probabilities (fox/glynn) - PH_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); + PN_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); fgw = fox_glynn(unif * time, 1.0e-300, 1.0e+300, term_crit_param_unif); if (fgw.right < 0) throw "Overflow in Fox-Glynn computation (time bound too big?)"; for (i = fgw.left; i <= fgw.right; i++) { fgw.weights[i-fgw.left] /= fgw.total_weight; } - PH_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); + PN_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); // set up vectors for (i = 0; i < n; i++) { @@ -211,7 +211,7 @@ jdouble time // time bound // start transient analysis done = false; num_iters = -1; - PH_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // if necessary, do 0th element of summation (doesn't require any matrix powers) if (fgw.left == 0) for (i = 0; i < n; i++) { @@ -253,16 +253,16 @@ jdouble time // time bound } // add to sum for (i = 0; i < n; i++) sum[i] += weight * soln2[i]; - PH_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); + PN_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); num_iters = iters; break; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PH_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); - if (do_ss_detect) PH_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); - PH_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); + if (do_ss_detect) PN_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -284,15 +284,15 @@ jdouble time // time bound // print iters/timing info if (num_iters == -1) num_iters = fgw.right; - PH_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PH_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (sum) delete[] sum; sum = 0; } catch (const char *err) { - PH_SetErrorMessage("%s", err); + PN_SetErrorMessage("%s", err); if (sum) delete[] sum; sum = 0; } diff --git a/prism/src/hybrid/PrismHybrid.cc b/prism/src/hybrid/PrismHybrid.cc deleted file mode 100644 index 07f6df733..000000000 --- a/prism/src/hybrid/PrismHybrid.cc +++ /dev/null @@ -1,202 +0,0 @@ -//============================================================================== -// -// Copyright (c) 2002- -// Authors: -// * Dave Parker (University of Oxford, formerly University of Birmingham) -// -//------------------------------------------------------------------------------ -// -// This file is part of PRISM. -// -// PRISM 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. -// -// PRISM 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 PRISM; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -//============================================================================== - -#include "PrismHybrid.h" -#include -#include -#include -#include -#include -#include -#include "hybrid.h" -#include "PrismHybridGlob.h" -#include "jnipointer.h" - -#define MAX_LOG_STRING_LEN 1024 -#define MAX_ERR_STRING_LEN 1024 - -//------------------------------------------------------------------------------ -// hybrid engine global variables -//------------------------------------------------------------------------------ - -// cudd manager -DdManager *ddman; - -// logs -// global refs to log classes -static jclass main_log_cls = NULL; -// global refs to log objects -static jobject main_log_obj = NULL; -// method ids for print method in logs -static jmethodID main_log_mid = NULL; -static jmethodID main_log_warn = NULL; - -// export stuff -static bool exportIterations = false; - -// error message -static char error_message[MAX_ERR_STRING_LEN]; - -//------------------------------------------------------------------------------ -// cudd manager -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetCUDDManager(JNIEnv *env, jclass cls, jlong __jlongpointer ddm) -{ - ddman = jlong_to_DdManager(ddm); -} - -//------------------------------------------------------------------------------ -// logs -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetMainLog(JNIEnv *env, jclass cls, jobject log) -{ - // if main log has been set previously, we need to delete existing global refs first - if (main_log_obj != NULL) { - env->DeleteGlobalRef(main_log_cls); - main_log_cls = NULL; - env->DeleteGlobalRef(main_log_obj); - main_log_obj = NULL; - } - - // make a global reference to the log object - main_log_obj = env->NewGlobalRef(log); - // get the log class and make a global reference to it - main_log_cls = (jclass)env->NewGlobalRef(env->GetObjectClass(main_log_obj)); - // get the method id for the print method - main_log_mid = env->GetMethodID(main_log_cls, "print", "(Ljava/lang/String;)V"); - main_log_warn = env->GetMethodID(main_log_cls, "printWarning", "(Ljava/lang/String;)V"); -} - -//------------------------------------------------------------------------------ - -void PH_PrintToMainLog(JNIEnv *env, const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (env) - env->CallVoidMethod(main_log_obj, main_log_mid, env->NewStringUTF(full_string)); - else - printf("%s", full_string); -} - -//------------------------------------------------------------------------------ - -void PH_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (env) - env->CallVoidMethod(main_log_obj, main_log_warn, env->NewStringUTF(full_string)); - else - printf("\nWarning: %s\n", full_string); -} - -//------------------------------------------------------------------------------ - -// Print formatted memory info to main log - -void PH_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after) -{ - char full_string[MAX_LOG_STRING_LEN]; - - if (mem > 1048576) - snprintf(full_string, MAX_LOG_STRING_LEN, "%s%.1f GB%s", before, mem/1048576.0, after); - else if (mem > 1024) - snprintf(full_string, MAX_LOG_STRING_LEN, "%s%.1f MB%s", before, mem/1024.0, after); - else - snprintf(full_string, MAX_LOG_STRING_LEN, "%s%.1f KB%s", before, mem, after); - - if (env) { - env->CallVoidMethod(main_log_obj, main_log_mid, env->NewStringUTF(full_string)); - } - else { - printf("%s", full_string); - } -} - -//------------------------------------------------------------------------------ -// error message handling -//------------------------------------------------------------------------------ - -void PH_SetErrorMessage(const char *str, ...) -{ - va_list argptr; - - va_start(argptr, str); - vsnprintf(error_message, MAX_ERR_STRING_LEN, str, argptr); - va_end(argptr); -} - -char *PH_GetErrorMessage() -{ - return error_message; -} - -JNIEXPORT jstring JNICALL Java_hybrid_PrismHybrid_PH_1GetErrorMessage(JNIEnv *env, jclass cls) -{ - return env->NewStringUTF(error_message); -} - -//------------------------------------------------------------------------------ -// export flags -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1SetExportIterations(JNIEnv *env, jclass cls, jboolean value) -{ - exportIterations = value; -} - -bool PH_GetFlagExportIterations() -{ - return exportIterations; -} - -//------------------------------------------------------------------------------ -// tidy up -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_hybrid_PrismHybrid_PH_1FreeGlobalRefs(JNIEnv *env, jclass cls) -{ - // delete all global references - env->DeleteGlobalRef(main_log_cls); - main_log_cls = NULL; - env->DeleteGlobalRef(main_log_obj); - main_log_obj = NULL; -} - -//------------------------------------------------------------------------------ diff --git a/prism/src/hybrid/PrismHybrid.java b/prism/src/hybrid/PrismHybrid.java index 80f5238da..8bad33360 100644 --- a/prism/src/hybrid/PrismHybrid.java +++ b/prism/src/hybrid/PrismHybrid.java @@ -51,24 +51,9 @@ public class PrismHybrid } //------------------------------------------------------------------------------ - // initialise/close down methods + // Local utility methods //------------------------------------------------------------------------------ - public static void initialise(PrismLog mainLog) - { - setCUDDManager(); - setMainLog(mainLog); - } - - public static void closeDown() - { - // tidy up any JNI stuff - PH_FreeGlobalRefs(); - } - - // tidy up in jni (free global references) - private static native void PH_FreeGlobalRefs(); - /** * Check that number of reachable states is in a range that can be handled by * the hybrid engine methods. @@ -81,50 +66,13 @@ private static void checkNumStates(ODDNode odd) throws PrismNotSupportedExceptio ODDUtils.checkInt(odd, "Currently, the hybrid engine cannot handle models"); } - //------------------------------------------------------------------------------ - // cudd manager - //------------------------------------------------------------------------------ - - // cudd manager - - // jni method to set cudd manager for native code - private static native void PH_SetCUDDManager(long ddm); - public static void setCUDDManager() - { - PH_SetCUDDManager(JDD.GetCUDDManager()); - } - - //------------------------------------------------------------------------------ - // logs - //------------------------------------------------------------------------------ - - // main log - - // place to store main log for java code - private static PrismLog mainLog; - // jni method to set main log for native code - private static native void PH_SetMainLog(PrismLog log); - // method to set main log both in java and c++ - public static void setMainLog(PrismLog log) - { - mainLog = log; - PH_SetMainLog(log); - } - - private static native void PH_SetExportIterations(boolean value); - public static void SetExportIterations(boolean value) - { - PH_SetExportIterations(value); - } - //------------------------------------------------------------------------------ // error message //------------------------------------------------------------------------------ - private static native String PH_GetErrorMessage(); public static String getErrorMessage() { - return PH_GetErrorMessage(); + return PrismNative.PN_GetErrorMessage(); } /** diff --git a/prism/src/hybrid/hybrid.cc b/prism/src/hybrid/hybrid.cc index e08100196..4876fa04c 100644 --- a/prism/src/hybrid/hybrid.cc +++ b/prism/src/hybrid/hybrid.cc @@ -29,7 +29,7 @@ #include "sparse.h" #include "hybrid.h" #include "PrismHybrid.h" -#include "PrismHybridGlob.h" +#include "PrismNativeGlob.h" #include #include diff --git a/prism/src/mtbdd/PM_ExportLabels.cc b/prism/src/mtbdd/PM_ExportLabels.cc index 0ccba09b9..afecfe27b 100644 --- a/prism/src/mtbdd/PM_ExportLabels.cc +++ b/prism/src/mtbdd/PM_ExportLabels.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ diff --git a/prism/src/mtbdd/PM_ExportMatrix.cc b/prism/src/mtbdd/PM_ExportMatrix.cc index ce192cbeb..8d2d8adc7 100644 --- a/prism/src/mtbdd/PM_ExportMatrix.cc +++ b/prism/src/mtbdd/PM_ExportMatrix.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ diff --git a/prism/src/mtbdd/PM_ExportVector.cc b/prism/src/mtbdd/PM_ExportVector.cc index f2b0f6a9c..2c09a39a1 100644 --- a/prism/src/mtbdd/PM_ExportVector.cc +++ b/prism/src/mtbdd/PM_ExportVector.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ diff --git a/prism/src/mtbdd/PM_JOR.cc b/prism/src/mtbdd/PM_JOR.cc index 177df48b9..8ee813aac 100644 --- a/prism/src/mtbdd/PM_JOR.cc +++ b/prism/src/mtbdd/PM_JOR.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "ExportIterations.h" @@ -113,9 +113,9 @@ jdouble omega // omega (jor parameter) // print out some memory usage i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "\nIteration matrix MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "\nIteration matrix MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); i = DD_GetNumNodes(ddman, diags); - PM_PrintToMainLog(env, "Diagonals MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "Diagonals MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); // store initial solution, transposing if necessary Cudd_Ref(init); @@ -125,13 +125,13 @@ jdouble omega // omega (jor parameter) } std::unique_ptr iterationExport; - if (PM_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PM_JOR ("); title += (omega == 1.0)?"Jacobi": ("JOR omega=" + std::to_string(omega)); title += ")"; iterationExport.reset(new ExportIterations(title.c_str())); - PM_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(sol, (transpose?cvars:rvars), num_rvars, odd, 0); } @@ -144,7 +144,7 @@ jdouble omega // omega (jor parameter) // start iterations iters = 0; done = false; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -182,8 +182,8 @@ jdouble omega // omega (jor parameter) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d: ", iters); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: ", iters); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -222,7 +222,7 @@ jdouble omega // omega (jor parameter) time_taken = (double)(stop - start1)/1000; // print iters/timing info - PM_PrintToMainLog(env, "\n%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); // free memory Cudd_RecursiveDeref(ddman, id); @@ -231,7 +231,7 @@ jdouble omega // omega (jor parameter) Cudd_RecursiveDeref(ddman, b); // if the iterative method didn't terminate, this is an error - if (!done) { Cudd_RecursiveDeref(ddman, sol); PM_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); return 0; } + if (!done) { Cudd_RecursiveDeref(ddman, sol); PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); return 0; } return ptr_to_jlong(sol); } diff --git a/prism/src/mtbdd/PM_JORInterval.cc b/prism/src/mtbdd/PM_JORInterval.cc index 0ec8a9369..edaf59ce3 100644 --- a/prism/src/mtbdd/PM_JORInterval.cc +++ b/prism/src/mtbdd/PM_JORInterval.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "ExportIterations.h" @@ -80,7 +80,7 @@ jint flags bool done; if (omega <= 0.0 || omega > 1.0) { - PM_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); + PN_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); return ptr_to_jlong(NULL); } @@ -125,9 +125,9 @@ jint flags // print out some memory usage i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "\nIteration matrix MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "\nIteration matrix MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); i = DD_GetNumNodes(ddman, diags); - PM_PrintToMainLog(env, "Diagonals MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "Diagonals MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); // store initial solutions, transposing if necessary Cudd_Ref(lower); @@ -140,13 +140,13 @@ jint flags } std::unique_ptr iterationExport; - if (PM_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PM_JOR ("); title += (omega == 1.0)?"Jacobi": ("JOR omega=" + std::to_string(omega)); title += "), interval"; iterationExport.reset(new ExportIterations(title.c_str())); - PM_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(sol_below, (transpose?cvars:rvars), num_rvars, odd, 0); iterationExport->exportVector(sol_above, (transpose?cvars:rvars), num_rvars, odd, 1); } @@ -160,7 +160,7 @@ jint flags // start iterations iters = 0; done = false; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); bool below_unchanged = false, above_unchanged = false; @@ -236,8 +236,8 @@ jint flags // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d: ", iters); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: ", iters); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -254,7 +254,7 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iters/timing info - PM_PrintToMainLog(env, "\n%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); DdNode *result; if (helper.flag_select_midpoint() && done) { // we did converge, select midpoint @@ -300,9 +300,9 @@ jint flags if (!done) { Cudd_RecursiveDeref(ddman, result); if (below_unchanged && above_unchanged) { - PM_SetErrorMessage("In interval iteration, after %d iterations, both lower and upper iteration did not change anymore but don't have the required precision yet.\nThis could be caused by the MTBDD's engine collapsing of similar constants, consider setting a smaller value for -cuddepsilon or -cuddepsilon 0 to disable collapsing", iters); + PN_SetErrorMessage("In interval iteration, after %d iterations, both lower and upper iteration did not change anymore but don't have the required precision yet.\nThis could be caused by the MTBDD's engine collapsing of similar constants, consider setting a smaller value for -cuddepsilon or -cuddepsilon 0 to disable collapsing", iters); } else { - PM_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } return 0; } diff --git a/prism/src/mtbdd/PM_NondetBoundedUntil.cc b/prism/src/mtbdd/PM_NondetBoundedUntil.cc index e03cdcc78..238aa4a6c 100644 --- a/prism/src/mtbdd/PM_NondetBoundedUntil.cc +++ b/prism/src/mtbdd/PM_NondetBoundedUntil.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" @@ -78,12 +78,12 @@ jboolean min // min or max probabilities (true = min, false = max) start1 = start2 = util_cpu_time(); // get a - filter out rows - PM_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); Cudd_Ref(trans); Cudd_Ref(maybe); a = DD_Apply(ddman, APPLY_TIMES, trans, maybe); i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); // initial solution // (prob in 0 steps given by yes) @@ -97,7 +97,7 @@ jboolean min // min or max probabilities (true = min, false = max) start3 = stop; // start iterations - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -131,10 +131,10 @@ jboolean min // min or max probabilities (true = min, false = max) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PM_PrintToMainLog(env, "sol=%d nodes", DD_GetNumNodes(ddman, sol)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "sol=%d nodes", DD_GetNumNodes(ddman, sol)); // NB: but tmp was probably bigger than sol (pre min/max-abstract) - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -149,7 +149,7 @@ jboolean min // min or max probabilities (true = min, false = max) time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PM_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // free memory Cudd_RecursiveDeref(ddman, a); diff --git a/prism/src/mtbdd/PM_NondetInstReward.cc b/prism/src/mtbdd/PM_NondetInstReward.cc index ff9472943..e00506678 100644 --- a/prism/src/mtbdd/PM_NondetInstReward.cc +++ b/prism/src/mtbdd/PM_NondetInstReward.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" @@ -93,7 +93,7 @@ jlong __jlongpointer in // start iterations iters = 0; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how many iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -119,8 +119,8 @@ jlong __jlongpointer in // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -132,7 +132,7 @@ jlong __jlongpointer in // Cudd_Ref(init); // tmp = DD_Apply(ddman, APPLY_TIMES, sol, init); // tmp = DD_SumAbstract(ddman, tmp, rvars, num_rvars); -// PM_PrintToMainLog(env, "%i: %f (%0.f, %0d)\n", iters, Cudd_V(tmp), DD_GetNumMinterms(ddman, sol, num_rvars), DD_GetNumNodes(ddman, sol)); +// PN_PrintToMainLog(env, "%i: %f (%0.f, %0d)\n", iters, Cudd_V(tmp), DD_GetNumMinterms(ddman, sol, num_rvars), DD_GetNumNodes(ddman, sol)); // Cudd_RecursiveDeref(ddman, tmp); } @@ -142,7 +142,7 @@ jlong __jlongpointer in time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PM_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // free memory Cudd_RecursiveDeref(ddman, new_mask); diff --git a/prism/src/mtbdd/PM_NondetReachReward.cc b/prism/src/mtbdd/PM_NondetReachReward.cc index dd5db61ba..1070e397f 100644 --- a/prism/src/mtbdd/PM_NondetReachReward.cc +++ b/prism/src/mtbdd/PM_NondetReachReward.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "ExportIterations.h" @@ -88,7 +88,7 @@ jboolean min // min or max probabilities (true = min, false = max) // get reachable states reach = odd->dd; - PM_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); // filter out rows (goal states and infinity states) from matrix Cudd_Ref(trans); @@ -122,10 +122,10 @@ jboolean min // min or max probabilities (true = min, false = max) // print memory usage i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); std::unique_ptr iterationExport; - if (PM_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PM_NondetReachReward")); iterationExport->exportVector(sol, rvars, num_rvars, odd, 0); } @@ -139,7 +139,7 @@ jboolean min // min or max probabilities (true = min, false = max) // start iterations iters = 0; done = false; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -191,8 +191,8 @@ jboolean min // min or max probabilities (true = min, false = max) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d: ", iters); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: ", iters); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -226,7 +226,7 @@ jboolean min // min or max probabilities (true = min, false = max) time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PM_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // free memory Cudd_RecursiveDeref(ddman, a); @@ -234,7 +234,7 @@ jboolean min // min or max probabilities (true = min, false = max) Cudd_RecursiveDeref(ddman, new_mask); // if the iterative method didn't terminate, this is an error - if (!done) { Cudd_RecursiveDeref(ddman, sol); PM_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); return 0; } + if (!done) { Cudd_RecursiveDeref(ddman, sol); PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); return 0; } return ptr_to_jlong(sol); } diff --git a/prism/src/mtbdd/PM_NondetReachRewardInterval.cc b/prism/src/mtbdd/PM_NondetReachRewardInterval.cc index d157ad4a7..8b0ac33c6 100644 --- a/prism/src/mtbdd/PM_NondetReachRewardInterval.cc +++ b/prism/src/mtbdd/PM_NondetReachRewardInterval.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "ExportIterations.h" @@ -91,10 +91,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PM_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PM_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // start clocks @@ -103,7 +103,7 @@ jint flags // get reachable states reach = odd->dd; - PM_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); // filter out rows (goal states and infinity states) from matrix Cudd_Ref(trans); @@ -145,10 +145,10 @@ jint flags // print memory usage i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); std::unique_ptr iterationExport; - if (PM_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PM_NondetReachReward (interval)")); iterationExport->exportVector(sol_below, rvars, num_rvars, odd, 0); iterationExport->exportVector(sol_above, rvars, num_rvars, odd, 1); @@ -163,7 +163,7 @@ jint flags // start iterations iters = 0; done = false; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); bool below_unchanged = false, above_unchanged = false; @@ -258,10 +258,10 @@ jint flags // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d: ", iters); - PM_PrintToMainLog(env, "sol_below=%d nodes sol_above=%d nodes", DD_GetNumNodes(ddman, sol_below), DD_GetNumNodes(ddman, sol_above)); + PN_PrintToMainLog(env, "Iteration %d: ", iters); + PN_PrintToMainLog(env, "sol_below=%d nodes sol_above=%d nodes", DD_GetNumNodes(ddman, sol_below), DD_GetNumNodes(ddman, sol_above)); // NB: but tmp was probably bigger than sol (pre min/max-abstract) - PM_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -278,7 +278,7 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PM_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); DdNode *result; if (helper.flag_select_midpoint() && done) { // we did converge, select midpoint @@ -323,9 +323,9 @@ jint flags if (!done) { Cudd_RecursiveDeref(ddman, result); if (below_unchanged && above_unchanged) { - PM_SetErrorMessage("In interval iteration, after %d iterations, both lower and upper iteration did not change anymore but don't have the required precision yet.\nThis could be caused by the MTBDD's engine collapsing of similar constants, consider setting a smaller value for -cuddepsilon or -cuddepsilon 0 to disable collapsing", iters); + PN_SetErrorMessage("In interval iteration, after %d iterations, both lower and upper iteration did not change anymore but don't have the required precision yet.\nThis could be caused by the MTBDD's engine collapsing of similar constants, consider setting a smaller value for -cuddepsilon or -cuddepsilon 0 to disable collapsing", iters); } else { - PM_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } return 0; } diff --git a/prism/src/mtbdd/PM_NondetUntil.cc b/prism/src/mtbdd/PM_NondetUntil.cc index b90fb81f3..dc4e15757 100644 --- a/prism/src/mtbdd/PM_NondetUntil.cc +++ b/prism/src/mtbdd/PM_NondetUntil.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "ExportIterations.h" @@ -80,12 +80,12 @@ jboolean min // min or max probabilities (true = min, false = max) start1 = start2 = util_cpu_time(); // get a - filter out rows - PM_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); Cudd_Ref(trans); Cudd_Ref(maybe); a = DD_Apply(ddman, APPLY_TIMES, trans, maybe); i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); // initial solution // (prob in 0 steps given by yes) @@ -93,7 +93,7 @@ jboolean min // min or max probabilities (true = min, false = max) sol = yes; std::unique_ptr iterationExport; - if (PM_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PM_NondetUntil")); iterationExport->exportVector(sol, rvars, num_rvars, odd, 0); } @@ -107,12 +107,12 @@ jboolean min // min or max probabilities (true = min, false = max) // start iterations iters = 0; done = false; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { // if (iters%20==0) { -// PM_PrintToMainLog(env, "Iteration %d:\n", iters); +// PN_PrintToMainLog(env, "Iteration %d:\n", iters); // DD_PrintTerminalsAndNumbers(ddman, sol, num_rvars); // } @@ -164,10 +164,10 @@ jboolean min // min or max probabilities (true = min, false = max) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d: ", iters); - PM_PrintToMainLog(env, "sol=%d nodes", DD_GetNumNodes(ddman, sol)); + PN_PrintToMainLog(env, "Iteration %d: ", iters); + PN_PrintToMainLog(env, "sol=%d nodes", DD_GetNumNodes(ddman, sol)); // NB: but tmp was probably bigger than sol (pre min/max-abstract) - PM_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -201,13 +201,13 @@ jboolean min // min or max probabilities (true = min, false = max) time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PM_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // free memory Cudd_RecursiveDeref(ddman, a); // if the iterative method didn't terminate, this is an error - if (!done) { Cudd_RecursiveDeref(ddman, sol); PM_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); return 0; } + if (!done) { Cudd_RecursiveDeref(ddman, sol); PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); return 0; } return ptr_to_jlong(sol); } diff --git a/prism/src/mtbdd/PM_NondetUntilInterval.cc b/prism/src/mtbdd/PM_NondetUntilInterval.cc index 908269e52..bfefaaee3 100644 --- a/prism/src/mtbdd/PM_NondetUntilInterval.cc +++ b/prism/src/mtbdd/PM_NondetUntilInterval.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "ExportIterations.h" @@ -85,12 +85,12 @@ jint flags start1 = start2 = util_cpu_time(); // get a - filter out rows - PM_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); Cudd_Ref(trans); Cudd_Ref(maybe); a = DD_Apply(ddman, APPLY_TIMES, trans, maybe); i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); // initial solution // (prob in 0 steps given by yes) @@ -103,7 +103,7 @@ jint flags sol_above = DD_Or(ddman, yes, maybe); std::unique_ptr iterationExport; - if (PM_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PM_NondetUntilInterval")); iterationExport->exportVector(sol_below, rvars, num_rvars, odd, 0); iterationExport->exportVector(sol_above, rvars, num_rvars, odd, 1); @@ -118,7 +118,7 @@ jint flags // start iterations iters = 0; done = false; - PM_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); + PN_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); bool below_unchanged = false, above_unchanged = false; @@ -126,7 +126,7 @@ jint flags below_unchanged = above_unchanged = false; // if (iters%20==0) { -// PM_PrintToMainLog(env, "Iteration %d:\n", iters); +// PN_PrintToMainLog(env, "Iteration %d:\n", iters); // DD_PrintTerminalsAndNumbers(ddman, sol, num_rvars); // } @@ -214,10 +214,10 @@ jint flags // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d: ", iters); - PM_PrintToMainLog(env, "sol_below=%d nodes sol_above=%d nodes", DD_GetNumNodes(ddman, sol_below), DD_GetNumNodes(ddman, sol_above)); + PN_PrintToMainLog(env, "Iteration %d: ", iters); + PN_PrintToMainLog(env, "sol_below=%d nodes sol_above=%d nodes", DD_GetNumNodes(ddman, sol_below), DD_GetNumNodes(ddman, sol_above)); // NB: but tmp was probably bigger than sol (pre min/max-abstract) - PM_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -234,7 +234,7 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PM_PrintToMainLog(env, "\nIterative method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); DdNode *result; if (helper.flag_select_midpoint() && done) { // we did converge, select midpoint @@ -277,9 +277,9 @@ jint flags if (!done) { Cudd_RecursiveDeref(ddman, result); if (below_unchanged && above_unchanged) { - PM_SetErrorMessage("In interval iteration, after %d iterations, both lower and upper iteration did not change anymore but don't have the required precision yet.\nThis could be caused by the MTBDD's engine collapsing of similar constants, consider setting a smaller value for -cuddepsilon or -cuddepsilon 0 to disable collapsing", iters); + PN_SetErrorMessage("In interval iteration, after %d iterations, both lower and upper iteration did not change anymore but don't have the required precision yet.\nThis could be caused by the MTBDD's engine collapsing of similar constants, consider setting a smaller value for -cuddepsilon or -cuddepsilon 0 to disable collapsing", iters); } else { - PM_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } return 0; } diff --git a/prism/src/mtbdd/PM_Power.cc b/prism/src/mtbdd/PM_Power.cc index 4d7f7ce59..bb315ca76 100644 --- a/prism/src/mtbdd/PM_Power.cc +++ b/prism/src/mtbdd/PM_Power.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "ExportIterations.h" @@ -83,7 +83,7 @@ jboolean transpose // transpose A? (i.e. solve xA=b not Ax=b?) // print out some memory usage i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "\nIteration matrix MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "\nIteration matrix MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); // transpose b if necessary if (transpose) { @@ -98,9 +98,9 @@ jboolean transpose // transpose A? (i.e. solve xA=b not Ax=b?) } std::unique_ptr iterationExport; - if (PM_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PM_Power")); - PM_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(sol, (transpose?cvars:rvars), num_rvars, odd, 0); } @@ -113,7 +113,7 @@ jboolean transpose // transpose A? (i.e. solve xA=b not Ax=b?) // start iterations iters = 0; done = false; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -146,8 +146,8 @@ jboolean transpose // transpose A? (i.e. solve xA=b not Ax=b?) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d: ", iters); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: ", iters); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -186,13 +186,13 @@ jboolean transpose // transpose A? (i.e. solve xA=b not Ax=b?) time_taken = (double)(stop - start1)/1000; // print iters/timing info - PM_PrintToMainLog(env, "\nPower method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nPower method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // free memory Cudd_RecursiveDeref(ddman, b); // if the iterative method didn't terminate, this is an error - if (!done) { Cudd_RecursiveDeref(ddman, sol); PM_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); return 0; } + if (!done) { Cudd_RecursiveDeref(ddman, sol); PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); return 0; } return ptr_to_jlong(sol); } diff --git a/prism/src/mtbdd/PM_PowerInterval.cc b/prism/src/mtbdd/PM_PowerInterval.cc index ac5533fe2..94b5bd80f 100644 --- a/prism/src/mtbdd/PM_PowerInterval.cc +++ b/prism/src/mtbdd/PM_PowerInterval.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "ExportIterations.h" @@ -90,7 +90,7 @@ jint flags // print out some memory usage i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "\nIteration matrix MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "\nIteration matrix MTBDD... [nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); // transpose b if necessary if (transpose) { @@ -108,9 +108,9 @@ jint flags } std::unique_ptr iterationExport; - if (PM_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PM_Power (interval)")); - PM_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(sol_below, (transpose?cvars:rvars), num_rvars, odd, 0); iterationExport->exportVector(sol_above, (transpose?cvars:rvars), num_rvars, odd, 1); } @@ -124,7 +124,7 @@ jint flags // start iterations iters = 0; done = false; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); bool below_unchanged = false, above_unchanged = false; @@ -191,8 +191,8 @@ jint flags // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d: ", iters); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: ", iters); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } } @@ -208,7 +208,7 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iters/timing info - PM_PrintToMainLog(env, "\nPower method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nPower method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); DdNode *result; if (helper.flag_select_midpoint() && done) { // we did converge, select midpoint @@ -251,9 +251,9 @@ jint flags if (!done) { Cudd_RecursiveDeref(ddman, result); if (below_unchanged && above_unchanged) { - PM_SetErrorMessage("In interval iteration, after %d iterations, both lower and upper iteration did not change anymore but don't have the required precision yet.\nThis could be caused by the MTBDD's engine collapsing of similar constants, consider setting a smaller value for -cuddepsilon or -cuddepsilon 0 to disable collapsing", iters); + PN_SetErrorMessage("In interval iteration, after %d iterations, both lower and upper iteration did not change anymore but don't have the required precision yet.\nThis could be caused by the MTBDD's engine collapsing of similar constants, consider setting a smaller value for -cuddepsilon or -cuddepsilon 0 to disable collapsing", iters); } else { - PM_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } return 0; } diff --git a/prism/src/mtbdd/PM_Prob0.cc b/prism/src/mtbdd/PM_Prob0.cc index c9d891b63..4a39577ef 100644 --- a/prism/src/mtbdd/PM_Prob0.cc +++ b/prism/src/mtbdd/PM_Prob0.cc @@ -30,7 +30,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -114,7 +114,7 @@ jlong __jlongpointer psi // psi(b2) time_for_iters = time_taken; // print iterations/timing info - PM_PrintToMainLog(env, "\nProb0: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nProb0: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); return ptr_to_jlong(sol); } diff --git a/prism/src/mtbdd/PM_Prob0A.cc b/prism/src/mtbdd/PM_Prob0A.cc index 861185786..f7f5b32c9 100644 --- a/prism/src/mtbdd/PM_Prob0A.cc +++ b/prism/src/mtbdd/PM_Prob0A.cc @@ -30,7 +30,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -123,7 +123,7 @@ jlong __jlongpointer psi // psi(b2) time_for_iters = time_taken; // print iterations/timing info - PM_PrintToMainLog(env, "\nProb0A: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nProb0A: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); return ptr_to_jlong(sol); } diff --git a/prism/src/mtbdd/PM_Prob0E.cc b/prism/src/mtbdd/PM_Prob0E.cc index c763cae60..0d1ce0f8b 100644 --- a/prism/src/mtbdd/PM_Prob0E.cc +++ b/prism/src/mtbdd/PM_Prob0E.cc @@ -30,7 +30,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -128,7 +128,7 @@ jlong __jlongpointer psi // psi(b2) time_for_iters = time_taken; // print iterations/timing info - PM_PrintToMainLog(env, "\nProb0E: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nProb0E: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); return ptr_to_jlong(sol); } diff --git a/prism/src/mtbdd/PM_Prob1.cc b/prism/src/mtbdd/PM_Prob1.cc index 07a71b4cf..071973983 100644 --- a/prism/src/mtbdd/PM_Prob1.cc +++ b/prism/src/mtbdd/PM_Prob1.cc @@ -30,7 +30,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -119,7 +119,7 @@ jlong __jlongpointer _no // no time_for_iters = time_taken; // print iterations/timing info - PM_PrintToMainLog(env, "\nProb1: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nProb1: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); return ptr_to_jlong(sol); } diff --git a/prism/src/mtbdd/PM_Prob1A.cc b/prism/src/mtbdd/PM_Prob1A.cc index ac116d2de..98cdd6576 100644 --- a/prism/src/mtbdd/PM_Prob1A.cc +++ b/prism/src/mtbdd/PM_Prob1A.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -129,7 +129,7 @@ jlong __jlongpointer psi // psi(b2) time_for_iters = time_taken; // print iterations/timing info - PM_PrintToMainLog(env, "\nProb1A: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nProb1A: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); Cudd_RecursiveDeref(ddman, notno); diff --git a/prism/src/mtbdd/PM_Prob1E.cc b/prism/src/mtbdd/PM_Prob1E.cc index 91d2fc428..b9e0691f6 100644 --- a/prism/src/mtbdd/PM_Prob1E.cc +++ b/prism/src/mtbdd/PM_Prob1E.cc @@ -30,7 +30,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -142,7 +142,7 @@ jlong __jlongpointer _no // no time_for_iters = time_taken; // print iterations/timing info - PM_PrintToMainLog(env, "\nProb1E: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nProb1E: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); return ptr_to_jlong(u); } diff --git a/prism/src/mtbdd/PM_ProbBoundedUntil.cc b/prism/src/mtbdd/PM_ProbBoundedUntil.cc index fbd4dfd9b..6e964e174 100644 --- a/prism/src/mtbdd/PM_ProbBoundedUntil.cc +++ b/prism/src/mtbdd/PM_ProbBoundedUntil.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" @@ -72,12 +72,12 @@ jint bound // time bound start1 = start2 = util_cpu_time(); // get a - filter out rows - PM_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "\nBuilding iteration matrix MTBDD... "); Cudd_Ref(trans); Cudd_Ref(maybe); a = DD_Apply(ddman, APPLY_TIMES, trans, maybe); i = DD_GetNumNodes(ddman, a); - PM_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]\n", i, i*20.0/1024.0); // initial solution // (prob in 0 steps given by yes) @@ -91,7 +91,7 @@ jint bound // time bound start3 = stop; // start iterations - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -107,8 +107,8 @@ jint bound // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -123,7 +123,7 @@ jint bound // time bound time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PM_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // free memory Cudd_RecursiveDeref(ddman, a); diff --git a/prism/src/mtbdd/PM_ProbCumulReward.cc b/prism/src/mtbdd/PM_ProbCumulReward.cc index 5436b7b3d..84f7f705f 100644 --- a/prism/src/mtbdd/PM_ProbCumulReward.cc +++ b/prism/src/mtbdd/PM_ProbCumulReward.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" @@ -90,7 +90,7 @@ jint bound // time bound start3 = stop; // start iterations - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -106,8 +106,8 @@ jint bound // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -122,7 +122,7 @@ jint bound // time bound time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PM_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // free memory Cudd_RecursiveDeref(ddman, all_rewards); diff --git a/prism/src/mtbdd/PM_ProbInstReward.cc b/prism/src/mtbdd/PM_ProbInstReward.cc index 3b835fb18..431daa9e5 100644 --- a/prism/src/mtbdd/PM_ProbInstReward.cc +++ b/prism/src/mtbdd/PM_ProbInstReward.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" @@ -81,7 +81,7 @@ jint bound // time bound // start iterations iters = 0; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -94,8 +94,8 @@ jint bound // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -110,7 +110,7 @@ jint bound // time bound time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PM_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); return ptr_to_jlong(sol); } diff --git a/prism/src/mtbdd/PM_ProbReachReward.cc b/prism/src/mtbdd/PM_ProbReachReward.cc index fd1085c90..794edfdb2 100644 --- a/prism/src/mtbdd/PM_ProbReachReward.cc +++ b/prism/src/mtbdd/PM_ProbReachReward.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -115,7 +115,7 @@ jlong __jlongpointer m // 'maybe' states break; default: // set error message and return NULL pointer after cleanup, below - PM_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); + PN_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); break; } diff --git a/prism/src/mtbdd/PM_ProbReachRewardInterval.cc b/prism/src/mtbdd/PM_ProbReachRewardInterval.cc index 4eee082ef..677b2b6a8 100644 --- a/prism/src/mtbdd/PM_ProbReachRewardInterval.cc +++ b/prism/src/mtbdd/PM_ProbReachRewardInterval.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "IntervalIteration.h" #include "jnipointer.h" @@ -110,10 +110,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PM_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PM_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // call iterative method @@ -130,7 +130,7 @@ jint flags break; default: // set error message and return NULL pointer after cleanup, below - PM_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); + PN_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); break; } diff --git a/prism/src/mtbdd/PM_ProbTransient.cc b/prism/src/mtbdd/PM_ProbTransient.cc index 301d5a12b..ab0c612e7 100644 --- a/prism/src/mtbdd/PM_ProbTransient.cc +++ b/prism/src/mtbdd/PM_ProbTransient.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -84,7 +84,7 @@ jint time // time // start iterations iters = 0; done = false; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < time && !done; iters++) { @@ -111,8 +111,8 @@ jint time // time // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)time); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)time); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -130,8 +130,8 @@ jint time // time time_taken = (double)(stop - start1)/1000; // print iterations/timing info - if (done) PM_PrintToMainLog(env, "\nSteady state detected at iteration %d\n", iters); - PM_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + if (done) PN_PrintToMainLog(env, "\nSteady state detected at iteration %d\n", iters); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // derefs // nb: we deref init, even though it is passed in as a param diff --git a/prism/src/mtbdd/PM_ProbUntil.cc b/prism/src/mtbdd/PM_ProbUntil.cc index 5bd86540a..d1549b569 100644 --- a/prism/src/mtbdd/PM_ProbUntil.cc +++ b/prism/src/mtbdd/PM_ProbUntil.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -95,7 +95,7 @@ jlong __jlongpointer m // 'maybe' states break; default: // set error message and return NULL pointer after cleanup, below - PM_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); + PN_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); break; } diff --git a/prism/src/mtbdd/PM_ProbUntilInterval.cc b/prism/src/mtbdd/PM_ProbUntilInterval.cc index c1ace0dac..f8c3cd417 100644 --- a/prism/src/mtbdd/PM_ProbUntilInterval.cc +++ b/prism/src/mtbdd/PM_ProbUntilInterval.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "IntervalIteration.h" #include "jnipointer.h" @@ -94,10 +94,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PM_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PM_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // call iterative method @@ -114,7 +114,7 @@ jint flags break; default: // set error message and return NULL pointer after cleanup, below - PM_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); + PN_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); break; } diff --git a/prism/src/mtbdd/PM_Reachability.cc b/prism/src/mtbdd/PM_Reachability.cc index 9ad7bb68c..8555580c6 100644 --- a/prism/src/mtbdd/PM_Reachability.cc +++ b/prism/src/mtbdd/PM_Reachability.cc @@ -30,7 +30,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -82,9 +82,9 @@ jlong __jlongpointer s // start state iters++; // output info on progress if (info > 0) { - PM_PrintToMainLog(env, "Iteration %d:", iters); - PM_PrintToMainLog(env, " %0.f states", DD_GetNumMinterms(ddman, reach, num_rvars)); - PM_PrintToMainLog(env, " (%d nodes)", DD_GetNumNodes(ddman, reach)); + PN_PrintToMainLog(env, "Iteration %d:", iters); + PN_PrintToMainLog(env, " %0.f states", DD_GetNumMinterms(ddman, reach, num_rvars)); + PN_PrintToMainLog(env, " (%d nodes)", DD_GetNumNodes(ddman, reach)); start2 = util_cpu_time(); } // perform iteration @@ -108,7 +108,7 @@ jlong __jlongpointer s // start state // output info on progress if (info > 0) { stop = util_cpu_time(); - PM_PrintToMainLog(env, " (%.2f seconds)\n", (double)(stop - start2)/1000); + PN_PrintToMainLog(env, " (%.2f seconds)\n", (double)(stop - start2)/1000); } } reach = DD_PermuteVariables(ddman, reach, cvars, rvars, num_cvars); @@ -127,9 +127,9 @@ jlong __jlongpointer s // start state iters++; // output info on progress if (info > 0) { - PM_PrintToMainLog(env, "Iteration %d:", iters); - PM_PrintToMainLog(env, " %0.f states", DD_GetNumMinterms(ddman, reach, num_rvars)); - PM_PrintToMainLog(env, " (%d nodes)", DD_GetNumNodes(ddman, reach)); + PN_PrintToMainLog(env, "Iteration %d:", iters); + PN_PrintToMainLog(env, " %0.f states", DD_GetNumMinterms(ddman, reach, num_rvars)); + PN_PrintToMainLog(env, " (%d nodes)", DD_GetNumNodes(ddman, reach)); start2 = util_cpu_time(); } // perform iteration @@ -158,7 +158,7 @@ jlong __jlongpointer s // start state // output info on progress if (info > 0) { stop = util_cpu_time(); - PM_PrintToMainLog(env, " (%.2f seconds)\n", (double)(stop - start2)/1000); + PN_PrintToMainLog(env, " (%.2f seconds)\n", (double)(stop - start2)/1000); } } reach = DD_PermuteVariables(ddman, reach, cvars, rvars, num_cvars); @@ -173,7 +173,7 @@ jlong __jlongpointer s // start state time_for_iters = time_taken; // print iterations/timing info - PM_PrintToMainLog(env, "\nReachability (%s): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", reach_method==REACH_BFS?"BFS":"frontier", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nReachability (%s): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", reach_method==REACH_BFS?"BFS":"frontier", iters, time_taken, time_for_iters/iters, time_for_setup); return ptr_to_jlong(reach); } diff --git a/prism/src/mtbdd/PM_StochBoundedUntil.cc b/prism/src/mtbdd/PM_StochBoundedUntil.cc index 3ea647ff2..412a499fc 100644 --- a/prism/src/mtbdd/PM_StochBoundedUntil.cc +++ b/prism/src/mtbdd/PM_StochBoundedUntil.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -91,19 +91,19 @@ jlong __jlongpointer mu // probs for multiplying // count number of states to be made absorbing x = DD_GetNumMinterms(ddman, maybe, num_cvars); - PM_PrintToMainLog(env, "\nNumber of non-absorbing states: %.0f of %d (%.1f%%)\n", x, n, 100.0*x/n); + PN_PrintToMainLog(env, "\nNumber of non-absorbing states: %.0f of %d (%.1f%%)\n", x, n, 100.0*x/n); // compute diagonals - PM_PrintToMainLog(env, "\nComputing diagonals MTBDD... "); + PN_PrintToMainLog(env, "\nComputing diagonals MTBDD... "); Cudd_Ref(trans); diags = DD_SumAbstract(ddman, trans, cvars, num_rvars); diags = DD_Apply(ddman, APPLY_TIMES, diags, DD_Constant(ddman, -1)); i = DD_GetNumNodes(ddman, diags); - PM_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); if (combine) { - PM_PrintToMainLog(env, "Building iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "Building iteration matrix MTBDD... "); // METHOD 1 (combine rate matrix and diagonals) @@ -114,7 +114,7 @@ jlong __jlongpointer mu // probs for multiplying Cudd_Ref(trans); Cudd_Ref(diags); q = DD_Apply(ddman, APPLY_PLUS, trans, DD_Apply(ddman, APPLY_TIMES, DD_Identity(ddman, rvars, cvars, num_rvars), diags)); -// PM_PrintToMainLog(env, "Q = %d %d %.0f\n", DD_GetNumNodes(ddman, q), DD_GetNumTerminals(ddman, q), DD_GetNumMinterms(ddman, q, num_rvars+num_cvars)); +// PN_PrintToMainLog(env, "Q = %d %d %.0f\n", DD_GetNumNodes(ddman, q), DD_GetNumTerminals(ddman, q), DD_GetNumMinterms(ddman, q, num_rvars+num_cvars)); // filter out rows Cudd_Ref(maybe); @@ -134,24 +134,24 @@ jlong __jlongpointer mu // probs for multiplying q = DD_Apply(ddman, APPLY_DIVIDE, q, DD_Constant(ddman, unif)); Cudd_Ref(reach); q = DD_Apply(ddman, APPLY_PLUS, q, DD_Apply(ddman, APPLY_TIMES, DD_Identity(ddman, rvars, cvars, num_rvars), reach)); -// PM_PrintToMainLog(env, "Q (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, q), DD_GetNumTerminals(ddman, q), DD_GetNumMinterms(ddman, q, num_rvars+num_cvars)); +// PN_PrintToMainLog(env, "Q (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, q), DD_GetNumTerminals(ddman, q), DD_GetNumMinterms(ddman, q, num_rvars+num_cvars)); i = DD_GetNumNodes(ddman, q); - PM_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); } else { // METHOD 2 (keep rate matrix and diagonals separate) - PM_PrintToMainLog(env, "Building iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "Building iteration matrix MTBDD... "); // copy trans/diags Cudd_Ref(trans); r = trans; Cudd_Ref(diags); d = diags; -// PM_PrintToMainLog(env, "r = %d %d %.0f\n", DD_GetNumNodes(ddman, r), DD_GetNumTerminals(ddman, r), DD_GetNumMinterms(ddman, r, num_rvars+num_cvars)); -// PM_PrintToMainLog(env, "diags = %d %d %.0f\n", DD_GetNumNodes(ddman, d), DD_GetNumTerminals(ddman, d), DD_GetNumMinterms(ddman, d, num_rvars)); +// PN_PrintToMainLog(env, "r = %d %d %.0f\n", DD_GetNumNodes(ddman, r), DD_GetNumTerminals(ddman, r), DD_GetNumMinterms(ddman, r, num_rvars+num_cvars)); +// PN_PrintToMainLog(env, "diags = %d %d %.0f\n", DD_GetNumNodes(ddman, d), DD_GetNumTerminals(ddman, d), DD_GetNumMinterms(ddman, d, num_rvars)); // filter out rows Cudd_Ref(maybe); @@ -170,21 +170,21 @@ jlong __jlongpointer mu // probs for multiplying d = DD_Apply(ddman, APPLY_DIVIDE, d, DD_Constant(ddman, unif)); Cudd_Ref(reach); d = DD_Apply(ddman, APPLY_PLUS, d, reach); -// PM_PrintToMainLog(env, "r (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, r), DD_GetNumTerminals(ddman, r), DD_GetNumMinterms(ddman, r, num_rvars+num_cvars)); -// PM_PrintToMainLog(env, "diags (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, d), DD_GetNumTerminals(ddman, d), DD_GetNumMinterms(ddman, d, num_rvars)); +// PN_PrintToMainLog(env, "r (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, r), DD_GetNumTerminals(ddman, r), DD_GetNumMinterms(ddman, r, num_rvars+num_cvars)); +// PN_PrintToMainLog(env, "diags (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, d), DD_GetNumTerminals(ddman, d), DD_GetNumMinterms(ddman, d, num_rvars)); i = DD_GetNumNodes(ddman, r); - PM_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); } // compute new termination criterion parameter (epsilon/8) term_crit_param_unif = term_crit_param / 8.0; // compute poisson probabilities (fox/glynn) - PM_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); + PN_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); fgw = fox_glynn(unif * time, 1.0e-300, 1.0e+300, term_crit_param_unif); if (fgw.right < 0) { - PM_SetErrorMessage("Overflow in Fox-Glynn computation (time bound too big?)"); + PN_SetErrorMessage("Overflow in Fox-Glynn computation (time bound too big?)"); if (combine) { // METHOD 1 @@ -201,12 +201,12 @@ jlong __jlongpointer mu // probs for multiplying for (i = fgw.left; i <= fgw.right; i++) { fgw.weights[i-fgw.left] /= fgw.total_weight; } - PM_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); + PN_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); -// PM_PrintToMainLog(env, "right-left = %d\n", fgw.right-fgw.left); -// PM_PrintToMainLog(env, "total_weight = %f\n", fgw.total_weight); +// PN_PrintToMainLog(env, "right-left = %d\n", fgw.right-fgw.left); +// PN_PrintToMainLog(env, "total_weight = %f\n", fgw.total_weight); // for (int i = 0; i < (fgw.right-fgw.left+1); i++) { -// PM_PrintToMainLog(env, "%.20f\n", fgw.weights[i]/fgw.total_weight); +// PN_PrintToMainLog(env, "%.20f\n", fgw.weights[i]/fgw.total_weight); // } // set up vectors @@ -229,9 +229,9 @@ jlong __jlongpointer mu // probs for multiplying // start iterations done = false; num_iters = -1; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); -// PM_PrintToMainLog(env, "Iteration 0: (%d %d %.0f)", DD_GetNumNodes(ddman, sol), DD_GetNumTerminals(ddman, sol), DD_GetNumMinterms(ddman, sol, num_rvars)); -// PM_PrintToMainLog(env, " (%d %d %.0f)\n", DD_GetNumNodes(ddman, sum), DD_GetNumTerminals(ddman, sum), DD_GetNumMinterms(ddman, sum, num_rvars)); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); +// PN_PrintToMainLog(env, "Iteration 0: (%d %d %.0f)", DD_GetNumNodes(ddman, sol), DD_GetNumTerminals(ddman, sol), DD_GetNumMinterms(ddman, sol, num_rvars)); +// PN_PrintToMainLog(env, " (%d %d %.0f)\n", DD_GetNumNodes(ddman, sum), DD_GetNumTerminals(ddman, sum), DD_GetNumMinterms(ddman, sum, num_rvars)); // if necessary, do 0th element of summation (doesn't require any matrix powers) if (fgw.left == 0) { @@ -269,8 +269,8 @@ jlong __jlongpointer mu // probs for multiplying } -// PM_PrintToMainLog(env, "(%d %d %.0f) ", DD_GetNumNodes(ddman, sol), DD_GetNumTerminals(ddman, sol), DD_GetNumMinterms(ddman, sol, num_rvars)); -// PM_PrintToMainLog(env, "(%d %d %.0f)\n", DD_GetNumNodes(ddman, sum), DD_GetNumTerminals(ddman, sum), DD_GetNumMinterms(ddman, sum, num_rvars)); +// PN_PrintToMainLog(env, "(%d %d %.0f) ", DD_GetNumNodes(ddman, sol), DD_GetNumTerminals(ddman, sol), DD_GetNumMinterms(ddman, sol, num_rvars)); +// PN_PrintToMainLog(env, "(%d %d %.0f)\n", DD_GetNumNodes(ddman, sum), DD_GetNumTerminals(ddman, sum), DD_GetNumMinterms(ddman, sum, num_rvars)); // check for steady state convergence if (do_ss_detect) switch (term_crit) { @@ -300,7 +300,7 @@ jlong __jlongpointer mu // probs for multiplying // add to sum Cudd_Ref(tmp); sum = DD_Apply(ddman, APPLY_PLUS, sum, DD_Apply(ddman, APPLY_TIMES, tmp, DD_Constant(ddman, weight))); - PM_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); + PN_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); num_iters = iters; Cudd_RecursiveDeref(ddman, tmp); break; @@ -308,8 +308,8 @@ jlong __jlongpointer mu // probs for multiplying // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -331,7 +331,7 @@ jlong __jlongpointer mu // probs for multiplying // print iterations/timing info if (num_iters == -1) num_iters = fgw.right; - PM_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); // free memory if (combine) { diff --git a/prism/src/mtbdd/PM_StochCumulReward.cc b/prism/src/mtbdd/PM_StochCumulReward.cc index 2498bf0c1..be90c56e8 100644 --- a/prism/src/mtbdd/PM_StochCumulReward.cc +++ b/prism/src/mtbdd/PM_StochCumulReward.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -84,14 +84,14 @@ jdouble time // time bound reach = odd->dd; // compute diagonals - PM_PrintToMainLog(env, "\nComputing diagonals MTBDD... "); + PN_PrintToMainLog(env, "\nComputing diagonals MTBDD... "); Cudd_Ref(trans); diags = DD_SumAbstract(ddman, trans, cvars, num_rvars); diags = DD_Apply(ddman, APPLY_TIMES, diags, DD_Constant(ddman, -1)); i = DD_GetNumNodes(ddman, diags); - PM_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); - PM_PrintToMainLog(env, "Building iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "Building iteration matrix MTBDD... "); // build generator matrix q from trans and diags // note that any self loops are effectively removed because we include their rates @@ -112,7 +112,7 @@ jdouble time // time bound Cudd_Ref(reach); q = DD_Apply(ddman, APPLY_PLUS, q, DD_Apply(ddman, APPLY_TIMES, DD_Identity(ddman, rvars, cvars, num_rvars), reach)); i = DD_GetNumNodes(ddman, q); - PM_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); // combine state/transition rewards into a single vector - this is the initial solution vector Cudd_Ref(trans); @@ -129,10 +129,10 @@ jdouble time // time bound term_crit_param_unif = term_crit_param / 8.0; // compute poisson probabilities (fox/glynn) - PM_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); + PN_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); fgw = fox_glynn(unif * time, 1.0e-300, 1.0e+300, term_crit_param_unif); if (fgw.right < 0) { - PM_SetErrorMessage("Overflow in Fox-Glynn computation (time bound too big?)"); + PN_SetErrorMessage("Overflow in Fox-Glynn computation (time bound too big?)"); Cudd_RecursiveDeref(ddman, q); Cudd_RecursiveDeref(ddman, diags); Cudd_RecursiveDeref(ddman, sol); @@ -142,7 +142,7 @@ jdouble time // time bound for (i = fgw.left; i <= fgw.right; i++) { fgw.weights[i-fgw.left] /= fgw.total_weight; } - PM_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); + PN_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); // modify the poisson probabilities to what we need for this computation // first make the kth value equal to the sum of the values for 0...k @@ -163,7 +163,7 @@ jdouble time // time bound // start transient analysis done = false; num_iters = -1; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // do 0th element of summation (doesn't require any matrix powers) if (fgw.left == 0) { @@ -211,7 +211,7 @@ jdouble time // time bound // add to sum Cudd_Ref(tmp); sum = DD_Apply(ddman, APPLY_PLUS, sum, DD_Apply(ddman, APPLY_TIMES, tmp, DD_Constant(ddman, weight))); - PM_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); + PN_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); num_iters = iters; Cudd_RecursiveDeref(ddman, tmp); break; @@ -219,8 +219,8 @@ jdouble time // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -245,7 +245,7 @@ jdouble time // time bound // print iters/timing info if (num_iters == -1) num_iters = fgw.right; - PM_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); // free memory Cudd_RecursiveDeref(ddman, q); diff --git a/prism/src/mtbdd/PM_StochSteadyState.cc b/prism/src/mtbdd/PM_StochSteadyState.cc index 9c25d3987..eea932dc0 100644 --- a/prism/src/mtbdd/PM_StochSteadyState.cc +++ b/prism/src/mtbdd/PM_StochSteadyState.cc @@ -31,7 +31,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -111,7 +111,7 @@ jint num_cvars break; default: // set error message and return NULL pointer after cleanup, below - PM_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); + PN_SetErrorMessage("Gauss-Seidel and its variants are currently not supported by the MTBDD engine"); break; } diff --git a/prism/src/mtbdd/PM_StochTransient.cc b/prism/src/mtbdd/PM_StochTransient.cc index bf84a8332..169c2a510 100644 --- a/prism/src/mtbdd/PM_StochTransient.cc +++ b/prism/src/mtbdd/PM_StochTransient.cc @@ -32,7 +32,7 @@ #include #include #include -#include "PrismMTBDDGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" //------------------------------------------------------------------------------ @@ -86,16 +86,16 @@ jdouble time // time reach = odd->dd; // compute diagonals - PM_PrintToMainLog(env, "\nComputing diagonals MTBDD... "); + PN_PrintToMainLog(env, "\nComputing diagonals MTBDD... "); Cudd_Ref(trans); diags = DD_SumAbstract(ddman, trans, cvars, num_rvars); diags = DD_Apply(ddman, APPLY_TIMES, diags, DD_Constant(ddman, -1)); i = DD_GetNumNodes(ddman, diags); - PM_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); if (combine) { - PM_PrintToMainLog(env, "Building iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "Building iteration matrix MTBDD... "); // METHOD 1 (combine rate matrix and diagonals) @@ -106,7 +106,7 @@ jdouble time // time Cudd_Ref(trans); Cudd_Ref(diags); q = DD_Apply(ddman, APPLY_PLUS, trans, DD_Apply(ddman, APPLY_TIMES, DD_Identity(ddman, rvars, cvars, num_rvars), diags)); -// PM_PrintToMainLog(env, "Q = %d %d %.0f\n", DD_GetNumNodes(ddman, q), DD_GetNumTerminals(ddman, q), DD_GetNumMinterms(ddman, q, num_rvars+num_cvars)); +// PN_PrintToMainLog(env, "Q = %d %d %.0f\n", DD_GetNumNodes(ddman, q), DD_GetNumTerminals(ddman, q), DD_GetNumMinterms(ddman, q, num_rvars+num_cvars)); // find max diagonal element max_diag = -DD_FindMin(ddman, diags); @@ -118,24 +118,24 @@ jdouble time // time q = DD_Apply(ddman, APPLY_DIVIDE, q, DD_Constant(ddman, unif)); Cudd_Ref(reach); q = DD_Apply(ddman, APPLY_PLUS, q, DD_Apply(ddman, APPLY_TIMES, DD_Identity(ddman, rvars, cvars, num_rvars), reach)); -// PM_PrintToMainLog(env, "Q (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, q), DD_GetNumTerminals(ddman, q), DD_GetNumMinterms(ddman, q, num_rvars+num_cvars)); +// PN_PrintToMainLog(env, "Q (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, q), DD_GetNumTerminals(ddman, q), DD_GetNumMinterms(ddman, q, num_rvars+num_cvars)); i = DD_GetNumNodes(ddman, q); - PM_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); } else { // METHOD 2 (keep rate matrix and diagonals separate) - PM_PrintToMainLog(env, "Building iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "Building iteration matrix MTBDD... "); // copy trans/diags Cudd_Ref(trans); r = trans; Cudd_Ref(diags); d = diags; -// PM_PrintToMainLog(env, "r = %d %d %.0f\n", DD_GetNumNodes(ddman, r), DD_GetNumTerminals(ddman, r), DD_GetNumMinterms(ddman, r, num_rvars+num_cvars)); -// PM_PrintToMainLog(env, "diags = %d %d %.0f\n", DD_GetNumNodes(ddman, d), DD_GetNumTerminals(ddman, d), DD_GetNumMinterms(ddman, d, num_rvars)); +// PN_PrintToMainLog(env, "r = %d %d %.0f\n", DD_GetNumNodes(ddman, r), DD_GetNumTerminals(ddman, r), DD_GetNumMinterms(ddman, r, num_rvars+num_cvars)); +// PN_PrintToMainLog(env, "diags = %d %d %.0f\n", DD_GetNumNodes(ddman, d), DD_GetNumTerminals(ddman, d), DD_GetNumMinterms(ddman, d, num_rvars)); // find max diagonal element max_diag = -DD_FindMin(ddman, d); @@ -148,24 +148,24 @@ jdouble time // time d = DD_Apply(ddman, APPLY_DIVIDE, d, DD_Constant(ddman, unif)); Cudd_Ref(reach); d = DD_Apply(ddman, APPLY_PLUS, d, reach); -// PM_PrintToMainLog(env, "r (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, r), DD_GetNumTerminals(ddman, r), DD_GetNumMinterms(ddman, r, num_rvars+num_cvars)); -// PM_PrintToMainLog(env, "diags (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, d), DD_GetNumTerminals(ddman, d), DD_GetNumMinterms(ddman, d, num_rvars)); +// PN_PrintToMainLog(env, "r (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, r), DD_GetNumTerminals(ddman, r), DD_GetNumMinterms(ddman, r, num_rvars+num_cvars)); +// PN_PrintToMainLog(env, "diags (final) = %d %d %.0f\n", DD_GetNumNodes(ddman, d), DD_GetNumTerminals(ddman, d), DD_GetNumMinterms(ddman, d, num_rvars)); // transpose diagonals diags = DD_PermuteVariables(ddman, diags, rvars, cvars, num_rvars); i = DD_GetNumNodes(ddman, r); - PM_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%ld] [%.1f Kb]\n", i, i*20.0/1024.0); } // compute new termination criterion parameter (epsilon/8) term_crit_param_unif = term_crit_param / 8.0; // compute poisson probabilities (fox/glynn) - PM_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); + PN_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); fgw = fox_glynn(unif * time, 1.0e-300, 1.0e+300, term_crit_param_unif); if (fgw.right < 0) { - PM_SetErrorMessage("Overflow in Fox-Glynn computation (time bound too big?)"); + PN_SetErrorMessage("Overflow in Fox-Glynn computation (time bound too big?)"); if (combine) { // METHOD 1 @@ -185,12 +185,12 @@ jdouble time // time for (i = fgw.left; i <= fgw.right; i++) { fgw.weights[i-fgw.left] /= fgw.total_weight; } - PM_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); + PN_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); -// PM_PrintToMainLog(env, "right-left = %d\n", fgw.right-fgw.left); -// PM_PrintToMainLog(env, "total_weight = %f\n", fgw.total_weight); +// PN_PrintToMainLog(env, "right-left = %d\n", fgw.right-fgw.left); +// PN_PrintToMainLog(env, "total_weight = %f\n", fgw.total_weight); // for (int i = 0; i < (fgw.right-fgw.left+1); i++) { -// PM_PrintToMainLog(env, "%.20f\n", fgw.weights[i]/fgw.total_weight); +// PN_PrintToMainLog(env, "%.20f\n", fgw.weights[i]/fgw.total_weight); // } // set up vectors @@ -208,9 +208,9 @@ jdouble time // time // start iterations done = false; num_iters = -1; - PM_PrintToMainLog(env, "\nStarting iterations...\n"); -// PM_PrintToMainLog(env, "Iteration 0: (%d %d %.0f)", DD_GetNumNodes(ddman, sol), DD_GetNumTerminals(ddman, sol), DD_GetNumMinterms(ddman, sol, num_rvars)); -// PM_PrintToMainLog(env, " (%d %d %.0f)\n", DD_GetNumNodes(ddman, sum), DD_GetNumTerminals(ddman, sum), DD_GetNumMinterms(ddman, sum, num_rvars)); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); +// PN_PrintToMainLog(env, "Iteration 0: (%d %d %.0f)", DD_GetNumNodes(ddman, sol), DD_GetNumTerminals(ddman, sol), DD_GetNumMinterms(ddman, sol, num_rvars)); +// PN_PrintToMainLog(env, " (%d %d %.0f)\n", DD_GetNumNodes(ddman, sum), DD_GetNumTerminals(ddman, sum), DD_GetNumMinterms(ddman, sum, num_rvars)); // if necessary, do 0th element of summation (doesn't require any matrix powers) if (fgw.left == 0) { @@ -248,8 +248,8 @@ jdouble time // time } -// PM_PrintToMainLog(env, "(%d %d %.0f) ", DD_GetNumNodes(ddman, sol), DD_GetNumTerminals(ddman, sol), DD_GetNumMinterms(ddman, sol, num_rvars)); -// PM_PrintToMainLog(env, "(%d %d %.0f)\n", DD_GetNumNodes(ddman, sum), DD_GetNumTerminals(ddman, sum), DD_GetNumMinterms(ddman, sum, num_rvars)); +// PN_PrintToMainLog(env, "(%d %d %.0f) ", DD_GetNumNodes(ddman, sol), DD_GetNumTerminals(ddman, sol), DD_GetNumMinterms(ddman, sol, num_rvars)); +// PN_PrintToMainLog(env, "(%d %d %.0f)\n", DD_GetNumNodes(ddman, sum), DD_GetNumTerminals(ddman, sum), DD_GetNumMinterms(ddman, sum, num_rvars)); // check for steady state convergence if (do_ss_detect) switch (term_crit) { @@ -279,7 +279,7 @@ jdouble time // time // add to sum Cudd_Ref(tmp); sum = DD_Apply(ddman, APPLY_PLUS, sum, DD_Apply(ddman, APPLY_TIMES, tmp, DD_Constant(ddman, weight))); - PM_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); + PN_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); num_iters = iters; Cudd_RecursiveDeref(ddman, tmp); break; @@ -287,8 +287,8 @@ jdouble time // time // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PM_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); - PM_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -313,7 +313,7 @@ jdouble time // time // print iterations/timing info if (num_iters == -1) num_iters = fgw.right; - PM_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); // free memory if (combine) { diff --git a/prism/src/mtbdd/PrismMTBDD.cc b/prism/src/mtbdd/PrismMTBDD.cc deleted file mode 100644 index 9e5750e97..000000000 --- a/prism/src/mtbdd/PrismMTBDD.cc +++ /dev/null @@ -1,227 +0,0 @@ -//============================================================================== -// -// Copyright (c) 2002- -// Authors: -// * Dave Parker (University of Oxford, formerly University of Birmingham) -// -//------------------------------------------------------------------------------ -// -// This file is part of PRISM. -// -// PRISM 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. -// -// PRISM 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 PRISM; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -//============================================================================== - -#include "PrismMTBDD.h" -#include -#include -#include -#include -#include -#include -#include -#include "PrismMTBDDGlob.h" -#include "jnipointer.h" - -#define MAX_LOG_STRING_LEN 1024 -#define MAX_ERR_STRING_LEN 1024 - -//------------------------------------------------------------------------------ -// mtbdd engine global variables -//------------------------------------------------------------------------------ - -// cudd manager -DdManager *ddman; - -// logs -// global refs to log classes -static jclass main_log_cls = NULL; -// global refs to log objects -static jobject main_log_obj = NULL; -// method ids for print method in logs -static jmethodID main_log_mid = NULL; -static jmethodID main_log_warn = NULL; - -// export stuff -int export_type; -FILE *export_file; -JNIEnv *export_env; -static bool exportIterations = false; - -// error message -static char error_message[MAX_ERR_STRING_LEN]; - -//------------------------------------------------------------------------------ -// cudd manager -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetCUDDManager(JNIEnv *env, jclass cls, jlong __jlongpointer ddm) -{ - ddman = jlong_to_DdManager(ddm); -} - -//------------------------------------------------------------------------------ -// logs -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetMainLog(JNIEnv *env, jclass cls, jobject log) -{ - // if main log has been set previously, we need to delete existing global refs first - if (main_log_obj != NULL) { - env->DeleteGlobalRef(main_log_cls); - main_log_cls = NULL; - env->DeleteGlobalRef(main_log_obj); - main_log_obj = NULL; - } - - // make a global reference to the log object - main_log_obj = env->NewGlobalRef(log); - // get the log class and make a global reference to it - main_log_cls = (jclass)env->NewGlobalRef(env->GetObjectClass(main_log_obj)); - // get the method id for the print method - main_log_mid = env->GetMethodID(main_log_cls, "print", "(Ljava/lang/String;)V"); - main_log_warn = env->GetMethodID(main_log_cls, "printWarning", "(Ljava/lang/String;)V"); -} - -//------------------------------------------------------------------------------ - -void PM_PrintToMainLog(JNIEnv *env, const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (env) - env->CallVoidMethod(main_log_obj, main_log_mid, env->NewStringUTF(full_string)); - else - printf("%s", full_string); -} - -//------------------------------------------------------------------------------ - -void PM_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (env) - env->CallVoidMethod(main_log_obj, main_log_warn, env->NewStringUTF(full_string)); - else - printf("\nWarning: %s\n", full_string); -} - -//------------------------------------------------------------------------------ -// export stuff -//------------------------------------------------------------------------------ - -// store export info globally -// returns 0 on failure, 1 otherwise - -int store_export_info(int type, jstring fn, JNIEnv *env) -{ - export_type = type; - if (fn) { - const char *filename = env->GetStringUTFChars(fn, 0); - export_file = fopen(filename, "w"); - if (!export_file) { - env->ReleaseStringUTFChars(fn, filename); - return 0; - } - env->ReleaseStringUTFChars(fn, filename); - } else { - export_file = NULL; - } - export_env = env; - return 1; -} - -//------------------------------------------------------------------------------ - -// export string (either to file or main log) - -void export_string(const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (export_file) { - fprintf(export_file, "%s", full_string); - } else { - PM_PrintToMainLog(export_env, "%s", full_string); - } -} - -//------------------------------------------------------------------------------ -// export flags -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1SetExportIterations(JNIEnv *env, jclass cls, jboolean value) -{ - exportIterations = value; -} - -bool PM_GetFlagExportIterations() -{ - return exportIterations; -} - -//------------------------------------------------------------------------------ -// error message handling -//------------------------------------------------------------------------------ - -void PM_SetErrorMessage(const char *str, ...) -{ - va_list argptr; - - va_start(argptr, str); - vsnprintf(error_message, MAX_ERR_STRING_LEN, str, argptr); - va_end(argptr); -} - -char *PM_GetErrorMessage() -{ - return error_message; -} - -JNIEXPORT jstring JNICALL Java_mtbdd_PrismMTBDD_PM_1GetErrorMessage(JNIEnv *env, jclass cls) -{ - return env->NewStringUTF(error_message); -} - -//------------------------------------------------------------------------------ -// tidy up -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_mtbdd_PrismMTBDD_PM_1FreeGlobalRefs(JNIEnv *env, jclass cls) -{ - // delete all global references - env->DeleteGlobalRef(main_log_cls); - main_log_cls = NULL; - env->DeleteGlobalRef(main_log_obj); - main_log_obj = NULL; -} - -//------------------------------------------------------------------------------ diff --git a/prism/src/mtbdd/PrismMTBDD.java b/prism/src/mtbdd/PrismMTBDD.java index 166c6305c..946706efb 100644 --- a/prism/src/mtbdd/PrismMTBDD.java +++ b/prism/src/mtbdd/PrismMTBDD.java @@ -52,69 +52,13 @@ public class PrismMTBDD } } - //------------------------------------------------------------------------------ - // initialise/close down methods - //------------------------------------------------------------------------------ - - public static void initialise(PrismLog mainLog) - { - setCUDDManager(); - setMainLog(mainLog); - } - - public static void closeDown() - { - // tidy up any JNI stuff - PM_FreeGlobalRefs(); - } - - // tidy up in jni (free global references) - private static native void PM_FreeGlobalRefs(); - - //------------------------------------------------------------------------------ - // cudd manager - //------------------------------------------------------------------------------ - - // cudd manager - - // jni method to set cudd manager for native code - private static native void PM_SetCUDDManager(long ddm); - public static void setCUDDManager() - { - PM_SetCUDDManager(JDD.GetCUDDManager()); - } - - //------------------------------------------------------------------------------ - // logs - //------------------------------------------------------------------------------ - - // main log - - // place to store main log for java code - private static PrismLog mainLog; - // jni method to set main log for native code - private static native void PM_SetMainLog(PrismLog log); - // method to set main log both in java and c++ - public static void setMainLog(PrismLog log) - { - mainLog = log; - PM_SetMainLog(log); - } - - private static native void PM_SetExportIterations(boolean value); - public static void SetExportIterations(boolean value) - { - PM_SetExportIterations(value); - } - //------------------------------------------------------------------------------ // error message //------------------------------------------------------------------------------ - private static native String PM_GetErrorMessage(); public static String getErrorMessage() { - return PM_GetErrorMessage(); + return PrismNative.PN_GetErrorMessage(); } /** diff --git a/prism/src/prism/Makefile b/prism/src/prism/Makefile index ff274eca7..aeb9d3065 100644 --- a/prism/src/prism/Makefile +++ b/prism/src/prism/Makefile @@ -13,6 +13,7 @@ THIS_DIR = prism PRISM_DIR_REL = ../.. INCLUDES = \ +-I$(PRISM_DIR_REL)/$(CUDD_DIR)/include \ -I"$(JAVA_JNI_H_DIR)" \ -I"$(JAVA_JNI_MD_H_DIR)" \ -I$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR) diff --git a/prism/src/prism/Prism.java b/prism/src/prism/Prism.java index 7814e90e8..09e21bcd9 100644 --- a/prism/src/prism/Prism.java +++ b/prism/src/prism/Prism.java @@ -442,9 +442,7 @@ public void setMainLog(PrismLog l) mainLog = l; // pass to other components JDD.SetOutputStream(mainLog.getFilePointer()); - PrismMTBDD.setMainLog(mainLog); - PrismSparse.setMainLog(mainLog); - PrismHybrid.setMainLog(mainLog); + PrismNative.setMainLog(mainLog); } // Set methods for main prism settings @@ -1102,9 +1100,7 @@ public void notifySettings(PrismSettings settings) } } jdd.SanityJDD.enabled = settings.getBoolean(PrismSettings.PRISM_JDD_SANITY_CHECKS); - PrismSparse.SetExportIterations(settings.getBoolean(PrismSettings.PRISM_EXPORT_ITERATIONS)); - PrismHybrid.SetExportIterations(settings.getBoolean(PrismSettings.PRISM_EXPORT_ITERATIONS)); - PrismMTBDD.SetExportIterations(settings.getBoolean(PrismSettings.PRISM_EXPORT_ITERATIONS)); + PrismNative.SetExportIterations(settings.getBoolean(PrismSettings.PRISM_EXPORT_ITERATIONS)); } //------------------------------------------------------------------------------ @@ -1255,10 +1251,7 @@ public void initialise() throws PrismException JDD.SetOutputStream(mainLog.getFilePointer()); // initialise libraries/engines - PrismNative.initialise(this); - PrismMTBDD.initialise(mainLog); - PrismSparse.initialise(mainLog); - PrismHybrid.initialise(mainLog); + PrismNative.initialise(this, mainLog); // set cudd manager in other packages DoubleVector.setCUDDManager(); @@ -4223,9 +4216,6 @@ public void closeDown(boolean check) clearBuiltModel(); // Close down libraries/engines PrismNative.closeDown(); - PrismMTBDD.closeDown(); - PrismSparse.closeDown(); - PrismHybrid.closeDown(); ParamModelChecker.closeDown(); // Close down CUDD/JDD if (cuddStarted) { diff --git a/prism/src/prism/PrismNative.cc b/prism/src/prism/PrismNative.cc index a1281cfc7..3aadd144a 100644 --- a/prism/src/prism/PrismNative.cc +++ b/prism/src/prism/PrismNative.cc @@ -37,6 +37,34 @@ EXPORT jclass prism_cls = NULL; EXPORT jobject prism_obj = NULL; +// cudd manager +DdManager *ddman; + +// error messages +static char error_message[MAX_ERR_STRING_LEN]; + +// logs +// global refs to log classes +static jclass main_log_cls = NULL; +// global refs to log objects +static jobject main_log_obj = NULL; +// method ids for print method in logs +static jmethodID main_log_mid = NULL; +static jmethodID main_log_warn = NULL; + +// Export stuff: + +EXPORT int export_type; +EXPORT FILE *export_file; +EXPORT JNIEnv *export_env; +static bool exportIterations = false; +// adversary export mode +EXPORT int export_adv; +// adversary export filename +EXPORT const char *export_adv_filename; +// export iterations filename +EXPORT const char *export_iterations_filename = "iterations.html"; + // Options: // numerical method stuff EXPORT int lin_eq_method; @@ -55,12 +83,6 @@ EXPORT int sor_max_mem; EXPORT int num_sor_levels; // use steady-state detection for transient computation? EXPORT bool do_ss_detect; -// adversary export mode -EXPORT int export_adv; -// adversary export filename -EXPORT const char *export_adv_filename; -// export iterations filename -EXPORT const char *export_iterations_filename = "iterations.html"; // details from numerical computation which may be queried EXPORT double last_error_bound; @@ -89,6 +111,132 @@ JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1SetPrism(JNIEnv *env, jclass c setlocale(LC_NUMERIC, "C"); } +//------------------------------------------------------------------------------ +// cudd manager +//------------------------------------------------------------------------------ + +JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1SetCUDDManager(JNIEnv *env, jclass cls, jlong __jlongpointer ddm) +{ + ddman = jlong_to_DdManager(ddm); +} + +//------------------------------------------------------------------------------ +// logs +//------------------------------------------------------------------------------ + +JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1SetMainLog(JNIEnv *env, jclass cls, jobject log) +{ + // if main log has been set previously, we need to delete existing global refs first + if (main_log_obj != NULL) { + env->DeleteGlobalRef(main_log_cls); + main_log_cls = NULL; + env->DeleteGlobalRef(main_log_obj); + main_log_obj = NULL; + } + + // make a global reference to the log object + main_log_obj = env->NewGlobalRef(log); + // get the log class and make a global reference to it + main_log_cls = (jclass)env->NewGlobalRef(env->GetObjectClass(main_log_obj)); + // get the method id for the print method + main_log_mid = env->GetMethodID(main_log_cls, "print", "(Ljava/lang/String;)V"); + main_log_warn = env->GetMethodID(main_log_cls, "printWarning", "(Ljava/lang/String;)V"); +} + +//------------------------------------------------------------------------------ + +void PN_PrintToMainLog(JNIEnv *env, const char *str, ...) +{ + va_list argptr; + char full_string[MAX_LOG_STRING_LEN]; + + va_start(argptr, str); + vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); + va_end(argptr); + + if (env) + env->CallVoidMethod(main_log_obj, main_log_mid, env->NewStringUTF(full_string)); + else + printf("%s", full_string); +} + +//------------------------------------------------------------------------------ + +void PN_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) +{ + va_list argptr; + char full_string[MAX_LOG_STRING_LEN]; + + va_start(argptr, str); + vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); + va_end(argptr); + + if (env) + env->CallVoidMethod(main_log_obj, main_log_warn, env->NewStringUTF(full_string)); + else + printf("\nWarning: %s\n", full_string); +} + +//------------------------------------------------------------------------------ + +// Print formatted memory info to main log + +void PN_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after) +{ + char full_string[MAX_LOG_STRING_LEN]; + + if (mem > 1048576) + snprintf(full_string, MAX_LOG_STRING_LEN, "%s%.1f GB%s", before, mem/1048576.0, after); + else if (mem > 1024) + snprintf(full_string, MAX_LOG_STRING_LEN, "%s%.1f MB%s", before, mem/1024.0, after); + else + snprintf(full_string, MAX_LOG_STRING_LEN, "%s%.1f KB%s", before, mem, after); + + if (env) { + env->CallVoidMethod(main_log_obj, main_log_mid, env->NewStringUTF(full_string)); + } + else { + printf("%s", full_string); + } +} + +//------------------------------------------------------------------------------ +// error message handling +//------------------------------------------------------------------------------ + +void PN_SetErrorMessage(const char *str, ...) +{ + va_list argptr; + + va_start(argptr, str); + vsnprintf(error_message, MAX_ERR_STRING_LEN, str, argptr); + va_end(argptr); +} + +char *PN_GetErrorMessage() +{ + return error_message; +} + +JNIEXPORT jstring JNICALL Java_prism_PrismNative_PN_1GetErrorMessage(JNIEnv *env, jclass cls) +{ + return env->NewStringUTF(error_message); +} + +//------------------------------------------------------------------------------ +// Export stuff +//------------------------------------------------------------------------------ + +JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1SetExportIterations(JNIEnv *env, jclass cls, jboolean value) +{ + exportIterations = value; +} + +bool PN_GetFlagExportIterations() +{ + return exportIterations; +} + //------------------------------------------------------------------------------ // Set methods for options in native code //------------------------------------------------------------------------------ @@ -216,6 +364,51 @@ JNIEXPORT jint JNICALL Java_prism_PrismNative_PN_1SetWorkingDirectory(JNIEnv *en return rv; } +//------------------------------------------------------------------------------ +// export stuff +//------------------------------------------------------------------------------ + +// store export info globally +// returns 0 on failure, 1 otherwise + +int store_export_info(int type, jstring fn, JNIEnv *env) +{ + export_type = type; + if (fn) { + const char *filename = env->GetStringUTFChars(fn, 0); + export_file = fopen(filename, "w"); + if (!export_file) { + env->ReleaseStringUTFChars(fn, filename); + return 0; + } + env->ReleaseStringUTFChars(fn, filename); + } else { + export_file = NULL; + } + export_env = env; + return 1; +} + +//------------------------------------------------------------------------------ + +// export string (either to file or main log) + +void export_string(const char *str, ...) +{ + va_list argptr; + char full_string[MAX_LOG_STRING_LEN]; + + va_start(argptr, str); + vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); + va_end(argptr); + + if (export_file) { + fprintf(export_file, "%s", full_string); + } else { + PN_PrintToMainLog(export_env, "%s", full_string); + } +} + //------------------------------------------------------------------------------ // Some miscellaneous native methods //------------------------------------------------------------------------------ @@ -276,16 +469,11 @@ JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1FlushFile(JNIEnv *env, jclass //------------------------------------------------------------------------------ - JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1CloseFile(JNIEnv *env, jclass cls, jlong __jlongpointer fp) { fclose(jlong_to_FILE(fp)); } - - - - JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1SetLastErrorBound(JNIEnv *env, jclass cls,jdouble d) { last_error_bound = d; @@ -296,11 +484,6 @@ JNIEXPORT jdouble JNICALL Java_prism_PrismNative_PN_1GetLastErrorBound(JNIEnv *e return last_error_bound; } - - - - - //------------------------------------------------------------------------------ // tidy up //------------------------------------------------------------------------------ @@ -312,6 +495,10 @@ JNIEXPORT void JNICALL Java_prism_PrismNative_PN_1FreeGlobalRefs(JNIEnv *env, jc prism_cls = NULL; env->DeleteGlobalRef(prism_obj); prism_obj = NULL; + env->DeleteGlobalRef(main_log_cls); + main_log_cls = NULL; + env->DeleteGlobalRef(main_log_obj); + main_log_obj = NULL; } //------------------------------------------------------------------------------ diff --git a/prism/src/prism/PrismNative.java b/prism/src/prism/PrismNative.java index eaf9723b7..92696daae 100644 --- a/prism/src/prism/PrismNative.java +++ b/prism/src/prism/PrismNative.java @@ -26,6 +26,8 @@ package prism; +import jdd.JDD; + /** * Set methods to pass options to native code. * And a few utility methods, relying on native methods in the "prism" shared library. @@ -46,9 +48,11 @@ public class PrismNative // Initialise/close down methods - public static void initialise(Prism prism) + public static void initialise(Prism prism, PrismLog mainLog) { setPrism(prism); + setCUDDManager(); + setMainLog(mainLog); } public static void closeDown() @@ -72,7 +76,38 @@ public static void setPrism(Prism prism) PrismNative.prism = prism; PN_SetPrism(prism); } - + + // cudd manager + + // jni method to set cudd manager for native code + private static native void PN_SetCUDDManager(long ddm); + public static void setCUDDManager() + { + PN_SetCUDDManager(JDD.GetCUDDManager()); + } + + // main log + + // place to store main log for java code + private static PrismLog mainLog; + // jni method to set main log for native code + private static native void PN_SetMainLog(PrismLog log); + // method to set main log both in java and c++ + public static void setMainLog(PrismLog log) + { + mainLog = log; + PN_SetMainLog(log); + } + + // Error message handling + public static native String PN_GetErrorMessage(); + + private static native void PN_SetExportIterations(boolean value); + public static void SetExportIterations(boolean value) + { + PN_SetExportIterations(value); + } + // Options passing private static native void PN_SetCompact(boolean b); diff --git a/prism/src/sparse/PS_ExportMC.cc b/prism/src/sparse/PS_ExportMC.cc index 8dc1ebfac..5bdbf8216 100644 --- a/prism/src/sparse/PS_ExportMC.cc +++ b/prism/src/sparse/PS_ExportMC.cc @@ -32,7 +32,7 @@ #include #include "sparse.h" #include "prism.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include diff --git a/prism/src/sparse/PS_ExportMDP.cc b/prism/src/sparse/PS_ExportMDP.cc index bba7bd651..8f1c7f1d9 100644 --- a/prism/src/sparse/PS_ExportMDP.cc +++ b/prism/src/sparse/PS_ExportMDP.cc @@ -32,7 +32,7 @@ #include #include "sparse.h" #include "prism.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include diff --git a/prism/src/sparse/PS_ExportMatrix.cc b/prism/src/sparse/PS_ExportMatrix.cc index 64ba419e9..68f9ea441 100644 --- a/prism/src/sparse/PS_ExportMatrix.cc +++ b/prism/src/sparse/PS_ExportMatrix.cc @@ -31,7 +31,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include diff --git a/prism/src/sparse/PS_ExportSubMDP.cc b/prism/src/sparse/PS_ExportSubMDP.cc index 98c8c5339..4bd1c4c70 100644 --- a/prism/src/sparse/PS_ExportSubMDP.cc +++ b/prism/src/sparse/PS_ExportSubMDP.cc @@ -31,7 +31,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include diff --git a/prism/src/sparse/PS_JOR.cc b/prism/src/sparse/PS_JOR.cc index 8e6679395..f0a5d9d8a 100644 --- a/prism/src/sparse/PS_JOR.cc +++ b/prism/src/sparse/PS_JOR.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -119,7 +119,7 @@ jdouble omega // omega (over-relaxation parameter) a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_a = true; cmsrsm = NULL; @@ -137,12 +137,12 @@ jdouble omega // omega (over-relaxation parameter) } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix - PS_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -163,8 +163,8 @@ jdouble omega // omega (over-relaxation parameter) } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PS_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -175,7 +175,7 @@ jdouble omega // omega (over-relaxation parameter) // build b vector (if present) if (b != NULL) { - PS_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -187,29 +187,29 @@ jdouble omega // omega (over-relaxation parameter) } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PS_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, init, rvars, num_rvars, odd); soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PS_JOR ("); title += (omega == 1.0)?"Jacobi": ("JOR omega=" + std::to_string(omega)); title += ")"; iterationExport.reset(new ExportIterations(title.c_str())); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -222,7 +222,7 @@ jdouble omega // omega (over-relaxation parameter) // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -293,8 +293,8 @@ jdouble omega // omega (over-relaxation parameter) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -310,10 +310,10 @@ jdouble omega // omega (over-relaxation parameter) time_taken = (double)(stop - start1)/1000; // print iters/timing info - PS_PrintToMainLog(env, "\n%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PS_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // the difference between vector values is not a reliable error bound // but we store it anyway in case it is useful for estimating a bound @@ -321,7 +321,7 @@ jdouble omega // omega (over-relaxation parameter) // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_JORInterval.cc b/prism/src/sparse/PS_JORInterval.cc index 3b36774e2..535d44a3a 100644 --- a/prism/src/sparse/PS_JORInterval.cc +++ b/prism/src/sparse/PS_JORInterval.cc @@ -34,7 +34,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -99,7 +99,7 @@ jint flags MeasureSupNorm measure(term_crit == TERM_CRIT_RELATIVE); if (omega <= 0.0 || omega > 1.0) { - PS_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); + PN_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); return ptr_to_jlong(NULL); } @@ -131,7 +131,7 @@ jint flags a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_a = true; cmsrsm = NULL; @@ -149,12 +149,12 @@ jint flags } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix - PS_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -175,8 +175,8 @@ jint flags } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PS_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -187,7 +187,7 @@ jint flags // build b vector (if present) if (b != NULL) { - PS_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -199,31 +199,31 @@ jint flags } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PS_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = mtbdd_to_double_vector(ddman, lower, rvars, num_rvars, odd); soln_above = mtbdd_to_double_vector(ddman, upper, rvars, num_rvars, odd); soln_below2 = new double[n]; soln_above2 = new double[n]; kb = n*8.0/1024.0; kbt += 4*kb; - PS_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PS_JOR ("); title += (omega == 1.0)?"Jacobi":("JOR omega=" + std::to_string(omega)); title += "), interval"; iterationExport.reset(new ExportIterations(title.c_str())); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -237,7 +237,7 @@ jint flags // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -311,14 +311,14 @@ jint flags measure.reset(); measure.measure(soln_below2, soln_above2, n); if (measure.value() < term_crit_param) { - PS_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -337,14 +337,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iters/timing info - PS_PrintToMainLog(env, "\n%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PS_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PS_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -360,7 +360,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/sparse/PS_NondetBoundedUntil.cc b/prism/src/sparse/PS_NondetBoundedUntil.cc index 32b9c292f..09da6b676 100644 --- a/prism/src/sparse/PS_NondetBoundedUntil.cc +++ b/prism/src/sparse/PS_NondetBoundedUntil.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include @@ -98,7 +98,7 @@ jboolean min // min or max probabilities (true = min, false = max) n = odd->eoff + odd->toff; // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz = ndsm->nnz; @@ -106,26 +106,26 @@ jboolean min // min or max probabilities (true = min, false = max) kb = ndsm->mem; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector for yes - PS_PrintToMainLog(env, "Creating vector for yes... "); + PN_PrintToMainLog(env, "Creating vector for yes... "); yes_vec = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is yes for (i = 0; i < n; i++) { @@ -139,7 +139,7 @@ jboolean min // min or max probabilities (true = min, false = max) start3 = stop; // start iterations - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -179,8 +179,8 @@ jboolean min // min or max probabilities (true = min, false = max) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -196,11 +196,11 @@ jboolean min // min or max probabilities (true = min, false = max) time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_NondetCumulReward.cc b/prism/src/sparse/PS_NondetCumulReward.cc index e471077e6..775529f27 100644 --- a/prism/src/sparse/PS_NondetCumulReward.cc +++ b/prism/src/sparse/PS_NondetCumulReward.cc @@ -35,7 +35,6 @@ #include "sparse.h" #include "prism.h" #include "PrismNativeGlob.h" -#include "PrismSparseGlob.h" #include "jnipointer.h" #include @@ -93,7 +92,7 @@ jboolean min // min or max probabilities (true = min, false = max) n = odd->eoff + odd->toff; // build sparse matrix (probs) - PS_PrintToMainLog(env, "\nBuilding sparse matrix (transitions)... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix (transitions)... "); ndsm = build_nd_sparse_matrix(ddman, trans, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz = ndsm->nnz; @@ -101,38 +100,38 @@ jboolean min // min or max probabilities (true = min, false = max) kb = (nnz*12.0+nc*4.0+n*4.0)/1024.0; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // build sparse matrix (rewards) - PS_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); + PN_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); ndsm_r = build_sub_nd_sparse_matrix(ddman, trans, trans_rewards, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz_r = ndsm_r->nnz; nc_r = ndsm_r->nc; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); kb = (nnz_r*12.0+nc_r*4.0+n*4.0)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector for state rewards - PS_PrintToMainLog(env, "Creating vector for state rewards... "); + PN_PrintToMainLog(env, "Creating vector for state rewards... "); sr_vec = mtbdd_to_double_vector(ddman, state_rewards, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is zero for (i = 0; i < n; i++) { @@ -146,7 +145,7 @@ jboolean min // min or max probabilities (true = min, false = max) start3 = stop; // start iterations - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // store local copies of stuff // firstly for transition matrix @@ -210,8 +209,8 @@ jboolean min // min or max probabilities (true = min, false = max) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -227,11 +226,11 @@ jboolean min // min or max probabilities (true = min, false = max) time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_NondetInstReward.cc b/prism/src/sparse/PS_NondetInstReward.cc index 0022cf806..b02bab46f 100644 --- a/prism/src/sparse/PS_NondetInstReward.cc +++ b/prism/src/sparse/PS_NondetInstReward.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include @@ -92,7 +92,7 @@ jlong __jlongpointer in n = odd->eoff + odd->toff; // build sparse matrix (probs) - PS_PrintToMainLog(env, "\nBuilding sparse matrix (transitions)... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix (transitions)... "); ndsm = build_nd_sparse_matrix(ddman, trans, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz = ndsm->nnz; @@ -100,20 +100,20 @@ jlong __jlongpointer in kb = (nnz*12.0+nc*4.0+n*4.0)/1024.0; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors // (solution is initialised to the state rewards) - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, state_rewards, rvars, num_rvars, odd); soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // get setup time stop = util_cpu_time(); @@ -122,7 +122,7 @@ jlong __jlongpointer in start3 = stop; // start iterations - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -173,8 +173,8 @@ jlong __jlongpointer in // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -183,7 +183,7 @@ jlong __jlongpointer in soln = soln2; soln2 = tmpsoln; -// PS_PrintToMainLog(env, "%i: %f\n", iters, get_first_from_bdd(ddman, soln, init, rvars, num_rvars, odd)); +// PN_PrintToMainLog(env, "%i: %f\n", iters, get_first_from_bdd(ddman, soln, init, rvars, num_rvars, odd)); } // stop clocks @@ -192,11 +192,11 @@ jlong __jlongpointer in time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_NondetMultiObj.cc b/prism/src/sparse/PS_NondetMultiObj.cc index 22c94f3d6..bb3d328ab 100644 --- a/prism/src/sparse/PS_NondetMultiObj.cc +++ b/prism/src/sparse/PS_NondetMultiObj.cc @@ -36,7 +36,6 @@ #include "sparse.h" #include "prism.h" #include "PrismNativeGlob.h" -#include "PrismSparseGlob.h" #include "jnipointer.h" #include #include @@ -202,10 +201,10 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet for (int probi = 0; probi < lenProb; probi++) { yes_vec[probi] = (double *) jlong_to_ptr(ptr_yes_vec[probi]); #ifdef MORE_OUTPUT - PS_PrintToMainLog(env, "yes_vec %d: ", probi); + PN_PrintToMainLog(env, "yes_vec %d: ", probi); for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%f, ", yes_vec[probi][o]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "%f, ", yes_vec[probi][o]); + PN_PrintToMainLog(env, "\n"); #endif } @@ -277,20 +276,20 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet } #ifdef MORE_OUTPUT - PS_PrintToMainLog(env, "Initial soln: "); + PN_PrintToMainLog(env, "Initial soln: "); for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%f, ", soln[o]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "%f, ", soln[o]); + PN_PrintToMainLog(env, "\n"); for (int it = 0; it < lenRew + lenProb; it++) { if (it != ignoredWeight) { - PS_PrintToMainLog(env, "psoln: "); + PN_PrintToMainLog(env, "psoln: "); for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%f, ", psoln[it][o]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "%f, ", psoln[it][o]); + PN_PrintToMainLog(env, "\n"); } else { - PS_PrintToMainLog(env, "psoln: (ignored)\n"); + PN_PrintToMainLog(env, "psoln: (ignored)\n"); } } #endif @@ -303,13 +302,13 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet iters = 0; done = false; weightedDone = false; - //PS_PrintToMainLog(env, "Starting iterations...\n"); + //PN_PrintToMainLog(env, "Starting iterations...\n"); // open file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fp_adv = fopen(export_adv_filename, "w"); if (!fp_adv) { - PS_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); + PN_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); export_adv_enabled = EXPORT_ADV_NONE; } } @@ -571,14 +570,14 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet soln2 = tmpsoln; #ifdef MORE_OUTPUT - PS_PrintToMainLog(env, "Soln: "); + PN_PrintToMainLog(env, "Soln: "); for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%e, ", soln[o]); - PS_PrintToMainLog(env, "\n"); - PS_PrintToMainLog(env, "Soln2: "); + PN_PrintToMainLog(env, "%e, ", soln[o]); + PN_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "Soln2: "); for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%e, ", soln[o]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "%e, ", soln[o]); + PN_PrintToMainLog(env, "\n"); #endif for (int it = 0; it < lenRew + lenProb; it++) { @@ -588,16 +587,16 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet psoln2[it] = tmpsoln; } #ifdef MORE_OUTPUT - PS_PrintToMainLog(env, "psoln: "); + PN_PrintToMainLog(env, "psoln: "); if (ignoredWeight != it) for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%e, ", psoln[it][o]); - PS_PrintToMainLog(env, "\n"); - PS_PrintToMainLog(env, "psoln2: "); + PN_PrintToMainLog(env, "%e, ", psoln[it][o]); + PN_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "psoln2: "); if (ignoredWeight != it) for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%e, ", psoln2[it][o]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "%e, ", psoln2[it][o]); + PN_PrintToMainLog(env, "\n"); #endif } } @@ -655,11 +654,11 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "Iterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "Iterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!doneBeforeBounded) { // || !weightedDone) { - PS_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); throw 1; } @@ -668,11 +667,11 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet jdouble *retNative = env->GetDoubleArrayElements(ret, 0); // Display result - PS_PrintToMainLog(env, "Optimal value for weights ["); + PN_PrintToMainLog(env, "Optimal value for weights ["); for (int it = 0; it < lenRew + lenProb; it++) { - PS_PrintToMainLog(env, "%s%f", (it>0?",":""), weights[it]); + PN_PrintToMainLog(env, "%s%f", (it>0?",":""), weights[it]); } - PS_PrintToMainLog(env, "] from initial state: %f\n", soln[start_index]); + PN_PrintToMainLog(env, "] from initial state: %f\n", soln[start_index]); //copy all computed elements for (int it = 0; it < lenRew + lenProb; it++) @@ -692,7 +691,7 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet // close file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fclose(fp_adv); - PS_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); + PN_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); } // export individual solution vectors @@ -704,7 +703,7 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet export_vect_filename += std::to_string(it); FILE *fp_vect = fopen(export_vect_filename.c_str(), "w"); if (fp_vect) { - PS_PrintWarningToMainLog(env, "Exporting solution vector %d to file %s.", it, export_vect_filename.c_str()); + PN_PrintWarningToMainLog(env, "Exporting solution vector %d to file %s.", it, export_vect_filename.c_str()); for (i = 0; i < n; i++) { fprintf(fp_vect, "%d %g\n", i, psoln[it][i]); } @@ -716,13 +715,13 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); ret = 0; } catch (int e) { if (e==1) //1 means error was set above and exception was thrown to end the computation ret = 0; else - PS_SetErrorMessage("Unknown error."); + PN_SetErrorMessage("Unknown error."); } // free memory diff --git a/prism/src/sparse/PS_NondetMultiObjGS.cc b/prism/src/sparse/PS_NondetMultiObjGS.cc index 4a5e58d58..2ee6c8dfb 100644 --- a/prism/src/sparse/PS_NondetMultiObjGS.cc +++ b/prism/src/sparse/PS_NondetMultiObjGS.cc @@ -36,7 +36,6 @@ #include "sparse.h" #include "prism.h" #include "PrismNativeGlob.h" -#include "PrismSparseGlob.h" #include "jnipointer.h" #include @@ -212,20 +211,20 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet } #ifdef MORE_OUTPUT - PS_PrintToMainLog(env, "Initial soln: "); + PN_PrintToMainLog(env, "Initial soln: "); for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%f, ", soln[o]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "%f, ", soln[o]); + PN_PrintToMainLog(env, "\n"); for (int it = 0; it < lenRew + lenProb; it++) { if (it != ignoredWeight) { - PS_PrintToMainLog(env, "psoln: "); + PN_PrintToMainLog(env, "psoln: "); for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%f, ", psoln[it][o]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "%f, ", psoln[it][o]); + PN_PrintToMainLog(env, "\n"); } else { - PS_PrintToMainLog(env, "psoln: (ignored)\n"); + PN_PrintToMainLog(env, "psoln: (ignored)\n"); } } #endif @@ -238,7 +237,7 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet iters = 0; done = false; weightedDone = false; - //PS_PrintToMainLog(env, "Starting iterations...\n"); + //PN_PrintToMainLog(env, "Starting iterations...\n"); // store local copies of stuff double *non_zeros = ndsm->non_zeros; @@ -462,19 +461,19 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet } #ifdef MORE_OUTPUT - PS_PrintToMainLog(env, "soln: "); + PN_PrintToMainLog(env, "soln: "); for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%e, ", soln[o]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "%e, ", soln[o]); + PN_PrintToMainLog(env, "\n"); for (int it = 0; it < lenRew + lenProb; it++) { if (it != ignoredWeight) { - PS_PrintToMainLog(env, "psoln: "); + PN_PrintToMainLog(env, "psoln: "); for (int o = 0; o < n; o++) - PS_PrintToMainLog(env, "%e, ", psoln[it][o]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, "%e, ", psoln[it][o]); + PN_PrintToMainLog(env, "\n"); } else { - PS_PrintToMainLog(env, "psoln: (ignored)\n"); + PN_PrintToMainLog(env, "psoln: (ignored)\n"); } } #endif @@ -499,11 +498,11 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "Iterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "Iterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (iters == max_iters) { - PS_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); throw 1; } @@ -529,14 +528,14 @@ JNIEXPORT jdoubleArray __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1Nondet // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } catch (int e) { if (e==1) //1 means error was set above and exception was thrown to end the computation ret = 0; else - PS_SetErrorMessage("Unknown error."); + PN_SetErrorMessage("Unknown error."); } if (soln) delete[] soln; diff --git a/prism/src/sparse/PS_NondetMultiReach.cc b/prism/src/sparse/PS_NondetMultiReach.cc index 36aa2ec36..09f1dee56 100644 --- a/prism/src/sparse/PS_NondetMultiReach.cc +++ b/prism/src/sparse/PS_NondetMultiReach.cc @@ -36,7 +36,6 @@ #include "sparse.h" #include "sparse_adv.h" #include "prism.h" -#include "PrismSparseGlob.h" #include "PrismNativeGlob.h" #include "jnipointer.h" #include @@ -131,15 +130,15 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti for(i=0; i%g", bounds[i]); break; - case 2: PS_PrintToMainLog(env, "P>=%g", bounds[i]); break; + case 0: PN_PrintToMainLog(env, "Pmax=?"); break; + case 1: PN_PrintToMainLog(env, "P>%g", bounds[i]); break; + case 2: PN_PrintToMainLog(env, "P>=%g", bounds[i]); break; } - PS_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); + PN_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); } // Filter out rows, store in "a" @@ -165,7 +164,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti n = odd->eoff + odd->toff; // Build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // Get number of transitions/choices nnz = ndsm->nnz; @@ -173,13 +172,13 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti kb = ndsm->mem; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // If needed, and if info is available, build a vector of action indices for the MDP if (export_adv != EXPORT_ADV_NONE) { if (trans_actions != NULL) { - PS_PrintToMainLog(env, "Building action information... "); + PN_PrintToMainLog(env, "Building action information... "); // first need to filter out unwanted rows Cudd_Ref(trans_actions); Cudd_Ref(maybe_yes); @@ -191,35 +190,35 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti Cudd_RecursiveDeref(ddman, tmp); kb = n*4.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // also extract list of action names from 'synchs' get_string_array_from_java(env, synchs, action_names_jstrings, action_names, num_actions); } else { - PS_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); + PN_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); } } // Get vectors for yes/maybe - PS_PrintToMainLog(env, "Creating vectors for yes... "); + PN_PrintToMainLog(env, "Creating vectors for yes... "); for(i=0; inon_zeros; @@ -231,7 +230,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti unsigned int *cols = ndsm->cols; // Set up LP problem... - PS_PrintToMainLog(env, "\nBuilding LP problem...\n"); + PN_PrintToMainLog(env, "\nBuilding LP problem...\n"); int *yes_vec; int *map_var; @@ -296,7 +295,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti num_lp_vars = maybe_nc + yes_nc + yes_count; // Store first LP var for final state map_var[n] = num_lp_vars; // maybe need to be modified. - PS_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); + PN_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); for(i=0; i 0 && relops[0]<=2) { for(i=0; i 0) { // for qualitative queries, return 1/0 for existence of solution or not - PS_PrintToMainLog(env, "LP problem solution %sfound so result is %s\n", lp_solved ? "" : "not ", lp_solved ? "true" : "false"); + PN_PrintToMainLog(env, "LP problem solution %sfound so result is %s\n", lp_solved ? "" : "not ", lp_solved ? "true" : "false"); lp_result = lp_solved ? 1.0 : 0.0; } else { // return NaN for quantitative queries that can't be solved - PS_PrintToMainLog(env, "LP problem solution %sfound; result is %f\n", lp_solved ? "" : "not ", lp_result); + PN_PrintToMainLog(env, "LP problem solution %sfound; result is %f\n", lp_solved ? "" : "not ", lp_result); if (!lp_solved) lp_result = NAN; } // Print timing info time_taken = time_for_setup + time_for_lp; - PS_PrintToMainLog(env, "\nLP problem solved in %.2f seconds (setup %.2f, lpsolve %.2f)\n", time_taken, time_for_setup, time_for_lp); + PN_PrintToMainLog(env, "\nLP problem solved in %.2f seconds (setup %.2f, lpsolve %.2f)\n", time_taken, time_for_setup, time_for_lp); delete yes_vec; delete map_var; // Catch exceptions: register error } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); lp_result = NAN; } diff --git a/prism/src/sparse/PS_NondetMultiReach.cc.withrewards b/prism/src/sparse/PS_NondetMultiReach.cc.withrewards index ba1d65126..ec1c8ea6b 100644 --- a/prism/src/sparse/PS_NondetMultiReach.cc.withrewards +++ b/prism/src/sparse/PS_NondetMultiReach.cc.withrewards @@ -34,7 +34,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include #include "eclipse.h" @@ -146,17 +146,17 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti bounds = env->GetDoubleArrayElements(_bounds, 0); // Display some target info (just a test) - PS_PrintToMainLog(env, "\n%d Targets:\n", num_targets); + PN_PrintToMainLog(env, "\n%d Targets:\n", num_targets); for (i = 0; i < num_targets; i++) { - PS_PrintToMainLog(env, "#%d: ", i); + PN_PrintToMainLog(env, "#%d: ", i); switch (relops[i]) { - case 0: PS_PrintToMainLog(env, "Pmax=?"); break; - case 1: PS_PrintToMainLog(env, ">%g", bounds[i]); break; - case 2: PS_PrintToMainLog(env, ">=%g", bounds[i]); break; - case 3: PS_PrintToMainLog(env, "Rmax=?"); break; - case 4: PS_PrintToMainLog(env, ">=%g", bounds[i]); break; + case 0: PN_PrintToMainLog(env, "Pmax=?"); break; + case 1: PN_PrintToMainLog(env, ">%g", bounds[i]); break; + case 2: PN_PrintToMainLog(env, ">=%g", bounds[i]); break; + case 3: PN_PrintToMainLog(env, "Rmax=?"); break; + case 4: PN_PrintToMainLog(env, ">=%g", bounds[i]); break; } - PS_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); + PN_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); } //DdNode *yes1 = targets[0]; @@ -190,7 +190,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti n = odd->eoff + odd->toff; // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz = ndsm->nnz; @@ -198,34 +198,34 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti kb = ndsm->mem; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%d, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%d, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vectors for yes/maybe - PS_PrintToMainLog(env, "Creating vectors for yes... "); + PN_PrintToMainLog(env, "Creating vectors for yes... "); for(i=0; inon_zeros; @@ -247,15 +247,15 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti trans_rewards = jlong_to_DdNode(trr); // transition rewards Cudd_Ref(trans_rewards); trans_rewards = DD_Apply(ddman, APPLY_TIMES, trans_rewards, maybe); - PS_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); + PN_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); ndsm_r = build_sub_nd_sparse_matrix(ddman, a, trans_rewards, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); nnz_r = ndsm_r->nnz; nc_r = ndsm_r->nc; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%d, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%d, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); kb = (nnz_r*12.0+nc_r*4.0+n*4.0)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); non_zeros_r = ndsm_r->non_zeros; choice_counts_r = ndsm_r->choice_counts; choice_starts_r = (int *)ndsm_r->choice_counts; @@ -263,20 +263,20 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti cols_r = ndsm_r->cols; //for(i=0; i 0) n_maybe_r ++; kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); * / + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); * / //maybe_vec_r = maybe_vec; }*/ /***************** end of set up *******************/ // Set up LP problem - PS_PrintToMainLog(env, "\nBuilding LP problem...\n"); + PN_PrintToMainLog(env, "\nBuilding LP problem...\n"); // Compute number of vars/constraints int maybe_nc = 0; for (i = 0; i < n; i++) { @@ -392,7 +392,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti start2 = stop; // Solve LP problem - PS_PrintToMainLog(env, "Solving LP problem...\n"); + PN_PrintToMainLog(env, "Solving LP problem...\n"); res = solve(lp); //Get LP solving time @@ -414,7 +414,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti time_taken = (double)(stop - start3)/1000; // print timing info - PS_PrintToMainLog(env, "\nLP problem solved in %.2f seconds (setup %.2f, lpsolve %.2f)\n", time_taken, time_for_setup, time_for_lp);*/ + PN_PrintToMainLog(env, "\nLP problem solved in %.2f seconds (setup %.2f, lpsolve %.2f)\n", time_taken, time_for_setup, time_for_lp);*/ /* * Hongyang: Use Eclipse with COIN CBC solver @@ -452,7 +452,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti }*/ if(checkReach) { - PS_PrintToMainLog(env, "Check reachability...\n"); + PN_PrintToMainLog(env, "Check reachability...\n"); // Maps states to ECLiPSe variables. // Each yes state has a coresponding variable. // Each maybe state has one or more variables. @@ -472,7 +472,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti } //if (arr_reals) delete[] arr_reals; - PS_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars + n_maybe_r); + PN_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars + n_maybe_r); arr_reals = new REAL[num_lp_vars + n_maybe_r]; // create map vector @@ -687,7 +687,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti } } - PS_PrintToMainLog(env, "Adding extra constraints for probabilisitic bounds\n"); + PN_PrintToMainLog(env, "Adding extra constraints for probabilisitic bounds\n"); for(i=0; i=0; k--) @@ -704,7 +704,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti ec_double(bounds[i]))); } - PS_PrintToMainLog(env, "Computing optimisation...\n"); + PN_PrintToMainLog(env, "Computing optimisation...\n"); fflush(stdout); pword tail = ec_nil(); x = 0; @@ -727,7 +727,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti /*x = 1; arr_reals[0] = 1.0; tail = ec_list(ec_refs_get(Vars, map_var_r[start_index]+num_lp_vars), tail);*/ - PS_PrintToMainLog(env, "computing max function for rewards ...\n"); + PN_PrintToMainLog(env, "computing max function for rewards ...\n"); double *non_zeros_r; unsigned char *choice_counts_r; int *choice_starts_r; @@ -736,15 +736,15 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti trans_rewards = jlong_to_DdNode(trr); // transition rewards Cudd_Ref(trans_rewards); trans_rewards = DD_Apply(ddman, APPLY_TIMES, trans_rewards, maybe); - PS_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); + PN_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); ndsm_r = build_sub_nd_sparse_matrix(ddman, a, trans_rewards, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); nnz_r = ndsm_r->nnz; nc_r = ndsm_r->nc; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%d, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%d, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); kb = (nnz_r*12.0+nc_r*4.0+n*4.0)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); non_zeros_r = ndsm_r->non_zeros; choice_counts_r = ndsm_r->choice_counts; choice_starts_r = (int *)ndsm_r->choice_counts; @@ -795,9 +795,9 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti h2_r += choice_counts_r[j]; } } - /*PS_PrintToMainLog(env, " arr_reals:"); + /*PN_PrintToMainLog(env, " arr_reals:"); for (k = 0; k < num_lp_vars; k++) - PS_PrintToMainLog(env, " %1.1f", arr_reals[k]); + PN_PrintToMainLog(env, " %1.1f", arr_reals[k]); fflush(stdout);*/ for(k=num_lp_vars-1; k>=0; k--) @@ -818,7 +818,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti ec_term(ec_did("*",2), varlist, ec_listofdouble(num_lp_vars, pc))), ec_ref_get(Cost)));*/ } else { // ------------------------------ LTL model checking ---------------------------- - PS_PrintToMainLog(env, "Check LTL formulas...\n"); + PN_PrintToMainLog(env, "Check LTL formulas...\n"); int num_map; int yes_count = 0; // the number of target states @@ -866,7 +866,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti } num_lp_vars = maybe_nc + yes_nc + yes_count; map_var[n] = num_lp_vars; // maybe need to be modified. - PS_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); + PN_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); for(i=0; i2) continue; - //PS_PrintToMainLog(env, "num_map = %1d, i = %1d, bound = %1.1f\n", num_map, i, bounds[i]); + //PN_PrintToMainLog(env, "num_map = %1d, i = %1d, bound = %1.1f\n", num_map, i, bounds[i]); for(k=0; knnz; nc_r = ndsm_r->nc; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%d, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%d, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); kb = (nnz_r*12.0+nc_r*4.0+n*4.0)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); non_zeros_r = ndsm_r->non_zeros; choice_counts_r = ndsm_r->choice_counts; choice_starts_r = (int *)ndsm_r->choice_counts; @@ -1369,10 +1369,10 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti h2_r += choice_counts_r[j]; } } - /*PS_PrintToMainLog(env, " arr_reals:"); + /*PN_PrintToMainLog(env, " arr_reals:"); for (k = 0; k < num_lp_vars; k++) - PS_PrintToMainLog(env, " %1.1f", arr_reals[k]); - PS_PrintToMainLog(env, "\n"); + PN_PrintToMainLog(env, " %1.1f", arr_reals[k]); + PN_PrintToMainLog(env, "\n"); fflush(stdout);*/ for(k=num_lp_vars-1; k>=0; k--) @@ -1399,7 +1399,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti f = fopen("model.dot", "w"); /* create a file for writing */ f = NULL; if(f==NULL) { - PS_PrintToMainLog(env, "\nWarning: Output of graph cancelled (could not open file \"%s\").\n", "model.dot"); + PN_PrintToMainLog(env, "\nWarning: Output of graph cancelled (could not open file \"%s\").\n", "model.dot"); } else { fprintf(f, "digraph model {\n"); for(i=0; i 0.0) { // the number of branches in the current state h1 = map_var[head_node+1] - map_var[head_node]; - //PS_PrintToMainLog(env, "h1 = %1d\n", h1); + //PN_PrintToMainLog(env, "h1 = %1d\n", h1); double sum = 0; for(i=0; iReleaseLongArrayElements(_targets, target_ptrs, 0); if (relops) env->ReleaseIntArrayElements(_relops, relops, 0); if (bounds) env->ReleaseDoubleArrayElements(_bounds, bounds, 0); } catch (const char *err) { - PS_SetErrorMessage(err); + PN_SetErrorMessage(err); if (yes2_vec) delete yes2_vec; yes2_vec = 0; if (target_ptrs) env->ReleaseLongArrayElements(_targets, target_ptrs, 0); diff --git a/prism/src/sparse/PS_NondetMultiReach1.cc b/prism/src/sparse/PS_NondetMultiReach1.cc index c1c09da7d..1fe314ce4 100644 --- a/prism/src/sparse/PS_NondetMultiReach1.cc +++ b/prism/src/sparse/PS_NondetMultiReach1.cc @@ -36,7 +36,6 @@ #include "sparse.h" #include "sparse_adv.h" #include "prism.h" -#include "PrismSparseGlob.h" #include "PrismNativeGlob.h" #include "jnipointer.h" #include @@ -147,21 +146,21 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti yes[i] = targets[i]; // Display some info about the targets/combinations - PS_PrintToMainLog(env, "\n%d Targets:\n", num_targets); + PN_PrintToMainLog(env, "\n%d Targets:\n", num_targets); for (i = 0; i < num_targets; i++) { - PS_PrintToMainLog(env, "#%d: ", i); + PN_PrintToMainLog(env, "#%d: ", i); switch (relops[i]) { - case 0: PS_PrintToMainLog(env, "Pmax=?"); break; - case 1: PS_PrintToMainLog(env, "P>%g", bounds[i]); break; - case 2: PS_PrintToMainLog(env, "P>=%g", bounds[i]); break; + case 0: PN_PrintToMainLog(env, "Pmax=?"); break; + case 1: PN_PrintToMainLog(env, "P>%g", bounds[i]); break; + case 2: PN_PrintToMainLog(env, "P>=%g", bounds[i]); break; } - PS_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); + PN_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); } - PS_PrintToMainLog(env, "%d Target combinations:\n", num_combinations); + PN_PrintToMainLog(env, "%d Target combinations:\n", num_combinations); for (i = 0; i < num_combinations; i++) { - PS_PrintToMainLog(env, "#%d: ", i); - PS_PrintToMainLog(env, "%d ", (int)combinationIDs[i]); - PS_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, combinations[i], num_rvars)); + PN_PrintToMainLog(env, "#%d: ", i); + PN_PrintToMainLog(env, "%d ", (int)combinationIDs[i]); + PN_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, combinations[i], num_rvars)); } // Filter out rows, store in "a" @@ -191,7 +190,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti n = odd->eoff + odd->toff; // Build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // Get number of transitions/choices nnz = ndsm->nnz; @@ -199,13 +198,13 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti kb = ndsm->mem; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // If needed, and if info is available, build a vector of action indices for the MDP if (export_adv != EXPORT_ADV_NONE) { if (trans_actions != NULL) { - PS_PrintToMainLog(env, "Building action information... "); + PN_PrintToMainLog(env, "Building action information... "); // first need to filter out unwanted rows Cudd_Ref(trans_actions); Cudd_Ref(maybe_yes); @@ -217,39 +216,39 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti Cudd_RecursiveDeref(ddman, tmp); kb = n*4.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // also extract list of action names from 'synchs' get_string_array_from_java(env, synchs, action_names_jstrings, action_names, num_actions); } else { - PS_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); + PN_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); } } // Get vectors for yes/maybe - PS_PrintToMainLog(env, "Creating vectors for yes "); + PN_PrintToMainLog(env, "Creating vectors for yes "); for(i=0; inon_zeros; @@ -261,7 +260,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti unsigned int *cols = ndsm->cols; // Set up LP problem... - PS_PrintToMainLog(env, "\nBuilding LP problem...\n"); + PN_PrintToMainLog(env, "\nBuilding LP problem...\n"); int *yes_vec; @@ -333,7 +332,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti num_lp_vars = maybe_nc + yes_nc + yes_count; // Store first LP var for final state map_var[n] = num_lp_vars; // maybe need to be modified. - PS_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); + PN_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); for(i=0; i 0 && relops[0]<=2) { for(i=0; i 0) { // for qualitative queries, return 1/0 for existence of solution or not - PS_PrintToMainLog(env, "LP problem solution %sfound so result is %s\n", lp_solved ? "" : "not ", lp_solved ? "true" : "false"); + PN_PrintToMainLog(env, "LP problem solution %sfound so result is %s\n", lp_solved ? "" : "not ", lp_solved ? "true" : "false"); lp_result = lp_solved ? 1.0 : 0.0; } else { // return NaN for quantitative queries that can't be solved - PS_PrintToMainLog(env, "LP problem solution %sfound; result is %f\n", lp_solved ? "" : "not ", lp_result); + PN_PrintToMainLog(env, "LP problem solution %sfound; result is %f\n", lp_solved ? "" : "not ", lp_result); if (!lp_solved) lp_result = NAN; } // Print timing info time_taken = time_for_setup + time_for_lp; - PS_PrintToMainLog(env, "\nLP problem solved in %.2f seconds (setup %.2f, lpsolve %.2f)\n", time_taken, time_for_setup, time_for_lp); + PN_PrintToMainLog(env, "\nLP problem solved in %.2f seconds (setup %.2f, lpsolve %.2f)\n", time_taken, time_for_setup, time_for_lp); delete yes_vec; delete map_var; // Catch exceptions: register error } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); lp_result = NAN; } diff --git a/prism/src/sparse/PS_NondetMultiReachReward.cc b/prism/src/sparse/PS_NondetMultiReachReward.cc index b695de1d5..85bae02a4 100644 --- a/prism/src/sparse/PS_NondetMultiReachReward.cc +++ b/prism/src/sparse/PS_NondetMultiReachReward.cc @@ -36,7 +36,6 @@ #include "sparse.h" #include "sparse_adv.h" #include "prism.h" -#include "PrismSparseGlob.h" #include "PrismNativeGlob.h" #include "jnipointer.h" #include @@ -157,27 +156,27 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti boundsReward = env->GetDoubleArrayElements(_boundsReward, 0); // Display some info about the targets - PS_PrintToMainLog(env, "\n%d Targets:\n", num_targets); + PN_PrintToMainLog(env, "\n%d Targets:\n", num_targets); for (i = 0; i < num_targets; i++) { - PS_PrintToMainLog(env, "#%d: ", i); + PN_PrintToMainLog(env, "#%d: ", i); switch (relops[i]) { - case 0: PS_PrintToMainLog(env, "Pmax=?"); break; - case 1: PS_PrintToMainLog(env, "P>%g", bounds[i]); break; - case 2: PS_PrintToMainLog(env, "P>=%g", bounds[i]); break; + case 0: PN_PrintToMainLog(env, "Pmax=?"); break; + case 1: PN_PrintToMainLog(env, "P>%g", bounds[i]); break; + case 2: PN_PrintToMainLog(env, "P>=%g", bounds[i]); break; } - PS_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); + PN_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); } // Display some info about the rewards - PS_PrintToMainLog(env, "\n%d Rewards:\n", num_rewards); + PN_PrintToMainLog(env, "\n%d Rewards:\n", num_rewards); bool disable_selfloop = true; for (i = 0; i < num_rewards; i++) { - PS_PrintToMainLog(env, "#%d: ", i); + PN_PrintToMainLog(env, "#%d: ", i); switch (relopsReward[i]) { - case 3: PS_PrintToMainLog(env, "Rmax=?\n"); disable_selfloop = false; break; - case 8: PS_PrintToMainLog(env, "Rmin=?\n"); break; - case 4: PS_PrintToMainLog(env, "R>=%g\n", boundsReward[i]); disable_selfloop = false; break; - case 9: PS_PrintToMainLog(env, "R<=%g\n", boundsReward[i]); break; + case 3: PN_PrintToMainLog(env, "Rmax=?\n"); disable_selfloop = false; break; + case 8: PN_PrintToMainLog(env, "Rmin=?\n"); break; + case 4: PN_PrintToMainLog(env, "R>=%g\n", boundsReward[i]); disable_selfloop = false; break; + case 9: PN_PrintToMainLog(env, "R<=%g\n", boundsReward[i]); break; } } @@ -206,7 +205,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti n = odd->eoff + odd->toff; // Build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // Get number of transitions/choices nnz = ndsm->nnz; @@ -214,13 +213,13 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti kb = ndsm->mem; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // If needed, and if info is available, build a vector of action indices for the MDP if (export_adv != EXPORT_ADV_NONE) { if (trans_actions != NULL) { - PS_PrintToMainLog(env, "Building action information... "); + PN_PrintToMainLog(env, "Building action information... "); // first need to filter out unwanted rows Cudd_Ref(trans_actions); Cudd_Ref(maybe_yes); @@ -234,40 +233,40 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti Cudd_RecursiveDeref(ddman, tmp); kb = n*4.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // also extract list of action names from 'synchs' get_string_array_from_java(env, synchs, action_names_jstrings, action_names, num_actions); } else { - PS_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); + PN_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); } } // Get vectors for yes/maybe - PS_PrintToMainLog(env, "Creating vectors for yes... "); + PN_PrintToMainLog(env, "Creating vectors for yes... "); for(i=0; inon_zeros; @@ -279,7 +278,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti unsigned int *cols = ndsm->cols; // Set up LP problem... - PS_PrintToMainLog(env, "\nBuilding LP problem...\n"); + PN_PrintToMainLog(env, "\nBuilding LP problem...\n"); int *yes_vec; int *map_var; @@ -348,7 +347,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti num_lp_vars = maybe_nc + yes_nc + yes_count + bottomec_nc; // Store first LP var for final state map_var[n] = num_lp_vars; // maybe need to be modified. - PS_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); + PN_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); for(i=0; i 0 && relops[0] == 0) { x = 0; @@ -631,7 +630,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti //export_model(ndsm, n, yes_vec, start_index); // Solve the LP, extract result - PS_PrintToMainLog(env, "Solving LP problem...\n"); + PN_PrintToMainLog(env, "Solving LP problem...\n"); res = solve(lp); //Get LP solving time @@ -639,7 +638,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti time_for_lp = (double)(stop2 - start2)/1000; if (res != 0) { - PS_PrintToMainLog(env, "No solution\n"); + PN_PrintToMainLog(env, "No solution\n"); lp_solved = false; } else { lp_solved = true; @@ -656,39 +655,39 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti /*for (i=0; i @@ -172,33 +171,33 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti boundsReward = env->GetDoubleArrayElements(_boundsReward, 0); // Display some info about the targets/combinations - PS_PrintToMainLog(env, "\n%d Targets:\n", num_targets); + PN_PrintToMainLog(env, "\n%d Targets:\n", num_targets); for (i = 0; i < num_targets; i++) { - PS_PrintToMainLog(env, "#%d: ", i); + PN_PrintToMainLog(env, "#%d: ", i); switch (relops[i]) { - case 0: PS_PrintToMainLog(env, "Pmax=?"); break; - case 1: PS_PrintToMainLog(env, "P>%g", bounds[i]); break; - case 2: PS_PrintToMainLog(env, "P>=%g", bounds[i]); break; + case 0: PN_PrintToMainLog(env, "Pmax=?"); break; + case 1: PN_PrintToMainLog(env, "P>%g", bounds[i]); break; + case 2: PN_PrintToMainLog(env, "P>=%g", bounds[i]); break; } - PS_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); + PN_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, targets[i], num_rvars)); } - PS_PrintToMainLog(env, "%d Target combinations:\n", num_combinations); + PN_PrintToMainLog(env, "%d Target combinations:\n", num_combinations); for (i = 0; i < num_combinations; i++) { - PS_PrintToMainLog(env, "#%d: ", i); - PS_PrintToMainLog(env, "%d ", (int)combinationIDs[i]); - PS_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, combinations[i], num_rvars)); + PN_PrintToMainLog(env, "#%d: ", i); + PN_PrintToMainLog(env, "%d ", (int)combinationIDs[i]); + PN_PrintToMainLog(env, " (%.0f states)\n", DD_GetNumMinterms(ddman, combinations[i], num_rvars)); } // Display some info about the rewards - PS_PrintToMainLog(env, "\n%d Rewards:\n", num_rewards); + PN_PrintToMainLog(env, "\n%d Rewards:\n", num_rewards); bool disable_selfloop = true; for (i = 0; i < num_rewards; i++) { - PS_PrintToMainLog(env, "#%d: ", i); + PN_PrintToMainLog(env, "#%d: ", i); switch (relopsReward[i]) { - case 3: PS_PrintToMainLog(env, "Rmax=?\n"); disable_selfloop = false; break; - case 8: PS_PrintToMainLog(env, "Rmin=?\n"); break; - case 4: PS_PrintToMainLog(env, "R>=%g\n", boundsReward[i]); disable_selfloop = false; break; - case 9: PS_PrintToMainLog(env, "R<=%g\n", boundsReward[i]); break; + case 3: PN_PrintToMainLog(env, "Rmax=?\n"); disable_selfloop = false; break; + case 8: PN_PrintToMainLog(env, "Rmin=?\n"); break; + case 4: PN_PrintToMainLog(env, "R>=%g\n", boundsReward[i]); disable_selfloop = false; break; + case 9: PN_PrintToMainLog(env, "R<=%g\n", boundsReward[i]); break; } } @@ -231,7 +230,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti n = odd->eoff + odd->toff; // Build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // Get number of transitions/choices nnz = ndsm->nnz; @@ -239,13 +238,13 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti kb = ndsm->mem; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // If needed, and if info is available, build a vector of action indices for the MDP if (export_adv != EXPORT_ADV_NONE) { if (trans_actions != NULL) { - PS_PrintToMainLog(env, "Building action information... "); + PN_PrintToMainLog(env, "Building action information... "); // first need to filter out unwanted rows Cudd_Ref(trans_actions); Cudd_Ref(maybe_yes); @@ -257,44 +256,44 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti Cudd_RecursiveDeref(ddman, tmp); kb = n*4.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // also extract list of action names from 'synchs' get_string_array_from_java(env, synchs, action_names_jstrings, action_names, num_actions); } else { - PS_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); + PN_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); } } // Get vectors for yes/maybe - PS_PrintToMainLog(env, "Creating vectors for yes "); + PN_PrintToMainLog(env, "Creating vectors for yes "); for(i=0; inon_zeros; @@ -306,7 +305,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti unsigned int *cols = ndsm->cols; // Set up LP problem... - PS_PrintToMainLog(env, "\nBuilding LP problem...\n"); + PN_PrintToMainLog(env, "\nBuilding LP problem...\n"); int *yes_vec; int *map_var; @@ -381,7 +380,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti num_lp_vars = maybe_nc + yes_nc + yes_count + bottomec_nc; // Store first LP var for final state map_var[n] = num_lp_vars; // maybe need to be modified. - PS_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); + PN_PrintToMainLog(env, "Number of LP variables = %1d\n", num_lp_vars); for(i=0; i 0 && relops[0] == 0) { x = 0; @@ -706,7 +705,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti //export_model(ndsm, n, yes_vec, start_index); // Solve the LP, extract result - PS_PrintToMainLog(env, "Solving LP problem...\n"); + PN_PrintToMainLog(env, "Solving LP problem...\n"); res = solve(lp); //Get LP solving time @@ -714,7 +713,7 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti time_for_lp = (double)(stop2 - start2)/1000; if (res != 0) { - PS_PrintToMainLog(env, "No solution\n"); + PN_PrintToMainLog(env, "No solution\n"); lp_solved = false; } else { lp_solved = true; @@ -731,39 +730,39 @@ JNIEXPORT jdouble __jlongpointer JNICALL Java_sparse_PrismSparse_PS_1NondetMulti /*for (i=0; i @@ -132,7 +131,7 @@ jboolean min // min or max probabilities (true = min, false = max) trans_rewards = DD_Apply(ddman, APPLY_TIMES, trans_rewards, maybe); // build sparse matrix (probs) - PS_PrintToMainLog(env, "\nBuilding sparse matrix (transitions)... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix (transitions)... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz = ndsm->nnz; @@ -140,13 +139,13 @@ jboolean min // min or max probabilities (true = min, false = max) kb = (nnz*12.0+nc*4.0+n*4.0)/1024.0; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // if needed, and if info is available, build a vector of action indices for the MDP if (export_adv_enabled != EXPORT_ADV_NONE) { if (trans_actions != NULL) { - PS_PrintToMainLog(env, "Building action information... "); + PN_PrintToMainLog(env, "Building action information... "); // first need to filter out unwanted rows Cudd_Ref(trans_actions); Cudd_Ref(maybe); @@ -156,55 +155,55 @@ jboolean min // min or max probabilities (true = min, false = max) Cudd_RecursiveDeref(ddman, tmp); kb = n*4.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // also extract list of action names from 'synchs' get_string_array_from_java(env, synchs, action_names_jstrings, action_names, num_actions); } else { - PS_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); + PN_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); } } // build sparse matrix (rewards) - PS_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); + PN_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); ndsm_r = build_sub_nd_sparse_matrix(ddman, a, trans_rewards, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz_r = ndsm_r->nnz; nc_r = ndsm_r->nc; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); kb = (nnz_r*12.0+nc_r*4.0+n*4.0)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector for state rewards - PS_PrintToMainLog(env, "Creating vector for state rewards... "); + PN_PrintToMainLog(env, "Creating vector for state rewards... "); sr_vec = mtbdd_to_double_vector(ddman, state_rewards, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector for yes - PS_PrintToMainLog(env, "Creating vector for inf... "); + PN_PrintToMainLog(env, "Creating vector for inf... "); inf_vec = mtbdd_to_double_vector(ddman, inf, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // if required, create storage for adversary and initialise if (export_adv_enabled != EXPORT_ADV_NONE) { - PS_PrintToMainLog(env, "Allocating adversary vector... "); + PN_PrintToMainLog(env, "Allocating adversary vector... "); adv = new int[n]; kb = n*sizeof(int)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // Initialise all entries to -1 ("don't know") for (i = 0; i < n; i++) { adv[i] = -1; @@ -212,7 +211,7 @@ jboolean min // min or max probabilities (true = min, false = max) } // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is infinity in 'inf' states, zero elsewhere for (i = 0; i < n; i++) { @@ -220,9 +219,9 @@ jboolean min // min or max probabilities (true = min, false = max) } std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PS_NondetReachReward")); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -235,13 +234,13 @@ jboolean min // min or max probabilities (true = min, false = max) // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // open file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fp_adv = fopen(export_adv_filename, "w"); if (!fp_adv) { - PS_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); + PN_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); export_adv_enabled = EXPORT_ADV_NONE; } } @@ -335,8 +334,8 @@ jboolean min // min or max probabilities (true = min, false = max) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -399,15 +398,15 @@ jboolean min // min or max probabilities (true = min, false = max) time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PS_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // close file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fclose(fp_adv); - PS_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); + PN_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); } // the difference between vector values is not a reliable error bound @@ -416,7 +415,7 @@ jboolean min // min or max probabilities (true = min, false = max) // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_NondetReachRewardInterval.cc b/prism/src/sparse/PS_NondetReachRewardInterval.cc index 5392f20f7..97e40e9a5 100644 --- a/prism/src/sparse/PS_NondetReachRewardInterval.cc +++ b/prism/src/sparse/PS_NondetReachRewardInterval.cc @@ -36,7 +36,6 @@ #include "sparse.h" #include "prism.h" #include "PrismNativeGlob.h" -#include "PrismSparseGlob.h" #include "jnipointer.h" #include "ExportIterations.h" #include "IntervalIteration.h" @@ -116,10 +115,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PS_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PS_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // exception handling around whole function @@ -147,7 +146,7 @@ jint flags trans_rewards = DD_Apply(ddman, APPLY_TIMES, trans_rewards, maybe); // build sparse matrix (probs) - PS_PrintToMainLog(env, "\nBuilding sparse matrix (transitions)... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix (transitions)... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz = ndsm->nnz; @@ -155,13 +154,13 @@ jint flags kb = (nnz*12.0+nc*4.0+n*4.0)/1024.0; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // if needed, and if info is available, build a vector of action indices for the MDP if (export_adv_enabled != EXPORT_ADV_NONE) { if (trans_actions != NULL) { - PS_PrintToMainLog(env, "Building action information... "); + PN_PrintToMainLog(env, "Building action information... "); // first need to filter out unwanted rows Cudd_Ref(trans_actions); Cudd_Ref(maybe); @@ -171,71 +170,71 @@ jint flags Cudd_RecursiveDeref(ddman, tmp); kb = n*4.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // also extract list of action names from 'synchs' get_string_array_from_java(env, synchs, action_names_jstrings, action_names, num_actions); } else { - PS_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); + PN_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); } } // build sparse matrix (rewards) - PS_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); + PN_PrintToMainLog(env, "Building sparse matrix (transition rewards)... "); ndsm_r = build_sub_nd_sparse_matrix(ddman, a, trans_rewards, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz_r = ndsm_r->nnz; nc_r = ndsm_r->nc; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc_r, nnz_r, ndsm_r->k); kb = (nnz_r*12.0+nc_r*4.0+n*4.0)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector for state rewards - PS_PrintToMainLog(env, "Creating vector for state rewards... "); + PN_PrintToMainLog(env, "Creating vector for state rewards... "); sr_vec = mtbdd_to_double_vector(ddman, state_rewards, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector for yes - PS_PrintToMainLog(env, "Creating vector for inf... "); + PN_PrintToMainLog(env, "Creating vector for inf... "); inf_vec = mtbdd_to_double_vector(ddman, inf, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector for lower bounds - PS_PrintToMainLog(env, "Creating vector for lower bounds... "); + PN_PrintToMainLog(env, "Creating vector for lower bounds... "); lower_vec = mtbdd_to_double_vector(ddman, lower, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector for lower bounds - PS_PrintToMainLog(env, "Creating vector for upper bounds... "); + PN_PrintToMainLog(env, "Creating vector for upper bounds... "); upper_vec = mtbdd_to_double_vector(ddman, upper, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = new double[n]; soln_below2 = new double[n]; soln_above = new double[n]; soln_above2 = new double[n]; kb = n*8.0/1024.0; kbt += 4*kb; - PS_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); // if required, create storage for adversary and initialise if (export_adv_enabled != EXPORT_ADV_NONE) { - PS_PrintToMainLog(env, "Allocating adversary vector... "); + PN_PrintToMainLog(env, "Allocating adversary vector... "); adv = new int[n]; kb = n*sizeof(int)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // Initialise all entries to -1 ("don't know") for (i = 0; i < n; i++) { adv[i] = -1; @@ -243,7 +242,7 @@ jint flags } // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution from below is infinity in 'inf' states, lower elsewhere // initial solution from above is infinity in 'inf' states, upper elsewhere @@ -253,9 +252,9 @@ jint flags } std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PS_NondetReachReward (interval)")); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -269,13 +268,13 @@ jint flags // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); + PN_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); // open file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fp_adv = fopen(export_adv_filename, "w"); if (!fp_adv) { - PS_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); + PN_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); export_adv_enabled = EXPORT_ADV_NONE; } } @@ -407,14 +406,14 @@ jint flags measure.reset(); measure.measure(soln_below2, soln_above2, n); if (measure.value() < term_crit_param) { - PS_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -480,20 +479,20 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PS_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PS_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } // close file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fclose(fp_adv); - PS_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); + PN_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -509,7 +508,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/sparse/PS_NondetUntil.cc b/prism/src/sparse/PS_NondetUntil.cc index 54ca868d7..338a52693 100644 --- a/prism/src/sparse/PS_NondetUntil.cc +++ b/prism/src/sparse/PS_NondetUntil.cc @@ -35,7 +35,6 @@ #include "sparse.h" #include "prism.h" #include "PrismNativeGlob.h" -#include "PrismSparseGlob.h" #include "jnipointer.h" #include "Measures.h" #include "ExportIterations.h" @@ -130,7 +129,7 @@ jlong _strat // strategy storage n = odd->eoff + odd->toff; // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz = ndsm->nnz; @@ -138,13 +137,13 @@ jlong _strat // strategy storage kb = ndsm->mem; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // if needed, and if info is available, build a vector of action indices for the MDP if (export_adv_enabled != EXPORT_ADV_NONE || strat != NULL) { if (trans_actions != NULL) { - PS_PrintToMainLog(env, "Building action information... "); + PN_PrintToMainLog(env, "Building action information... "); // first need to filter out unwanted rows Cudd_Ref(trans_actions); Cudd_Ref(maybe); @@ -154,32 +153,32 @@ jlong _strat // strategy storage Cudd_RecursiveDeref(ddman, tmp); kb = n*4.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // also extract list of action names from 'synchs' get_string_array_from_java(env, synchs, action_names_jstrings, action_names, num_actions); } else { - PS_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); + PN_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); } } // get vector for yes - PS_PrintToMainLog(env, "Creating vector for yes... "); + PN_PrintToMainLog(env, "Creating vector for yes... "); yes_vec = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // if required, create storage for adversary and initialise if (export_adv_enabled != EXPORT_ADV_NONE || strat != NULL) { - PS_PrintToMainLog(env, "Allocating adversary vector... "); + PN_PrintToMainLog(env, "Allocating adversary vector... "); // Use passed in (pre-filled) array, if provided if (strat) { adv = strat; @@ -192,11 +191,11 @@ jlong _strat // strategy storage } kb = n*sizeof(int)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is yes for (i = 0; i < n; i++) { @@ -205,9 +204,9 @@ jlong _strat // strategy storage } std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PS_NondetUntil")); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -220,13 +219,13 @@ jlong _strat // strategy storage // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // open file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fp_adv = fopen(export_adv_filename, "w"); if (!fp_adv) { - PS_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); + PN_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); export_adv_enabled = EXPORT_ADV_NONE; } } @@ -295,8 +294,8 @@ jlong _strat // strategy storage // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -359,15 +358,15 @@ jlong _strat // strategy storage time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PS_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // close file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fclose(fp_adv); - PS_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); + PN_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); } // convert strategy indices from choices to actions @@ -383,7 +382,7 @@ jlong _strat // strategy storage // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_NondetUntilInterval.cc b/prism/src/sparse/PS_NondetUntilInterval.cc index 4e82ac528..aef9f9d9a 100644 --- a/prism/src/sparse/PS_NondetUntilInterval.cc +++ b/prism/src/sparse/PS_NondetUntilInterval.cc @@ -35,7 +35,6 @@ #include "sparse.h" #include "prism.h" #include "PrismNativeGlob.h" -#include "PrismSparseGlob.h" #include "jnipointer.h" #include "Measures.h" #include "ExportIterations.h" @@ -110,10 +109,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PS_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (helper.flag_ensure_monotonic_from_below()) { - PS_PrintToMainLog(env, "Note: Interval iteration is configured to enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to enforce monotonicity from below.\n"); } // exception handling around whole function @@ -143,7 +142,7 @@ jint flags n = odd->eoff + odd->toff; // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); ndsm = build_nd_sparse_matrix(ddman, a, rvars, cvars, num_rvars, ndvars, num_ndvars, odd); // get number of transitions/choices nnz = ndsm->nnz; @@ -151,13 +150,13 @@ jint flags kb = ndsm->mem; kbt = kb; // print out info - PS_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nc=%d, nnz=%ld, k=%d] ", n, nc, nnz, ndsm->k); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // if needed, and if info is available, build a vector of action indices for the MDP if (export_adv_enabled != EXPORT_ADV_NONE || strat != NULL) { if (trans_actions != NULL) { - PS_PrintToMainLog(env, "Building action information... "); + PN_PrintToMainLog(env, "Building action information... "); // first need to filter out unwanted rows Cudd_Ref(trans_actions); Cudd_Ref(maybe); @@ -167,41 +166,41 @@ jint flags Cudd_RecursiveDeref(ddman, tmp); kb = n*4.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // also extract list of action names from 'synchs' get_string_array_from_java(env, synchs, action_names_jstrings, action_names, num_actions); } else { - PS_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); + PN_PrintWarningToMainLog(env, "Action labels are not available for adversary generation."); } } // get vector for yes - PS_PrintToMainLog(env, "Creating vector for yes... "); + PN_PrintToMainLog(env, "Creating vector for yes... "); yes_vec = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector for yes - PS_PrintToMainLog(env, "Creating vector for maybe... "); + PN_PrintToMainLog(env, "Creating vector for maybe... "); maybe_vec = mtbdd_to_double_vector(ddman, maybe, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = new double[n]; soln_below2 = new double[n]; soln_above = new double[n]; soln_above2 = new double[n]; kb = n*8.0/1024.0; kbt += 4*kb; - PS_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); // if required, create storage for adversary and initialise if (export_adv_enabled != EXPORT_ADV_NONE || strat != NULL) { - PS_PrintToMainLog(env, "Allocating adversary vector... "); + PN_PrintToMainLog(env, "Allocating adversary vector... "); // Use passed in (pre-filled) array, if provided if (strat) { adv = strat; @@ -214,11 +213,11 @@ jint flags } kb = n*sizeof(int)/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution for below is yes, from above is 1 (expect for no states) for (i = 0; i < n; i++) { @@ -233,9 +232,9 @@ jint flags } std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PS_NondetUntil_Interval")); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -249,13 +248,13 @@ jint flags // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); + PN_PrintToMainLog(env, "\nStarting iterations (interval iteration)...\n"); // open file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fp_adv = fopen(export_adv_filename, "w"); if (!fp_adv) { - PS_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); + PN_PrintWarningToMainLog(env, "Adversary generation cancelled (could not open file \"%s\").", export_adv_filename); export_adv_enabled = EXPORT_ADV_NONE; } } @@ -355,14 +354,14 @@ jint flags measure.reset(); measure.measure(soln_below2, soln_above2, n); if (measure.value() < term_crit_param) { - PS_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -428,14 +427,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PS_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PS_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -452,7 +451,7 @@ jint flags // close file to store adversary (if required) if (export_adv_enabled != EXPORT_ADV_NONE) { fclose(fp_adv); - PS_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); + PN_PrintToMainLog(env, "\nAdversary written to file \"%s\".\n", export_adv_filename); } // convert strategy indices from choices to actions @@ -464,7 +463,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/sparse/PS_Power.cc b/prism/src/sparse/PS_Power.cc index ff67cfc5f..1b08e41f2 100644 --- a/prism/src/sparse/PS_Power.cc +++ b/prism/src/sparse/PS_Power.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -104,7 +104,7 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) Cudd_Ref(a); // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_a = true; cmsrsm = NULL; @@ -122,12 +122,12 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // build b vector (if present) if (b != NULL) { - PS_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -139,25 +139,25 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PS_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, init, rvars, num_rvars, odd); soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PS_Power")); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -170,7 +170,7 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -235,8 +235,8 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, (measure.isRelative()?"relative ":""), measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, (measure.isRelative()?"relative ":""), measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -252,10 +252,10 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) time_taken = (double)(stop - start1)/1000; // print iters/timing info - PS_PrintToMainLog(env, "\nPower method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nPower method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PS_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // the difference between vector values is not a reliable error bound // but we store it anyway in case it is useful for estimating a bound @@ -263,7 +263,7 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?) // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_PowerInterval.cc b/prism/src/sparse/PS_PowerInterval.cc index fe2d9d9aa..3e6f4c8c9 100644 --- a/prism/src/sparse/PS_PowerInterval.cc +++ b/prism/src/sparse/PS_PowerInterval.cc @@ -34,7 +34,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -111,7 +111,7 @@ jint flags Cudd_Ref(a); // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_a = true; cmsrsm = NULL; @@ -129,12 +129,12 @@ jint flags } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // build b vector (if present) if (b != NULL) { - PS_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -146,27 +146,27 @@ jint flags } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PS_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = mtbdd_to_double_vector(ddman, lower, rvars, num_rvars, odd); soln_above = mtbdd_to_double_vector(ddman, upper, rvars, num_rvars, odd); soln_below2 = new double[n]; soln_above2 = new double[n]; kb = n*8.0/1024.0; kbt += 4*kb; - PS_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[4 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { iterationExport.reset(new ExportIterations("PS_PowerInterval")); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -180,7 +180,7 @@ jint flags // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -246,14 +246,14 @@ jint flags measure.reset(); measure.measure(soln_below2, soln_above2, n); if (measure.value() < term_crit_param) { - PS_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -272,14 +272,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iters/timing info - PS_PrintToMainLog(env, "\nPower method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nPower method (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PS_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PS_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -295,7 +295,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/sparse/PS_ProbBoundedUntil.cc b/prism/src/sparse/PS_ProbBoundedUntil.cc index 0567d136d..e9c804b02 100644 --- a/prism/src/sparse/PS_ProbBoundedUntil.cc +++ b/prism/src/sparse/PS_ProbBoundedUntil.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include @@ -98,7 +98,7 @@ jint bound // time bound a = DD_Apply(ddman, APPLY_TIMES, trans, maybe); // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_tr = true; cmsrsm = NULL; @@ -116,11 +116,11 @@ jint bound // time bound } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of yes - PS_PrintToMainLog(env, "Creating vector for yes... "); + PN_PrintToMainLog(env, "Creating vector for yes... "); yes_vec = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); // try and convert to compact form if required compact_y = false; @@ -132,19 +132,19 @@ jint bound // time bound } kb = (!compact_y) ? n*8.0/1024.0 : (yes_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_y) PS_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_y) PN_PrintToMainLog(env, "[dist=%d, compact] ", yes_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is q for (i = 0; i < n; i++) { @@ -158,7 +158,7 @@ jint bound // time bound start3 = stop; // start iterations - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -213,8 +213,8 @@ jint bound // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -230,11 +230,11 @@ jint bound // time bound time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_ProbCumulReward.cc b/prism/src/sparse/PS_ProbCumulReward.cc index 9f4abd3a1..35372c3c5 100644 --- a/prism/src/sparse/PS_ProbCumulReward.cc +++ b/prism/src/sparse/PS_ProbCumulReward.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include @@ -93,7 +93,7 @@ jint bound // time bound n = odd->eoff + odd->toff; // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_tr = true; cmsrsm = NULL; @@ -111,8 +111,8 @@ jint bound // time bound } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // multiply transition rewards by transition probs and sum rows // then combine state and transition rewards and put in a vector @@ -124,7 +124,7 @@ jint bound // time bound all_rewards = DD_Apply(ddman, APPLY_PLUS, state_rewards, all_rewards); // get vector of rewards - PS_PrintToMainLog(env, "Creating vector for rewards... "); + PN_PrintToMainLog(env, "Creating vector for rewards... "); rew_vec = mtbdd_to_double_vector(ddman, all_rewards, rvars, num_rvars, odd); // try and convert to compact form if required compact_r = false; @@ -136,19 +136,19 @@ jint bound // time bound } kb = (!compact_r) ? n*8.0/1024.0 : (rew_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_r) PS_PrintToMainLog(env, "[dist=%d, compact] ", rew_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_r) PN_PrintToMainLog(env, "[dist=%d, compact] ", rew_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = new double[n]; soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // initial solution is zero for (i = 0; i < n; i++) { @@ -162,7 +162,7 @@ jint bound // time bound start3 = stop; // start iterations - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -215,8 +215,8 @@ jint bound // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -232,11 +232,11 @@ jint bound // time bound time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_ProbInstReward.cc b/prism/src/sparse/PS_ProbInstReward.cc index 785eede09..f68909cb5 100644 --- a/prism/src/sparse/PS_ProbInstReward.cc +++ b/prism/src/sparse/PS_ProbInstReward.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include @@ -88,7 +88,7 @@ jint bound // time bound n = odd->eoff + odd->toff; // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_tr = true; cmsrsm = NULL; @@ -106,20 +106,20 @@ jint bound // time bound } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors // (solution is initialised to the state rewards) - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, state_rewards, rvars, num_rvars, odd); soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // get setup time stop = util_cpu_time(); @@ -128,7 +128,7 @@ jint bound // time bound start3 = stop; // start iterations - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < bound; iters++) { @@ -181,8 +181,8 @@ jint bound // time bound // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)bound); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -198,11 +198,11 @@ jint bound // time bound time_taken = (double)(stop - start1)/1000; // print iterations/timing info - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_ProbReachReward.cc b/prism/src/sparse/PS_ProbReachReward.cc index ae77c0897..bc6091292 100644 --- a/prism/src/sparse/PS_ProbReachReward.cc +++ b/prism/src/sparse/PS_ProbReachReward.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include @@ -134,7 +134,7 @@ jlong __jlongpointer m // 'maybe' states case LIN_EQ_METHOD_BSOR: soln = jlong_to_double(Java_sparse_PrismSparse_PS_1SOR(env, cls, ptr_to_jlong(odd), ptr_to_jlong(rvars), num_rvars, ptr_to_jlong(cvars), num_cvars, ptr_to_jlong(a), ptr_to_jlong(state_rewards), ptr_to_jlong(state_rewards), false, false, lin_eq_method_param, false)); break; default: - PS_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; + PN_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; } // set reward for infinity states to infinity @@ -148,7 +148,7 @@ jlong __jlongpointer m // 'maybe' states // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_ProbReachRewardInterval.cc b/prism/src/sparse/PS_ProbReachRewardInterval.cc index 678e6b76a..3837fea10 100644 --- a/prism/src/sparse/PS_ProbReachRewardInterval.cc +++ b/prism/src/sparse/PS_ProbReachRewardInterval.cc @@ -34,7 +34,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "IntervalIteration.h" #include "jnipointer.h" #include @@ -125,10 +125,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PS_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PS_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // call iterative method @@ -149,7 +149,7 @@ jint flags case LIN_EQ_METHOD_BSOR: soln = jlong_to_double(Java_sparse_PrismSparse_PS_1SORInterval(env, cls, ptr_to_jlong(odd), ptr_to_jlong(rvars), num_rvars, ptr_to_jlong(cvars), num_cvars, ptr_to_jlong(a), ptr_to_jlong(state_rewards), ptr_to_jlong(lower), ptr_to_jlong(upper), false, false, lin_eq_method_param, false, flags)); break; default: - PS_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; + PN_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; } // set reward for infinity states to infinity @@ -163,7 +163,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_ProbTransient.cc b/prism/src/sparse/PS_ProbTransient.cc index 4a6df9ef1..743aed8b8 100644 --- a/prism/src/sparse/PS_ProbTransient.cc +++ b/prism/src/sparse/PS_ProbTransient.cc @@ -34,7 +34,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "Measures.h" #include @@ -92,7 +92,7 @@ jint time // time n = odd->eoff + odd->toff; // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_tr = true; cmscsm = NULL; @@ -110,21 +110,21 @@ jint time // time } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); // for soln, we just use init (since we are free to modify/delete this vector) // we also report the memory usage of this vector here, even though it has already been created soln = init; soln2 = new double[n]; kb = n*8.0/1024.0; kbt += 2*kb; - PS_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // get setup time stop = util_cpu_time(); @@ -135,7 +135,7 @@ jint time // time // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // note that we ignore max_iters as we know how any iterations _should_ be performed for (iters = 0; iters < time && !done; iters++) { @@ -197,9 +197,9 @@ jint time // time // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)time); - if (do_ss_detect) PS_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d (of %d): ", iters, (int)time); + if (do_ss_detect) PN_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -215,12 +215,12 @@ jint time // time time_taken = (double)(stop - start1)/1000; // print iters/timing info - if (done) PS_PrintToMainLog(env, "\nSteady state detected at iteration %d\n", iters); - PS_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); + if (done) PN_PrintToMainLog(env, "\nSteady state detected at iteration %d\n", iters); + PN_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_ProbUntil.cc b/prism/src/sparse/PS_ProbUntil.cc index d14d3ca3f..ae2ae9d49 100644 --- a/prism/src/sparse/PS_ProbUntil.cc +++ b/prism/src/sparse/PS_ProbUntil.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include @@ -107,12 +107,12 @@ jlong __jlongpointer m // 'maybe' states case LIN_EQ_METHOD_BSOR: soln = jlong_to_double(Java_sparse_PrismSparse_PS_1SOR(env, cls, ptr_to_jlong(odd), ptr_to_jlong(rvars), num_rvars, ptr_to_jlong(cvars), num_cvars, ptr_to_jlong(a), ptr_to_jlong(b), ptr_to_jlong(b), false, false, lin_eq_method_param, false)); break; default: - PS_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; + PN_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; } // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_ProbUntilInterval.cc b/prism/src/sparse/PS_ProbUntilInterval.cc index bbfc58be0..6a0d0a5fa 100644 --- a/prism/src/sparse/PS_ProbUntilInterval.cc +++ b/prism/src/sparse/PS_ProbUntilInterval.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "IntervalIteration.h" #include "jnipointer.h" #include @@ -101,10 +101,10 @@ jint flags IntervalIteration helper(flags); if (!helper.flag_ensure_monotonic_from_above()) { - PS_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from above.\n"); } if (!helper.flag_ensure_monotonic_from_below()) { - PS_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); + PN_PrintToMainLog(env, "Note: Interval iteration is configured to not enforce monotonicity from below.\n"); } // call iterative method @@ -125,12 +125,12 @@ jint flags case LIN_EQ_METHOD_BSOR: soln = jlong_to_double(Java_sparse_PrismSparse_PS_1SORInterval(env, cls, ptr_to_jlong(odd), ptr_to_jlong(rvars), num_rvars, ptr_to_jlong(cvars), num_cvars, ptr_to_jlong(a), ptr_to_jlong(b), ptr_to_jlong(lower), ptr_to_jlong(upper), false, false, lin_eq_method_param, false, flags)); break; default: - PS_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; + PN_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; } // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_SOR.cc b/prism/src/sparse/PS_SOR.cc index 69b5b8943..b3bd28292 100644 --- a/prism/src/sparse/PS_SOR.cc +++ b/prism/src/sparse/PS_SOR.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -120,7 +120,7 @@ jboolean forwards // forwards or backwards? a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_a = true; cmsrsm = NULL; @@ -138,12 +138,12 @@ jboolean forwards // forwards or backwards? } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix - PS_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -164,8 +164,8 @@ jboolean forwards // forwards or backwards? } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PS_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -176,7 +176,7 @@ jboolean forwards // forwards or backwards? // build b vector (if present) if (b != NULL) { - PS_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -188,28 +188,28 @@ jboolean forwards // forwards or backwards? } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PS_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vector... "); + PN_PrintToMainLog(env, "Allocating iteration vector... "); soln = mtbdd_to_double_vector(ddman, init, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += kb; - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PS_SOR ("); title += forwards?"":"Backwards "; title += (omega == 1.0)?"Gauss-Seidel":("SOR omega=" + std::to_string(omega)); title += ")"; iterationExport.reset(new ExportIterations(title.c_str())); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln, n, 0); } @@ -222,7 +222,7 @@ jboolean forwards // forwards or backwards? // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -301,8 +301,8 @@ jboolean forwards // forwards or backwards? // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } } @@ -313,10 +313,10 @@ jboolean forwards // forwards or backwards? time_taken = (double)(stop - start1)/1000; // print iters/timing info - PS_PrintToMainLog(env, "\n%s%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error - if (!done) { delete[] soln; soln = NULL; PS_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } + if (!done) { delete[] soln; soln = NULL; PN_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); } // the difference between vector values is not a reliable error bound // but we store it anyway in case it is useful for estimating a bound @@ -324,7 +324,7 @@ jboolean forwards // forwards or backwards? // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_SORInterval.cc b/prism/src/sparse/PS_SORInterval.cc index 0a3056f05..9c54e3be0 100644 --- a/prism/src/sparse/PS_SORInterval.cc +++ b/prism/src/sparse/PS_SORInterval.cc @@ -34,7 +34,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -100,7 +100,7 @@ jint flags MeasureSupNorm measure(term_crit == TERM_CRIT_RELATIVE); if (omega <= 0.0 || omega > 1.0) { - PS_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); + PN_SetErrorMessage("Interval iteration requires 0 < omega <= 1.0, have omega = %g", omega); return ptr_to_jlong(NULL); } @@ -132,7 +132,7 @@ jint flags a = DD_ITE(ddman, id, DD_Constant(ddman, 0), a); // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_a = true; cmsrsm = NULL; @@ -150,12 +150,12 @@ jint flags } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_a?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diags, either by extracting from mtbdd or // by doing (negative, non-diagonal) row sums of original A matrix - PS_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); if (!row_sums) { diags = DD_MaxAbstract(ddman, diags, cvars, num_cvars); diags_vec = mtbdd_to_double_vector(ddman, diags, rvars, num_rvars, odd); @@ -176,8 +176,8 @@ jint flags } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PS_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // invert diagonal if (!compact_d) { @@ -188,7 +188,7 @@ jint flags // build b vector (if present) if (b != NULL) { - PS_PrintToMainLog(env, "Creating vector for RHS... "); + PN_PrintToMainLog(env, "Creating vector for RHS... "); b_vec = mtbdd_to_double_vector(ddman, b, rvars, num_rvars, odd); // try and convert to compact form if required compact_b = false; @@ -200,29 +200,29 @@ jint flags } kb = (!compact_b) ? n*8.0/1024.0 : (b_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_b) PS_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_b) PN_PrintToMainLog(env, "[dist=%d, compact] ", b_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); } // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln_below = mtbdd_to_double_vector(ddman, lower, rvars, num_rvars, odd); soln_above = mtbdd_to_double_vector(ddman, upper, rvars, num_rvars, odd); kb = n*8.0/1024.0; kbt += 2 * kb; - PS_PrintMemoryToMainLog(env, "[ 2 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[ 2 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); std::unique_ptr iterationExport; - if (PS_GetFlagExportIterations()) { + if (PN_GetFlagExportIterations()) { std::string title("PS_SOR ("); title += forwards?"":"Backwards "; title += (omega == 1.0)?"Gauss-Seidel":("SOR omega=" + std::to_string(omega)); title += "), interval"; iterationExport.reset(new ExportIterations(title.c_str())); - PS_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); + PN_PrintToMainLog(env, "Exporting iterations to %s\n", iterationExport->getFileName().c_str()); iterationExport->exportVector(soln_below, n, 0); iterationExport->exportVector(soln_above, n, 1); } @@ -236,7 +236,7 @@ jint flags // start iterations iters = 0; done = false; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); while (!done && iters < max_iters) { @@ -315,14 +315,14 @@ jint flags measure.reset(); measure.measure(soln_below, soln_above, n); if (measure.value() < term_crit_param) { - PS_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "Max %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); done = true; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %d: max %sdiff=%f", iters, measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, ", %.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } } @@ -333,14 +333,14 @@ jint flags time_taken = (double)(stop - start1)/1000; // print iters/timing info - PS_PrintToMainLog(env, "\n%s%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); + PN_PrintToMainLog(env, "\n%s%s (interval iteration): %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); // if the iterative method didn't terminate, this is an error if (!done) { delete[] soln_below; soln_below = NULL; - PS_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); - PS_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); + PN_SetErrorMessage("Iterative method (interval iteration) did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); + PN_PrintToMainLog(env, "Max remaining %sdiff between upper and lower bound on convergence: %G", measure.isRelative()?"relative ":"", measure.value()); } if (helper.flag_select_midpoint() && soln_below) { // we did converge, select midpoint @@ -356,7 +356,7 @@ jint flags // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln_below) delete[] soln_below; soln_below = 0; } diff --git a/prism/src/sparse/PS_StochBoundedUntil.cc b/prism/src/sparse/PS_StochBoundedUntil.cc index 4714059c9..ba758c45c 100644 --- a/prism/src/sparse/PS_StochBoundedUntil.cc +++ b/prism/src/sparse/PS_StochBoundedUntil.cc @@ -34,7 +34,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "prism.h" #include "Measures.h" @@ -104,7 +104,7 @@ jlong __jlongpointer mu // probs for multiplying // count number of states to be made absorbing x = DD_GetNumMinterms(ddman, maybe, num_rvars); - PS_PrintToMainLog(env, "\nNumber of non-absorbing states: %.0f of %d (%.1f%%)\n", x, n, 100.0*(x/n)); + PN_PrintToMainLog(env, "\nNumber of non-absorbing states: %.0f of %d (%.1f%%)\n", x, n, 100.0*(x/n)); // filter out rows from rate matrix Cudd_Ref(trans); @@ -112,7 +112,7 @@ jlong __jlongpointer mu // probs for multiplying r = DD_Apply(ddman, APPLY_TIMES, trans, maybe); // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_tr = true; cmsrsm = NULL; @@ -130,11 +130,11 @@ jlong __jlongpointer mu // probs for multiplying } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diagonals - PS_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); diags = compact_tr ? cmsr_negative_row_sums(cmsrsm) : rm_negative_row_sums(rmsm); // try and convert to compact form if required compact_d = false; @@ -146,8 +146,8 @@ jlong __jlongpointer mu // probs for multiplying } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PS_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // find max diagonal element if (!compact_d) { @@ -177,13 +177,13 @@ jlong __jlongpointer mu // probs for multiplying } // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); soln = mtbdd_to_double_vector(ddman, yes, rvars, num_rvars, odd); soln2 = new double[n]; sum = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PS_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // multiply initial solution by 'mult' probs if (mult != NULL) { @@ -193,19 +193,19 @@ jlong __jlongpointer mu // probs for multiplying } // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // compute new termination criterion parameter (epsilon/8) term_crit_param_unif = term_crit_param / 8.0; // compute poisson probabilities (fox/glynn) - PS_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); + PN_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); fgw = fox_glynn(unif * time, 1.0e-300, 1.0e+300, term_crit_param_unif); if (fgw.right < 0) throw "Overflow in Fox-Glynn computation (time bound too big?)"; for (i = fgw.left; i <= fgw.right; i++) { fgw.weights[i-fgw.left] /= fgw.total_weight; } - PS_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); + PN_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); // set up vectors for (i = 0; i < n; i++) { @@ -221,7 +221,7 @@ jlong __jlongpointer mu // probs for multiplying // start transient analysis done = false; num_iters = -1; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // if necessary, do 0th element of summation (doesn't require any matrix powers) if (fgw.left == 0) for (i = 0; i < n; i++) { @@ -299,16 +299,16 @@ jlong __jlongpointer mu // probs for multiplying } // add to sum for (i = 0; i < n; i++) sum[i] += weight * soln2[i]; - PS_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); + PN_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); num_iters = iters; break; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); - if (do_ss_detect) PS_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); + if (do_ss_detect) PN_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -330,15 +330,15 @@ jlong __jlongpointer mu // probs for multiplying // print iters/timing info if (num_iters == -1) num_iters = fgw.right; - PS_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (sum) delete[] sum; sum = 0; } catch (const char *err) { - PS_SetErrorMessage("%s", err); + PN_SetErrorMessage("%s", err); if (sum) delete[] sum; sum = 0; } diff --git a/prism/src/sparse/PS_StochCumulReward.cc b/prism/src/sparse/PS_StochCumulReward.cc index 845074a59..b22a0b70e 100644 --- a/prism/src/sparse/PS_StochCumulReward.cc +++ b/prism/src/sparse/PS_StochCumulReward.cc @@ -34,7 +34,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "Measures.h" #include @@ -100,7 +100,7 @@ jdouble time // time bound n = odd->eoff + odd->toff; // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_tr = true; cmsrsm = NULL; @@ -118,11 +118,11 @@ jdouble time // time bound } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diagonals - PS_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); diags = compact_tr ? cmsr_negative_row_sums(cmsrsm) : rm_negative_row_sums(rmsm); // try and convert to compact form if required compact_d = false; @@ -134,8 +134,8 @@ jdouble time // time bound } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PS_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // find max diagonal element if (!compact_d) { @@ -180,29 +180,29 @@ jdouble time // time bound Cudd_RecursiveDeref(ddman, tmp); // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); // soln has already been created and initialised to rewards vector as required // need to create soln2 and sum soln2 = new double[n]; sum = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PS_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // compute new termination criterion parameter (epsilon/8) term_crit_param_unif = term_crit_param / 8.0; // compute poisson probabilities (fox/glynn) - PS_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); + PN_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); fgw = fox_glynn(unif * time, 1.0e-300, 1.0e+300, term_crit_param_unif); if (fgw.right < 0) throw "Overflow in Fox-Glynn computation (time bound too big?)"; for (i = fgw.left; i <= fgw.right; i++) { fgw.weights[i-fgw.left] /= fgw.total_weight; } - PS_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); + PN_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); // modify the poisson probabilities to what we need for this computation // first make the kth value equal to the sum of the values for 0...k @@ -228,7 +228,7 @@ jdouble time // time bound // start transient analysis done = false; num_iters = -1; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // do 0th element of summation (doesn't require any matrix powers) if (fgw.left == 0) { @@ -309,16 +309,16 @@ jdouble time // time bound // add to sum for (i = 0; i < n; i++) sum[i] += weight * soln2[i]; - PS_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); + PN_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); num_iters = iters; break; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); - if (do_ss_detect) PS_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); + if (do_ss_detect) PN_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -342,15 +342,15 @@ jdouble time // time bound // print iters/timing info if (num_iters == -1) num_iters = fgw.right; - PS_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (sum) delete[] sum; sum = 0; } catch (const char *err) { - PS_SetErrorMessage("%s", err); + PN_SetErrorMessage("%s", err); if (sum) delete[] sum; sum = 0; } diff --git a/prism/src/sparse/PS_StochSteadyState.cc b/prism/src/sparse/PS_StochSteadyState.cc index d275212e6..b5895ad7d 100644 --- a/prism/src/sparse/PS_StochSteadyState.cc +++ b/prism/src/sparse/PS_StochSteadyState.cc @@ -33,7 +33,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include @@ -100,7 +100,7 @@ jint num_cvars q = DD_Apply(ddman, APPLY_PLUS, trans, DD_Apply(ddman, APPLY_TIMES, DD_Identity(ddman, rvars, cvars, num_rvars), diags)); // build iteration matrix - PS_PrintToMainLog(env, "\nBuilding power method iteration matrix MTBDD... "); + PN_PrintToMainLog(env, "\nBuilding power method iteration matrix MTBDD... "); // (includes a "fix" for when we are solving a subsystem e.g. BSCC) // (although i don't think we actually need this for the power method) Cudd_Ref(diags); @@ -108,7 +108,7 @@ jint num_cvars Cudd_Ref(q); a = DD_Apply(ddman, APPLY_PLUS, DD_Apply(ddman, APPLY_TIMES, DD_Constant(ddman, deltat), q), DD_Apply(ddman, APPLY_TIMES, DD_Identity(ddman, rvars, cvars, num_rvars), tmp)); i = DD_GetNumNodes(ddman, a); - PS_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]", i, i*20.0/1024.0); + PN_PrintToMainLog(env, "[nodes=%d] [%.1f Kb]", i, i*20.0/1024.0); // deref unneeded mtbdds Cudd_RecursiveDeref(ddman, diags); @@ -140,7 +140,7 @@ jint num_cvars case LIN_EQ_METHOD_BSOR: soln = jlong_to_double(Java_sparse_PrismSparse_PS_1SOR(env, cls, ptr_to_jlong(odd), ptr_to_jlong(rvars), num_rvars, ptr_to_jlong(cvars), num_cvars, ptr_to_jlong(a), 0, ptr_to_jlong(init), true, true, lin_eq_method_param, false)); break; default: - PS_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; + PN_SetErrorMessage("Pseudo Gauss-Seidel/SOR methods are currently not supported by the sparse engine"); return 0; } // normalise @@ -156,7 +156,7 @@ jint num_cvars // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (soln) delete[] soln; soln = 0; } diff --git a/prism/src/sparse/PS_StochTransient.cc b/prism/src/sparse/PS_StochTransient.cc index 3a2f0e300..7e28eae2b 100644 --- a/prism/src/sparse/PS_StochTransient.cc +++ b/prism/src/sparse/PS_StochTransient.cc @@ -34,7 +34,7 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include "Measures.h" #include @@ -96,7 +96,7 @@ jdouble time // time bound n = odd->eoff + odd->toff; // build sparse matrix - PS_PrintToMainLog(env, "\nBuilding sparse matrix... "); + PN_PrintToMainLog(env, "\nBuilding sparse matrix... "); // if requested, try and build a "compact" version compact_tr = true; cmscsm = NULL; @@ -114,11 +114,11 @@ jdouble time // time bound } kbt = kb; // print some info - PS_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + PN_PrintToMainLog(env, "[n=%d, nnz=%ld%s] ", n, nnz, compact_tr?", compact":""); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // get vector of diagonals - PS_PrintToMainLog(env, "Creating vector for diagonals... "); + PN_PrintToMainLog(env, "Creating vector for diagonals... "); diags = compact_tr ? cmsc_negative_row_sums(cmscsm) : cm_negative_row_sums(cmsm); // try and convert to compact form if required compact_d = false; @@ -130,8 +130,8 @@ jdouble time // time bound } kb = (!compact_d) ? n*8.0/1024.0 : (diags_dist->num_dist*8.0+n*2.0)/1024.0; kbt += kb; - if (compact_d) PS_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); - PS_PrintMemoryToMainLog(env, "[", kb, "]\n"); + if (compact_d) PN_PrintToMainLog(env, "[dist=%d, compact] ", diags_dist->num_dist); + PN_PrintMemoryToMainLog(env, "[", kb, "]\n"); // find max diagonal element if (!compact_d) { @@ -161,7 +161,7 @@ jdouble time // time bound } // create solution/iteration vectors - PS_PrintToMainLog(env, "Allocating iteration vectors... "); + PN_PrintToMainLog(env, "Allocating iteration vectors... "); // for soln, we just use init (since we are free to modify/delete this vector) // we also report the memory usage of this vector here, even though it has already been created soln = init; @@ -169,22 +169,22 @@ jdouble time // time bound sum = new double[n]; kb = n*8.0/1024.0; kbt += 3*kb; - PS_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); + PN_PrintMemoryToMainLog(env, "[3 x ", kb, "]\n"); // print total memory usage - PS_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); + PN_PrintMemoryToMainLog(env, "TOTAL: [", kbt, "]\n"); // compute new termination criterion parameter (epsilon/8) term_crit_param_unif = term_crit_param / 8.0; // compute poisson probabilities (fox/glynn) - PS_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); + PN_PrintToMainLog(env, "\nUniformisation: q.t = %f x %f = %f\n", unif, time, unif * time); fgw = fox_glynn(unif * time, 1.0e-300, 1.0e+300, term_crit_param_unif); if (fgw.right < 0) throw "Overflow in Fox-Glynn computation (time bound too big?)"; for (i = fgw.left; i <= fgw.right; i++) { fgw.weights[i-fgw.left] /= fgw.total_weight; } - PS_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); + PN_PrintToMainLog(env, "Fox-Glynn: left = %ld, right = %ld\n", fgw.left, fgw.right); // set up vectors for (i = 0; i < n; i++) { @@ -200,7 +200,7 @@ jdouble time // time bound // start transient analysis done = false; num_iters = -1; - PS_PrintToMainLog(env, "\nStarting iterations...\n"); + PN_PrintToMainLog(env, "\nStarting iterations...\n"); // if necessary, do 0th element of summation (doesn't require any matrix powers) if (fgw.left == 0) for (i = 0; i < n; i++) { @@ -278,16 +278,16 @@ jdouble time // time bound } // add to sum for (i = 0; i < n; i++) sum[i] += weight * soln2[i]; - PS_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); + PN_PrintToMainLog(env, "\nSteady state detected at iteration %ld\n", iters); num_iters = iters; break; } // print occasional status update if ((util_cpu_time() - start3) > UPDATE_DELAY) { - PS_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); - if (do_ss_detect) PS_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); - PS_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); + PN_PrintToMainLog(env, "Iteration %ld (of %ld): ", iters, fgw.right); + if (do_ss_detect) PN_PrintToMainLog(env, "max %sdiff=%f, ", measure.isRelative()?"relative ":"", measure.value()); + PN_PrintToMainLog(env, "%.2f sec so far\n", ((double)(util_cpu_time() - start2)/1000)); start3 = util_cpu_time(); } @@ -309,15 +309,15 @@ jdouble time // time bound // print iters/timing info if (num_iters == -1) num_iters = fgw.right; - PS_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); + PN_PrintToMainLog(env, "\nIterative method: %ld iterations in %.2f seconds (average %.6f, setup %.2f)\n", num_iters, time_taken, time_for_iters/num_iters, time_for_setup); // catch exceptions: register error, free memory } catch (std::bad_alloc e) { - PS_SetErrorMessage("Out of memory"); + PN_SetErrorMessage("Out of memory"); if (sum) delete[] sum; sum = 0; } catch (const char *err) { - PS_SetErrorMessage("%s", err); + PN_SetErrorMessage("%s", err); if (sum) delete[] sum; sum = 0; } diff --git a/prism/src/sparse/PrismSparse.cc b/prism/src/sparse/PrismSparse.cc index f1509789d..97d65d119 100644 --- a/prism/src/sparse/PrismSparse.cc +++ b/prism/src/sparse/PrismSparse.cc @@ -33,227 +33,9 @@ #include #include #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" -#define MAX_LOG_STRING_LEN 1024 -#define MAX_ERR_STRING_LEN 1024 - -//------------------------------------------------------------------------------ -// sparse engine global variables -//------------------------------------------------------------------------------ - -// cudd manager -DdManager *ddman; - -// logs -// global refs to log classes -static jclass main_log_cls = NULL; -// global refs to log objects -static jobject main_log_obj = NULL; -// method ids for print method in logs -static jmethodID main_log_mid = NULL; -static jmethodID main_log_warn = NULL; - -// export stuff -int export_type; -FILE *export_file; -JNIEnv *export_env; -static bool exportIterations = false; - -// error message -static char error_message[MAX_ERR_STRING_LEN]; - -//------------------------------------------------------------------------------ -// cudd manager -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetCUDDManager(JNIEnv *env, jclass cls, jlong __jlongpointer ddm) -{ - ddman = jlong_to_DdManager(ddm); -} - -//------------------------------------------------------------------------------ -// logs -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetMainLog(JNIEnv *env, jclass cls, jobject log) -{ - // if main log has been set previously, we need to delete existing global refs first - if (main_log_obj != NULL) { - env->DeleteGlobalRef(main_log_cls); - main_log_cls = NULL; - env->DeleteGlobalRef(main_log_obj); - main_log_obj = NULL; - } - - // make a global reference to the log object - main_log_obj = env->NewGlobalRef(log); - // get the log class and make a global reference to it - main_log_cls = (jclass)env->NewGlobalRef(env->GetObjectClass(main_log_obj)); - // get the method id for the print method - main_log_mid = env->GetMethodID(main_log_cls, "print", "(Ljava/lang/String;)V"); - main_log_warn = env->GetMethodID(main_log_cls, "printWarning", "(Ljava/lang/String;)V"); -} - -//------------------------------------------------------------------------------ - -void PS_PrintToMainLog(JNIEnv *env, const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (env) - env->CallVoidMethod(main_log_obj, main_log_mid, env->NewStringUTF(full_string)); - else - printf("%s", full_string); -} - -//------------------------------------------------------------------------------ - -void PS_PrintWarningToMainLog(JNIEnv *env, const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (env) - env->CallVoidMethod(main_log_obj, main_log_warn, env->NewStringUTF(full_string)); - else - printf("\nWarning: %s\n", full_string); -} - -//------------------------------------------------------------------------------ - -// Print formatted memory info to main log - -void PS_PrintMemoryToMainLog(JNIEnv *env, const char *before, double mem, const char *after) -{ - char full_string[MAX_LOG_STRING_LEN]; - - if (mem > 1048576) - snprintf(full_string, MAX_LOG_STRING_LEN, "%s%.1f GB%s", before, mem/1048576.0, after); - else if (mem > 1024) - snprintf(full_string, MAX_LOG_STRING_LEN, "%s%.1f MB%s", before, mem/1024.0, after); - else - snprintf(full_string, MAX_LOG_STRING_LEN, "%s%.1f KB%s", before, mem, after); - - if (env) { - env->CallVoidMethod(main_log_obj, main_log_mid, env->NewStringUTF(full_string)); - } - else { - printf("%s", full_string); - } -} - -//------------------------------------------------------------------------------ -// export stuff -//------------------------------------------------------------------------------ - -// store export info globally -// returns 0 on failure, 1 otherwise - -int store_export_info(int type, jstring fn, JNIEnv *env) -{ - export_type = type; - if (fn) { - const char *filename = env->GetStringUTFChars(fn, 0); - export_file = fopen(filename, "w"); - if (!export_file) { - env->ReleaseStringUTFChars(fn, filename); - return 0; - } - env->ReleaseStringUTFChars(fn, filename); - } else { - export_file = NULL; - } - export_env = env; - return 1; -} - -//------------------------------------------------------------------------------ - -// export string (either to file or main log) - -void export_string(const char *str, ...) -{ - va_list argptr; - char full_string[MAX_LOG_STRING_LEN]; - - va_start(argptr, str); - vsnprintf(full_string, MAX_LOG_STRING_LEN, str, argptr); - va_end(argptr); - - if (export_file) { - fprintf(export_file, "%s", full_string); - } else { - PS_PrintToMainLog(export_env, "%s", full_string); - } -} - -//------------------------------------------------------------------------------ -// use steady-state detection? -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetDoSSDetect(JNIEnv *env, jclass cls, jboolean b) -{ - do_ss_detect = b; -} - -//------------------------------------------------------------------------------ -// error message handling -//------------------------------------------------------------------------------ - -void PS_SetErrorMessage(const char *str, ...) -{ - va_list argptr; - - va_start(argptr, str); - vsnprintf(error_message, MAX_ERR_STRING_LEN, str, argptr); - va_end(argptr); -} - -char *PS_GetErrorMessage() -{ - return error_message; -} - -JNIEXPORT jstring JNICALL Java_sparse_PrismSparse_PS_1GetErrorMessage(JNIEnv *env, jclass cls) -{ - return env->NewStringUTF(error_message); -} - - -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1SetExportIterations(JNIEnv *env, jclass cls, jboolean value) -{ - exportIterations = value; -} - -bool PS_GetFlagExportIterations() -{ - return exportIterations; -} - -//------------------------------------------------------------------------------ -// tidy up -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_sparse_PrismSparse_PS_1FreeGlobalRefs(JNIEnv *env, jclass cls) -{ - // delete all global references - env->DeleteGlobalRef(main_log_cls); - main_log_cls = NULL; - env->DeleteGlobalRef(main_log_obj); - main_log_obj = NULL; -} - //------------------------------------------------------------------------------ // Sparse matrix //------------------------------------------------------------------------------ diff --git a/prism/src/sparse/PrismSparse.java b/prism/src/sparse/PrismSparse.java index ad8278f3b..adea76691 100644 --- a/prism/src/sparse/PrismSparse.java +++ b/prism/src/sparse/PrismSparse.java @@ -66,21 +66,6 @@ public class PrismSparse // initialise/close down methods //---------------------------------------------------------------------------------------------- - public static void initialise(PrismLog mainLog) - { - setCUDDManager(); - setMainLog(mainLog); - } - - public static void closeDown() - { - // tidy up any JNI stuff - PS_FreeGlobalRefs(); - } - - // tidy up in jni (free global references) - private static native void PS_FreeGlobalRefs(); - /** * Check that number of reachable states is in a range that can be handled by * the sparse engine methods. @@ -93,50 +78,13 @@ private static void checkNumStates(ODDNode odd) throws PrismNotSupportedExceptio ODDUtils.checkInt(odd, "Currently, the sparse engine cannot handle models"); } - //---------------------------------------------------------------------------------------------- - // cudd manager - //---------------------------------------------------------------------------------------------- - - // cudd manager - - // jni method to set cudd manager for native code - private static native void PS_SetCUDDManager(long ddm); - public static void setCUDDManager() - { - PS_SetCUDDManager(JDD.GetCUDDManager()); - } - - //---------------------------------------------------------------------------------------------- - // logs - //---------------------------------------------------------------------------------------------- - - // main log - - // place to store main log for java code - private static PrismLog mainLog; - // jni method to set main log for native code - private static native void PS_SetMainLog(PrismLog log); - // method to set main log both in java and c++ - public static void setMainLog(PrismLog log) - { - mainLog = log; - PS_SetMainLog(log); - } - - private static native void PS_SetExportIterations(boolean value); - public static void SetExportIterations(boolean value) - { - PS_SetExportIterations(value); - } - //------------------------------------------------------------------------------ // error message //------------------------------------------------------------------------------ - private static native String PS_GetErrorMessage(); public static String getErrorMessage() { - return PS_GetErrorMessage(); + return PrismNative.PN_GetErrorMessage(); } /** diff --git a/prism/src/sparse/sparse.cc b/prism/src/sparse/sparse.cc index 568b5dc47..04e13daae 100644 --- a/prism/src/sparse/sparse.cc +++ b/prism/src/sparse/sparse.cc @@ -28,7 +28,7 @@ #include #include "dv.h" #include "sparse.h" -#include "PrismSparseGlob.h" +#include "PrismNativeGlob.h" #include //------------------------------------------------------------------------------ diff --git a/prism/src/sparse/sparse_adv.cc b/prism/src/sparse/sparse_adv.cc index 345e824d9..a614ad6ff 100644 --- a/prism/src/sparse/sparse_adv.cc +++ b/prism/src/sparse/sparse_adv.cc @@ -28,7 +28,7 @@ //#include //#include "dv.h" #include "sparse_adv.h" -//#include "PrismSparseGlob.h" +//#include "PrismNativeGlob.h" //#include //------------------------------------------------------------------------------ From f7a0de07c7cab647c6f69066928e2548fbaf0c24 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Wed, 4 Feb 2026 08:36:11 +0000 Subject: [PATCH 06/19] Merge prism{,mtbdd,sparse,hybrid} shared libraries and build from main Makefile. --- prism/Makefile | 46 ++++++++++++++++++---- prism/src/hybrid/Makefile | 57 --------------------------- prism/src/hybrid/PrismHybrid.java | 2 +- prism/src/mtbdd/Makefile | 56 --------------------------- prism/src/mtbdd/PrismMTBDD.java | 2 +- prism/src/prism/Makefile | 22 +---------- prism/src/sparse/Makefile | 58 ---------------------------- prism/src/sparse/NDSparseMatrix.java | 2 +- prism/src/sparse/PrismSparse.java | 2 +- 9 files changed, 44 insertions(+), 203 deletions(-) delete mode 100644 prism/src/hybrid/Makefile delete mode 100644 prism/src/mtbdd/Makefile delete mode 100644 prism/src/sparse/Makefile diff --git a/prism/Makefile b/prism/Makefile index a19c0c15f..de6a0301b 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -364,7 +364,7 @@ export CFLAGS CXXFLAGS LDFLAGS JFLAGS LIBPREFIX LIBSUFFIX # Main part of Makefile: Compiling PRISM # ########################################## -MAKE_DIRS = dd jdd odd dv prism mtbdd sparse hybrid +MAKE_DIRS = dd jdd odd dv prism EXT_PACKAGES = lpsolve55 lp_solve_5.5_java @@ -405,7 +405,7 @@ extpackages: checks # Compile main PRISM code # (we also do some preparatory checks, and build launch scripts afterwards) -prism: checks prism_java make_dirs bin_scripts +prism: checks prism_java make_dirs prism_lib bin_scripts # Compile all Java code, build JNI headers prism_java: $(JAVA_COMPILED_STAMP) @@ -454,6 +454,39 @@ make_dirs: dos2unix "$(PRISM_SRC_DIR)"/bin/prism.cygwin; \ fi +PRISM_LIB_DIRS := prism mtbdd sparse hybrid +PRISM_LIB_SRC_FILES := $(shell find $(foreach d,$(PRISM_LIB_DIRS),$(PRISM_SRC_DIR)/$(d)) -name "*.cc") +PRISM_LIB_OBJ_FILES := $(patsubst $(PRISM_SRC_DIR)/%.cc, $(PRISM_OBJ_DIR)/%.o, $(PRISM_LIB_SRC_FILES)) + +OLD_SHARED_LIBS := prismmtbdd prismsparse prismhybrid +OLD_SHARED_LIB_FILES := $(patsubst %, $(PRISM_LIB_DIR)/$(LIBPREFIX)%$(LIBSUFFIX), $(OLD_SHARED_LIBS)) + +INCLUDES = \ +-I$(CUDD_DIR)/include \ +-I"$(JAVA_JNI_H_DIR)" \ +-I"$(JAVA_JNI_MD_H_DIR)" \ +-I$(PRISM_INCLUDE_DIR) \ +-Iext/lpsolve55/include + +LIBRARIES = \ +-L$(PRISM_LIB_DIR) \ +-lodd \ +-ldd \ +-ldv \ +$(LIBMATH) \ +-llpsolve55 + +# Compile the main native shared library +prism_lib: prism_java $(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) + +$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX): $(PRISM_LIB_OBJ_FILES) + @echo "Linking shared library $@..." + $(LD) $(SHARED) $(LDFLAGS) -o $@ $^ $(LIBRARIES) + +$(PRISM_OBJ_DIR)/%.o: $(PRISM_SRC_DIR)/%.cc + @mkdir -p $(dir $@) + $(CXX) $(CXXFLAGS) -c $< -o $@ -I$(PRISM_INCLUDE_DIR)/jni $(INCLUDES) + # Compile (Java) unit tests $(JAVA_TESTS_COMPILED_STAMP): $(JAVA_TESTS_SRC_FILES) @mkdir -p $(JAVA_TESTS_CLASSES_DIR) @@ -684,6 +717,9 @@ clean: checks rm -rf $(JAVA_CLASSES_DIR) ; \ rm -f $(JAVA_SRC_FILES_LIST) $(JAVA_COMPILED_STAMP) ; \ rm -f $(JAVA_TESTS_SRC_FILES_LIST) $(JAVA_TESTS_COMPILED_STAMP) ; \ + rm -rf $(PRISM_OBJ_DIR) ; \ + rm -f $(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) ; \ + rm -f $(OLD_SHARED_LIB_FILES) ; \ rm -f $(PRISM_INCLUDE_DIR)/jni/*.h \ rm -f $(PRISM_LIB_DIR)/*jnilib; \ rm -f $(PRISM_LIB_DIR)/prism.jar; \ @@ -722,12 +758,6 @@ clean_dv: checks @(cd $(PRISM_SRC_DIR)/dv && $(MAKE) -s EXE="$(EXE)" clean) clean_prism: checks @(cd $(PRISM_SRC_DIR)/prism && $(MAKE) -s EXE="$(EXE)" clean) -clean_mtbdd: checks - @(cd $(PRISM_SRC_DIR)/mtbdd && $(MAKE) -s EXE="$(EXE)" clean) -clean_sparse: checks - @(cd $(PRISM_SRC_DIR)/sparse && $(MAKE) -s EXE="$(EXE)" clean) -clean_hybrid: checks - @(cd $(PRISM_SRC_DIR)/hybrid && $(MAKE) -s EXE="$(EXE)" clean) ############### # IDE support # diff --git a/prism/src/hybrid/Makefile b/prism/src/hybrid/Makefile deleted file mode 100644 index b94beeedc..000000000 --- a/prism/src/hybrid/Makefile +++ /dev/null @@ -1,57 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = hybrid -PRISM_DIR_REL = ../.. - -INCLUDES = \ --I$(PRISM_DIR_REL)/$(CUDD_DIR)/include \ --I"$(JAVA_JNI_H_DIR)" \ --I"$(JAVA_JNI_MD_H_DIR)" \ --I$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR) - -LIBRARIES = \ --L$(PRISM_DIR_REL)/$(PRISM_LIB_DIR) \ --lprismsparse \ --lodd \ --ldd \ --ldv \ --lprism \ -$(LIBMATH) - -CC_FILES = $(wildcard *.cc) -O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) - -default: all - -all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismhybrid$(LIBSUFFIX) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismhybrid$(LIBSUFFIX): $(O_FILES) - $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc - $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) - -clean: checks - @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismhybrid$(LIBSUFFIX) $(O_FILES) - -celan: clean - -################################################# diff --git a/prism/src/hybrid/PrismHybrid.java b/prism/src/hybrid/PrismHybrid.java index 8bad33360..9938df8d9 100644 --- a/prism/src/hybrid/PrismHybrid.java +++ b/prism/src/hybrid/PrismHybrid.java @@ -42,7 +42,7 @@ public class PrismHybrid static { try { - System.loadLibrary("prismhybrid"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); diff --git a/prism/src/mtbdd/Makefile b/prism/src/mtbdd/Makefile deleted file mode 100644 index 2039d94ef..000000000 --- a/prism/src/mtbdd/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = mtbdd -PRISM_DIR_REL = ../.. - -INCLUDES = \ --I$(PRISM_DIR_REL)/$(CUDD_DIR)/include \ --I"$(JAVA_JNI_H_DIR)" \ --I"$(JAVA_JNI_MD_H_DIR)" \ --I$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR) - -LIBRARIES = \ --L$(PRISM_DIR_REL)/$(PRISM_LIB_DIR) \ --lodd \ --ldd \ --ldv \ --lprism \ -$(LIBMATH) - -CC_FILES = $(wildcard *.cc) -O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) - -default: all - -all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismmtbdd$(LIBSUFFIX) - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismmtbdd$(LIBSUFFIX): $(O_FILES) - $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc - $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) - -clean: checks - @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismmtbdd$(LIBSUFFIX) $(O_FILES) - -celan: clean - -################################################# diff --git a/prism/src/mtbdd/PrismMTBDD.java b/prism/src/mtbdd/PrismMTBDD.java index 946706efb..ddd1964ce 100644 --- a/prism/src/mtbdd/PrismMTBDD.java +++ b/prism/src/mtbdd/PrismMTBDD.java @@ -44,7 +44,7 @@ public class PrismMTBDD static { try { - System.loadLibrary("prismmtbdd"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); diff --git a/prism/src/prism/Makefile b/prism/src/prism/Makefile index aeb9d3065..526979069 100644 --- a/prism/src/prism/Makefile +++ b/prism/src/prism/Makefile @@ -12,21 +12,9 @@ THIS_DIR = prism PRISM_DIR_REL = ../.. -INCLUDES = \ --I$(PRISM_DIR_REL)/$(CUDD_DIR)/include \ --I"$(JAVA_JNI_H_DIR)" \ --I"$(JAVA_JNI_MD_H_DIR)" \ --I$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR) - -LIBRARIES = \ -$(LIBMATH) - -CC_FILES = $(wildcard *.cc) -O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) - default: all -all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) +all: checks $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) # inhibit building in parallel (-j option) .NOTPARALLEL: @@ -37,12 +25,6 @@ checks: (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ fi; -$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX): $(O_FILES) - $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc - $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) - $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE): ngprism.c # For ngprism on Windows, link winsocket library (ws2_32) @if [ "$(EXE)" = "" ]; then \ @@ -52,7 +34,7 @@ $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE): ngprism.c fi; clean: checks - @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) $(O_FILES) $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) + @rm -f $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) celan: clean diff --git a/prism/src/sparse/Makefile b/prism/src/sparse/Makefile deleted file mode 100644 index b8b65a972..000000000 --- a/prism/src/sparse/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = sparse -PRISM_DIR_REL = ../.. - -INCLUDES = \ --I$(PRISM_DIR_REL)/$(CUDD_DIR)/include \ --I"$(JAVA_JNI_H_DIR)" \ --I"$(JAVA_JNI_MD_H_DIR)" \ --I$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR) \ --I$(PRISM_DIR_REL)/ext/lpsolve55/include - -LIBRARIES = \ --L$(PRISM_DIR_REL)/$(PRISM_LIB_DIR) \ --lodd \ --ldd \ --ldv \ --lprism \ -$(LIBMATH) \ --llpsolve55 - -CC_FILES = $(wildcard *.cc) -O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) - -default: all - -all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismsparse$(LIBSUFFIX) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismsparse$(LIBSUFFIX): $(O_FILES) - $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc - $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) - -clean: checks - @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)prismsparse$(LIBSUFFIX) $(O_FILES) - -celan: clean - -################################################# diff --git a/prism/src/sparse/NDSparseMatrix.java b/prism/src/sparse/NDSparseMatrix.java index 7924c639a..f2b42ee08 100644 --- a/prism/src/sparse/NDSparseMatrix.java +++ b/prism/src/sparse/NDSparseMatrix.java @@ -50,7 +50,7 @@ public class NDSparseMatrix static { try { - System.loadLibrary("prismsparse"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); System.exit(1); diff --git a/prism/src/sparse/PrismSparse.java b/prism/src/sparse/PrismSparse.java index adea76691..587fb0c7d 100644 --- a/prism/src/sparse/PrismSparse.java +++ b/prism/src/sparse/PrismSparse.java @@ -54,7 +54,7 @@ public class PrismSparse static { try { - System.loadLibrary("prismsparse"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); From be0108285268409c07a3008c6d92dd159b691ef8 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Wed, 4 Feb 2026 20:40:11 +0000 Subject: [PATCH 07/19] Build nprism from main Makefile. prism/Makefile is now redundant and removed. --- prism/Makefile | 23 +++++++++++++++++----- prism/src/prism/Makefile | 41 ---------------------------------------- 2 files changed, 18 insertions(+), 46 deletions(-) delete mode 100644 prism/src/prism/Makefile diff --git a/prism/Makefile b/prism/Makefile index de6a0301b..5d217184d 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -364,7 +364,7 @@ export CFLAGS CXXFLAGS LDFLAGS JFLAGS LIBPREFIX LIBSUFFIX # Main part of Makefile: Compiling PRISM # ########################################## -MAKE_DIRS = dd jdd odd dv prism +MAKE_DIRS = dd jdd odd dv EXT_PACKAGES = lpsolve55 lp_solve_5.5_java @@ -405,7 +405,7 @@ extpackages: checks # Compile main PRISM code # (we also do some preparatory checks, and build launch scripts afterwards) -prism: checks prism_java make_dirs prism_lib bin_scripts +prism: checks prism_java make_dirs prism_lib prism_ng bin_scripts # Compile all Java code, build JNI headers prism_java: $(JAVA_COMPILED_STAMP) @@ -455,7 +455,10 @@ make_dirs: fi PRISM_LIB_DIRS := prism mtbdd sparse hybrid -PRISM_LIB_SRC_FILES := $(shell find $(foreach d,$(PRISM_LIB_DIRS),$(PRISM_SRC_DIR)/$(d)) -name "*.cc") + +PRISM_LIB_EXCLUDE_FILES := +PRISM_LIB_ALL_SRC_FILES := $(shell find $(foreach d,$(PRISM_LIB_DIRS),$(PRISM_SRC_DIR)/$(d)) -name "*.cc") +PRISM_LIB_SRC_FILES := $(filter-out $(PRISM_LIB_EXCLUDE_FILES), $(PRISM_LIB_ALL_SRC_FILES)) PRISM_LIB_OBJ_FILES := $(patsubst $(PRISM_SRC_DIR)/%.cc, $(PRISM_OBJ_DIR)/%.o, $(PRISM_LIB_SRC_FILES)) OLD_SHARED_LIBS := prismmtbdd prismsparse prismhybrid @@ -487,6 +490,18 @@ $(PRISM_OBJ_DIR)/%.o: $(PRISM_SRC_DIR)/%.cc @mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) -c $< -o $@ -I$(PRISM_INCLUDE_DIR)/jni $(INCLUDES) +# Compile ngprism +# (on Windows, link winsocket library, ws2_32) +prism_ng: $(PRISM_OBJ_DIR)/prism/ngprism$(EXE) + +$(PRISM_OBJ_DIR)/prism/ngprism$(EXE): $(PRISM_SRC_DIR)/prism/ngprism.c + @echo "Bilding $@..." + @if [ "$(EXE)" = "" ]; then \ + $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $<; \ + else \ + $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< -lws2_32; \ + fi; + # Compile (Java) unit tests $(JAVA_TESTS_COMPILED_STAMP): $(JAVA_TESTS_SRC_FILES) @mkdir -p $(JAVA_TESTS_CLASSES_DIR) @@ -756,8 +771,6 @@ clean_odd: checks @(cd $(PRISM_SRC_DIR)/odd && $(MAKE) -s EXE="$(EXE)" clean) clean_dv: checks @(cd $(PRISM_SRC_DIR)/dv && $(MAKE) -s EXE="$(EXE)" clean) -clean_prism: checks - @(cd $(PRISM_SRC_DIR)/prism && $(MAKE) -s EXE="$(EXE)" clean) ############### # IDE support # diff --git a/prism/src/prism/Makefile b/prism/src/prism/Makefile deleted file mode 100644 index 526979069..000000000 --- a/prism/src/prism/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = prism -PRISM_DIR_REL = ../.. - -default: all - -all: checks $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE): ngprism.c -# For ngprism on Windows, link winsocket library (ws2_32) - @if [ "$(EXE)" = "" ]; then \ - $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $<; \ - else \ - $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< -lws2_32; \ - fi; - -clean: checks - @rm -f $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/ngprism$(EXE) - -celan: clean - -################################################# From e6a4794e994df822fe8c74d754063614b7b27039 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Wed, 4 Feb 2026 22:21:00 +0000 Subject: [PATCH 08/19] Merge dv library into single prism shared library. --- prism/Makefile | 11 +++--- prism/include/DoubleVectorGlob.h | 36 ------------------- prism/include/jni/dv_DoubleVector.h | 8 ----- prism/src/dv/DoubleVector.cc | 21 +---------- prism/src/dv/DoubleVector.java | 16 +-------- prism/src/dv/IntegerVector.cc | 2 +- prism/src/dv/IntegerVector.java | 2 +- prism/src/dv/Makefile | 54 ----------------------------- prism/src/prism/Prism.java | 1 - 9 files changed, 8 insertions(+), 143 deletions(-) delete mode 100644 prism/include/DoubleVectorGlob.h delete mode 100644 prism/src/dv/Makefile diff --git a/prism/Makefile b/prism/Makefile index 5d217184d..2b2d052d9 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -364,7 +364,7 @@ export CFLAGS CXXFLAGS LDFLAGS JFLAGS LIBPREFIX LIBSUFFIX # Main part of Makefile: Compiling PRISM # ########################################## -MAKE_DIRS = dd jdd odd dv +MAKE_DIRS = dd jdd odd EXT_PACKAGES = lpsolve55 lp_solve_5.5_java @@ -431,7 +431,7 @@ parser_force: # Compile each (top-level) source directory separately make_dirs: - @mkdir -p bin $(PRISM_OBJ_DIR)/dd $(PRISM_OBJ_DIR)/jdd $(PRISM_OBJ_DIR)/odd $(PRISM_OBJ_DIR)/dv $(PRISM_OBJ_DIR)/prism $(PRISM_OBJ_DIR)/mtbdd $(PRISM_OBJ_DIR)/sparse $(PRISM_OBJ_DIR)/hybrid $(PRISM_OBJ_DIR)/simulator + @mkdir -p bin $(PRISM_OBJ_DIR)/dd $(PRISM_OBJ_DIR)/jdd $(PRISM_OBJ_DIR)/odd @for dir in $(MAKE_DIRS); do \ echo Making $(PRISM_SRC_DIR)/$$dir ...; \ (cd $(PRISM_SRC_DIR)/$$dir && \ @@ -454,14 +454,14 @@ make_dirs: dos2unix "$(PRISM_SRC_DIR)"/bin/prism.cygwin; \ fi -PRISM_LIB_DIRS := prism mtbdd sparse hybrid +PRISM_LIB_DIRS := dv prism mtbdd sparse hybrid PRISM_LIB_EXCLUDE_FILES := PRISM_LIB_ALL_SRC_FILES := $(shell find $(foreach d,$(PRISM_LIB_DIRS),$(PRISM_SRC_DIR)/$(d)) -name "*.cc") PRISM_LIB_SRC_FILES := $(filter-out $(PRISM_LIB_EXCLUDE_FILES), $(PRISM_LIB_ALL_SRC_FILES)) PRISM_LIB_OBJ_FILES := $(patsubst $(PRISM_SRC_DIR)/%.cc, $(PRISM_OBJ_DIR)/%.o, $(PRISM_LIB_SRC_FILES)) -OLD_SHARED_LIBS := prismmtbdd prismsparse prismhybrid +OLD_SHARED_LIBS := dv prismmtbdd prismsparse prismhybrid OLD_SHARED_LIB_FILES := $(patsubst %, $(PRISM_LIB_DIR)/$(LIBPREFIX)%$(LIBSUFFIX), $(OLD_SHARED_LIBS)) INCLUDES = \ @@ -475,7 +475,6 @@ LIBRARIES = \ -L$(PRISM_LIB_DIR) \ -lodd \ -ldd \ --ldv \ $(LIBMATH) \ -llpsolve55 @@ -769,8 +768,6 @@ clean_jdd: checks @(cd $(PRISM_SRC_DIR)/jdd && $(MAKE) -s EXE="$(EXE)" clean) clean_odd: checks @(cd $(PRISM_SRC_DIR)/odd && $(MAKE) -s EXE="$(EXE)" clean) -clean_dv: checks - @(cd $(PRISM_SRC_DIR)/dv && $(MAKE) -s EXE="$(EXE)" clean) ############### # IDE support # diff --git a/prism/include/DoubleVectorGlob.h b/prism/include/DoubleVectorGlob.h deleted file mode 100644 index 66f5584d2..000000000 --- a/prism/include/DoubleVectorGlob.h +++ /dev/null @@ -1,36 +0,0 @@ -//============================================================================== -// -// Copyright (c) 2002- -// Authors: -// * Dave Parker (University of Oxford, formerly University of Birmingham) -// -//------------------------------------------------------------------------------ -// -// This file is part of PRISM. -// -// PRISM 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. -// -// PRISM 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 PRISM; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -//============================================================================== - -#include "PrismNativeGlob.h" - -//------------------------------------------------------------------------------ - -// externs to global variables - -// cudd manager -extern DdManager *ddman; - -//------------------------------------------------------------------------------ diff --git a/prism/include/jni/dv_DoubleVector.h b/prism/include/jni/dv_DoubleVector.h index 7c62f7010..40ac78cfe 100644 --- a/prism/include/jni/dv_DoubleVector.h +++ b/prism/include/jni/dv_DoubleVector.h @@ -7,14 +7,6 @@ #ifdef __cplusplus extern "C" { #endif -/* - * Class: dv_DoubleVector - * Method: DV_SetCUDDManager - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_dv_DoubleVector_DV_1SetCUDDManager - (JNIEnv *, jclass, jlong); - /* * Class: dv_DoubleVector * Method: DV_CreateZeroVector diff --git a/prism/src/dv/DoubleVector.cc b/prism/src/dv/DoubleVector.cc index df220d902..56625b713 100644 --- a/prism/src/dv/DoubleVector.cc +++ b/prism/src/dv/DoubleVector.cc @@ -27,31 +27,12 @@ #include "dv.h" #include "DoubleVector.h" -#include "DoubleVectorGlob.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include #include -//------------------------------------------------------------------------------ - -// cudd manager -DdManager *ddman; - -//------------------------------------------------------------------------------ -// cudd manager -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_dv_DoubleVector_DV_1SetCUDDManager -( -JNIEnv *env, -jclass cls, -jlong __jlongpointer ddm -) -{ - ddman = jlong_to_DdManager(ddm); -} - //------------------------------------------------------------------------------ // DoubleVector methods //------------------------------------------------------------------------------ diff --git a/prism/src/dv/DoubleVector.java b/prism/src/dv/DoubleVector.java index 0c683ecdc..4530e6f8d 100644 --- a/prism/src/dv/DoubleVector.java +++ b/prism/src/dv/DoubleVector.java @@ -43,7 +43,7 @@ public class DoubleVector static { try { - System.loadLibrary("dv"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); @@ -51,20 +51,6 @@ public class DoubleVector } } - //------------------------------------------------------------------------------ - // CUDD manager - //------------------------------------------------------------------------------ - - // CUDD manager - - // JNI method to set CUDD manager for native code - public static void setCUDDManager() - { - DV_SetCUDDManager(JDD.GetCUDDManager()); - } - - private static native void DV_SetCUDDManager(long ddm); - //------------------------------------------------------------------------------ // Instance variables/methods //------------------------------------------------------------------------------ diff --git a/prism/src/dv/IntegerVector.cc b/prism/src/dv/IntegerVector.cc index 9cf3d8241..50ef8ae17 100644 --- a/prism/src/dv/IntegerVector.cc +++ b/prism/src/dv/IntegerVector.cc @@ -26,8 +26,8 @@ //============================================================================== #include "iv.h" -#include "DoubleVectorGlob.h" #include "IntegerVector.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" #include diff --git a/prism/src/dv/IntegerVector.java b/prism/src/dv/IntegerVector.java index be1627b32..e228b45cf 100644 --- a/prism/src/dv/IntegerVector.java +++ b/prism/src/dv/IntegerVector.java @@ -42,7 +42,7 @@ public class IntegerVector static { try { - System.loadLibrary("dv"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); diff --git a/prism/src/dv/Makefile b/prism/src/dv/Makefile deleted file mode 100644 index 97b8adb9a..000000000 --- a/prism/src/dv/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = dv -PRISM_DIR_REL = ../.. - -INCLUDES = \ --I$(PRISM_DIR_REL)/$(CUDD_DIR)/include \ --I"$(JAVA_JNI_H_DIR)" \ --I"$(JAVA_JNI_MD_H_DIR)" \ --I$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR) - -LIBRARIES = \ --L$(PRISM_DIR_REL)/$(PRISM_LIB_DIR) \ --lodd \ --ldd \ -$(LIBMATH) - -CC_FILES = $(wildcard *.cc) -O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) - -default: all - -all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dv$(LIBSUFFIX) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dv$(LIBSUFFIX): $(O_FILES) - $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc - $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) - -clean: checks - @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dv$(LIBSUFFIX) $(O_FILES) - -celan: clean - -################################################# diff --git a/prism/src/prism/Prism.java b/prism/src/prism/Prism.java index 09e21bcd9..4f90851fc 100644 --- a/prism/src/prism/Prism.java +++ b/prism/src/prism/Prism.java @@ -1254,7 +1254,6 @@ public void initialise() throws PrismException PrismNative.initialise(this, mainLog); // set cudd manager in other packages - DoubleVector.setCUDDManager(); ODDUtils.setCUDDManager(); } From 4428eee9355416eabf581d3ee206e661ce9456c1 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Wed, 4 Feb 2026 22:35:54 +0000 Subject: [PATCH 09/19] Merge odd library into single prism shared library. --- prism/Makefile | 11 +++---- prism/include/jni/odd_ODDUtils.h | 8 ----- prism/src/odd/Makefile | 52 -------------------------------- prism/src/odd/ODDUtils.cc | 15 +-------- prism/src/odd/ODDUtils.java | 15 +-------- prism/src/prism/Prism.java | 3 -- 6 files changed, 6 insertions(+), 98 deletions(-) delete mode 100644 prism/src/odd/Makefile diff --git a/prism/Makefile b/prism/Makefile index 2b2d052d9..b71906eb0 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -364,7 +364,7 @@ export CFLAGS CXXFLAGS LDFLAGS JFLAGS LIBPREFIX LIBSUFFIX # Main part of Makefile: Compiling PRISM # ########################################## -MAKE_DIRS = dd jdd odd +MAKE_DIRS = dd jdd EXT_PACKAGES = lpsolve55 lp_solve_5.5_java @@ -431,7 +431,7 @@ parser_force: # Compile each (top-level) source directory separately make_dirs: - @mkdir -p bin $(PRISM_OBJ_DIR)/dd $(PRISM_OBJ_DIR)/jdd $(PRISM_OBJ_DIR)/odd + @mkdir -p bin $(PRISM_OBJ_DIR)/dd $(PRISM_OBJ_DIR)/jdd @for dir in $(MAKE_DIRS); do \ echo Making $(PRISM_SRC_DIR)/$$dir ...; \ (cd $(PRISM_SRC_DIR)/$$dir && \ @@ -454,14 +454,14 @@ make_dirs: dos2unix "$(PRISM_SRC_DIR)"/bin/prism.cygwin; \ fi -PRISM_LIB_DIRS := dv prism mtbdd sparse hybrid +PRISM_LIB_DIRS := odd dv prism mtbdd sparse hybrid PRISM_LIB_EXCLUDE_FILES := PRISM_LIB_ALL_SRC_FILES := $(shell find $(foreach d,$(PRISM_LIB_DIRS),$(PRISM_SRC_DIR)/$(d)) -name "*.cc") PRISM_LIB_SRC_FILES := $(filter-out $(PRISM_LIB_EXCLUDE_FILES), $(PRISM_LIB_ALL_SRC_FILES)) PRISM_LIB_OBJ_FILES := $(patsubst $(PRISM_SRC_DIR)/%.cc, $(PRISM_OBJ_DIR)/%.o, $(PRISM_LIB_SRC_FILES)) -OLD_SHARED_LIBS := dv prismmtbdd prismsparse prismhybrid +OLD_SHARED_LIBS := odd dv prismmtbdd prismsparse prismhybrid OLD_SHARED_LIB_FILES := $(patsubst %, $(PRISM_LIB_DIR)/$(LIBPREFIX)%$(LIBSUFFIX), $(OLD_SHARED_LIBS)) INCLUDES = \ @@ -473,7 +473,6 @@ INCLUDES = \ LIBRARIES = \ -L$(PRISM_LIB_DIR) \ --lodd \ -ldd \ $(LIBMATH) \ -llpsolve55 @@ -766,8 +765,6 @@ clean_dd: checks @(cd $(PRISM_SRC_DIR)/dd && $(MAKE) -s EXE="$(EXE)" clean) clean_jdd: checks @(cd $(PRISM_SRC_DIR)/jdd && $(MAKE) -s EXE="$(EXE)" clean) -clean_odd: checks - @(cd $(PRISM_SRC_DIR)/odd && $(MAKE) -s EXE="$(EXE)" clean) ############### # IDE support # diff --git a/prism/include/jni/odd_ODDUtils.h b/prism/include/jni/odd_ODDUtils.h index a83395fa3..23528b8eb 100644 --- a/prism/include/jni/odd_ODDUtils.h +++ b/prism/include/jni/odd_ODDUtils.h @@ -7,14 +7,6 @@ #ifdef __cplusplus extern "C" { #endif -/* - * Class: odd_ODDUtils - * Method: ODD_SetCUDDManager - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_odd_ODDUtils_ODD_1SetCUDDManager - (JNIEnv *, jclass, jlong); - /* * Class: odd_ODDUtils * Method: ODD_BuildODD diff --git a/prism/src/odd/Makefile b/prism/src/odd/Makefile deleted file mode 100644 index 068bd0286..000000000 --- a/prism/src/odd/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = odd -PRISM_DIR_REL = ../.. - -INCLUDES = \ --I$(PRISM_DIR_REL)/$(CUDD_DIR)/include \ --I"$(JAVA_JNI_H_DIR)" \ --I"$(JAVA_JNI_MD_H_DIR)" \ --I$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR) - -LIBRARIES = \ --L$(PRISM_DIR_REL)/$(PRISM_LIB_DIR) \ --ldd - -CC_FILES = $(wildcard *.cc) -O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) - -default: all - -all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)odd$(LIBSUFFIX) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)odd$(LIBSUFFIX): $(O_FILES) - $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc - $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) - -clean: checks - @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)odd$(LIBSUFFIX) $(O_FILES) - -celan: clean - -################################################# diff --git a/prism/src/odd/ODDUtils.cc b/prism/src/odd/ODDUtils.cc index be7483a90..1eda4dd38 100644 --- a/prism/src/odd/ODDUtils.cc +++ b/prism/src/odd/ODDUtils.cc @@ -26,22 +26,9 @@ #include "odd.h" #include "ODDUtils.h" +#include "PrismNativeGlob.h" #include "jnipointer.h" -//------------------------------------------------------------------------------ - -// cudd manager -DdManager *ddman; - -//------------------------------------------------------------------------------ -// cudd manager -//------------------------------------------------------------------------------ - -JNIEXPORT void JNICALL Java_odd_ODDUtils_ODD_1SetCUDDManager(JNIEnv *env, jclass cls, jlong __jlongpointer ddm) -{ - ddman = jlong_to_DdManager(ddm); -} - //------------------------------------------------------------------------------ // build odd //------------------------------------------------------------------------------ diff --git a/prism/src/odd/ODDUtils.java b/prism/src/odd/ODDUtils.java index d149476a2..c12751a59 100644 --- a/prism/src/odd/ODDUtils.java +++ b/prism/src/odd/ODDUtils.java @@ -39,7 +39,7 @@ public class ODDUtils static { try { - System.loadLibrary("odd"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); @@ -47,19 +47,6 @@ public class ODDUtils } } - //------------------------------------------------------------------------------ - // cudd manager - //------------------------------------------------------------------------------ - - // cudd manager - - // jni method to set cudd manager for native code - private static native void ODD_SetCUDDManager(long ddm); - public static void setCUDDManager() - { - ODD_SetCUDDManager(JDD.GetCUDDManager()); - } - //------------------------------------------------------------------------------ // JNI wrappers //------------------------------------------------------------------------------ diff --git a/prism/src/prism/Prism.java b/prism/src/prism/Prism.java index 4f90851fc..b7fa1022b 100644 --- a/prism/src/prism/Prism.java +++ b/prism/src/prism/Prism.java @@ -1252,9 +1252,6 @@ public void initialise() throws PrismException // initialise libraries/engines PrismNative.initialise(this, mainLog); - - // set cudd manager in other packages - ODDUtils.setCUDDManager(); } /** From 50e8d98ca524a731bf64f3b19d0a5c70d6ab666e Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Thu, 5 Feb 2026 08:03:10 +0000 Subject: [PATCH 10/19] Merge jdd library into single prism shared library. --- prism/Makefile | 10 +++---- prism/include/PrismNativeGlob.h | 3 +- prism/src/jdd/JDD.cc | 2 ++ prism/src/jdd/JDD.java | 2 +- prism/src/jdd/JDDNode.java | 2 +- prism/src/jdd/JDDVars.java | 2 +- prism/src/jdd/Makefile | 52 --------------------------------- prism/src/prism/PrismNative.cc | 3 +- 8 files changed, 13 insertions(+), 63 deletions(-) delete mode 100644 prism/src/jdd/Makefile diff --git a/prism/Makefile b/prism/Makefile index b71906eb0..659992e5b 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -364,7 +364,7 @@ export CFLAGS CXXFLAGS LDFLAGS JFLAGS LIBPREFIX LIBSUFFIX # Main part of Makefile: Compiling PRISM # ########################################## -MAKE_DIRS = dd jdd +MAKE_DIRS = dd EXT_PACKAGES = lpsolve55 lp_solve_5.5_java @@ -431,7 +431,7 @@ parser_force: # Compile each (top-level) source directory separately make_dirs: - @mkdir -p bin $(PRISM_OBJ_DIR)/dd $(PRISM_OBJ_DIR)/jdd + @mkdir -p bin $(PRISM_OBJ_DIR)/dd @for dir in $(MAKE_DIRS); do \ echo Making $(PRISM_SRC_DIR)/$$dir ...; \ (cd $(PRISM_SRC_DIR)/$$dir && \ @@ -454,14 +454,14 @@ make_dirs: dos2unix "$(PRISM_SRC_DIR)"/bin/prism.cygwin; \ fi -PRISM_LIB_DIRS := odd dv prism mtbdd sparse hybrid +PRISM_LIB_DIRS := jdd odd dv prism mtbdd sparse hybrid PRISM_LIB_EXCLUDE_FILES := PRISM_LIB_ALL_SRC_FILES := $(shell find $(foreach d,$(PRISM_LIB_DIRS),$(PRISM_SRC_DIR)/$(d)) -name "*.cc") PRISM_LIB_SRC_FILES := $(filter-out $(PRISM_LIB_EXCLUDE_FILES), $(PRISM_LIB_ALL_SRC_FILES)) PRISM_LIB_OBJ_FILES := $(patsubst $(PRISM_SRC_DIR)/%.cc, $(PRISM_OBJ_DIR)/%.o, $(PRISM_LIB_SRC_FILES)) -OLD_SHARED_LIBS := odd dv prismmtbdd prismsparse prismhybrid +OLD_SHARED_LIBS := jdd odd dv prismmtbdd prismsparse prismhybrid OLD_SHARED_LIB_FILES := $(patsubst %, $(PRISM_LIB_DIR)/$(LIBPREFIX)%$(LIBSUFFIX), $(OLD_SHARED_LIBS)) INCLUDES = \ @@ -763,8 +763,6 @@ clean_binary: # Clear individual directories (sometimes useful) clean_dd: checks @(cd $(PRISM_SRC_DIR)/dd && $(MAKE) -s EXE="$(EXE)" clean) -clean_jdd: checks - @(cd $(PRISM_SRC_DIR)/jdd && $(MAKE) -s EXE="$(EXE)" clean) ############### # IDE support # diff --git a/prism/include/PrismNativeGlob.h b/prism/include/PrismNativeGlob.h index 615fe82fc..8b06c22d6 100644 --- a/prism/include/PrismNativeGlob.h +++ b/prism/include/PrismNativeGlob.h @@ -116,7 +116,8 @@ const int REACH_FRONTIER = 2; EXPORT extern jclass prism_cls; EXPORT extern jobject prism_obj; -// cudd manager +// CUDD manager: stored so that it doesn't have to be passed to every CUDD/dd call. +// Set via (JNI) PN_SetCUDDManager, cached here and accessible across all native code. EXPORT extern DdManager *ddman; // Export stuff: diff --git a/prism/src/jdd/JDD.cc b/prism/src/jdd/JDD.cc index 080d9fdba..e831aab82 100644 --- a/prism/src/jdd/JDD.cc +++ b/prism/src/jdd/JDD.cc @@ -38,6 +38,8 @@ //------------------------------------------------------------------------------ +// CUDD manager: cached here locally, so that it doesn't have to be passed to every +// CUDD/dd call. Extracted from underlying CUDD lib on call to InitialiseCUDD static DdManager *ddman; //------------------------------------------------------------------------------ diff --git a/prism/src/jdd/JDD.java b/prism/src/jdd/JDD.java index 8ea23fc7c..71eb58aed 100644 --- a/prism/src/jdd/JDD.java +++ b/prism/src/jdd/JDD.java @@ -149,7 +149,7 @@ public static class CuddOutOfMemoryException extends RuntimeException { static { try { - System.loadLibrary("jdd"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); diff --git a/prism/src/jdd/JDDNode.java b/prism/src/jdd/JDDNode.java index 13ae3025e..a2f8313d4 100644 --- a/prism/src/jdd/JDDNode.java +++ b/prism/src/jdd/JDDNode.java @@ -42,7 +42,7 @@ public class JDDNode static { try { - System.loadLibrary("jdd"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); diff --git a/prism/src/jdd/JDDVars.java b/prism/src/jdd/JDDVars.java index 36b961dab..ad239598d 100644 --- a/prism/src/jdd/JDDVars.java +++ b/prism/src/jdd/JDDVars.java @@ -53,7 +53,7 @@ public class JDDVars implements Iterable static { try { - System.loadLibrary("jdd"); + System.loadLibrary("prism"); } catch (UnsatisfiedLinkError e) { System.out.println(e); diff --git a/prism/src/jdd/Makefile b/prism/src/jdd/Makefile deleted file mode 100644 index daa2f3110..000000000 --- a/prism/src/jdd/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = jdd -PRISM_DIR_REL = ../.. - -INCLUDES = \ --I$(PRISM_DIR_REL)/$(CUDD_DIR)/include \ --I"$(JAVA_JNI_H_DIR)" \ --I"$(JAVA_JNI_MD_H_DIR)" \ --I$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR) - -LIBRARIES = \ --L$(PRISM_DIR_REL)/$(PRISM_LIB_DIR) \ --ldd - -CC_FILES = $(wildcard *.cc) -O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) - -default: all - -all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)jdd$(LIBSUFFIX) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)jdd$(LIBSUFFIX): $(O_FILES) - $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc - $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) - -clean: checks - @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)jdd$(LIBSUFFIX) $(O_FILES) - -celan: clean - -################################################# diff --git a/prism/src/prism/PrismNative.cc b/prism/src/prism/PrismNative.cc index 3aadd144a..dec0eb0f7 100644 --- a/prism/src/prism/PrismNative.cc +++ b/prism/src/prism/PrismNative.cc @@ -37,7 +37,8 @@ EXPORT jclass prism_cls = NULL; EXPORT jobject prism_obj = NULL; -// cudd manager +// CUDD manager: stored so that it doesn't have to be passed to every CUDD/dd call. +// Set via (JNI) PN_SetCUDDManager, cached here and accessible across all native code. DdManager *ddman; // error messages From d0270bac5c9ae106bdaead138089caae3188120b Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Thu, 5 Feb 2026 08:26:38 +0000 Subject: [PATCH 11/19] Merge dd library into single prism shared library. --- prism/Makefile | 74 ++++++++++++++++--------------------------- prism/src/dd/Makefile | 53 ------------------------------- 2 files changed, 27 insertions(+), 100 deletions(-) delete mode 100644 prism/src/dd/Makefile diff --git a/prism/Makefile b/prism/Makefile index 659992e5b..9fcb825e5 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -364,8 +364,6 @@ export CFLAGS CXXFLAGS LDFLAGS JFLAGS LIBPREFIX LIBSUFFIX # Main part of Makefile: Compiling PRISM # ########################################## -MAKE_DIRS = dd - EXT_PACKAGES = lpsolve55 lp_solve_5.5_java .PHONY: clean javadoc tests release @@ -405,7 +403,7 @@ extpackages: checks # Compile main PRISM code # (we also do some preparatory checks, and build launch scripts afterwards) -prism: checks prism_java make_dirs prism_lib prism_ng bin_scripts +prism: checks prism_java prism_lib prism_ng bin_scripts # Compile all Java code, build JNI headers prism_java: $(JAVA_COMPILED_STAMP) @@ -429,23 +427,6 @@ parser_force: @ echo "Forcing parser rebuild" @$(JAVACC) $(JAVA_PARSER_JJ) -# Compile each (top-level) source directory separately -make_dirs: - @mkdir -p bin $(PRISM_OBJ_DIR)/dd - @for dir in $(MAKE_DIRS); do \ - echo Making $(PRISM_SRC_DIR)/$$dir ...; \ - (cd $(PRISM_SRC_DIR)/$$dir && \ - $(MAKE) \ - CUDD_DIR="$(CUDD_DIR)" \ - JAVA_INCLUDES="$(JAVA_INCLUDES)" \ - JAVA_JNI_H_DIR="$(JAVA_JNI_H_DIR)" \ - JAVA_JNI_MD_H_DIR="$(JAVA_JNI_MD_H_DIR)" \ - SHARED="$(SHARED)" \ - EXE="$(EXE)" \ - LIBMATH="$(LIBMATH)" \ - CLASSPATHSEP="$(CLASSPATHSEP)") \ - || exit 1; \ - done # On Windows, convert the generated JNI headers using dos2unix # and any scripts to be run from Cywgin, in case extracted with CRLF endings. @if [ "$(OSTYPE)" = "cygwin" ]; then \ @@ -454,14 +435,14 @@ make_dirs: dos2unix "$(PRISM_SRC_DIR)"/bin/prism.cygwin; \ fi -PRISM_LIB_DIRS := jdd odd dv prism mtbdd sparse hybrid +PRISM_LIB_DIRS := dd jdd odd dv prism mtbdd sparse hybrid -PRISM_LIB_EXCLUDE_FILES := +PRISM_LIB_EXCLUDE_FILES := $(PRISM_SRC_DIR)/dd/dd_test.cc PRISM_LIB_ALL_SRC_FILES := $(shell find $(foreach d,$(PRISM_LIB_DIRS),$(PRISM_SRC_DIR)/$(d)) -name "*.cc") PRISM_LIB_SRC_FILES := $(filter-out $(PRISM_LIB_EXCLUDE_FILES), $(PRISM_LIB_ALL_SRC_FILES)) PRISM_LIB_OBJ_FILES := $(patsubst $(PRISM_SRC_DIR)/%.cc, $(PRISM_OBJ_DIR)/%.o, $(PRISM_LIB_SRC_FILES)) -OLD_SHARED_LIBS := jdd odd dv prismmtbdd prismsparse prismhybrid +OLD_SHARED_LIBS := dd jdd odd dv prismmtbdd prismsparse prismhybrid OLD_SHARED_LIB_FILES := $(patsubst %, $(PRISM_LIB_DIR)/$(LIBPREFIX)%$(LIBSUFFIX), $(OLD_SHARED_LIBS)) INCLUDES = \ @@ -473,7 +454,8 @@ INCLUDES = \ LIBRARIES = \ -L$(PRISM_LIB_DIR) \ --ldd \ +-L$(CUDD_DIR)/lib \ +-lcudd \ $(LIBMATH) \ -llpsolve55 @@ -712,8 +694,16 @@ build_release_source: PRISM_CLASSPATH = "$(JAVA_CLASSES_DIR)$(CLASSPATHSEP)$(PRISM_LIB_DIR)/*" -javadoc: - @JAVADOC_DIRS=`echo $(MAKE_DIRS) | sed 's/\//./g' | sed 's/ /:/g'` && \mkdir -p javadoc; javadoc $(JFLAGS) -d javadoc -overview $(JAVA_SRC_DIR)/overview.html -sourcepath $(JAVA_SRC_DIR) -classpath $(JAVA_SRC_DIR)$(CLASSPATHSEP)$(PRISM_CLASSPATH) -subpackages $$JAVADOC_DIRS -exclude parser +PRISM_JAVADOC_DIR := javadoc + +javadoc: prism_java + @mkdir -p $(PRISM_JAVADOC_DIR) + @echo "Generating Javadoc..." + javadoc -d $(PRISM_JAVADOC_DIR) \ + -classpath $(PRISM_CLASSPATH) \ + -quiet \ + -Xdoclint:none \ + @$(JAVA_SRC_FILES_LIST) ############### # Cleaning up # @@ -721,23 +711,17 @@ javadoc: # Clean main PRISM build (not CUDD or external libs) clean: checks - @(for dir in $(MAKE_DIRS); do \ - echo Cleaning $(PRISM_SRC_DIR)/$$dir ...; \ - (cd $(PRISM_SRC_DIR)/$$dir && \ - $(MAKE) -s EXE="$(EXE)" clean) \ - || exit 1; \ - done; \ - rm -rf $(JAVA_CLASSES_DIR) ; \ - rm -f $(JAVA_SRC_FILES_LIST) $(JAVA_COMPILED_STAMP) ; \ - rm -f $(JAVA_TESTS_SRC_FILES_LIST) $(JAVA_TESTS_COMPILED_STAMP) ; \ - rm -rf $(PRISM_OBJ_DIR) ; \ - rm -f $(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) ; \ - rm -f $(OLD_SHARED_LIB_FILES) ; \ - rm -f $(PRISM_INCLUDE_DIR)/jni/*.h \ - rm -f $(PRISM_LIB_DIR)/*jnilib; \ - rm -f $(PRISM_LIB_DIR)/prism.jar; \ - rm -f $(PRISM_LIB_DIR)/prism-sources.jar; \ - rm -f $(BIN_PRISM) $(BIN_XPRISM) $(BIN_PRISM_BAT) $(BIN_XPRISM_BAT) ) + rm -rf $(JAVA_CLASSES_DIR) + rm -f $(JAVA_SRC_FILES_LIST) $(JAVA_COMPILED_STAMP) + rm -f $(JAVA_TESTS_SRC_FILES_LIST) $(JAVA_TESTS_COMPILED_STAMP) + rm -rf $(PRISM_OBJ_DIR) + rm -f $(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) + rm -f $(OLD_SHARED_LIB_FILES) + rm -f $(PRISM_INCLUDE_DIR)/jni/*.h + rm -f $(PRISM_LIB_DIR)/*jnilib + rm -f $(PRISM_LIB_DIR)/prism.jar + rm -f $(PRISM_LIB_DIR)/prism-sources.jar + rm -f $(BIN_PRISM) $(BIN_XPRISM) $(BIN_PRISM_BAT) $(BIN_XPRISM_BAT) celan: clean @@ -760,10 +744,6 @@ clean_binary: @echo "Removing JAR file ($(PRISM_LIB_DIR)/prism.jar)..." @rm -f $(PRISM_LIB_DIR)/prism.jar -# Clear individual directories (sometimes useful) -clean_dd: checks - @(cd $(PRISM_SRC_DIR)/dd && $(MAKE) -s EXE="$(EXE)" clean) - ############### # IDE support # ############### diff --git a/prism/src/dd/Makefile b/prism/src/dd/Makefile deleted file mode 100644 index d93174d77..000000000 --- a/prism/src/dd/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -################################################ -# NB: This Makefile is designed to be called # -# from the main PRISM Makefile. It won't # -# work on its own because it needs # -# various options to be passed in # -################################################ - -.SUFFIXES: .o .c .cc - -# Reminder: $@ = target, $* = target without extension, $< = dependency - -THIS_DIR = dd -PRISM_DIR_REL = ../.. - -INCLUDES = \ --I$(PRISM_DIR_REL)/$(CUDD_DIR)/include \ --I$(PRISM_DIR_REL)/$(PRISM_INCLUDE_DIR) - -LIBRARIES = \ --L$(PRISM_DIR_REL)/$(CUDD_DIR)/lib \ --lcudd - -CC_FILES = $(wildcard *.cc) -O_FILES = $(CC_FILES:%.cc=$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o) - -default: all - -all: checks $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dd$(LIBSUFFIX) $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/dd_test$(EXE) - -# inhibit building in parallel (-j option) -.NOTPARALLEL: - -# Try and prevent accidental makes (i.e. called manually, not from top-level Makefile) -checks: - @if [ "$(PRISM_SRC_DIR)" = "" ]; then \ - (echo "Error: This Makefile is designed to be called from the main PRISM Makefile"; exit 1) \ - fi; - -$(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dd$(LIBSUFFIX): $(O_FILES) - $(LD) $(SHARED) $(LDFLAGS) -o $@ $(O_FILES) $(LIBRARIES) - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/dd_test$(EXE): $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/dd_test.o $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dd$(LIBSUFFIX) - $(LD) $(LDFLAGS) -o $@ $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/dd_test.o -L$(PRISM_DIR_REL)/$(PRISM_LIB_DIR) -ldd - -$(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/%.o: %.cc - $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) - -clean: checks - @rm -f $(PRISM_DIR_REL)/$(PRISM_LIB_DIR)/$(LIBPREFIX)dd$(LIBSUFFIX) $(O_FILES) $(PRISM_DIR_REL)/$(PRISM_OBJ_DIR)/$(THIS_DIR)/dd_test$(EXE) - -celan: clean - -################################################# From f48a826a49e09c49c3d8dbee87f570f26c073ceb Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Thu, 5 Feb 2026 09:27:47 +0000 Subject: [PATCH 12/19] Makefile fix: bin scripts, in particular in "make clean". --- prism/Makefile | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/prism/Makefile b/prism/Makefile index 9fcb825e5..ab020e19e 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -16,6 +16,7 @@ export PRISM_SRC_DIR = src export PRISM_OBJ_DIR = obj export PRISM_LIB_DIR = lib +export PRISM_BIN_DIR = bin export PRISM_INCLUDE_DIR = include export PRISM_IMAGES_DIR = images export PRISM_DTDS_DIR = dtds @@ -492,13 +493,14 @@ $(JAVA_TESTS_COMPILED_STAMP): $(JAVA_TESTS_SRC_FILES) # Copy/modify the launch scripts and put in the bin directory bin_scripts: + @mkdir -p $(PRISM_BIN_DIR) @for target in $(BIN_TARGETS); do \ target_trunc=`echo $$target | sed 's/\.[^.]*$$//'` && \ - echo Copying "$(PRISM_SRC_DIR)/bin/$$target -> bin/$$target_trunc" && \ - cp $(PRISM_SRC_DIR)/bin/$$target bin/$$target_trunc; \ + echo Copying "$(PRISM_SRC_DIR)/bin/$$target -> $(PRISM_BIN_DIR)/$$target_trunc" && \ + cp $(PRISM_SRC_DIR)/bin/$$target "$(PRISM_BIN_DIR)/$$target_trunc"; \ done; - @echo Copying "$(PRISM_OBJ_DIR)/prism/ngprism$(EXE) -> bin/ngprism$(EXE)" && \ - cp $(PRISM_OBJ_DIR)/prism/ngprism$(EXE) bin/ngprism$(EXE) + @echo Copying "$(PRISM_OBJ_DIR)/prism/ngprism$(EXE) -> $(PRISM_BIN_DIR)/ngprism$(EXE)" && \ + cp $(PRISM_OBJ_DIR)/prism/ngprism$(EXE) $(PRISM_BIN_DIR)/ngprism$(EXE) @./install.sh silent # Some checks to make sure that the main settings are valid @@ -575,17 +577,17 @@ unittests: $(JAVA_TESTS_COMPILED_STAMP) # Run a single test case from the test suite (useful quick check that the build was ok) test: - bin/prism etc/tests/dtmc_pctl.prism etc/tests/dtmc_pctl.prism.props -h -test + $(PRISM_BIN_DIR)/prism etc/tests/dtmc_pctl.prism etc/tests/dtmc_pctl.prism.props -h -test # Run a single test case from the test suite that relies on lpsolve being properly installed testlpsolve: - bin/prism etc/tests/test_lpsolve_mdpmo.prism etc/tests/test_lpsolve_mdpmo.prism.props -lp -test + $(PRISM_BIN_DIR)/prism etc/tests/test_lpsolve_mdpmo.prism etc/tests/test_lpsolve_mdpmo.prism.props -lp -test # Run all tests from the test suite (in ../prism-tests and ./tests) # Optionally, extra arguments for prism-auto are picked up via variable TESTS_ARGS tests: testslocal @if [ -d ../prism-tests ]; then \ - etc/scripts/prism-auto -t -m ../prism-tests -p bin/prism --print-failures --nailgun --ngprism bin/ngprism $(TESTS_ARGS); \ + etc/scripts/prism-auto -t -m ../prism-tests -p $(PRISM_BIN_DIR)/prism --print-failures --nailgun --ngprism $(PRISM_BIN_DIR)/ngprism $(TESTS_ARGS); \ else \ echo "Skipping tests"; \ fi @@ -593,13 +595,13 @@ tests: testslocal # Just display the command to run the test suite on this version of PRISM # Optionally, extra arguments for prism-auto are picked up via variable TESTS_ARGS testsecho: - @echo etc/scripts/prism-auto -t -m ../prism-tests -p bin/prism --print-failures --nailgun --ngprism bin/ngprism $(TESTS_ARGS) + @echo etc/scripts/prism-auto -t -m ../prism-tests -p $(PRISM_BIN_DIR)/prism --print-failures --nailgun --ngprism $(PRISM_BIN_DIR)/ngprism $(TESTS_ARGS) # Run local tests (in ./tests) # Optionally, extra arguments for prism-auto are picked up via variable TESTS_ARGS testslocal: @if [ -d tests ]; then \ - etc/scripts/prism-auto -t -m tests -p bin/prism --print-failures --nailgun --ngprism bin/ngprism $(TESTS_ARGS); \ + etc/scripts/prism-auto -t -m tests -p $(PRISM_BIN_DIR)/prism --print-failures --nailgun --ngprism $(PRISM_BIN_DIR)/ngprism $(TESTS_ARGS); \ else \ echo "Skipping local tests"; \ fi @@ -612,7 +614,7 @@ testslocal: testsfull: etc/scripts/prism-auto -t -m ../prism-tests \ --skip-export-runs --skip-duplicate-runs --test-all -a ../prism-tests/all-engines.args --timeout 1m \ - -p bin/prism --print-failures --nailgun $(TESTS_ARGS); + -p $(PRISM_BIN_DIR)/prism --print-failures --nailgun $(TESTS_ARGS); ########################## # Building distributions # @@ -721,7 +723,7 @@ clean: checks rm -f $(PRISM_LIB_DIR)/*jnilib rm -f $(PRISM_LIB_DIR)/prism.jar rm -f $(PRISM_LIB_DIR)/prism-sources.jar - rm -f $(BIN_PRISM) $(BIN_XPRISM) $(BIN_PRISM_BAT) $(BIN_XPRISM_BAT) + rm -f $(addprefix $(PRISM_BIN_DIR)/, $(notdir $(basename $(BIN_TARGETS)))) $(PRISM_BIN_DIR)/ngprism$(EXE) celan: clean From 986e9609d8bb893fabcc1f32131982ec43bd69e7 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Thu, 5 Feb 2026 10:43:25 +0000 Subject: [PATCH 13/19] Makefile: Improve OSTYPE detection on Windows/Cygwin. --- prism/Makefile | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/prism/Makefile b/prism/Makefile index ab020e19e..2dd7a7f64 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -56,7 +56,7 @@ CUDD_DIR = ../cudd #OSTYPE = cygwin #OSTYPE = darwin -ifdef OSTYPE +ifneq ($(OSTYPE),) # Look for common variants, e.g. gnu-linux -> linux ifneq (,$(findstring linux, $(OSTYPE))) OSTYPE = linux @@ -75,18 +75,27 @@ ifdef OSTYPE OSTYPE = darwin endif else - # If OSTYPE is not defined/available, try uname - ifneq (,$(findstring Linux, $(shell uname -s))) - OSTYPE = linux - endif - ifneq (,$(findstring SunOS, $(shell uname -s))) - OSTYPE = solaris - endif - ifneq (,$(findstring CYGWIN, $(shell uname -s))) + # If OSTYPE is not defined/available, + # First try OS (on Windows), otherwise try uname + ifeq ($(OS),Windows_NT) OSTYPE = cygwin - endif - ifneq (,$(findstring Darwin, $(shell uname -s))) - OSTYPE = darwin + else + UNAME_STR := $(shell uname -s 2>/dev/null || echo unknown) + ifneq (,$(findstring Linux, $(UNAME_STR))) + OSTYPE = linux + endif + ifneq (,$(findstring SunOS, $(UNAME_STR))) + OSTYPE = solaris + endif + ifneq (,$(findstring CYGWIN, $(UNAME_STR))) + OSTYPE = cygwin + endif + ifneq (,$(findstring MINGW, $(UNAME_STR))) + OSTYPE = cygwin + endif + ifneq (,$(findstring Darwin, $(UNAME_STR))) + OSTYPE = darwin + endif endif endif From fe616be12abc42dedc34816b46cdc7c0e107b4b1 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Thu, 5 Feb 2026 11:47:14 +0000 Subject: [PATCH 14/19] Makefile tidy + optimisation (avoid re-valuation of variables). Speeds up "make" a lot (~80% reduction). --- prism/Makefile | 260 ++++++++++++++++++++++++------------------------- 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/prism/Makefile b/prism/Makefile index 2dd7a7f64..1d228bde3 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -39,7 +39,7 @@ JAVA_TESTS_COMPILED_STAMP := $(JAVA_TESTS_CLASSES_DIR)/java_tests_compiled.stamp # Location of CUDD (used to be variable; now mainly fixed with the git repo layout) -CUDD_DIR = ../cudd +CUDD_DIR := ../cudd #################### # Operating system # @@ -59,42 +59,42 @@ CUDD_DIR = ../cudd ifneq ($(OSTYPE),) # Look for common variants, e.g. gnu-linux -> linux ifneq (,$(findstring linux, $(OSTYPE))) - OSTYPE = linux + OSTYPE := linux endif ifneq (,$(findstring solaris, $(OSTYPE))) - OSTYPE = solaris + OSTYPE := solaris endif ifneq (,$(findstring cygwin, $(OSTYPE))) - OSTYPE = cygwin + OSTYPE := cygwin endif # For Cygwin , OSTYPE is sometimes set to "posix" ifneq (,$(findstring posix, $(OSTYPE))) - OSTYPE = cygwin + OSTYPE := cygwin endif ifneq (,$(findstring darwin, $(OSTYPE))) - OSTYPE = darwin + OSTYPE := darwin endif else # If OSTYPE is not defined/available, # First try OS (on Windows), otherwise try uname ifeq ($(OS),Windows_NT) - OSTYPE = cygwin + OSTYPE := cygwin else UNAME_STR := $(shell uname -s 2>/dev/null || echo unknown) ifneq (,$(findstring Linux, $(UNAME_STR))) - OSTYPE = linux + OSTYPE := linux endif ifneq (,$(findstring SunOS, $(UNAME_STR))) - OSTYPE = solaris + OSTYPE := solaris endif ifneq (,$(findstring CYGWIN, $(UNAME_STR))) - OSTYPE = cygwin + OSTYPE := cygwin endif ifneq (,$(findstring MINGW, $(UNAME_STR))) - OSTYPE = cygwin + OSTYPE := cygwin endif ifneq (,$(findstring Darwin, $(UNAME_STR))) - OSTYPE = darwin + OSTYPE := darwin endif endif endif @@ -106,37 +106,37 @@ endif # For Linux/Mac, we use uname to check the architecture ifeq ($(OSTYPE),linux) ifneq (,$(findstring 86_64, $(shell uname -m))) - ARCH = amd64 + ARCH := amd64 endif ifneq (,$(findstring ia64, $(shell uname -m))) - ARCH = ia64 + ARCH := ia64 endif ifneq (,$(findstring aarch64, $(shell uname -m))) - ARCH = aarch64 + ARCH := aarch64 endif endif ifeq ($(OSTYPE),darwin) ifneq (,$(findstring x86_64, $(shell uname -m))) - ARCH = x86_64 + ARCH := x86_64 endif ifneq (,$(findstring arm64, $(shell uname -m))) - ARCH = arm64 + ARCH := arm64 endif endif # For Windows, we decide whether to build in 64-bit mode based on # whether java is 32/64-bit (since these need to match) ifeq ($(OSTYPE),cygwin) # Default to 64-bit, which is most likely these days - ARCH = x86_64 + ARCH := x86_64 ifeq ($(shell which java 2>/dev/null),) $(error "Could not find java executable. Please install Java or add it to your PATH.") endif JAVA_VERSION_STRING := $(shell java -version 2>&1) ifneq (,$(findstring 32-bit, $(JAVA_VERSION_STRING))) - ARCH = + ARCH := endif ifneq (,$(findstring Client VM, $(JAVA_VERSION_STRING))) - ARCH = + ARCH := endif endif @@ -165,13 +165,13 @@ DETECT_JAVAC = $(shell $(PRISM_SRC_DIR)/scripts/findjavac.sh 2> /dev/null) # Find directory containing javac ifeq ("$(DETECT_JAVAC)","") - JAVA_DIR = + JAVA_DIR := else - JAVA_DIR = $(shell dirname "$(DETECT_JAVAC)" | sed -e 's/\/bin//' -e 's/\/Commands//') + JAVA_DIR := $(shell dirname "$(DETECT_JAVAC)" | sed -e 's/\/bin//' -e 's/\/Commands//') endif # As a backup way of detecting JAVA_DIR, run java_home -JAVA_DIR_BACKUP = $(shell \ +JAVA_DIR_BACKUP := $(shell \ if [ -f /usr/libexec/java_home ]; then /usr/libexec/java_home; \ else echo ""; fi ) @@ -183,14 +183,14 @@ JAVA_DIR_BACKUP = $(shell \ # Now we locate the JNI header files jni.h and jni_md.h # (in fact this is the only reason we need JAVA_DIR) -JAVA_JNI_H_DIR = $(shell \ +JAVA_JNI_H_DIR := $(shell \ if [ -f "$(JAVA_DIR)"/include/jni.h ]; then echo "$(JAVA_DIR)"/include; \ elif [ -f "$(JAVA_DIR)"/Headers/jni.h ]; then echo "$(JAVA_DIR)"/Headers; \ elif [ -f "$(JAVA_DIR_BACKUP)"/include/jni.h ]; then echo "$(JAVA_DIR_BACKUP)"/include; \ elif [ -f "$(JAVA_DIR_BACKUP)"/Headers/jni.h ]; then echo "$(JAVA_DIR_BACKUP)"/Headers; \ else echo ""; fi ) -JAVA_JNI_MD_H_DIR = $(shell (ls "$(JAVA_JNI_H_DIR)"/jni_md.h "$(JAVA_JNI_H_DIR)"/*/jni_md.h | head -n 1 | sed 's/\/jni_md.h//') 2>/dev/null) -JAVA_INCLUDES = -I $(JAVA_JNI_H_DIR) -I $(JAVA_JNI_MD_H_DIR) +JAVA_JNI_MD_H_DIR := $(shell (ls "$(JAVA_JNI_H_DIR)"/jni_md.h "$(JAVA_JNI_H_DIR)"/*/jni_md.h | head -n 1 | sed 's/\/jni_md.h//') 2>/dev/null) +JAVA_INCLUDES := -I $(JAVA_JNI_H_DIR) -I $(JAVA_JNI_MD_H_DIR) ################## # Compilers etc. # @@ -198,21 +198,21 @@ JAVA_INCLUDES = -I $(JAVA_JNI_H_DIR) -I $(JAVA_JNI_MD_H_DIR) ifeq ($(OSTYPE),cygwin) ifeq ($(ARCH),x86_64) - CC = /usr/bin/x86_64-w64-mingw32-gcc - CXX = /usr/bin/x86_64-w64-mingw32-g++ + CC := /usr/bin/x86_64-w64-mingw32-gcc + CXX := /usr/bin/x86_64-w64-mingw32-g++ else - CC = /usr/bin/i686-w64-mingw32-gcc - CXX = /usr/bin/i686-w64-mingw32-g++ + CC := /usr/bin/i686-w64-mingw32-gcc + CXX := /usr/bin/i686-w64-mingw32-g++ endif - JAVACC = javacc.bat + JAVACC := javacc.bat else - CC = gcc - CXX = g++ - JAVACC = javacc + CC := gcc + CXX := g++ + JAVACC := javacc endif -LD = $(CXX) -JAVAC = javac -JAVA = java +LD := $(CXX) +JAVAC := javac +JAVA := java export CC CXX LD JAVAC JAVACC @@ -222,17 +222,17 @@ export CC CXX LD JAVAC JAVACC # Tell compiler to generate debug information? # (WARNING: must not contain a % symbol!) -DEBUG = -#DEBUG = -g +DEBUG := +#DEBUG := -g # Compiler optimisation level: # (WARNING: must not contain a % symbol!) -OPTIMISE = -O3 -#OPTIMISE = +OPTIMISE := -O3 +#OPTIMISE := # Compiler warnings to enable: # (WARNING: must not contain a % symbol!) -WARNINGS = #-Wformat +WARNINGS := #-Wformat # Flags for compilation/linking # Flags to generate shared libraries @@ -244,62 +244,62 @@ WARNINGS = #-Wformat ifeq ($(OSTYPE),linux) ifeq ($(ARCH),amd64) # Position Independent Code required on AMD64/Itanium - CFLAGS = -m64 -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 $(CFLAGS) - LDFLAGS = - BINDISTSUFFIX = linux64 - BINDISTARCH = x86 + CFLAGS := -m64 -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 $(CFLAGS) + LDFLAGS := + BINDISTSUFFIX := linux64 + BINDISTARCH := x86 else ifeq ($(ARCH),ia64) # Position Independent Code required on AMD64/Itanium # Note: We omit the -m64 flag from here since it seems to be unsupported by gcc on IA64 - CFLAGS = -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 $(CFLAGS) - LDFLAGS = - BINDISTSUFFIX = linux64 - BINDISTARCH = ia64 + CFLAGS := -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 $(CFLAGS) + LDFLAGS := + BINDISTSUFFIX := linux64 + BINDISTARCH := ia64 else ifeq ($(ARCH),aarch64) # Position Independent Code required on Aarch64 - CFLAGS = -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 $(CFLAGS) - LDFLAGS = - BINDISTSUFFIX = linux64 - BINDISTARCH = arm + CFLAGS := -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 $(CFLAGS) + LDFLAGS := + BINDISTSUFFIX := linux64 + BINDISTARCH := arm else - CFLAGS = -m32 $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 $(CFLAGS) - LDFLAGS = - BINDISTSUFFIX = linux32 - BINDISTARCH = x86 + CFLAGS := -m32 $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 $(CFLAGS) + LDFLAGS := + BINDISTSUFFIX := linux32 + BINDISTARCH := x86 endif endif endif - BIN_TARGETS=prism.linux xprism.linux + BIN_TARGETS := prism.linux xprism.linux JFLAGS := -encoding UTF8 - SHARED = -shared - #SHARED = -G - EXE = - LIBPREFIX = lib - LIBSUFFIX = .so - LIBMATH = -lm - CLASSPATHSEP = : + SHARED := -shared + #SHARED := -G + EXE := + LIBPREFIX := lib + LIBSUFFIX := .so + LIBMATH := -lm + CLASSPATHSEP := : endif # Solaris ifeq ($(OSTYPE),solaris) - CFLAGS = -mcpu=ultrasparc $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 $(CFLAGS) - LDFLAGS = - BINDISTSUFFIX = solaris - BINDISTARCH = solaris - BIN_TARGETS=prism.linux xprism.linux + CFLAGS := -mcpu=ultrasparc $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 $(CFLAGS) + LDFLAGS := + BINDISTSUFFIX := solaris + BINDISTARCH := solaris + BIN_TARGETS := prism.linux xprism.linux JFLAGS := -encoding UTF8 - SHARED = -shared -mimpure-text - EXE = - LIBPREFIX = lib - LIBSUFFIX = .so - LIBMATH = -lm - CLASSPATHSEP = : + SHARED := -shared -mimpure-text + EXE := + LIBPREFIX := lib + LIBSUFFIX := .so + LIBMATH := -lm + CLASSPATHSEP := : endif # Cygwin ifeq ($(OSTYPE),cygwin) @@ -308,61 +308,61 @@ ifeq ($(OSTYPE),cygwin) # -Wl,--add-stdcall-alias needed so shared libraries can be read from JNI # -Wl ... -lpthread ... --no-whole-archive needed to statically include pthread in case missing ifeq ($(ARCH),x86_64) - CFLAGS = $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 -DWIN32 $(CFLAGS) - LDFLAGS = -static-libgcc -static-libstdc++ -Wl,--add-stdcall-alias -Wl,-Bstatic,--whole-archive -lpthread -Wl,-Bdynamic,--no-whole-archive - BINDISTSUFFIX = win64 - BINDISTARCH = x86 + CFLAGS := $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 -DWIN32 $(CFLAGS) + LDFLAGS := -static-libgcc -static-libstdc++ -Wl,--add-stdcall-alias -Wl,-Bstatic,--whole-archive -lpthread -Wl,-Bdynamic,--no-whole-archive + BINDISTSUFFIX := win64 + BINDISTARCH := x86 else - CFLAGS = -march=i686 $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 -DWIN32 $(CFLAGS) - LDFLAGS = -static-libgcc -static-libstdc++ -Wl,--add-stdcall-alias -Wl,-Bstatic,--whole-archive -lpthread -Wl,-Bdynamic,--no-whole-archive - BINDISTSUFFIX = win32 - BINDISTARCH = x86 + CFLAGS := -march=i686 $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 -DWIN32 $(CFLAGS) + LDFLAGS := -static-libgcc -static-libstdc++ -Wl,--add-stdcall-alias -Wl,-Bstatic,--whole-archive -lpthread -Wl,-Bdynamic,--no-whole-archive + BINDISTSUFFIX := win32 + BINDISTARCH := x86 endif - BIN_TARGETS=prism.cygwin xprism.linux prism.bat.win xprism.bat.win + BIN_TARGETS := prism.cygwin xprism.linux prism.bat.win xprism.bat.win JFLAGS := -encoding UTF8 - SHARED = -shared - #SHARED = -G - EXE = .exe - LIBPREFIX = - LIBSUFFIX = .dll - LIBMATH = - CLASSPATHSEP = ; + SHARED := -shared + #SHARED := -G + EXE := .exe + LIBPREFIX := + LIBSUFFIX := .dll + LIBMATH := + CLASSPATHSEP := ; endif # Darwin ifeq ($(OSTYPE),darwin) ifeq ($(ARCH),x86_64) - CFLAGS = -arch x86_64 -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 $(CFLAGS) - LDFLAGS = -arch x86_64 -Wl,-search_paths_first - BINDISTSUFFIX = mac64 - BINDISTARCH = x86 - BIN_TARGETS=prism.darwin xprism.linux + CFLAGS := -arch x86_64 -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 $(CFLAGS) + LDFLAGS := -arch x86_64 -Wl,-search_paths_first + BINDISTSUFFIX := mac64 + BINDISTARCH := x86 + BIN_TARGETS := prism.darwin xprism.linux else ifeq ($(ARCH),arm64) - CFLAGS = -arch arm64 -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 $(CFLAGS) - LDFLAGS = -arch arm64 -Wl,-search_paths_first - BINDISTSUFFIX = mac64 - BINDISTARCH = arm - BIN_TARGETS=prism.darwin xprism.linux + CFLAGS := -arch arm64 -fPIC -DPIC $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 $(CFLAGS) + LDFLAGS := -arch arm64 -Wl,-search_paths_first + BINDISTSUFFIX := mac64 + BINDISTARCH := arm + BIN_TARGETS := prism.darwin xprism.linux else - CFLAGS = -arch i386 $(DEBUG) $(OPTIMISE) $(WARNINGS) - CXXFLAGS = --std=c++11 $(CFLAGS) - LDFLAGS = -arch i386 -Wl,-search_paths_first - BINDISTSUFFIX = mac32 - BINDISTARCH = x86 - BIN_TARGETS=prism.darwin xprism.linux + CFLAGS := -arch i386 $(DEBUG) $(OPTIMISE) $(WARNINGS) + CXXFLAGS := --std=c++11 $(CFLAGS) + LDFLAGS := -arch i386 -Wl,-search_paths_first + BINDISTSUFFIX := mac32 + BINDISTARCH := x86 + BIN_TARGETS := prism.darwin xprism.linux endif endif JFLAGS := -encoding UTF8 - SHARED = -dynamiclib - EXE = - LIBPREFIX = lib - LIBSUFFIX = .dylib - LIBMATH = -lm - CLASSPATHSEP = : + SHARED := -dynamiclib + EXE := + LIBPREFIX := lib + LIBSUFFIX := .dylib + LIBMATH := -lm + CLASSPATHSEP := : endif # Java flags @@ -374,7 +374,7 @@ export CFLAGS CXXFLAGS LDFLAGS JFLAGS LIBPREFIX LIBSUFFIX # Main part of Makefile: Compiling PRISM # ########################################## -EXT_PACKAGES = lpsolve55 lp_solve_5.5_java +EXT_PACKAGES := lpsolve55 lp_solve_5.5_java .PHONY: clean javadoc tests release @@ -455,14 +455,14 @@ PRISM_LIB_OBJ_FILES := $(patsubst $(PRISM_SRC_DIR)/%.cc, $(PRISM_OBJ_DIR)/%.o, $ OLD_SHARED_LIBS := dd jdd odd dv prismmtbdd prismsparse prismhybrid OLD_SHARED_LIB_FILES := $(patsubst %, $(PRISM_LIB_DIR)/$(LIBPREFIX)%$(LIBSUFFIX), $(OLD_SHARED_LIBS)) -INCLUDES = \ +INCLUDES := \ -I$(CUDD_DIR)/include \ -I"$(JAVA_JNI_H_DIR)" \ -I"$(JAVA_JNI_MD_H_DIR)" \ -I$(PRISM_INCLUDE_DIR) \ -Iext/lpsolve55/include -LIBRARIES = \ +LIBRARIES := \ -L$(PRISM_LIB_DIR) \ -L$(CUDD_DIR)/lib \ -lcudd \ @@ -642,8 +642,8 @@ source-jar: @rm -f prism-sources.txt # Download a local html copy of the manual -#PRISM_MANUAL_WEBSITE = http://prismmodelchecker.localhost/manual/ -PRISM_MANUAL_WEBSITE = http://www.prismmodelchecker.org/manual/ +#PRISM_MANUAL_WEBSITE := http://prismmodelchecker.localhost/manual/ +PRISM_MANUAL_WEBSITE := http://www.prismmodelchecker.org/manual/ doc: clean_doc (cd .. && wget -r -np -k -E -nH --no-cookies --header "Cookie: setskin=offline" --restrict-file-names=windows --reject '*action=sourceblock*' $(PRISM_MANUAL_WEBSITE) $(PRISM_MANUAL_WEBSITE)/pub/skins/offline/images/) clean_doc: @@ -703,7 +703,7 @@ build_release_source: # Build Javadoc (and put in javadoc directory) -PRISM_CLASSPATH = "$(JAVA_CLASSES_DIR)$(CLASSPATHSEP)$(PRISM_LIB_DIR)/*" +PRISM_CLASSPATH := "$(JAVA_CLASSES_DIR)$(CLASSPATHSEP)$(PRISM_LIB_DIR)/*" PRISM_JAVADOC_DIR := javadoc From b39a51ae4c49309382460b3a7ab11ef8e49e64ac Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Thu, 5 Feb 2026 10:00:14 +0000 Subject: [PATCH 15/19] Bigger GH action matrix for testing (commented out). --- .github/workflows/make-tests.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/make-tests.yml b/.github/workflows/make-tests.yml index 7392253ae..bbc817b7f 100644 --- a/.github/workflows/make-tests.yml +++ b/.github/workflows/make-tests.yml @@ -13,6 +13,8 @@ jobs: matrix: java: [11, 21] os: [ubuntu-latest, macos-latest] + #java: [11, 17, 21] + #os: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, macos-14, macos-15, macos-26, ubuntu-22.04-arm, ubuntu-24.04-arm, macos-15-intel] runs-on: ${{ matrix.os }} steps: @@ -34,7 +36,15 @@ jobs: strategy: matrix: java: [11, 21] - runs-on: windows-latest + os: [windows-latest] + #java: [11, 17, 21] + #os: [windows-2019, windows-2022, windows-2025] #, windows-11-arm] + #exclude: + #- os: windows-11-arm + #java: 11 + #- os: windows-11-arm + #java: 17 + runs-on: ${{ matrix.os }} steps: - run: git config --global core.autocrlf input From 83355ede6c1e93d24001ae57d03c674a78feaf2a Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Thu, 5 Feb 2026 15:03:28 +0000 Subject: [PATCH 16/19] Fix shared library loading on Mac/Linux (SONAME, RPATH, etc.). Set soname/install_name for libprism and Mac liblpsolve55/liblpsolve55j, where it was previously missing. For shared libraries with dependencies (libprism, liblpsolve55j), we also set rpath so that the linker looks in the same directory for dependencies. This means that LD_LIBRARY_PATH and DYLD_LIBRARY_PATH are removed from the bin/prism scripts for Linux/Max, just using -Djava.library.path instead. This fixes a bunch of issues with Java on Mac (e.g. using jenv) and makes things generally cleaner and more portable. Also no need to set up the (DY)LD_LIBRARY_PATH variables for running through IDEs. Windows/Cygwin is unaffected and continues to need to set/use PATH. --- prism/Makefile | 10 +++++++++- prism/ext/lp_solve_5.5_java/lib/build | 2 +- prism/ext/lp_solve_5.5_java/lib/mac/build-osx | 2 +- prism/ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx | 2 +- .../ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx64 | 2 +- prism/src/bin/prism.darwin | 5 +++-- prism/src/bin/prism.linux | 5 +++-- 7 files changed, 19 insertions(+), 9 deletions(-) diff --git a/prism/Makefile b/prism/Makefile index 1d228bde3..eb352c5e5 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -469,12 +469,20 @@ LIBRARIES := \ $(LIBMATH) \ -llpsolve55 +# Setup RPATH. Use = here (not :=) so $@ is evaluated inside the recipe scope +RPATH_LINUX = -Wl,-soname,$(notdir $@) -Wl,-rpath,'$$ORIGIN' +RPATH_DARWIN = -Wl,-install_name,@rpath/$(notdir $@) -Wl,-rpath,@loader_path/. +# Then pick the right one based on OSTYPE +$(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX): RPATH_SETTING = \ + $(if $(filter linux,$(OSTYPE)),$(RPATH_LINUX), \ + $(if $(filter darwin,$(OSTYPE)),$(RPATH_DARWIN),)) + # Compile the main native shared library prism_lib: prism_java $(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX) $(PRISM_LIB_DIR)/$(LIBPREFIX)prism$(LIBSUFFIX): $(PRISM_LIB_OBJ_FILES) @echo "Linking shared library $@..." - $(LD) $(SHARED) $(LDFLAGS) -o $@ $^ $(LIBRARIES) + $(LD) $(SHARED) $(LDFLAGS) $(RPATH_SETTING) -o $@ $^ $(LIBRARIES) $(PRISM_OBJ_DIR)/%.o: $(PRISM_SRC_DIR)/%.cc @mkdir -p $(dir $@) diff --git a/prism/ext/lp_solve_5.5_java/lib/build b/prism/ext/lp_solve_5.5_java/lib/build index 0915f3920..6d090d388 100755 --- a/prism/ext/lp_solve_5.5_java/lib/build +++ b/prism/ext/lp_solve_5.5_java/lib/build @@ -50,4 +50,4 @@ SRC_DIR=../src/c INCL="-I$JAVA_JNI_H_DIR -I$JAVA_JNI_MD_H_DIR -I $LPSOLVE_DIR -I $SRC_DIR" $c $CFLAGS $INCL -c $SRC_DIR/lpsolve5j.cpp -$c $CFLAGS -shared -Wl,-soname,liblpsolve55j.so -o $PLATFORM/liblpsolve55j.so lpsolve5j.o -L$LPSOLVE_LIB_DIR -lc -llpsolve55 +$c $CFLAGS -shared -Wl,-soname,liblpsolve55j.so -Wl,-soname,liblpsolve55j.so -Wl,-rpath,'$ORIGIN' -o $PLATFORM/liblpsolve55j.so lpsolve5j.o -L$LPSOLVE_LIB_DIR -lc -llpsolve55 diff --git a/prism/ext/lp_solve_5.5_java/lib/mac/build-osx b/prism/ext/lp_solve_5.5_java/lib/mac/build-osx index 3cad3e43f..b3ebff729 100755 --- a/prism/ext/lp_solve_5.5_java/lib/mac/build-osx +++ b/prism/ext/lp_solve_5.5_java/lib/mac/build-osx @@ -32,4 +32,4 @@ if [ "$ARCH" = "arm64" ]; then fi g++ $CFLAGS $INCL -c $SRC_DIR/lpsolve5j.cpp -g++ $CFLAGS -dynamiclib lpsolve5j.o -compatibility_version 5.5.0 -current_version 5.5.0 -o liblpsolve55j.dylib -lc -llpsolve55 -L$LPSOLVE_LIB_DIR +g++ $CFLAGS -dynamiclib lpsolve5j.o -compatibility_version 5.5.0 -current_version 5.5.0 -Wl,-install_name,@rpath/liblpsolve55j.dylib -Wl,-rpath,@loader_path/. -o liblpsolve55j.dylib -lc -llpsolve55 -L$LPSOLVE_LIB_DIR diff --git a/prism/ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx b/prism/ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx index 28f4f7f50..9db193fef 100644 --- a/prism/ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx +++ b/prism/ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx @@ -38,7 +38,7 @@ libtool -static -o bin/$PLATFORM/liblpsolve55.a `echo $src|sed s/[.]c/.o/g|sed ' if [ "$so" != "" ] then $c -arch i386 -fPIC -fno-common -s -c -I.. -I../shared -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL -I../colamd -I. $opts $NOISNAN -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src - $c -arch i386 -dynamiclib bin/$PLATFORM/liblpsolve55.a -compatibility_version 5.5.0 -current_version 5.5.0 -o bin/$PLATFORM/liblpsolve55.dylib `echo $src|sed s/[.]c/.o/g|sed 's/[^ ]*\///g'` -lc + $c -arch i386 -dynamiclib bin/$PLATFORM/liblpsolve55.a -compatibility_version 5.5.0 -current_version 5.5.0 -Wl,-install_name,@rpath/liblpsolve55.dylib -o bin/$PLATFORM/liblpsolve55.dylib `echo $src|sed s/[.]c/.o/g|sed 's/[^ ]*\///g'` -lc mv bin/$PLATFORM/liblpsolve55.dylib ../../../lib fi diff --git a/prism/ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx64 b/prism/ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx64 index 9456c2d7b..2b0e30943 100644 --- a/prism/ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx64 +++ b/prism/ext/lpsolve55/src/lp_solve_5.5/lpsolve55/ccc.osx64 @@ -45,7 +45,7 @@ libtool -static -o bin/$PLATFORM/liblpsolve55.a `echo $src|sed s/[.]c/.o/g|sed ' if [ "$so" != "" ] then $c $CFLAGS -fPIC -fno-common -s -c -I.. -I../shared -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL -I../colamd -I. $opts $NOISNAN -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src - $c $CFLAGS -dynamiclib bin/$PLATFORM/liblpsolve55.a -compatibility_version 5.5.0 -current_version 5.5.0 -o bin/$PLATFORM/liblpsolve55.dylib `echo $src|sed s/[.]c/.o/g|sed 's/[^ ]*\///g'` -lc + $c $CFLAGS -dynamiclib bin/$PLATFORM/liblpsolve55.a -compatibility_version 5.5.0 -current_version 5.5.0 -Wl,-install_name,@rpath/liblpsolve55.dylib -o bin/$PLATFORM/liblpsolve55.dylib `echo $src|sed s/[.]c/.o/g|sed 's/[^ ]*\///g'` -lc mv bin/$PLATFORM/liblpsolve55.dylib ../../../lib fi diff --git a/prism/src/bin/prism.darwin b/prism/src/bin/prism.darwin index 1f4233c2f..6d8f3a167 100755 --- a/prism/src/bin/prism.darwin +++ b/prism/src/bin/prism.darwin @@ -102,11 +102,12 @@ PRISM_CLASSPATH="$PRISM_DIR"/lib/prism.jar:"$PRISM_DIR"/classes:"$PRISM_DIR":"$P PRISM_LIB_PATH="$PRISM_DIR"/lib # Copy library path to relevant vars -DYLD_LIBRARY_PATH="${PRISM_LIB_PATH}${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}" +#DYLD_LIBRARY_PATH="${PRISM_LIB_PATH}${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}" JAVA_LIBRARY_PATH="$PRISM_LIB_PATH" # Export environment variables -export PRISM_DIR DYLD_LIBRARY_PATH +export PRISM_DIR +# export LD_LIBRARY_PATH # Main Java class to launch PRISM_MAINCLASS=${PRISM_MAINCLASS:-prism.PrismCL} diff --git a/prism/src/bin/prism.linux b/prism/src/bin/prism.linux index 938dd52cf..e9fdc8ff2 100755 --- a/prism/src/bin/prism.linux +++ b/prism/src/bin/prism.linux @@ -93,11 +93,12 @@ PRISM_CLASSPATH="$PRISM_DIR"/lib/prism.jar:"$PRISM_DIR"/classes:"$PRISM_DIR":"$P PRISM_LIB_PATH="$PRISM_DIR"/lib # Copy library path to relevant vars -LD_LIBRARY_PATH="${PRISM_LIB_PATH}${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" +#LD_LIBRARY_PATH="${PRISM_LIB_PATH}${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" JAVA_LIBRARY_PATH="$PRISM_LIB_PATH" # Export environment variables -export PRISM_DIR LD_LIBRARY_PATH +export PRISM_DIR +# export LD_LIBRARY_PATH # Main Java class to launch PRISM_MAINCLASS=${PRISM_MAINCLASS:-prism.PrismCL} From b4fcee0ddbbe9e454f26137075d6aec63e421c42 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Sun, 15 Feb 2026 19:17:27 +0000 Subject: [PATCH 17/19] Add Apache Commons Math to Gradle dependency list. --- prism/etc/jars/build.gradle | 1 + prism/lib/README.md | 2 ++ 2 files changed, 3 insertions(+) diff --git a/prism/etc/jars/build.gradle b/prism/etc/jars/build.gradle index db728d27a..8b133b262 100644 --- a/prism/etc/jars/build.gradle +++ b/prism/etc/jars/build.gradle @@ -59,6 +59,7 @@ dependencies { //implementation("com.martiansoftware:nailgun-server:0.9.1") implementation 'it.unimi.dsi:fastutil:8.5.15' implementation 'org.apache.commons:commons-compress:1.24.0' + implementation 'org.apache.commons:commons-math3:3.3' implementation 'org.tukaani:xz:1.10' implementation 'com.google.code.gson:gson:2.11.0' implementation 'org.apache.logging.log4j:log4j-api:2.17.1' diff --git a/prism/lib/README.md b/prism/lib/README.md index f7b891d1a..d3b15f945 100644 --- a/prism/lib/README.md +++ b/prism/lib/README.md @@ -1,6 +1,7 @@ This folder contains the following libraries: ``` +runtimeClasspath - Runtime classpath of source set 'main'. +--- colt:colt:1.2.0 | \--- concurrent:concurrent:1.3.4 +--- de.uni-mannheim.rz.krum:jas:2.7.90 @@ -14,6 +15,7 @@ This folder contains the following libraries: +--- org.jfree:jcommon:1.0.17 +--- it.unimi.dsi:fastutil:8.5.15 +--- org.apache.commons:commons-compress:1.24.0 ++--- org.apache.commons:commons-math3:3.3 +--- org.tukaani:xz:1.10 +--- com.google.code.gson:gson:2.11.0 | \--- com.google.errorprone:error_prone_annotations:2.27.0 From bf36eace6ec5acefa534260fc095b26ec547cb8e Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Mon, 16 Feb 2026 19:03:00 +0000 Subject: [PATCH 18/19] Modify rname etc in Makefiles. --- prism/ext/ppl/Makefile | 17 ++++++++++++++++- prism/ext/yices/Makefile | 16 +++++++++++++++- prism/ext/z3/Makefile | 17 ++++++++++++++++- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/prism/ext/ppl/Makefile b/prism/ext/ppl/Makefile index 5f4e91001..2ae70f6c6 100644 --- a/prism/ext/ppl/Makefile +++ b/prism/ext/ppl/Makefile @@ -7,7 +7,7 @@ default: all -all: checks libfiles +all: checks libfiles rpath # Files to copy NATIVE_LIBS = @@ -52,6 +52,21 @@ libfiles: $(NATIVE_LIBS_COPY) $(COMMON_LIBS_COPY) fi \ fi +rpath: + @if [ $(OSTYPE) = "darwin" ]; then \ + install_name_tool -id "@rpath/libppl.15.dylib" ../../$(PRISM_LIB_DIR)/libppl.15.dylib; \ + install_name_tool -id "@rpath/libppl_java.dylib" ../../$(PRISM_LIB_DIR)/libppl_java.dylib; \ + install_name_tool -add_rpath "@loader_path/." ../../$(PRISM_LIB_DIR)/libppl_java.dylib; \ + install_name_tool -change "/Users/dxp/tools/tmp/lib/libppl.15.dylib" "@rpath/libppl.15.dylib" ../../$(PRISM_LIB_DIR)/libppl_java.dylib; \ + codesign --force --deep --sign - ../../$(PRISM_LIB_DIR)/libppl*.dylib; \ + fi; \ + if [ $(OSTYPE) = "linux" ]; then \ + patchelf --set-soname "libppl.so.15" ../../$(PRISM_LIB_DIR)/libppl.so.15; \ + patchelf --set-soname "libppl_java.so" ../../$(PRISM_LIB_DIR)/libppl_java.so; \ + patchelf --set-rpath '$ORIGIN' ../../$(PRISM_LIB_DIR)/libppl_java.so; \ + patchelf --replace-needed "libppl.so.15" "libppl.15.so" ../../$(PRISM_LIB_DIR)/libppl_java.so; \ + fi + clean: checks # Remove installed files if present @if [ "$(COMMON_LIBS_COPY)" != "" ]; then \ diff --git a/prism/ext/yices/Makefile b/prism/ext/yices/Makefile index 812237a51..8fc9c3358 100644 --- a/prism/ext/yices/Makefile +++ b/prism/ext/yices/Makefile @@ -7,7 +7,7 @@ default: all -all: checks libfiles +all: checks libfiles rpath # Files to copy NATIVE_LIBS = @@ -52,6 +52,20 @@ libfiles: $(NATIVE_LIBS_COPY) $(COMMON_LIBS_COPY) fi \ fi +rpath: + @if [ $(OSTYPE) = "darwin" ]; then \ + install_name_tool -id "@rpath/libyices.2.dylib" ../../$(PRISM_LIB_DIR)/libyices.2.dylib; \ + install_name_tool -id "@rpath/libyices2java.dylib" ../../$(PRISM_LIB_DIR)/libyices2java.dylib; \ + install_name_tool -add_rpath "@loader_path/." ../../$(PRISM_LIB_DIR)/libyices2java.dylib; \ + install_name_tool -change "/usr/local/lib/libyices.2.dylib" "@rpath/libyices.2.dylib" ../../$(PRISM_LIB_DIR)/libyices2java.dylib; \ + fi; \ + if [ $(OSTYPE) = "linux" ]; then \ + patchelf --set-soname "libyices.so.2.6" ../../$(PRISM_LIB_DIR)/libyices.so.2.6; \ + patchelf --set-soname "libyices2java.so" ../../$(PRISM_LIB_DIR)/libyices2java.so; \ + patchelf --set-rpath '$ORIGIN' ../../$(PRISM_LIB_DIR)/libyices2java.so; \ + patchelf --replace-needed "libyices.so.2.6" "libyices.so.2.6" ../../$(PRISM_LIB_DIR)/libyices2java.so; \ + fi + clean: checks # Remove installed files if present @if [ "$(COMMON_LIBS_COPY)" != "" ]; then \ diff --git a/prism/ext/z3/Makefile b/prism/ext/z3/Makefile index d0317ffa0..1f62f812b 100644 --- a/prism/ext/z3/Makefile +++ b/prism/ext/z3/Makefile @@ -7,7 +7,7 @@ default: all -all: checks libfiles +all: checks libfiles rpath # Files to copy NATIVE_LIBS = @@ -52,6 +52,21 @@ libfiles: $(NATIVE_LIBS_COPY) $(COMMON_LIBS_COPY) fi \ fi +rpath: + @if [ $(OSTYPE) = "darwin" ]; then \ + install_name_tool -id "@rpath/libz3.dylib" ../../$(PRISM_LIB_DIR)/libz3.dylib; \ + install_name_tool -id "@rpath/libz3java.dylib" ../../$(PRISM_LIB_DIR)/libz3java.dylib; \ + install_name_tool -add_rpath "@loader_path/." ../../$(PRISM_LIB_DIR)/libz3java.dylib; \ + install_name_tool -change "libz3.dylib" "@rpath/libz3.dylib" ../../$(PRISM_LIB_DIR)/libz3java.dylib; \ + codesign --force --deep --sign - ../../$(PRISM_LIB_DIR)/libz3*.dylib; \ + fi; \ + if [ $(OSTYPE) = "linux" ]; then \ + patchelf --set-soname "libz3.so" ../../$(PRISM_LIB_DIR)/libz3.so; \ + patchelf --set-soname "libz3java.so" ../../$(PRISM_LIB_DIR)/libz3java.so; \ + patchelf --set-rpath '$ORIGIN' ../../$(PRISM_LIB_DIR)/libz3java.so; \ + patchelf --replace-needed "libz3.so" "libz3.so" ../../$(PRISM_LIB_DIR)/libz3java.so; \ + fi + clean: checks # Remove installed files if present @if [ "$(COMMON_LIBS_COPY)" != "" ]; then \ From aec0b44a2a1834e413ab5c8f9ba6915645673c70 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Mon, 16 Feb 2026 19:35:07 +0000 Subject: [PATCH 19/19] fix --- .github/workflows/make-tests.yml | 8 ++++---- prism/ext/ppl/Makefile | 8 +++++++- prism/ext/yices/Makefile | 8 +++++++- prism/ext/z3/Makefile | 8 +++++++- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/.github/workflows/make-tests.yml b/.github/workflows/make-tests.yml index 2f148e1f0..119d60d5a 100644 --- a/.github/workflows/make-tests.yml +++ b/.github/workflows/make-tests.yml @@ -12,9 +12,9 @@ jobs: strategy: matrix: java: [11, 21] - os: [ubuntu-latest, macos-latest] + #os: [ubuntu-latest, macos-latest] #java: [11, 17, 21] - #os: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, macos-14, macos-15, macos-26, ubuntu-22.04-arm, ubuntu-24.04-arm, macos-15-intel] + os: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, macos-14, macos-15, macos-26, ubuntu-22.04-arm, ubuntu-24.04-arm, macos-15-intel] runs-on: ${{ matrix.os }} steps: @@ -37,9 +37,9 @@ jobs: strategy: matrix: java: [11, 21] - os: [windows-latest] + #os: [windows-latest] #java: [11, 17, 21] - #os: [windows-2019, windows-2022, windows-2025] #, windows-11-arm] + os: [windows-2019, windows-2022, windows-2025] #, windows-11-arm] #exclude: #- os: windows-11-arm #java: 11 diff --git a/prism/ext/ppl/Makefile b/prism/ext/ppl/Makefile index 2ae70f6c6..9156f7cbf 100644 --- a/prism/ext/ppl/Makefile +++ b/prism/ext/ppl/Makefile @@ -63,9 +63,15 @@ rpath: if [ $(OSTYPE) = "linux" ]; then \ patchelf --set-soname "libppl.so.15" ../../$(PRISM_LIB_DIR)/libppl.so.15; \ patchelf --set-soname "libppl_java.so" ../../$(PRISM_LIB_DIR)/libppl_java.so; \ - patchelf --set-rpath '$ORIGIN' ../../$(PRISM_LIB_DIR)/libppl_java.so; \ + patchelf --set-rpath '$$ORIGIN' ../../$(PRISM_LIB_DIR)/libppl_java.so; \ patchelf --replace-needed "libppl.so.15" "libppl.15.so" ../../$(PRISM_LIB_DIR)/libppl_java.so; \ fi +# @if [ $(OSTYPE) = "darwin" ]; then \ +# otool -L ../../$(PRISM_LIB_DIR)/libppl*dylib; \ +# fi; \ +# if [ $(OSTYPE) = "linux" ]; then \ +# readelf -d ../../$(PRISM_LIB_DIR)/libppl*so; \ +# fi clean: checks # Remove installed files if present diff --git a/prism/ext/yices/Makefile b/prism/ext/yices/Makefile index 8fc9c3358..ec410a14a 100644 --- a/prism/ext/yices/Makefile +++ b/prism/ext/yices/Makefile @@ -62,9 +62,15 @@ rpath: if [ $(OSTYPE) = "linux" ]; then \ patchelf --set-soname "libyices.so.2.6" ../../$(PRISM_LIB_DIR)/libyices.so.2.6; \ patchelf --set-soname "libyices2java.so" ../../$(PRISM_LIB_DIR)/libyices2java.so; \ - patchelf --set-rpath '$ORIGIN' ../../$(PRISM_LIB_DIR)/libyices2java.so; \ + patchelf --set-rpath '$$ORIGIN' ../../$(PRISM_LIB_DIR)/libyices2java.so; \ patchelf --replace-needed "libyices.so.2.6" "libyices.so.2.6" ../../$(PRISM_LIB_DIR)/libyices2java.so; \ fi +# @if [ $(OSTYPE) = "darwin" ]; then \ +# otool -L ../../$(PRISM_LIB_DIR)/libyices*dylib; \ +# fi; \ +# if [ $(OSTYPE) = "linux" ]; then \ +# readelf -d ../../$(PRISM_LIB_DIR)/libyices*so; \ +# fi clean: checks # Remove installed files if present diff --git a/prism/ext/z3/Makefile b/prism/ext/z3/Makefile index 1f62f812b..f91322a7b 100644 --- a/prism/ext/z3/Makefile +++ b/prism/ext/z3/Makefile @@ -63,9 +63,15 @@ rpath: if [ $(OSTYPE) = "linux" ]; then \ patchelf --set-soname "libz3.so" ../../$(PRISM_LIB_DIR)/libz3.so; \ patchelf --set-soname "libz3java.so" ../../$(PRISM_LIB_DIR)/libz3java.so; \ - patchelf --set-rpath '$ORIGIN' ../../$(PRISM_LIB_DIR)/libz3java.so; \ + patchelf --set-rpath '$$ORIGIN' ../../$(PRISM_LIB_DIR)/libz3java.so; \ patchelf --replace-needed "libz3.so" "libz3.so" ../../$(PRISM_LIB_DIR)/libz3java.so; \ fi +# @if [ $(OSTYPE) = "darwin" ]; then \ +# otool -L ../../$(PRISM_LIB_DIR)/libz3*dylib; \ +# fi; \ +# if [ $(OSTYPE) = "linux" ]; then \ +# readelf -d ../../$(PRISM_LIB_DIR)/libz3*so; \ +# fi clean: checks # Remove installed files if present