diff --git a/Golden_Repo/a/ADIOS2/ADIOS2-2.8.3-gompi-2022a.eb b/Golden_Repo/a/ADIOS2/ADIOS2-2.8.3-foss-2022a.eb
similarity index 99%
rename from Golden_Repo/a/ADIOS2/ADIOS2-2.8.3-gompi-2022a.eb
rename to Golden_Repo/a/ADIOS2/ADIOS2-2.8.3-foss-2022a.eb
index d919a7aac5c953a05f551d59f3a4216f7d20505d..d435796303cea7959ac8b3213328a4d1109f768d 100644
--- a/Golden_Repo/a/ADIOS2/ADIOS2-2.8.3-gompi-2022a.eb
+++ b/Golden_Repo/a/ADIOS2/ADIOS2-2.8.3-foss-2022a.eb
@@ -9,7 +9,7 @@ flexible way for scientists to describe the data in their code that may
 need to be written, read, or processed outside of the running
 simulation."""
 
-toolchain = {'name': 'gompi', 'version': '2022a'}
+toolchain = {'name': 'foss', 'version': '2022a'}
 toolchainopts = {'pic': True, 'usempi': False}
 
 github_account = 'ornladios'
diff --git a/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-foss-2022a.eb b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-foss-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..639db5be50e738c04e224e2b2576f2c0dee0dd7b
--- /dev/null
+++ b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-foss-2022a.eb
@@ -0,0 +1,60 @@
+easyblock = 'ConfigureMake'
+
+name = 'ARPACK-NG'
+
+version = '3.8.0'
+
+homepage = 'http://forge.scilab.org/index.php/p/arpack-ng/'
+
+description = """ARPACK-NG is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems.
+
+libarpack.a and libparpack.a have been installed in $EBROOTARPACKMINNG.
+
+In addition the variables ARPACK_ROOT, ARPACK_LIB, PARPACK_ROOT, and PARPACK_LIB are set.
+
+"""
+
+examples = 'Examples can be found in $ARPACK_ROOT/EXAMPLES'
+
+toolchain = {'name': 'foss', 'version': '2022a'}
+toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': True}
+source_urls = ['https://github.com/opencollab/arpack-ng/releases/tag/']
+sources = ["%(version)s.tar.gz"]
+
+patches = [
+    'ARPACK-NG-%(version)s-install-arpack-examples_gpsmkl.patch'
+]
+
+checksums = [
+    'ada5aeb3878874383307239c9235b716a8a170c6d096a6625bfd529844df003d',  # 3.8.0.tar.gz
+    # ARPACK-NG-3.8.0-install-arpack-examples_gpsmkl.patch
+    'edf121fcaf5f2bf17c8395d5c4aae35d106eb3746b29561927f53ed6d3769707',
+]
+
+builddependencies = [
+    ('Autotools', '20220317'),
+    ('pkgconf', '1.8.0')
+]
+
+preconfigopts = 'sh bootstrap &&'
+
+configopts = '--enable-mpi --with-pic --enable-static --with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK"'
+
+postinstallcmds = [
+    "cp -r EXAMPLES %(installdir)s/EXAMPLES",
+    "cp -r PARPACK/EXAMPLES/MPI %(installdir)s/EXAMPLES/PARPACK",
+]
+
+sanity_check_paths = {
+    'files': ["lib/libarpack.a", "lib/libarpack.%s" % SHLIB_EXT, "lib/libparpack.a", "lib/libparpack.%s" % SHLIB_EXT],
+    'dirs': []
+}
+
+modextravars = {
+    'ARPACK_ROOT': '%(installdir)s',
+    'PARPACK_ROOT': '%(installdir)s',
+    'ARPACK_LIB': '%(installdir)s/lib',
+    'PARPACK_LIB': '%(installdir)s/lib'
+}
+
+moduleclass = 'numlib'
diff --git a/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-gcccoremkl-11.3.0-2022.1.0-nompi.eb b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-gcccoremkl-11.3.0-2022.1.0-nompi.eb
new file mode 100644
index 0000000000000000000000000000000000000000..5dbaa878d3512cbce6ca945aa68e9475c27ab265
--- /dev/null
+++ b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-gcccoremkl-11.3.0-2022.1.0-nompi.eb
@@ -0,0 +1,44 @@
+easyblock = 'ConfigureMake'
+name = 'ARPACK-NG'
+version = '3.8.0'
+versionsuffix = '-nompi'
+homepage = 'http://forge.scilab.org/index.php/p/arpack-ng/'
+
+description = """ARPACK-NG is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems.
+
+libarpack.a has been installed in $EBROOTARPACKMINNG.
+
+"""
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.3.0-2022.1.0'}
+
+toolchainopts = {'opt': True, 'optarch': True, 'pic': True}
+source_urls = ['https://github.com/opencollab/arpack-ng/archive/']
+sources = ["%(version)s.tar.gz"]
+
+checksums = ['ada5aeb3878874383307239c9235b716a8a170c6d096a6625bfd529844df003d']
+
+builddependencies = [
+    ('binutils', '2.38'),
+    ('Autotools', '20220317'),
+    ('pkgconf', '1.8.0')
+]
+
+# We hide it since this should be used just for Jupyter and the MPI version should be preferred for normal cases
+
+hidden = True
+
+preconfigopts = 'sh bootstrap &&'
+configopts = '--with-pic --with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK"'
+
+sanity_check_paths = {
+    'files': ["lib/libarpack.%s" % SHLIB_EXT, ],
+    'dirs': []
+}
+
+modextravars = {
+    'ARPACK_ROOT': '%(installdir)s',
+    'ARPACK_LIB': '%(installdir)s/lib',
+}
+
+moduleclass = 'numlib'
diff --git a/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-install-arpack-examples.patch b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-install-arpack-examples.patch
new file mode 100644
index 0000000000000000000000000000000000000000..8ec3b0762eea851e0e27c6c0f1c003a43ae8fefb
--- /dev/null
+++ b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-install-arpack-examples.patch
@@ -0,0 +1,538 @@
+--- arpack-ng-3.8.0/PARPACK_CHANGES	2021-06-30 09:57:39.220219000 +0200
++++ arpack-ng-3.8.0-ok/PARPACK_CHANGES	2021-06-30 10:25:30.148960874 +0200
+@@ -334,4 +334,6 @@
+ 36. 09/18/2016 p*apps.f and p*aitr.f contain condition to fetch machine epsilon.
+     When different p*aupd call use communicator with different number of CPU these
+     conditions cause deadlock. Variables inside conditions are moved to global
+-    to be reset each first iteration
+\ No newline at end of file
++    to be reset each first iteration
++
++
+--- arpack-ng-3.8.0/EXAMPLES/BAND/Makefile_band_intel	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/BAND/Makefile_band_intel	2021-06-30 10:36:04.492823000 +0200
+@@ -0,0 +1,159 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++cnbdr1_OBJECTS = cnbdr1.o cnband.o
++cnbdr2_OBJECTS = cnbdr2.o cnband.o
++cnbdr3_OBJECTS = cnbdr3.o cnband.o
++cnbdr4_OBJECTS = cnbdr4.o cnband.o
++dnbdr1_OBJECTS = dnbdr1.o dnband.o
++dnbdr2_OBJECTS = dnbdr2.o dnband.o
++dnbdr3_OBJECTS = dnbdr3.o dnband.o
++dnbdr4_OBJECTS = dnbdr4.o dnband.o
++dnbdr5_OBJECTS = dnbdr5.o dnband.o
++dnbdr6_OBJECTS = dnbdr6.o dnband.o
++dsbdr1_OBJECTS = dsbdr1.o dsband.o
++dsbdr2_OBJECTS = dsbdr2.o dsband.o
++dsbdr3_OBJECTS = dsbdr3.o dsband.o
++dsbdr4_OBJECTS = dsbdr4.o dsband.o
++dsbdr5_OBJECTS = dsbdr5.o dsband.o
++dsbdr6_OBJECTS = dsbdr6.o dsband.o
++snbdr1_OBJECTS = snbdr1.o snband.o
++snbdr2_OBJECTS = snbdr2.o snband.o
++snbdr3_OBJECTS = snbdr3.o snband.o
++snbdr4_OBJECTS = snbdr4.o snband.o
++snbdr5_OBJECTS = snbdr5.o snband.o
++snbdr6_OBJECTS = snbdr6.o snband.o
++ssbdr1_OBJECTS = ssbdr1.o ssband.o
++ssbdr2_OBJECTS = ssbdr2.o ssband.o
++ssbdr3_OBJECTS = ssbdr3.o ssband.o
++ssbdr4_OBJECTS = ssbdr4.o ssband.o
++ssbdr5_OBJECTS = ssbdr5.o ssband.o
++ssbdr6_OBJECTS = ssbdr6.o ssband.o
++znbdr1_OBJECTS = znbdr1.o znband.o
++znbdr2_OBJECTS = znbdr2.o znband.o
++znbdr3_OBJECTS = znbdr3.o znband.o
++znbdr4_OBJECTS = znbdr4.o znband.o
++
++all : cnbdr1 cnbdr2 cnbdr3 cnbdr4 \
++	dnbdr1 dnbdr2 dnbdr3 dnbdr4 dnbdr5 dnbdr6 \
++	dsbdr1 dsbdr2 dsbdr3 dsbdr4 dsbdr5 dsbdr6 \
++	snbdr1 snbdr2 snbdr3 snbdr4 snbdr5 snbdr6 \
++	ssbdr1 ssbdr2 ssbdr3 ssbdr4 ssbdr5 ssbdr6 \
++	znbdr1 znbdr2 znbdr3 znbdr4
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++cnbdr1 : $(cnbdr1_OBJECTS)
++	$(F77LD) -o $@ $(cnbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cnbdr2 : $(cnbdr2_OBJECTS)
++	$(F77LD) -o $@ $(cnbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cnbdr3 : $(cnbdr3_OBJECTS)
++	$(F77LD) -o $@ $(cnbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cnbdr4 : $(cnbdr4_OBJECTS)
++	$(F77LD) -o $@ $(cnbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr1 : $(dnbdr1_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr2 : $(dnbdr2_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr3 : $(dnbdr3_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr4 : $(dnbdr4_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr5 : $(dnbdr5_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr6 : $(dnbdr6_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr1 : $(dsbdr1_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr2 : $(dsbdr2_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr3 : $(dsbdr3_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr4 : $(dsbdr4_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr5 : $(dsbdr5_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr6 : $(dsbdr6_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr1 : $(snbdr1_OBJECTS)
++	$(F77LD) -o $@ $(snbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr2 : $(snbdr2_OBJECTS)
++	$(F77LD) -o $@ $(snbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr3 : $(snbdr3_OBJECTS)
++	$(F77LD) -o $@ $(snbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr4 : $(snbdr4_OBJECTS)
++	$(F77LD) -o $@ $(snbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr5 : $(snbdr5_OBJECTS)
++	$(F77LD) -o $@ $(snbdr5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr6 : $(snbdr6_OBJECTS)
++	$(F77LD) -o $@ $(snbdr6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr1 : $(ssbdr1_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr2 : $(ssbdr2_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr3 : $(ssbdr3_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr4 : $(ssbdr4_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr5 : $(ssbdr5_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr6 : $(ssbdr6_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znbdr1 : $(znbdr1_OBJECTS)
++	$(F77LD) -o $@ $(znbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znbdr2 : $(znbdr2_OBJECTS)
++	$(F77LD) -o $@ $(znbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znbdr3 : $(znbdr3_OBJECTS)
++	$(F77LD) -o $@ $(znbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znbdr4 : $(znbdr4_OBJECTS)
++	$(F77LD) -o $@ $(znbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/COMPLEX/Makefile_complex_intel	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/COMPLEX/Makefile_complex_intel	2021-06-30 10:36:04.496200000 +0200
+@@ -0,0 +1,59 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++cndrv1_OBJECTS = cndrv1.o
++cndrv2_OBJECTS = cndrv2.o
++cndrv3_OBJECTS = cndrv3.o
++cndrv4_OBJECTS = cndrv4.o
++zndrv1_OBJECTS = zndrv1.o
++zndrv2_OBJECTS = zndrv2.o
++zndrv3_OBJECTS = zndrv3.o
++zndrv4_OBJECTS = zndrv4.o
++
++all : cndrv1 cndrv2 cndrv3 cndrv4 \
++	zndrv1 zndrv2 zndrv3 zndrv4
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++cndrv1 : $(cndrv1_OBJECTS)
++	$(F77LD) -o $@ $(cndrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cndrv2 : $(cndrv2_OBJECTS)
++	$(F77LD) -o $@ $(cndrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cndrv3 : $(cndrv3_OBJECTS)
++	$(F77LD) -o $@ $(cndrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cndrv4 : $(cndrv4_OBJECTS)
++	$(F77LD) -o $@ $(cndrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++zndrv1 : $(zndrv1_OBJECTS)
++	$(F77LD) -o $@ $(zndrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++zndrv2 : $(zndrv2_OBJECTS)
++	$(F77LD) -o $@ $(zndrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++zndrv3 : $(zndrv3_OBJECTS)
++	$(F77LD) -o $@ $(zndrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++zndrv4 : $(zndrv4_OBJECTS)
++	$(F77LD) -o $@ $(zndrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/NONSYM/Makefile_nonsym_intel	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/NONSYM/Makefile_nonsym_intel	2021-06-30 10:36:04.539153000 +0200
+@@ -0,0 +1,75 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++dndrv1_OBJECTS = dndrv1.o
++dndrv2_OBJECTS = dndrv2.o
++dndrv3_OBJECTS = dndrv3.o
++dndrv4_OBJECTS = dndrv4.o
++dndrv5_OBJECTS = dndrv5.o
++dndrv6_OBJECTS = dndrv6.o
++sndrv1_OBJECTS = sndrv1.o
++sndrv2_OBJECTS = sndrv2.o
++sndrv3_OBJECTS = sndrv3.o
++sndrv4_OBJECTS = sndrv4.o
++sndrv5_OBJECTS = sndrv5.o
++sndrv6_OBJECTS = sndrv6.o
++
++all : dndrv1 dndrv2 dndrv3 dndrv4 dndrv5 dndrv6 \
++	sndrv1 sndrv2 sndrv3 sndrv4 sndrv5 sndrv6
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++dndrv1 : $(dndrv1_OBJECTS)
++	$(F77LD) -o $@ $(dndrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv2 : $(dndrv2_OBJECTS)
++	$(F77LD) -o $@ $(dndrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv3 : $(dndrv3_OBJECTS)
++	$(F77LD) -o $@ $(dndrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv4 : $(dndrv4_OBJECTS)
++	$(F77LD) -o $@ $(dndrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv5 : $(dndrv5_OBJECTS)
++	$(F77LD) -o $@ $(dndrv5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv6 : $(dndrv6_OBJECTS)
++	$(F77LD) -o $@ $(dndrv6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv1 : $(sndrv1_OBJECTS)
++	$(F77LD) -o $@ $(sndrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv2 : $(sndrv2_OBJECTS)
++	$(F77LD) -o $@ $(sndrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv3 : $(sndrv3_OBJECTS)
++	$(F77LD) -o $@ $(sndrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv4 : $(sndrv4_OBJECTS)
++	$(F77LD) -o $@ $(sndrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv5 : $(sndrv5_OBJECTS)
++	$(F77LD) -o $@ $(sndrv5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv6 : $(sndrv6_OBJECTS)
++	$(F77LD) -o $@ $(sndrv6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/PARPACK/EXAMPLES/MPI/Makefile_parpack_intel	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/PARPACK/EXAMPLES/MPI/Makefile_parpack_intel	2021-06-30 10:37:57.095101000 +0200
+@@ -0,0 +1,51 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread
++
++PARPACKLIB = -L$(ARPACK_LIB) -lparpack -larpack
++
++pcndrv1_OBJECTS = pcndrv1.o
++pdndrv1_OBJECTS = pdndrv1.o
++pdndrv3_OBJECTS = pdndrv3.o
++psndrv1_OBJECTS = psndrv1.o
++psndrv3_OBJECTS = psndrv3.o
++pzndrv1_OBJECTS = pzndrv1.o
++
++all : pcndrv1 pdndrv1 pdndrv3 \
++	psndrv1 psndrv3 pzndrv1
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++pcndrv1 : $(pcndrv1_OBJECTS)
++	$(F77LD) -o $@ $(pcndrv1_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++pdndrv1 : $(pdndrv1_OBJECTS)
++	$(F77LD) -o $@ $(pdndrv1_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++pdndrv3 : $(pdndrv3_OBJECTS)
++	$(F77LD) -o $@ $(pdndrv3_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++psndrv1 : $(psndrv1_OBJECTS)
++	$(F77LD) -o $@ $(psndrv1_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++psndrv3 : $(psndrv3_OBJECTS)
++	$(F77LD) -o $@ $(psndrv3_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++pzndrv1 : $(pzndrv1_OBJECTS)
++	$(F77LD) -o $@ $(pzndrv1_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/SIMPLE/Makefile_simple_intel	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/SIMPLE/Makefile_simple_intel	2021-06-30 10:36:04.541931000 +0200
+@@ -0,0 +1,51 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++cnsimp_OBJECTS = cnsimp.o
++dnsimp_OBJECTS = dnsimp.o
++dssimp_OBJECTS = dssimp.o
++snsimp_OBJECTS = snsimp.o
++sssimp_OBJECTS = sssimp.o
++znsimp_OBJECTS = znsimp.o
++
++all : cnsimp dnsimp dssimp \
++	snsimp sssimp znsimp 
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++cnsimp : $(cnsimp_OBJECTS)
++	$(F77LD) -o $@ $(cnsimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnsimp : $(dnsimp_OBJECTS)
++	$(F77LD) -o $@ $(dnsimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dssimp : $(dssimp_OBJECTS)
++	$(F77LD) -o $@ $(dssimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snsimp : $(snsimp_OBJECTS)
++	$(F77LD) -o $@ $(snsimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sssimp : $(sssimp_OBJECTS)
++	$(F77LD) -o $@ $(sssimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znsimp : $(znsimp_OBJECTS)
++	$(F77LD) -o $@ $(znsimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/SVD/Makefile_svd_intel	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/SVD/Makefile_svd_intel	2021-06-30 10:36:04.546102000 +0200
+@@ -0,0 +1,36 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++dsvd_OBJECTS = dsvd.o
++ssvd_OBJECTS = ssvd.o
++
++all : dsvd \
++	ssvd 
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++
++dsvd : $(dsvd_OBJECTS)
++	$(F77LD) -o $@ $(dsvd_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssvd : $(ssvd_OBJECTS)
++	$(F77LD) -o $@ $(ssvd_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/SYM/Makefile_sym_intel	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/SYM/Makefile_sym_intel	2021-06-30 10:36:04.549670000 +0200
+@@ -0,0 +1,75 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++dsdrv1_OBJECTS = dsdrv1.o
++dsdrv2_OBJECTS = dsdrv2.o
++dsdrv3_OBJECTS = dsdrv3.o
++dsdrv4_OBJECTS = dsdrv4.o
++dsdrv5_OBJECTS = dsdrv5.o
++dsdrv6_OBJECTS = dsdrv6.o
++ssdrv1_OBJECTS = ssdrv1.o
++ssdrv2_OBJECTS = ssdrv2.o
++ssdrv3_OBJECTS = ssdrv3.o
++ssdrv4_OBJECTS = ssdrv4.o
++ssdrv5_OBJECTS = ssdrv5.o
++ssdrv6_OBJECTS = ssdrv6.o
++
++all : dsdrv1 dsdrv2 dsdrv3 dsdrv4 dsdrv5 dsdrv6 \
++	ssdrv1 ssdrv2 ssdrv3 ssdrv4 ssdrv5 ssdrv6
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++dsdrv1 : $(dsdrv1_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv2 : $(dsdrv2_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv3 : $(dsdrv3_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv4 : $(dsdrv4_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv5 : $(dsdrv5_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv6 : $(dsdrv6_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv1 : $(ssdrv1_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv2 : $(ssdrv2_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv3 : $(ssdrv3_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv4 : $(ssdrv4_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv5 : $(ssdrv5_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv6 : $(ssdrv6_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
diff --git a/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-install-arpack-examples_gpsmkl.patch b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-install-arpack-examples_gpsmkl.patch
new file mode 100644
index 0000000000000000000000000000000000000000..cb08b9ea9053080a2e005fe6cd8b7e318625133b
--- /dev/null
+++ b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-install-arpack-examples_gpsmkl.patch
@@ -0,0 +1,538 @@
+--- arpack-ng-3.8.0/PARPACK_CHANGES	2021-06-30 09:57:39.220219000 +0200
++++ arpack-ng-3.8.0-ok/PARPACK_CHANGES	2021-06-30 10:25:30.148960874 +0200
+@@ -334,4 +334,6 @@
+ 36. 09/18/2016 p*apps.f and p*aitr.f contain condition to fetch machine epsilon.
+     When different p*aupd call use communicator with different number of CPU these
+     conditions cause deadlock. Variables inside conditions are moved to global
+-    to be reset each first iteration
+\ No newline at end of file
++    to be reset each first iteration
++
++
+--- arpack-ng-3.8.0/EXAMPLES/BAND/Makefile_band	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/BAND/Makefile_band	2021-06-30 10:36:04.461587000 +0200
+@@ -0,0 +1,159 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++cnbdr1_OBJECTS = cnbdr1.o cnband.o
++cnbdr2_OBJECTS = cnbdr2.o cnband.o
++cnbdr3_OBJECTS = cnbdr3.o cnband.o
++cnbdr4_OBJECTS = cnbdr4.o cnband.o
++dnbdr1_OBJECTS = dnbdr1.o dnband.o
++dnbdr2_OBJECTS = dnbdr2.o dnband.o
++dnbdr3_OBJECTS = dnbdr3.o dnband.o
++dnbdr4_OBJECTS = dnbdr4.o dnband.o
++dnbdr5_OBJECTS = dnbdr5.o dnband.o
++dnbdr6_OBJECTS = dnbdr6.o dnband.o
++dsbdr1_OBJECTS = dsbdr1.o dsband.o
++dsbdr2_OBJECTS = dsbdr2.o dsband.o
++dsbdr3_OBJECTS = dsbdr3.o dsband.o
++dsbdr4_OBJECTS = dsbdr4.o dsband.o
++dsbdr5_OBJECTS = dsbdr5.o dsband.o
++dsbdr6_OBJECTS = dsbdr6.o dsband.o
++snbdr1_OBJECTS = snbdr1.o snband.o
++snbdr2_OBJECTS = snbdr2.o snband.o
++snbdr3_OBJECTS = snbdr3.o snband.o
++snbdr4_OBJECTS = snbdr4.o snband.o
++snbdr5_OBJECTS = snbdr5.o snband.o
++snbdr6_OBJECTS = snbdr6.o snband.o
++ssbdr1_OBJECTS = ssbdr1.o ssband.o
++ssbdr2_OBJECTS = ssbdr2.o ssband.o
++ssbdr3_OBJECTS = ssbdr3.o ssband.o
++ssbdr4_OBJECTS = ssbdr4.o ssband.o
++ssbdr5_OBJECTS = ssbdr5.o ssband.o
++ssbdr6_OBJECTS = ssbdr6.o ssband.o
++znbdr1_OBJECTS = znbdr1.o znband.o
++znbdr2_OBJECTS = znbdr2.o znband.o
++znbdr3_OBJECTS = znbdr3.o znband.o
++znbdr4_OBJECTS = znbdr4.o znband.o
++
++all : cnbdr1 cnbdr2 cnbdr3 cnbdr4 \
++	dnbdr1 dnbdr2 dnbdr3 dnbdr4 dnbdr5 dnbdr6 \
++	dsbdr1 dsbdr2 dsbdr3 dsbdr4 dsbdr5 dsbdr6 \
++	snbdr1 snbdr2 snbdr3 snbdr4 snbdr5 snbdr6 \
++	ssbdr1 ssbdr2 ssbdr3 ssbdr4 ssbdr5 ssbdr6 \
++	znbdr1 znbdr2 znbdr3 znbdr4
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++cnbdr1 : $(cnbdr1_OBJECTS)
++	$(F77LD) -o $@ $(cnbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cnbdr2 : $(cnbdr2_OBJECTS)
++	$(F77LD) -o $@ $(cnbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cnbdr3 : $(cnbdr3_OBJECTS)
++	$(F77LD) -o $@ $(cnbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cnbdr4 : $(cnbdr4_OBJECTS)
++	$(F77LD) -o $@ $(cnbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr1 : $(dnbdr1_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr2 : $(dnbdr2_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr3 : $(dnbdr3_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr4 : $(dnbdr4_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr5 : $(dnbdr5_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnbdr6 : $(dnbdr6_OBJECTS)
++	$(F77LD) -o $@ $(dnbdr6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr1 : $(dsbdr1_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr2 : $(dsbdr2_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr3 : $(dsbdr3_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr4 : $(dsbdr4_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr5 : $(dsbdr5_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsbdr6 : $(dsbdr6_OBJECTS)
++	$(F77LD) -o $@ $(dsbdr6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr1 : $(snbdr1_OBJECTS)
++	$(F77LD) -o $@ $(snbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr2 : $(snbdr2_OBJECTS)
++	$(F77LD) -o $@ $(snbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr3 : $(snbdr3_OBJECTS)
++	$(F77LD) -o $@ $(snbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr4 : $(snbdr4_OBJECTS)
++	$(F77LD) -o $@ $(snbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr5 : $(snbdr5_OBJECTS)
++	$(F77LD) -o $@ $(snbdr5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snbdr6 : $(snbdr6_OBJECTS)
++	$(F77LD) -o $@ $(snbdr6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr1 : $(ssbdr1_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr2 : $(ssbdr2_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr3 : $(ssbdr3_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr4 : $(ssbdr4_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr5 : $(ssbdr5_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssbdr6 : $(ssbdr6_OBJECTS)
++	$(F77LD) -o $@ $(ssbdr6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znbdr1 : $(znbdr1_OBJECTS)
++	$(F77LD) -o $@ $(znbdr1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znbdr2 : $(znbdr2_OBJECTS)
++	$(F77LD) -o $@ $(znbdr2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znbdr3 : $(znbdr3_OBJECTS)
++	$(F77LD) -o $@ $(znbdr3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znbdr4 : $(znbdr4_OBJECTS)
++	$(F77LD) -o $@ $(znbdr4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/COMPLEX/Makefile_complex	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/COMPLEX/Makefile_complex	2021-06-30 10:36:04.494505000 +0200
+@@ -0,0 +1,59 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++cndrv1_OBJECTS = cndrv1.o
++cndrv2_OBJECTS = cndrv2.o
++cndrv3_OBJECTS = cndrv3.o
++cndrv4_OBJECTS = cndrv4.o
++zndrv1_OBJECTS = zndrv1.o
++zndrv2_OBJECTS = zndrv2.o
++zndrv3_OBJECTS = zndrv3.o
++zndrv4_OBJECTS = zndrv4.o
++
++all : cndrv1 cndrv2 cndrv3 cndrv4 \
++	zndrv1 zndrv2 zndrv3 zndrv4
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++cndrv1 : $(cndrv1_OBJECTS)
++	$(F77LD) -o $@ $(cndrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cndrv2 : $(cndrv2_OBJECTS)
++	$(F77LD) -o $@ $(cndrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cndrv3 : $(cndrv3_OBJECTS)
++	$(F77LD) -o $@ $(cndrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++cndrv4 : $(cndrv4_OBJECTS)
++	$(F77LD) -o $@ $(cndrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++zndrv1 : $(zndrv1_OBJECTS)
++	$(F77LD) -o $@ $(zndrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++zndrv2 : $(zndrv2_OBJECTS)
++	$(F77LD) -o $@ $(zndrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++zndrv3 : $(zndrv3_OBJECTS)
++	$(F77LD) -o $@ $(zndrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++zndrv4 : $(zndrv4_OBJECTS)
++	$(F77LD) -o $@ $(zndrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/NONSYM/Makefile_nonsym	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/NONSYM/Makefile_nonsym	2021-06-30 10:36:04.498741000 +0200
+@@ -0,0 +1,75 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++dndrv1_OBJECTS = dndrv1.o
++dndrv2_OBJECTS = dndrv2.o
++dndrv3_OBJECTS = dndrv3.o
++dndrv4_OBJECTS = dndrv4.o
++dndrv5_OBJECTS = dndrv5.o
++dndrv6_OBJECTS = dndrv6.o
++sndrv1_OBJECTS = sndrv1.o
++sndrv2_OBJECTS = sndrv2.o
++sndrv3_OBJECTS = sndrv3.o
++sndrv4_OBJECTS = sndrv4.o
++sndrv5_OBJECTS = sndrv5.o
++sndrv6_OBJECTS = sndrv6.o
++
++all : dndrv1 dndrv2 dndrv3 dndrv4 dndrv5 dndrv6 \
++	sndrv1 sndrv2 sndrv3 sndrv4 sndrv5 sndrv6
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++dndrv1 : $(dndrv1_OBJECTS)
++	$(F77LD) -o $@ $(dndrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv2 : $(dndrv2_OBJECTS)
++	$(F77LD) -o $@ $(dndrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv3 : $(dndrv3_OBJECTS)
++	$(F77LD) -o $@ $(dndrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv4 : $(dndrv4_OBJECTS)
++	$(F77LD) -o $@ $(dndrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv5 : $(dndrv5_OBJECTS)
++	$(F77LD) -o $@ $(dndrv5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dndrv6 : $(dndrv6_OBJECTS)
++	$(F77LD) -o $@ $(dndrv6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv1 : $(sndrv1_OBJECTS)
++	$(F77LD) -o $@ $(sndrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv2 : $(sndrv2_OBJECTS)
++	$(F77LD) -o $@ $(sndrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv3 : $(sndrv3_OBJECTS)
++	$(F77LD) -o $@ $(sndrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv4 : $(sndrv4_OBJECTS)
++	$(F77LD) -o $@ $(sndrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv5 : $(sndrv5_OBJECTS)
++	$(F77LD) -o $@ $(sndrv5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sndrv6 : $(sndrv6_OBJECTS)
++	$(F77LD) -o $@ $(sndrv6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/PARPACK/EXAMPLES/MPI/Makefile_parpack	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/PARPACK/EXAMPLES/MPI/Makefile_parpack	2021-06-30 10:37:57.093198000 +0200
+@@ -0,0 +1,51 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread
++
++PARPACKLIB = -L$(ARPACK_LIB) -lparpack -larpack
++
++pcndrv1_OBJECTS = pcndrv1.o
++pdndrv1_OBJECTS = pdndrv1.o
++pdndrv3_OBJECTS = pdndrv3.o
++psndrv1_OBJECTS = psndrv1.o
++psndrv3_OBJECTS = psndrv3.o
++pzndrv1_OBJECTS = pzndrv1.o
++
++all : pcndrv1 pdndrv1 pdndrv3 \
++	psndrv1 psndrv3 pzndrv1
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++pcndrv1 : $(pcndrv1_OBJECTS)
++	$(F77LD) -o $@ $(pcndrv1_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++pdndrv1 : $(pdndrv1_OBJECTS)
++	$(F77LD) -o $@ $(pdndrv1_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++pdndrv3 : $(pdndrv3_OBJECTS)
++	$(F77LD) -o $@ $(pdndrv3_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++psndrv1 : $(psndrv1_OBJECTS)
++	$(F77LD) -o $@ $(psndrv1_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++psndrv3 : $(psndrv3_OBJECTS)
++	$(F77LD) -o $@ $(psndrv3_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++pzndrv1 : $(pzndrv1_OBJECTS)
++	$(F77LD) -o $@ $(pzndrv1_OBJECTS) $(PARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/SIMPLE/Makefile_simple	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/SIMPLE/Makefile_simple	2021-06-30 10:36:04.541054000 +0200
+@@ -0,0 +1,51 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++cnsimp_OBJECTS = cnsimp.o
++dnsimp_OBJECTS = dnsimp.o
++dssimp_OBJECTS = dssimp.o
++snsimp_OBJECTS = snsimp.o
++sssimp_OBJECTS = sssimp.o
++znsimp_OBJECTS = znsimp.o
++
++all : cnsimp dnsimp dssimp \
++	snsimp sssimp znsimp 
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++cnsimp : $(cnsimp_OBJECTS)
++	$(F77LD) -o $@ $(cnsimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dnsimp : $(dnsimp_OBJECTS)
++	$(F77LD) -o $@ $(dnsimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dssimp : $(dssimp_OBJECTS)
++	$(F77LD) -o $@ $(dssimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++snsimp : $(snsimp_OBJECTS)
++	$(F77LD) -o $@ $(snsimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++sssimp : $(sssimp_OBJECTS)
++	$(F77LD) -o $@ $(sssimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++znsimp : $(znsimp_OBJECTS)
++	$(F77LD) -o $@ $(znsimp_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/SVD/Makefile_svd	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/SVD/Makefile_svd	2021-06-30 10:36:04.545031000 +0200
+@@ -0,0 +1,36 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++dsvd_OBJECTS = dsvd.o
++ssvd_OBJECTS = ssvd.o
++
++all : dsvd \
++	ssvd 
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++
++dsvd : $(dsvd_OBJECTS)
++	$(F77LD) -o $@ $(dsvd_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssvd : $(ssvd_OBJECTS)
++	$(F77LD) -o $@ $(ssvd_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
+--- arpack-ng-3.8.0/EXAMPLES/SYM/Makefile_sym	1970-01-01 01:00:00.000000000 +0100
++++ arpack-ng-3.8.0-ok/EXAMPLES/SYM/Makefile_sym	2021-06-30 10:36:04.548174000 +0200
+@@ -0,0 +1,75 @@
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++#
++CC = mpicc
++CFLAGS = -g -O2
++CPP = mpicc -E
++CPPFLAGS = 
++
++F77 = mpif77
++FFLAGS = -g -O2
++F77LD = $(F77)
++FGREP = /bin/grep -F
++
++LAPACK_LIBS = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread
++
++ARPACKLIB = -L$(ARPACK_LIB) -larpack
++
++dsdrv1_OBJECTS = dsdrv1.o
++dsdrv2_OBJECTS = dsdrv2.o
++dsdrv3_OBJECTS = dsdrv3.o
++dsdrv4_OBJECTS = dsdrv4.o
++dsdrv5_OBJECTS = dsdrv5.o
++dsdrv6_OBJECTS = dsdrv6.o
++ssdrv1_OBJECTS = ssdrv1.o
++ssdrv2_OBJECTS = ssdrv2.o
++ssdrv3_OBJECTS = ssdrv3.o
++ssdrv4_OBJECTS = ssdrv4.o
++ssdrv5_OBJECTS = ssdrv5.o
++ssdrv6_OBJECTS = ssdrv6.o
++
++all : dsdrv1 dsdrv2 dsdrv3 dsdrv4 dsdrv5 dsdrv6 \
++	ssdrv1 ssdrv2 ssdrv3 ssdrv4 ssdrv5 ssdrv6
++
++.SUFFIXES: .f .o 
++.f.o:
++	$(F77) -c -o $@ $<
++
++dsdrv1 : $(dsdrv1_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv2 : $(dsdrv2_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv3 : $(dsdrv3_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv4 : $(dsdrv4_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv5 : $(dsdrv5_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++dsdrv6 : $(dsdrv6_OBJECTS)
++	$(F77LD) -o $@ $(dsdrv6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv1 : $(ssdrv1_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv1_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv2 : $(ssdrv2_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv2_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv3 : $(ssdrv3_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv3_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv4 : $(ssdrv4_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv4_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv5 : $(ssdrv5_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv5_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++ssdrv6 : $(ssdrv6_OBJECTS)
++	$(F77LD) -o $@ $(ssdrv6_OBJECTS) $(ARPACKLIB) $(LAPACK_LIBS)
++
++
diff --git a/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-intel-para-2022a.eb b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-intel-para-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..eaa66876668de0ab0cc40e9b9f9847d02aca59ab
--- /dev/null
+++ b/Golden_Repo/a/ARPACK-NG/ARPACK-NG-3.8.0-intel-para-2022a.eb
@@ -0,0 +1,62 @@
+easyblock = 'ConfigureMake'
+
+name = 'ARPACK-NG'
+
+version = '3.8.0'
+
+homepage = 'http://forge.scilab.org/index.php/p/arpack-ng/'
+
+description = """ARPACK-NG is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems.
+
+libarpack.a and libparpack.a have been installed in $EBROOTARPACKMINNG.
+
+In addition the variables ARPACK_ROOT, ARPACK_LIB, PARPACK_ROOT, and PARPACK_LIB are set.
+
+"""
+
+examples = 'Examples can be found in $ARPACK_ROOT/EXAMPLES'
+
+toolchain = {'name': 'intel-para', 'version': '2022a'}
+
+toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': True}
+
+source_urls = ['https://github.com/opencollab/arpack-ng/archive/']
+
+sources = ["%(version)s.tar.gz"]
+
+patches = [
+    'ARPACK-NG-%(version)s-install-arpack-examples.patch'
+]
+
+checksums = [
+    'ada5aeb3878874383307239c9235b716a8a170c6d096a6625bfd529844df003d',  # 3.8.0.tar.gz
+    'bd5a1d29d8ca0ac8ab87e2f78d06d4fd13ee8ae22ad9b12d36512f20eeb86f62',  # ARPACK-NG-3.8.0-install-arpack-examples.patch
+]
+
+builddependencies = [
+    ('Autotools', '20220317'),
+    ('pkgconf', '1.8.0')
+]
+
+preconfigopts = 'sh bootstrap &&'
+
+configopts = '--enable-mpi --with-pic --enable-static --with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK"'
+
+postinstallcmds = [
+    "cp -r EXAMPLES %(installdir)s/EXAMPLES",
+    "cp -r PARPACK/EXAMPLES/MPI %(installdir)s/EXAMPLES/PARPACK",
+]
+
+sanity_check_paths = {
+    'files': ["lib/libarpack.a", "lib/libarpack.%s" % SHLIB_EXT, "lib/libparpack.a", "lib/libparpack.%s" % SHLIB_EXT],
+    'dirs': []
+}
+
+modextravars = {
+    'ARPACK_ROOT': '%(installdir)s',
+    'PARPACK_ROOT': '%(installdir)s',
+    'ARPACK_LIB': '%(installdir)s/lib',
+    'PARPACK_LIB': '%(installdir)s/lib'
+}
+
+moduleclass = 'numlib'
diff --git a/Golden_Repo/c/Catalyst/Catalyst-2.0.0-rc3-foss-2022a.eb b/Golden_Repo/c/Catalyst/Catalyst-2.0.0-rc3-foss-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..21eaff1368daa7838ce3493da7863aa81997a027
--- /dev/null
+++ b/Golden_Repo/c/Catalyst/Catalyst-2.0.0-rc3-foss-2022a.eb
@@ -0,0 +1,41 @@
+easyblock = 'CMakeMake'
+
+name = 'Catalyst'
+version = '2.0.0-rc3'
+
+homepage = "https://gitlab.kitware.com/paraview/catalyst/"
+description = """
+Catalyst is an API specification developed for simulations
+(and other scientific data producers)
+to analyze and visualize data in situ.
+"""
+
+toolchain = {'name': 'foss', 'version': '2022a'}
+toolchainopts = {'pic': True, 'usempi': True}
+
+source_urls = [('https://gitlab.kitware.com/paraview/catalyst/-/archive/v%(version)s/')]
+sources = [('catalyst-v%(version)s.tar.gz')]
+checksums = ['8862bd0a4d0be2176b4272f9affda1ea4e5092087acbb99a2fe2621c33834e05']
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+    ('pkgconf', '1.8.0'),
+]
+
+dependencies = []
+
+separate_build_dir = True
+
+# --- general settings --- #
+configopts = '-DCMAKE_VERBOSE_MAKEFILE=ON '
+configopts += '-DCATALYST_BUILD_TOOLS=ON '
+configopts += '-DCATALYST_USE_MPI=ON '
+
+# postinstallcmds = []
+
+sanity_check_paths = {
+    'files': ['lib/libcatalyst.so'],
+    'dirs': ['include/', 'lib'],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/c/Catalyst/Catalyst-2.0.0-rc3-gpsmkl-2022a.eb b/Golden_Repo/c/Catalyst/Catalyst-2.0.0-rc3-gpsmkl-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..1dde871ba337a511525a8b718aefa3fefb6b9e36
--- /dev/null
+++ b/Golden_Repo/c/Catalyst/Catalyst-2.0.0-rc3-gpsmkl-2022a.eb
@@ -0,0 +1,41 @@
+easyblock = 'CMakeMake'
+
+name = 'Catalyst'
+version = '2.0.0-rc3'
+
+homepage = "https://gitlab.kitware.com/paraview/catalyst/"
+description = """
+Catalyst is an API specification developed for simulations
+(and other scientific data producers)
+to analyze and visualize data in situ.
+"""
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'pic': True, 'usempi': True}
+
+source_urls = [('https://gitlab.kitware.com/paraview/catalyst/-/archive/v%(version)s/')]
+sources = [('catalyst-v%(version)s.tar.gz')]
+checksums = ['8862bd0a4d0be2176b4272f9affda1ea4e5092087acbb99a2fe2621c33834e05']
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+    ('pkgconf', '1.8.0'),
+]
+
+dependencies = []
+
+separate_build_dir = True
+
+# --- general settings --- #
+configopts = '-DCMAKE_VERBOSE_MAKEFILE=ON '
+configopts += '-DCATALYST_BUILD_TOOLS=ON '
+configopts += '-DCATALYST_USE_MPI=ON '
+
+# postinstallcmds = []
+
+sanity_check_paths = {
+    'files': ['lib/libcatalyst.so'],
+    'dirs': ['include/', 'lib'],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/h/h5py/h5py-3.7.0-gpsmpi-2022a.eb b/Golden_Repo/h/h5py/h5py-3.7.0-gpsmpi-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c615f7c6fd948d08b2d05eb1179a020164d5645c
--- /dev/null
+++ b/Golden_Repo/h/h5py/h5py-3.7.0-gpsmpi-2022a.eb
@@ -0,0 +1,35 @@
+easyblock = 'PythonPackage'
+
+name = 'h5py'
+version = '3.7.0'
+
+homepage = 'https://www.h5py.org/'
+description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library,
+ version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous
+ amounts of data."""
+
+toolchain = {'name': 'gpsmpi', 'version': '2022a'}
+toolchainopts = {'usempi': True}
+
+sources = [SOURCE_TAR_GZ]
+checksums = ['3fcf37884383c5da64846ab510190720027dca0768def34dd8dcb659dbe5cbf3']
+
+builddependencies = [('pkgconfig', '1.5.5', '-python')]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('SciPy-bundle', '2022.05', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('HDF5', '1.12.2'),
+    ('mpi4py', '3.1.4'),
+]
+
+use_pip = True
+sanity_pip_check = True
+download_dep_fail = True
+
+# h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0
+# without this environment variable, pip will fetch the minimum numpy version h5py supports during install,
+# even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency.
+preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
+
+moduleclass = 'data'
diff --git a/Golden_Repo/i/ITK/ITK-5.2.1-foss-2022a.eb b/Golden_Repo/i/ITK/ITK-5.2.1-foss-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..7b3c4dc99f3a94e29e4733fec9ff81134f360776
--- /dev/null
+++ b/Golden_Repo/i/ITK/ITK-5.2.1-foss-2022a.eb
@@ -0,0 +1,80 @@
+easyblock = 'CMakeMake'
+
+name = 'ITK'
+version = '5.2.1'
+
+homepage = 'https://itk.org'
+description = """Insight Segmentation and Registration Toolkit (ITK) provides
+ an extensive suite of software tools for registering and segmenting
+ multidimensional imaging data."""
+
+toolchain = {'name': 'foss', 'version': '2022a'}
+toolchainopts = {'pic': True, 'cstd': 'c++11'}
+
+github_account = 'InsightSoftwareConsortium'
+source_urls = [GITHUB_SOURCE]
+sources = ['v%(version)s.tar.gz']
+checksums = ['6022b2b64624b8bcec3333fe48d5f74ff6ebceb3bdf98258ba7d7fbbc76b99ab']
+
+builddependencies = [
+    ('binutils', '2.38'),
+    ('CMake', '3.23.1'),
+    ('Bison', '3.8.2'),
+    ('Eigen', '3.4.0'),
+    ('pkgconf', '1.8.0'),
+    ('Perl', '5.34.1'),
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('expat', '2.4.8'),
+    ('HDF5', '1.12.2'),
+    ('libjpeg-turbo', '2.1.3'),
+    ('libpng', '1.6.37'),
+    ('LibTIFF', '4.3.0'),
+    ('VTK', '9.2.5'),
+    ('zlib', '1.2.12'),
+    ('SWIG', '4.0.2',),
+    ('FFTW', '3.3.10'),
+    ('double-conversion', '3.2.0'),
+    ('tbb', '2021.5.0'),
+]
+
+local_sys_deps = [
+    'EIGEN', 'EXPAT', 'HDF5', 'JPEG', 'PNG', 'TIFF', 'ZLIB',
+    'FFTW', 'DOUBLECONVERSION', 'SWIG',
+]
+local_sys_cmake = ['-DITK_USE_SYSTEM_%s=ON' % d for d in local_sys_deps]
+
+configopts = "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON "
+configopts += '-DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF '
+configopts += '-DModule_ITKReview=ON -DModule_ITKVtkGlue=ON '
+configopts += '-DITK_WRAP_PYTHON:BOOL=ON '
+configopts += "-DSWIG_EXECUTABLE=${EBROOTSWIG}/bin/swig "
+configopts += ' '.join(local_sys_cmake)
+
+configopts += "-DModule_SimpleITKFilters=ON "
+configopts += '-DITK_LEGACY_REMOVE:BOOL=OFF '  # needed by SimpleITK
+configopts += "-DITK_FORBID_DOWNLOADS=OFF "  # needed by SimpleITK
+
+prebuildopts = "LC_ALL=C "
+
+preinstallopts = "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && "
+
+modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']}
+
+local_lib_names = ['ITKCommon', 'ITKIOHDF5', 'ITKIOJPEG', 'ITKIOPNG', 'ITKIOTIFF',
+                   'ITKReview', 'ITKVTK', 'ITKVtkGlue', 'itkSimpleITKFilters',
+                   'ITKFFT']
+
+sanity_check_paths = {
+    'files': ['bin/itkTestDriver'] +
+             ['lib/lib%s-%%(version_major)s.%%(version_minor)s.%s' % (l, SHLIB_EXT) for l in local_lib_names],
+    'dirs': ['include/ITK-%(version_major_minor)s',
+             'lib/python%(pyshortver)s/site-packages',
+             'share'],
+}
+
+sanity_check_commands = [('python', "-c 'import %(namelower)s'")]
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/i/ITK/ITK-5.2.1-gcccoremkl-11.3.0-2022.1.0-nompi.eb b/Golden_Repo/i/ITK/ITK-5.2.1-gcccoremkl-11.3.0-2022.1.0-nompi.eb
new file mode 100644
index 0000000000000000000000000000000000000000..ebf6dcee36dbb91972048e43703ec97926bbc031
--- /dev/null
+++ b/Golden_Repo/i/ITK/ITK-5.2.1-gcccoremkl-11.3.0-2022.1.0-nompi.eb
@@ -0,0 +1,81 @@
+easyblock = 'CMakeMake'
+
+name = 'ITK'
+version = '5.2.1'
+versionsuffix = '-nompi'
+
+homepage = 'https://itk.org'
+description = """Insight Segmentation and Registration Toolkit (ITK) provides
+ an extensive suite of software tools for registering and segmenting
+ multidimensional imaging data."""
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.3.0-2022.1.0'}
+toolchainopts = {'pic': True, 'cstd': 'c++11'}
+
+github_account = 'InsightSoftwareConsortium'
+source_urls = [GITHUB_SOURCE]
+sources = ['v%(version)s.tar.gz']
+checksums = ['6022b2b64624b8bcec3333fe48d5f74ff6ebceb3bdf98258ba7d7fbbc76b99ab']
+
+builddependencies = [
+    ('binutils', '2.38'),
+    ('CMake', '3.23.1'),
+    ('Bison', '3.8.2'),
+    ('Eigen', '3.4.0'),
+    ('pkgconf', '1.8.0'),
+    ('Perl', '5.34.1'),
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('expat', '2.4.8'),
+    ('HDF5', '1.12.2', '-serial'),
+    ('libjpeg-turbo', '2.1.3'),
+    ('libpng', '1.6.37'),
+    ('LibTIFF', '4.3.0'),
+    ('VTK', '9.2.5', '-nompi'),
+    ('zlib', '1.2.12'),
+    ('SWIG', '4.0.2',),
+    ('FFTW', '3.3.10'),
+    ('double-conversion', '3.2.0'),
+    ('tbb', '2021.5.0'),
+]
+
+local_sys_deps = [
+    'EIGEN', 'EXPAT', 'HDF5', 'JPEG', 'PNG', 'TIFF', 'ZLIB',
+    'FFTW', 'DOUBLECONVERSION', 'SWIG',
+]
+local_sys_cmake = ['-DITK_USE_SYSTEM_%s=ON' % d for d in local_sys_deps]
+
+configopts = "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON "
+configopts += '-DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF '
+configopts += '-DModule_ITKReview=ON -DModule_ITKVtkGlue=ON '
+configopts += '-DITK_WRAP_PYTHON:BOOL=ON '
+configopts += "-DSWIG_EXECUTABLE=${EBROOTSWIG}/bin/swig "
+configopts += ' '.join(local_sys_cmake)
+
+configopts += "-DModule_SimpleITKFilters=ON "
+configopts += '-DITK_LEGACY_REMOVE:BOOL=OFF '  # needed by SimpleITK
+configopts += "-DITK_FORBID_DOWNLOADS=OFF "  # needed by SimpleITK
+
+prebuildopts = "LC_ALL=C "
+
+preinstallopts = "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && "
+
+modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']}
+
+local_lib_names = ['ITKCommon', 'ITKIOHDF5', 'ITKIOJPEG', 'ITKIOPNG', 'ITKIOTIFF',
+                   'ITKReview', 'ITKVTK', 'ITKVtkGlue', 'itkSimpleITKFilters',
+                   'ITKFFT']
+
+sanity_check_paths = {
+    'files': ['bin/itkTestDriver'] +
+             ['lib/lib%s-%%(version_major)s.%%(version_minor)s.%s' % (l, SHLIB_EXT) for l in local_lib_names],
+    'dirs': ['include/ITK-%(version_major_minor)s',
+             'lib/python%(pyshortver)s/site-packages',
+             'share'],
+}
+
+sanity_check_commands = [('python', "-c 'import %(namelower)s'")]
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/i/ITK/ITK-5.2.1-gpsmkl-2022a.eb b/Golden_Repo/i/ITK/ITK-5.2.1-gpsmkl-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..496993732ce4d387e1aa607390b5f13bc0c60dc4
--- /dev/null
+++ b/Golden_Repo/i/ITK/ITK-5.2.1-gpsmkl-2022a.eb
@@ -0,0 +1,80 @@
+easyblock = 'CMakeMake'
+
+name = 'ITK'
+version = '5.2.1'
+
+homepage = 'https://itk.org'
+description = """Insight Segmentation and Registration Toolkit (ITK) provides
+ an extensive suite of software tools for registering and segmenting
+ multidimensional imaging data."""
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'pic': True, 'cstd': 'c++11'}
+
+github_account = 'InsightSoftwareConsortium'
+source_urls = [GITHUB_SOURCE]
+sources = ['v%(version)s.tar.gz']
+checksums = ['6022b2b64624b8bcec3333fe48d5f74ff6ebceb3bdf98258ba7d7fbbc76b99ab']
+
+builddependencies = [
+    ('binutils', '2.38'),
+    ('CMake', '3.23.1'),
+    ('Bison', '3.8.2'),
+    ('Eigen', '3.4.0'),
+    ('pkgconf', '1.8.0'),
+    ('Perl', '5.34.1'),
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('expat', '2.4.8'),
+    ('HDF5', '1.12.2'),
+    ('libjpeg-turbo', '2.1.3'),
+    ('libpng', '1.6.37'),
+    ('LibTIFF', '4.3.0'),
+    ('VTK', '9.2.5'),
+    ('zlib', '1.2.12'),
+    ('SWIG', '4.0.2',),
+    ('FFTW', '3.3.10'),
+    ('double-conversion', '3.2.0'),
+    ('tbb', '2021.5.0'),
+]
+
+local_sys_deps = [
+    'EIGEN', 'EXPAT', 'HDF5', 'JPEG', 'PNG', 'TIFF', 'ZLIB',
+    'FFTW', 'DOUBLECONVERSION', 'SWIG',
+]
+local_sys_cmake = ['-DITK_USE_SYSTEM_%s=ON' % d for d in local_sys_deps]
+
+configopts = "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON "
+configopts += '-DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF '
+configopts += '-DModule_ITKReview=ON -DModule_ITKVtkGlue=ON '
+configopts += '-DITK_WRAP_PYTHON:BOOL=ON '
+configopts += "-DSWIG_EXECUTABLE=${EBROOTSWIG}/bin/swig "
+configopts += ' '.join(local_sys_cmake)
+
+configopts += "-DModule_SimpleITKFilters=ON "
+configopts += '-DITK_LEGACY_REMOVE:BOOL=OFF '  # needed by SimpleITK
+configopts += "-DITK_FORBID_DOWNLOADS=OFF "  # needed by SimpleITK
+
+prebuildopts = "LC_ALL=C "
+
+preinstallopts = "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && "
+
+modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']}
+
+local_lib_names = ['ITKCommon', 'ITKIOHDF5', 'ITKIOJPEG', 'ITKIOPNG', 'ITKIOTIFF',
+                   'ITKReview', 'ITKVTK', 'ITKVtkGlue', 'itkSimpleITKFilters',
+                   'ITKFFT']
+
+sanity_check_paths = {
+    'files': ['bin/itkTestDriver'] +
+             ['lib/lib%s-%%(version_major)s.%%(version_minor)s.%s' % (l, SHLIB_EXT) for l in local_lib_names],
+    'dirs': ['include/ITK-%(version_major_minor)s',
+             'lib/python%(pyshortver)s/site-packages',
+             'share'],
+}
+
+sanity_check_commands = [('python', "-c 'import %(namelower)s'")]
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/j/Julia/Julia-1.8.5-gomkl-2023.eb b/Golden_Repo/j/Julia/Julia-1.8.5-foss-2022a.eb
similarity index 99%
rename from Golden_Repo/j/Julia/Julia-1.8.5-gomkl-2023.eb
rename to Golden_Repo/j/Julia/Julia-1.8.5-foss-2022a.eb
index 5f2e2da1bb20d98f34eff8228a3f59bf5f98d5ba..41916d88ea22e3221d26d2abef47c458b3769946 100644
--- a/Golden_Repo/j/Julia/Julia-1.8.5-gomkl-2023.eb
+++ b/Golden_Repo/j/Julia/Julia-1.8.5-foss-2022a.eb
@@ -6,7 +6,7 @@ description = """Julia was designed from the beginning for high performance.
 Julia programs compile to efficient native code for multiple platforms via LLVM
 """
 
-toolchain = {'name': 'gompi', 'version': '2022a'}
+toolchain = {'name': 'foss', 'version': '2022a'}
 toolchainopts = {'usempi': False, 'pic': True}
 
 source_urls = ['https://github.com/JuliaLang/julia/releases/download/v%(version)s/']
diff --git a/Golden_Repo/j/Julia/Julia-1.8.5-gpsmkl-2022a.eb b/Golden_Repo/j/Julia/Julia-1.8.5-gpsmkl-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..6f3a0f0b60af745c38f459f34e5fc46f8016d56d
--- /dev/null
+++ b/Golden_Repo/j/Julia/Julia-1.8.5-gpsmkl-2022a.eb
@@ -0,0 +1,248 @@
+name = 'Julia'
+version = '1.8.5'
+
+homepage = 'https://julialang.org/'
+description = """Julia was designed from the beginning for high performance.
+Julia programs compile to efficient native code for multiple platforms via LLVM
+"""
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'usempi': False, 'pic': True}
+
+source_urls = ['https://github.com/JuliaLang/julia/releases/download/v%(version)s/']
+sources = ['julia-%(version)s-full.tar.gz']
+checksums = ['35554080a4b4d3ce52ef220254306bd42ac0d88eff9eb85592a57d0663db5df2']
+
+builddependencies = [
+    ('binutils', '2.38'),
+    ('git', '2.36.0', '-nodocs'),
+    ('CMake', '3.23.1'),
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('GMP', '6.2.1'),
+    ('CUDA', '11.7', '', SYSTEM),
+    ('SciPy-bundle', '2022.05', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('matplotlib', '3.5.2', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    #  ('OpenGL', '2022a'),  # build segfaults starting with version 1.8.1
+    ('OpenSSL', '1.1', '', SYSTEM),
+]
+
+skipsteps = ['configure']
+buildopts = " USE_SYSTEM_GMP=1 USE_INTEL_MKL=1 "
+installopts = "prefix=%(installdir)s "
+
+arch_name = 'gpu'
+
+exts_defaultclass = 'JuliaPackage'
+exts_list = [
+    # General Purpose
+    ('PackageCompiler.jl', '2.1.4', {
+        'source_tmpl': 'v%(version)s.tar.gz',
+        'source_urls': ['https://github.com/JuliaLang/PackageCompiler.jl/archive/'],
+        'checksums': ['2fd6f50003d995624374900e7e0220cd7cd8386a317e0070d2b4b9b9d61c5e88'],
+    }),
+    ('HTTP.jl', '1.7.4', {
+        'source_tmpl': 'v1.7.4.tar.gz',
+        'source_urls': ['https://github.com/JuliaWeb/HTTP.jl/archive/'],
+        'checksums': ['95e4079f12983ad5008cca2505a5408b6f0146a9ed8f247361e090004030613d'],
+    }),
+    ('Parsers.jl', '2.5.1', {
+        'source_tmpl': 'v2.5.1.tar.gz',
+        'source_urls': ['https://github.com/JuliaData/Parsers.jl/archive/'],
+        'checksums': ['72494acac42c7dff16e1a6ac1305f13001f3743e0021d158d097399f0567d926'],
+    }),
+    ('VersionParsing.jl', '1.3.0', {
+        'source_tmpl': 'v1.3.0.tar.gz',
+        'source_urls': ['https://github.com/JuliaInterop/VersionParsing.jl/archive/'],
+        'checksums': ['f90fe419e1a40ef0eccfaaed1d1b7792d9115a059a82d0c23e3c04c944d0f8ca'],
+    }),
+    ('JSON.jl', '0.21.3', {
+        'source_tmpl': 'v0.21.3.tar.gz',
+        'source_urls': ['https://github.com/JuliaIO/JSON.jl/archive/'],
+        'checksums': ['bd02a015da24b03f79d55967b29f5ceaba2477b559242576d74f02623bb1b6b1'],
+    }),
+    ('WebIO.jl', '0.8.20', {
+        'source_tmpl': 'v0.8.20.tar.gz',
+        'source_urls': ['https://github.com/JuliaGizmos/WebIO.jl/archive/'],
+        'checksums': ['d8c45c0be367963539cf7bdf748d16b4f6065fa5113e353ad57872980fc56b39'],
+    }),
+    ('ProgressMeter.jl', '1.7.2', {
+        'source_tmpl': 'v1.7.2.tar.gz',
+        'source_urls': ['https://github.com/timholy/ProgressMeter.jl/archive/'],
+        'checksums': ['3591ea33d0ad7576bbb7d430ba94a988274af6434fbd7f3d0dc7fc2655dc888c'],
+    }),
+    ('Conda.jl', '1.7.0', {
+        'source_tmpl': 'v1.7.0.tar.gz',
+        'source_urls': ['https://github.com/JuliaPy/Conda.jl/archive/'],
+        'checksums': ['2077b1192e1cfa206caf441d9d91b0ca83aa935db89918f1fd69cd25c2415ced'],
+    }),
+    ('PyCall.jl', '1.95.1', {
+        'source_tmpl': 'v1.95.1.tar.gz',
+        'source_urls': ['https://github.com/JuliaPy/PyCall.jl/archive/'],
+        'checksums': ['8746b3ecc54fd670e5983945bec205ff65cdb4b9e395a79f887cc28741b05e87'],
+    }),
+    ('LaTeXStrings.jl', '1.3.0', {
+        'source_tmpl': 'v1.3.0.tar.gz',
+        'source_urls': ['https://github.com/stevengj/LaTeXStrings.jl/archive/'],
+        'checksums': ['f90fe419e1a40ef0eccfaaed1d1b7792d9115a059a82d0c23e3c04c944d0f8ca'],
+    }),
+    ('DocumentFormat.jl', '4.0.3', {
+        'source_tmpl': 'v4.0.3.tar.gz',
+        'source_urls': ['https://github.com/julia-vscode/DocumentFormat.jl/archive/'],
+        'checksums': ['4a7131590fa07d16d8b4998ef7570f797148e7ed622a0fa431a6ca3fe52156ab'],
+    }),
+    # Data Science
+    ('CSV.jl', '0.10.9', {
+        'source_tmpl': 'v0.10.9.tar.gz',
+        'source_urls': ['https://github.com/JuliaData/CSV.jl/archive/'],
+        'checksums': ['e0958f0bf04e2b32bc4040e74ce9eed1e5be3947c03f381be1003ac197304d84'],
+    }),
+    ('DataFrames.jl', '1.4.4', {
+        'source_tmpl': 'v1.4.4.tar.gz',
+        'source_urls': ['https://github.com/JuliaData/DataFrames.jl/archive/'],
+        'checksums': ['365877a405d1ba3af23ff5258424870cce434a13b02df34c7d8a78568ef2b87a'],
+    }),
+    ('Arrow.jl', '2.4.3', {
+        'source_tmpl': 'v2.4.3.tar.gz',
+        'source_urls': ['https://github.com/JuliaData/Arrow.jl/archive/'],
+        'checksums': ['d65a8c803f9ac664b3afc878f1eba2c7fe99d91601aebc3dc288784585be80a2'],
+    }),
+    ('OnlineStats.jl', '1.5.14', {
+        'source_tmpl': 'v1.5.14.tar.gz',
+        'source_urls': ['https://github.com/joshday/OnlineStats.jl/archive/'],
+        'checksums': ['b1c725a3de6cfde25271753b7cc341d2f565bc6aa74ae76394f845cb0339dc42'],
+    }),
+    ('Query.jl', '1.0.0', {
+        'source_tmpl': 'v1.0.0.tar.gz',
+        'source_urls': ['https://github.com/queryverse/Query.jl/archive/'],
+        'checksums': ['76c05e3ffc8f3c2ce2cd3f6824f40a107cdba6fc58c4ce42de2289132de988e0'],
+    }),
+    # Scientific Domains
+    ('GSL.jl', '1.0.1', {
+        'source_tmpl': 'v1.0.1.tar.gz',
+        'source_urls': ['https://github.com/JuliaMath/GSL.jl/archive/refs/tags/'],
+        'checksums': ['91a5acbb752610c5989b9acef126f2231f612debb7ba6d1d4625c68d2af5776e'],
+    }),
+    ('DifferentialEquations.jl', '7.6.0', {
+        'source_tmpl': 'v7.6.0.tar.gz',
+        'source_urls': ['https://github.com/SciML/DifferentialEquations.jl/archive/'],
+        'checksums': ['32df0e2b2811567f5d58f5b88831e6a6c3c15b4d2f0bae6bde0a11a98b4e49d8'],
+    }),
+    ('Distributions.jl', '0.25.80', {
+        'source_tmpl': 'v0.25.80.tar.gz',
+        'source_urls': ['https://github.com/JuliaStats/Distributions.jl/archive/'],
+        'checksums': ['0f457839d969dd5f8a12ba96fb3a3a728387945d98504ba3e7131178ef8e9ef7'],
+    }),
+    ('Optim.jl', '1.7.4', {
+        'source_tmpl': 'v1.7.4.tar.gz',
+        'source_urls': ['https://github.com/JuliaNLSolvers/Optim.jl/archive/'],
+        'checksums': ['95e4079f12983ad5008cca2505a5408b6f0146a9ed8f247361e090004030613d'],
+    }),
+    ('IterativeSolvers.jl', '0.9.2', {
+        'source_tmpl': 'v0.9.2.tar.gz',
+        'source_urls': ['https://github.com/JuliaLinearAlgebra/IterativeSolvers.jl/archive/'],
+        'checksums': ['95fbfa39aa68e989ae6bad2f51ce0fe5635ba3f3375d0ea4d9422e77ff924a9b'],
+    }),
+    ('AbstractFFTs.jl', '1.2.1', {
+        'source_tmpl': 'v1.2.1.tar.gz',
+        'source_urls': ['https://github.com/JuliaMath/AbstractFFTs.jl/archive/'],
+        'checksums': ['58abf90b037c618daeed89940c77ac129b5155b26429ac77643cc9c5db453363'],
+    }),
+    ('OrdinaryDiffEq.jl', '6.42.0', {
+        'source_tmpl': 'v6.42.0.tar.gz',
+        'source_urls': ['https://github.com/SciML/OrdinaryDiffEq.jl/archive/'],
+        'checksums': ['22af73320fd7577e3e4557e10f2b7cb0f77c03556499699033c47c8f56cbe482'],
+    }),
+    ('SpecialFunctions.jl', '1.8.7', {
+        'source_tmpl': 'v1.8.7.tar.gz',
+        'source_urls': ['https://github.com/JuliaMath/SpecialFunctions.jl/archive/'],
+        'checksums': ['3f2ecec0506fe47cfa5e436ac510e2a82d39f74fceaeb422572cf06d90f2096a'],
+    }),
+    ('JuMP.jl', '1.7.0', {
+        'source_tmpl': 'v1.7.0.tar.gz',
+        'source_urls': ['https://github.com/jump-dev/JuMP.jl/archive/'],
+        'checksums': ['2077b1192e1cfa206caf441d9d91b0ca83aa935db89918f1fd69cd25c2415ced'],
+    }),
+    # Visualization
+    ('GR.jl', '0.71.5', {
+        'source_tmpl': 'v0.71.5.tar.gz',
+        'source_urls': ['https://github.com/jheinen/GR.jl/archive/'],
+        'checksums': ['d2b096241d8dfd3e16b1abcf2c0dd5664db025c1eeadf11145b9934284b112b7'],
+    }),
+    ('PlotlyJS.jl', '0.18.10', {
+        'source_tmpl': 'v0.18.10.tar.gz',
+        'source_urls': ['https://github.com/JuliaPlots/PlotlyJS.jl/archive/'],
+        'checksums': ['b574113676080c14634118ce3a5ceda7562224039a2fd0ea3ad8bc5938700a49'],
+    }),
+    ('PyPlot.jl', '2.11.0', {
+        'source_tmpl': 'v2.11.0.tar.gz',
+        'source_urls': ['https://github.com/JuliaPy/PyPlot.jl/archive/'],
+        'checksums': ['10498f5b7bd958c5e0dae33aa2514048005e4f5b037d9a73a09cb4231259cc13'],
+    }),
+    ('Plots.jl', '1.38.4', {
+        'source_tmpl': 'v1.38.4.tar.gz',
+        'source_urls': ['https://github.com/JuliaPlots/Plots.jl/archive/'],
+        'checksums': ['d37a748e531b9970d1b5e552e069f8778f22f2e0508368bbd74f76b20dc51b1e'],
+    }),
+    ('UnicodePlots.jl', '3.3.4', {
+        'source_tmpl': 'v3.3.4.tar.gz',
+        'source_urls': ['https://github.com/Evizero/UnicodePlots.jl/archive/'],
+        'checksums': ['7280b26b83dd03eaee21398de40cb83674c5e42037cad75f6e821cb0322ae9fd'],
+    }),
+    ('StatsPlots.jl', '0.15.4', {
+        'source_tmpl': 'v0.15.4.tar.gz',
+        'source_urls': ['https://github.com/JuliaPlots/StatsPlots.jl/archive/'],
+        'checksums': ['451076c4d352ab88c8d0010320315a2f3d26ef0cc16007c7d0eb49eaa1105777'],
+    }),
+    # MPI
+    ('MPI.jl', '0.20.8', {
+        'mpi_path': '$EBROOTOPENMPI',
+        'mpiexec': 'srun',
+        'source_tmpl': 'v0.20.8.tar.gz',
+        'source_urls': ['https://github.com/JuliaParallel/MPI.jl/archive/'],
+        'checksums': ['f70a2710e4d1375be82f6838510980f6cb7d48caaad63ffecd2a296c39b80dba'],
+    }),
+    # CUDA
+    ('CUDA.jl', '4.0.0', {
+        'source_tmpl': 'v4.0.0.tar.gz',
+        'source_urls': ['https://github.com/JuliaGPU/CUDA.jl/archive/'],
+        'checksums': ['64fa7fe158c8cd56841b7906a4f57c53dbaa225fe8688bf3087b7951854b591b'],
+    }),
+]
+
+modextrapaths = {
+    'LD_LIBRARY_PATH': 'lib/julia',
+}
+
+modextravars = {
+    'JULIA_MPICC': 'mpicc',
+    'JULIA_MPIEXEC': 'srun',
+    #  'JULIA_MPIEXEC_ARGS': '',
+    'JULIA_MPI_ABI': 'OpenMPI',
+    'JULIA_MPI_BINARY': 'system',
+    'JULIA_MPI_PATH': '$::env(EBROOTOPENMPI)',
+    'JULIA_CUDA_USE_BINARYBUILDER': 'false',
+    # FYI: automaticall added by EB_Julia
+    # 'EBJULIA_STD_DEPOT_PATH': '%(installdir)s/local/share/julia:%(installdir)s/share/julia',
+    # 'EBJULIA_USER_DEPOT_PATH': '~/.julia/%(version)s/default-%(arch_name)',
+    # 'EBJULIA_ADMIN_DEPOT_PATH': '%(installdir)s/extensions',
+    # 'EBJULIA_STD_LOAD_PATH': '@stdlib',
+    # 'EBJULIA_USER_LOAD_PATH': '@:@#.#.#-default-%(arch_name)'
+    # 'EBJULIA_ADMIN_LOAD_PATH': '%(installdir)s/extensions/environments/%(version)s-default-%(arch_name)s/',
+    # 'EBEXTSLISTJULIA': '<list of extensions installed>'
+    # 'EBJULIA_ENV_NAME': '%(version)s-default-%(arch_name)s'
+    # 'JULIA_INSTALL_FOLDER': '%(installdir)s',
+    # 'JULIA_DEPOT_PATH': 
+    #           '~/.julia/%(version)s/default-gpu:%(installdir)s/local/share/julia:%(installdir)s/share/julia',
+    # 'JULIA_LOAD_PATH': '@:@#.#.#-default-gpu:@stdlib',
+    # 'JULIA_PROJECT': ''%(installdir)s/extensions/environments/%(version)s-default-%(arch_name)s/Project.toml',
+}
+
+sanity_check_paths = {
+    'files': ['bin/julia', 'include/julia/julia.h', 'lib/libjulia.so'],
+    'dirs': ['bin', 'etc', 'include', 'lib', 'share']
+}
+
+moduleclass = 'lang'
diff --git a/Golden_Repo/l/libspng/libspng-0.7.1-GCCcore-11.3.0.eb b/Golden_Repo/l/libspng/libspng-0.7.3-GCCcore-11.3.0.eb
similarity index 100%
rename from Golden_Repo/l/libspng/libspng-0.7.1-GCCcore-11.3.0.eb
rename to Golden_Repo/l/libspng/libspng-0.7.3-GCCcore-11.3.0.eb
diff --git a/Golden_Repo/m/METIS/METIS-5.1.0-intel-compilers-2022.1.0.eb b/Golden_Repo/m/METIS/METIS-5.1.0-intel-compilers-2022.1.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..49ea124c5874d1cb0a512e5e673145b872abe274
--- /dev/null
+++ b/Golden_Repo/m/METIS/METIS-5.1.0-intel-compilers-2022.1.0.eb
@@ -0,0 +1,26 @@
+name = 'METIS'
+version = '5.1.0'
+
+homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview'
+description = """METIS is a set of serial programs for partitioning graphs, partitioning finite element meshes, 
+and producing fill reducing orderings for sparse matrices. 
+The algorithms implemented in METIS are based on the multilevel recursive-bisection, 
+multilevel k-way, and multi-constraint partitioning schemes."""
+
+toolchain = {'name': 'intel-compilers', 'version': '2022.1.0'}
+toolchainopts = {'optarch': True, 'pic': True}
+
+source_urls = ['https://src.fedoraproject.org/repo/pkgs/metis/metis-5.1.0.tar.gz/5465e67079419a69e0116de24fce58fe']
+sources = [SOURCELOWER_TAR_GZ]
+patches = ['METIS-5.1.0-use-doubles.patch']
+checksums = [
+    {'metis-5.1.0.tar.gz': '76faebe03f6c963127dbb73c13eab58c9a3faeae48779f049066a21c087c5db2'},
+    {'METIS-5.1.0-use-doubles.patch': '8e79f5970c0fb36394dd6338dd3160eb346dc00e38c37ac90303e1ee5eb4c53f'},
+]
+
+# we use 32bit for indices and 64bit for content
+builddependencies = [('CMake', '3.23.1')]
+
+configopts = ['', 'shared=1']
+
+moduleclass = 'math'
diff --git a/Golden_Repo/o/OSPRay/OSPRay-2.10.0-gpsmpi-2022a.eb b/Golden_Repo/o/OSPRay/OSPRay-2.10.0-foss-2022a.eb
similarity index 97%
rename from Golden_Repo/o/OSPRay/OSPRay-2.10.0-gpsmpi-2022a.eb
rename to Golden_Repo/o/OSPRay/OSPRay-2.10.0-foss-2022a.eb
index 6bbcf51f06067df2b11156d1cdb1cf4c9fa6c372..265a1a78cc575ca864106a331887e34133ed4efa 100644
--- a/Golden_Repo/o/OSPRay/OSPRay-2.10.0-gpsmpi-2022a.eb
+++ b/Golden_Repo/o/OSPRay/OSPRay-2.10.0-foss-2022a.eb
@@ -9,7 +9,7 @@ OSPRay is an open source, scalable, and portable ray tracing engine for
 high-performance, high-fidelity visualization on Intel® Architecture CPUs.
 """
 
-toolchain = {'name': 'gpsmpi', 'version': '2022a'}
+toolchain = {'name': 'foss', 'version': '2022a'}
 toolchainopts = {'pic': True}
 
 source_urls = ['https://github.com/ospray/OSPRay/archive/']
diff --git a/Golden_Repo/o/OSPRay/OSPRay-2.10.0-gpsmkl-2022a.eb b/Golden_Repo/o/OSPRay/OSPRay-2.10.0-gpsmkl-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..74c85e8bb0fbe32af2ef28c3cbeb7d47bb1b3d54
--- /dev/null
+++ b/Golden_Repo/o/OSPRay/OSPRay-2.10.0-gpsmkl-2022a.eb
@@ -0,0 +1,65 @@
+easyblock = 'CMakeMake'
+
+name = 'OSPRay'
+version = '2.10.0'
+
+homepage = 'http://www.ospray.org/'
+description = """
+OSPRay is an open source, scalable, and portable ray tracing engine for
+high-performance, high-fidelity visualization on Intel® Architecture CPUs.
+"""
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'pic': True}
+
+source_urls = ['https://github.com/ospray/OSPRay/archive/']
+sources = ['v%(version)s.tar.gz']
+
+checksums = ['bd478284f48d2cb775fc41a2855a9d9f5ea16c861abda0f8dc94e02ea7189cb8']
+
+builddependencies = [
+    ('ispc', '1.18.1', '', SYSTEM),
+    ('CMake', '3.23.1'),
+    ('Doxygen', '1.9.4')
+]
+
+dependencies = [
+    ('X11', '20220504'),
+    ('OpenGL', '2022a'),
+    ('freeglut', '3.4.0'),
+    ('Qt5', '5.15.5'),
+    ('tbb', '2021.5.0'),
+    ('Embree', '3.13.5'),
+    ('rkcommon', '1.10.0'),
+    ('openvkl', '1.3.1'),
+    ('OpenImageDenoise', '1.4.3', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+]
+
+separate_build_dir = True
+
+configopts = '-DCMAKE_VERBOSE_MAKEFILE=ON '
+configopts += '-DOSPRAY_INSTALL_DEPENDENCIES=OFF '
+configopts += '-DCMAKE_BUILD_TYPE=Release '
+configopts += '-DOSPRAY_BUILD_ISA=ALL '
+configopts += '-Dembree_DIR=$EBROOTEMBREE/lib64/cmake/embree-3.13.5 '
+configopts += '-DOSPRAY_ENABLE_APPS:BOOL=OFF '
+configopts += '-DOSPRAY_MODULE_DENOISER:BOOL=ON '
+configopts += '-DOSPRAY_MODULE_MPI:BOOL=True '
+
+configopts += '-DOSPRAY_ENABLE_APPS:BOOL=OFF '
+configopts += '-DOSPRAY_ENABLE_APPS_BENCHMARK:BOOL=OFF '
+configopts += '-DOSPRAY_ENABLE_APPS_EXAMPLES:BOOL=OFF '
+configopts += '-DOSPRAY_ENABLE_APPS_TUTORIALS:BOOL=OFF '
+configopts += '-DOSPRAY_ENABLE_APPS_TESTING:BOOL=OFF '
+
+sanity_check_paths = {
+    'dirs': ['include/ospray/',
+             'lib64/cmake/%(namelower)s-%(version)s', 'share/doc/OSPRay'],
+    'files': ['include/ospray/version.h',
+              'lib64/libospray.so',
+              'share/doc/OSPRay/README.md'],
+}
+
+modextrapaths = {'CMAKE_MODULE_PATH': ['lib64/cmake/ospray-%(version)s']}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/o/OptiX/OptiX-6.5.0.eb b/Golden_Repo/o/OptiX/OptiX-6.5.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..6232d58d8cf24e397ff21ada5b873c4d69284119
--- /dev/null
+++ b/Golden_Repo/o/OptiX/OptiX-6.5.0.eb
@@ -0,0 +1,33 @@
+##
+# This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild
+# Authors::   Stephane Thiell <sthiell@stanford.edu>
+##
+easyblock = 'Binary'
+
+name = 'OptiX'
+version = '6.5.0'
+
+homepage = 'https://developer.nvidia.com/optix'
+description = """OptiX is NVIDIA SDK for easy ray tracing performance.
+ It provides a simple framework for accessing the GPU’s massive ray tracing
+ power using state-of-the-art GPU algorithms."""
+
+toolchain = SYSTEM
+
+# Registration required. Download links:
+# https://developer.nvidia.com/designworks/optix/download
+# https://developer.nvidia.com/designworks/optix/downloads/legacy
+sources = ['NVIDIA-OptiX-SDK-%(version)s-linux64.sh']
+checksums = ['eca09e617a267e18403ecccc715c5bc3a88729b81589a828fcb696435100a62e']
+
+install_cmd = "./" + sources[0] + " --skip-license --prefix=%(installdir)s"
+
+sanity_check_paths = {
+    'files': ["include/optix.h", "include/optix_cuda.h", "lib64/liboptix.%s" % SHLIB_EXT,
+              "lib64/liboptixu.%s" % SHLIB_EXT],
+    'dirs': []
+}
+
+modextravars = {'OPTIX_HOME': '%(installdir)s'}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/o/OptiX/OptiX-7.5.0.eb b/Golden_Repo/o/OptiX/OptiX-7.5.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..70c877ef23023860365400587a7c3d3e357742a3
--- /dev/null
+++ b/Golden_Repo/o/OptiX/OptiX-7.5.0.eb
@@ -0,0 +1,31 @@
+##
+# Author:    Robert Mijakovic <robert.mijakovic@lxp.lu>
+##
+easyblock = 'Binary'
+
+name = 'OptiX'
+version = '7.5.0'
+
+homepage = 'https://developer.nvidia.com/optix'
+description = """OptiX is NVIDIA SDK for easy ray tracing performance.
+ It provides a simple framework for accessing the GPU’s massive ray tracing
+ power using state-of-the-art GPU algorithms."""
+
+toolchain = SYSTEM
+
+# Registration required. Download links:
+# https://developer.nvidia.com/designworks/optix/download
+# https://developer.nvidia.com/designworks/optix/downloads/legacy
+sources = ['NVIDIA-OptiX-SDK-%(version)s-linux64-x86_64.sh']
+checksums = ['ec8f80350870275e6536a4150a65976d7b391f605ef2c09616486569aa60b670']
+
+install_cmd = "./" + sources[0] + " --skip-license --prefix=%(installdir)s"
+
+sanity_check_paths = {
+    'files': ["include/optix.h", "include/optix_device.h"],
+    'dirs': []
+}
+
+modextravars = {'OPTIX_HOME': '%(installdir)s'}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/p/ParaView/ParaView-5.11.0-foss-2022a-EGL.eb b/Golden_Repo/p/ParaView/ParaView-5.11.0-foss-2022a-EGL.eb
new file mode 100644
index 0000000000000000000000000000000000000000..0a299917aeb66a8cd7dcda34a6947015ed6d55d1
--- /dev/null
+++ b/Golden_Repo/p/ParaView/ParaView-5.11.0-foss-2022a-EGL.eb
@@ -0,0 +1,351 @@
+easyblock = 'CMakeMake'
+
+name = 'ParaView'
+version = '5.11.0'
+versionsuffix = '-EGL'
+
+homepage = "http://www.paraview.org"
+description = "Paraview is a scientific parallel visualizer."
+
+toolchain = {'name': 'foss', 'version': '2022a'}
+toolchainopts = {'pic': True, 'usempi': True}
+
+local_dwnlsfx_src = 'download.php?submit=Download&version=v%(version_major_minor)s&type=source&os=Sources&downloadFile='
+source_urls = [('http://www.paraview.org/paraview-downloads/%s' %
+                local_dwnlsfx_src)]
+sources = [("ParaView-v%(version)s.tar.gz")]
+
+patches = [
+    'cdireader_update_issue5715.patch',
+    'parflowreader_fix-nlohmann_merge6050.patch',
+]
+
+checksums = [
+    '68b1c6d15dd67ec442f964460c56212417e8af2a96763001f8548eb3cbc5ce87',
+    '064d6878409d9133ad56ce363503a000f7b4617d0c912fd81dd772994f6b5ac2',  # cdireader patch
+    'eb8b6967782bb47e81df129b0d8e192bbf31f11f815d0f53d1c5b4e53da95fd6',  # parflowreader patch
+]
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+    ('git', '2.36.0', '-nodocs'),
+    ('pkgconf', '1.8.0'),
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('Boost', '1.79.0'),
+    ('X11', '20220504'),
+    ('bzip2', '1.0.8'),
+    ('HDF5', '1.12.2'),
+    ('ADIOS2', '2.8.3'),
+    ('FFmpeg', '4.4.2'),
+    ('Embree', '3.13.5'),
+    ('OSPRay', '2.10.0'),
+    ('libpng', '1.6.37'),
+    ('expat', '2.4.8'),
+    ('freetype', '2.12.1'),
+    ('libjpeg-turbo', '2.1.3'),
+    ('libxml2', '2.9.13'),
+    ('LibTIFF', '4.3.0'),
+    ('zlib', '1.2.12'),
+    ('netCDF', '4.9.0'),
+    ('netCDF-C++4', '4.3.1'),
+    ('netCDF-Fortran', '4.6.0'),
+    ('nlohmann_json', '3.10.5'),  # for ParFlow plugin
+    ('libcdi', '2.1.1', '', ('gcccoremkl', '11.3.0-2022.1.0')),  # for CDI plugin
+    ('mpi4py', '3.1.4'),
+    ('double-conversion', '3.2.0'),
+    ('Eigen', '3.4.0'),
+    ('Qt5', '5.15.5'),
+    ('SciPy-Stack', '2022a', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('OpenGL', '2022a'),
+    ('Catalyst', '2.0.0-rc3'),
+    ('ParaViewData', '5.11.0'),
+    ('VTKData', '9.2.5'),
+]
+
+separate_build_dir = True
+
+# ensure we do not use a too advanced GL-version at config/build-time, which might not be available at run-time
+preconfigopts = "export __EGL_VENDOR_LIBRARY_FILENAMES=${EBROOTOPENGL}/share/glvnd/egl_vendor.d/50_mesa.json && "
+prebuildopts = "export __EGL_VENDOR_LIBRARY_FILENAMES=${EBROOTOPENGL}/share/glvnd/egl_vendor.d/50_mesa.json && "
+
+########################################################################################
+# check ParaView Superbuild options                                                    #
+# https://gitlab.kitware.com/paraview/paraview-superbuild/tree/master                  #
+#                                                                                      #
+# check ParaView Spack options                                                         #
+# https://github.com/spack/spack/blob/develop/var/spack/repos/builtin/packages/paraview/package.py
+#                                                                                      #
+# check ParaView Build documenation                                                    #
+# https://gitlab.kitware.com/paraview/paraview/blob/master/Documentation/dev/build.md  #
+########################################################################################
+
+local_buildsrc = '%(builddir)s/easybuild_obj'
+local_installsrc = '%(installdir)s/debugsrc'
+
+# --- general settings --- #
+configopts = '-DCMAKE_VERBOSE_MAKEFILE=ON '
+configopts += '-DCMAKE_CXX_FLAGS="-fdebug-prefix-map=%s=%s $CMAKE_CXX_FLAGS" ' % (local_buildsrc, local_installsrc)
+configopts += '-DCMAKE_C_FLAGS="-fdebug-prefix-map=%s=%s $CMAKE_C_FLAGS" ' % (local_buildsrc, local_installsrc)
+configopts += '-DCMAKE_CXX_STANDARD=11 '
+configopts += '-DPARAVIEW_BUILD_LEGACY_SILENT=ON '
+
+# https://forum.openframeworks.cc/t/nvidia-drivers-pthreads-and-segfaults/2524
+# configopts += '-DCMAKE_CXX_FLAGS="-lpthread $CMAKE_CXX_FLAGS" '
+# configopts += '-DCMAKE_C_FLAGS="-lpthread $CMAKE_C_FLAGS" '
+
+configopts += '-DPARAVIEW_BUILD_EDITION=CANONICAL '
+configopts += '-DPARAVIEW_BUILD_WITH_KITS=OFF '
+configopts += '-DPARAVIEW_USE_QT=OFF '
+
+# --- tuning --- #
+# better disable for now: https://discourse.paraview.org/t/array-dispatch-issues/10328
+# configopts += '-DVTK_BUILD_SCALED_SOA_ARRAYS=OFF '
+# configopts += '-DVTK_DISPATCH_SOA_ARRAYS=OFF '
+# configopts += '-DVTK_DISPATCH_TYPED_ARRAYS=OFF '
+
+# --- web --- #
+configopts += '-DPARAVIEW_ENABLE_WEB=ON '
+configopts += '-DPARAVIEW_USE_QTWEBENGINE=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_PVWebPython=YES '
+
+# --- python --- #
+configopts += '-DPARAVIEW_USE_PYTHON=ON '
+configopts += "-DPython3_EXECUTABLE=$EBROOTPYTHON/bin/python "
+
+configopts += '-DVTK_PYTHON_VERSION=3 '
+configopts += '-DVTK_NO_PYTHON_THREADS=OFF '
+# visibility depends on VTK_NO_PYTHON_THREADS=OFF
+configopts += '-DVTK_PYTHON_FULL_THREADSAFE=OFF '
+# If you pass VTK_PYTHON_FULL_THREADSAFE to true, then each and every call to python will be protected with GIL,
+# ensuring that you can have eg. other python interpreter in your application and still use python wrapping in vtk.
+
+# --- VTKm --- #
+configopts += '-DPARAVIEW_USE_VTKM=ON '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmCore=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmDataModel=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmFilters=YES '
+configopts += '-DVTKm_Vectorization=AVX2 '
+# configopts += '-DVTKm_ENABLE_KOKKOS=OFF '
+# configopts += '-DVTKm_ENABLE_TBB=OFF '
+# configopts += '-DVTKm_ENABLE_CUDA=ON '
+# configopts += '-DVTKm_ENABLE_LOGGING=ON '
+
+# --- parallel (on-node) --- #
+# https://blog.kitware.com/simple-parallel-computing-with-vtksmptools-2/
+configopts += '-DVTK_SMP_IMPLEMENTATION_TYPE=OpenMP '
+configopts += '-DVTK_MAX_THREADS=64 '
+configopts += '-DVTKm_ENABLE_OPENMP=ON '
+
+# --- parallel (distributed) --- #
+configopts += '-DMPIEXEC_MAX_NUMPROCS=24 '
+configopts += '-DPARAVIEW_USE_MPI=ON '
+configopts += '-DVTKm_ENABLE_MPI=ON '
+
+# --- IO --- #
+configopts += '-DXDMF_BUILD_MPI=ON '
+configopts += '-DPARAVIEW_ENABLE_XDMF3=ON '
+configopts += '-DPARAVIEW_ENABLE_ADIOS2=OFF '  # error: adios2.h not found
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_AdiosReaderPixie=ON '  # req. ADIOS1
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_AdiosReaderStaging=ON ' # req. ADIOS1
+configopts += '-DVTKm_ENABLE_HDF5_IO=ON '
+
+# --- large data --- #
+configopts += '-DVTK_USE_64BIT_IDS=ON '
+
+# --- rendering --- #
+
+# OpenGL (hardware)
+#  https://kitware.github.io/paraview-docs/latest/cxx/Offscreen.html
+#    If VTK_OPENGL_HAS_EGL or VTK_OPENGL_HAS_OSMESA is ON, the build supports headless rendering,
+#       otherwise VTK_USE_X must be ON and the build does not support headless,
+#       but can still support offscreen rendering.
+#    If VTK_USE_X is OFF, then either VTK_OPENGL_HAS_OSMESA or VTK_OPENGL_HAS_EGL must be ON.
+#       Then the build does not support onscreen rendering, but only headless rendering.
+#    If PARAVIEW_BUILD_QT_GUI is ON and VTK_USE_X is ON, while ParaView command line tools won't link against
+#       or use X calls, Qt will and hence an accessible X server is still needed to run the desktop client.
+#    If VTK_OPENGL_HAS_OSMESA is ON, and VTK_USE_X is ON,
+#       then all the OpenGL and OSMesa variables should point to the Mesa libraries.
+#    Likewise, if VTK_OPENGL_HAS_EGL is ON and VTK_USE_X is ON, then all the OpenGL and EGL variables
+#       should point to the system libraries providing both, typically the NVidia libraries.
+
+configopts += '-DOpenGL_GL_PREFERENCE=GLVND '
+configopts += '-DVTK_REPORT_OPENGL_ERRORS_IN_RELEASE_BUILDS=OFF '
+
+configopts += "-DOPENGL_INCLUDE_DIR=${EBROOTOPENGL}/include "
+configopts += "-DOPENGL_GLX_INCLUDE_DIR=${EBROOTOPENGL}/include "
+configopts += "-DOPENGL_EGL_INCLUDE_DIR=${EBROOTOPENGL}/include "
+# configopts += "-DOPENGL_xmesa_INCLUDE_DIR=IGNORE "
+
+configopts += "-DOPENGL_opengl_LIBRARY=${EBROOTOPENGL}/lib/libOpenGL.so.0 "
+configopts += "-DOPENGL_gl_LIBRARY=${EBROOTOPENGL}/lib/libGL.so "
+configopts += "-DOPENGL_glx_LIBRARY=${EBROOTOPENGL}/lib/libGLX.so.0 "
+configopts += "-DOPENGL_glu_LIBRARY=${EBROOTOPENGL}/lib/libGLU.so "
+configopts += "-DOPENGL_egl_LIBRARY=${EBROOTOPENGL}/lib/libEGL.so.1 "
+
+# OpenGL over X
+# configopts += '-DVTK_USE_X=ON '  # OFF:headless rendering
+# already considered by Qt (https://gitlab.kitware.com/lorensen/vtk/commit/b29f6db3f746d84f830c81e4212e48db192e4dbb)
+# configopts += '-DVTK_DEFAULT_RENDER_WINDOW_OFFSCREEN=OFF '
+# configopts += '-DVTK_OPENGL_HAS_OSMESA=OFF '  # http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+
+# EGL (off-screen rendering with OpenGL, but without the need for X)
+# call pvserver with –egl-device-index=0 or 1 and –disable-xdisplay-test
+configopts += '-DVTK_OPENGL_HAS_EGL=ON '
+# http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+configopts += '-DVTK_OPENGL_HAS_OSMESA=OFF '
+configopts += '-DVTK_USE_X=OFF '
+configopts += '-DVTK_DEFAULT_EGL_DEVICE_INDEX=0 '
+# configopts += '-DEGL_INCLUDE_DIR=${EBROOTOPENGL}/include/EGL/ ' # https://www.khronos.org/registry/EGL/
+# configopts += '-DEGL_LIBRARY=${EBROOTOPENGL}/lib/libEGL.so.1 '
+# configopts += '-DEGL_opengl_LIBRARY=${EBROOTOPENGL}/lib/libOpenGL.so.0 '
+# configopts += '-DEGL_gldispatch_LIBRARY=${EBROOTOPENGL}/lib/libGLdispatch.so.0 ' # <path_to_libGLdispatch.so.0>
+
+# OSMesa (software)
+# With OSMesa the DISPLAY variable has no meaning and is not needed
+# When ON, implies that ParaView can use OSMesa to support headless modes of operation.
+# configopts += '-DVTK_OPENGL_HAS_OSMESA=ON ' # http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+# configopts += '-DVTK_USE_X=OFF '
+# configopts += '-DVTK_DEFAULT_RENDER_WINDOW_OFFSCREEN=ON '
+# configopts += '-DOSMESA_INCLUDE_DIR=${EBROOTOPENGL}/include '
+# configopts += '-DOSMESA_LIBRARY=${EBROOTOPENGL}/lib/libOSMesa.so '
+
+# Raytracing
+configopts += '-DPARAVIEW_ENABLE_RAYTRACING=ON '
+configopts += '-DVTK_ENABLE_OSPRAY=ON '
+configopts += '-DVTK_ENABLE_VISRTX=OFF '
+
+configopts += "-Dospray_DIR=${EBROOTOSPRAY} "
+configopts += "-Dembree_DIR=${EBROOTEMBREE}/lib64/cmake/embree-3.13.5 "
+configopts += '-DVTKOSPRAY_ENABLE_DENOISER=ON '
+
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_pvNVIDIAIndeX=YES '
+
+# --- extra features --- #
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_GeographicalMap=ON '
+
+configopts += "-DFFMPEG_ROOT=$EBROOTFFMPEG "
+configopts += '-DPARAVIEW_ENABLE_FFMPEG=ON '
+configopts += '-DVTK_MODULE_ENABLE_VTK_IOFFMPEG=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_IOVideo=YES '
+
+configopts += '-DVTK_MODULE_ENABLE_VTK_DICOMParser=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersReebGraph=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersSMP=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersSelection=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersTopology=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersTexture=YES '
+# configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersStatisticsGnu=YES '
+# configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersMatlab=YES '
+
+# --- coupling --- #
+configopts += '-DPARAVIEW_ENABLE_CATALYST=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_InSitu=YES '
+# configopts += '-DVTK_MODULE_USE_EXTERNAL_ParaView_vtkcatalyst=ON '
+configopts += '-Dcatalyst_DIR=${EBROOTCATALYST}/lib64/cmake/catalyst-2.0/ '
+
+# --- development & testing --- #
+configopts += '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON '
+configopts += '-DPARAVIEW_BUILD_DEVELOPER_DOCUMENTATION=OFF '
+configopts += '-DPARAVIEW_ENABLE_EXAMPLES=OFF '
+configopts += '-DPARAVIEW_BUILD_TESTING=OFF '
+configopts += '-DPARAVIEW_BUILD_VTK_TESTING=OFF '
+
+# --- external data --- #
+# https://cmake.org/cmake/help/latest/module/ExternalData.html
+# https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md
+# configopts += '-DCTEST_TEST_TIMEOUT=10800 '  # unknown setting
+# download inactivity, 0 = no timeout
+configopts += '-DExternalData_TIMEOUT_INACTIVITY=10 '
+# download abs. time, 0 = no timeout
+configopts += '-DExternalData_TIMEOUT_ABSOLUTE=60 '
+# Exclude test data download from default 'all' target.
+configopts += '-DPARAVIEW_DATA_EXCLUDE_FROM_ALL=ON '
+# Local directory holding ExternalData objects in the layout %(algo)/%(hash).
+configopts += '-DPARAVIEW_DATA_STORE=${EBROOTPARAVIEWDATA}/.ExternalData '
+configopts += '-DVTK_DATA_STORE=${EBROOTVTKDATA}/.ExternalData '
+# Local directory holding the real data files of ExternalData.
+configopts += '-DExternalData_BINARY_ROOT=${EBROOTPARAVIEWDATA} '
+# we need to combine VTK and ParaView's External data files as there can only be one ExternalData_BINARY_ROOT
+
+# --- XDMF options --- #
+configopts += '-DXDMF_USE_BZIP2=ON '
+configopts += '-DXDMF_USE_GZIP=ON '
+
+# --- VTK external libraries --- #
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_expat=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_freetype=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_hdf5=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_jpeg=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_libxml2=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_mpi4py=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_netcdf=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_png=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_tiff=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_zlib=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_doubleconversion=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_eigen=ON '
+
+# --- ParaView Extra-Reader --- #
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_CDIReader=ON '
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_ParFlow=ON '
+configopts += '-DPARAVIEW_ENABLE_MOTIONFX=ON '
+# configopts += '-DPARAVIEW_ENABLE_FIDES=ON '  # req. ADIOS2 as dependency
+# configopts += '-DPARAVIEW_ENABLE_GDAL=ON '  # req. GDAL as dependency
+# configopts += '-DPARAVIEW_ENABLE_LAS=ON '  # req. LAS as dependency
+# configopts += '-DPARAVIEW_ENABLE_PDAL=ON '  # req. PDAL as dependency
+# configopts += '-DPARAVIEW_ENABLE_OPENVDB=ON '  # req. OpenVDB as dependency
+
+# https://gitlab.kitware.com/paraview/visitbridge/-/blob/master/databases/CMakeLists.txt
+configopts += '-DPARAVIEW_ENABLE_VISITBRIDGE=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_IOVisItBridge=YES '
+# configopts += '-DVISIT_BUILD_READER_Boxlib3D=ON '  # req. external dependency
+# configopts += '-DVISIT_BUILD_READER_Mili=ON '  # req. external dependency
+# configopts += '-DVISIT_BUILD_READER_Silo=ON '  # req. external dependency
+# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7503
+# configopts += '-DVISIT_BUILD_READER_Nek5000=ON '  # MR still open
+
+postinstallcmds = [
+    'python -m compileall %(installdir)s/lib64/python%(pyshortver)s/site-packages/',
+    # 'cp -a %s %s' % (local_buildsrc, local_installsrc),  # copy source from build dir to install dir
+    # '', # move debug info to separate files:
+    #       http://stackoverflow.com/questions/866721/how-to-generate-gcc-debug-symbol-outside-the-build-target
+    # '', # debugedit -i --base-dir=%(builddir)s/ParaView-v%(version)s --dest-dir= %(installdir)s/src <file.debug>
+    #     # change path to source in debug info
+]
+
+modextravars = {
+    'PARAVIEW_VTK_DIR': '%(installdir)s/lib64/cmake/paraview-%(version_major_minor)/vtk',
+    # 'CUDA_VISIBLE_DEVICES': '0,1',
+    # OpenSWR fully supports OpenGL 3.0 and most of 3.3, but ParaView requires 3.3 -> clame to fully support 3.3
+    'MESA_GL_VERSION_OVERRIDE': '3.3',
+    'MESA_GLSL_VERSION_OVERRIDE': '330',
+    #  OpenMP will choose an optimum number of threads by default, which is usually the number of cores
+    # 'OMP_NUM_THREADS': '28', # fix number of threads used by paraview filters and parallel sections in the code
+    #  threads used by ospray - details https://github.com/ospray/ospray/blob/release-2.0.x/ospray/api/Device.cpp#L88
+    #  unset => OSPRAY uses all hardware threads
+    # 'OSPRAY_THREADS': '14',     # OSPRay <  2.0
+    # 'OSPRAY_NUM_THREADS': '14', # OSPRay >= 2.0
+    #  When TBB is used for OSPRAY: tbb::task_scheduler_init::default_num_threads() is default if no OSPRAY_NUM_THREADS
+    #    https://github.com/ospray/ospcommon/blob/master/ospcommon/tasking/detail/tasking_system_init.cpp#L47
+    #    https://www.threadingbuildingblocks.org/docs/doxygen/a00150.html
+    #  more ospray definitions: https://www.ospray.org/documentation.html#environment-variables
+    # max. threads used by OpenSWR (limited by number of hardware threads)
+    'KNOB_MAX_WORKER_THREADS': '65535',
+    #  details in https://gitlab.version.fz-juelich.de/vis/vis-software/issues/14
+    #  more knob defs: https://github.com/mesa3d/mesa/blob/master/src/gallium/docs/source/drivers/openswr/knobs.rst
+    'CATALYST_IMPLEMENTATION_NAME': 'paraview',
+    'CATALYST_IMPLEMENTATION_PATHS': '%(installdir)s/lib64/catalyst',
+    # details in https://catalyst-in-situ.readthedocs.io/en/latest/for_simulation_developers.html#catalyst-initialize
+}
+
+modextrapaths = {
+    'PYTHONPATH': [
+        'lib64/python%(pyshortver)s/site-packages',
+        'lib64/python%(pyshortver)s/site-packages/vtkmodules'  # required by Trilinos Catalyst adapter
+    ],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/p/ParaView/ParaView-5.11.0-foss-2022a.eb b/Golden_Repo/p/ParaView/ParaView-5.11.0-foss-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..31ed6285da39e037542993f9a152cc2b3abcabdd
--- /dev/null
+++ b/Golden_Repo/p/ParaView/ParaView-5.11.0-foss-2022a.eb
@@ -0,0 +1,350 @@
+easyblock = 'CMakeMake'
+
+name = 'ParaView'
+version = '5.11.0'
+
+homepage = "http://www.paraview.org"
+description = "Paraview is a scientific parallel visualizer."
+
+toolchain = {'name': 'foss', 'version': '2022a'}
+toolchainopts = {'pic': True, 'usempi': True}
+
+local_dwnlsfx_src = 'download.php?submit=Download&version=v%(version_major_minor)s&type=source&os=Sources&downloadFile='
+source_urls = [('http://www.paraview.org/paraview-downloads/%s' %
+                local_dwnlsfx_src)]
+sources = [("ParaView-v%(version)s.tar.gz")]
+
+patches = [
+    'cdireader_update_issue5715.patch',
+    'parflowreader_fix-nlohmann_merge6050.patch',
+]
+
+checksums = [
+    '68b1c6d15dd67ec442f964460c56212417e8af2a96763001f8548eb3cbc5ce87',
+    '064d6878409d9133ad56ce363503a000f7b4617d0c912fd81dd772994f6b5ac2',  # cdireader patch
+    'eb8b6967782bb47e81df129b0d8e192bbf31f11f815d0f53d1c5b4e53da95fd6',  # parflowreader patch
+]
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+    ('git', '2.36.0', '-nodocs'),
+    ('pkgconf', '1.8.0'),
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('Boost', '1.79.0'),
+    ('X11', '20220504'),
+    ('bzip2', '1.0.8'),
+    ('HDF5', '1.12.2'),
+    ('ADIOS2', '2.8.3'),
+    ('FFmpeg', '4.4.2'),
+    ('Embree', '3.13.5'),
+    ('OSPRay', '2.10.0'),
+    ('libpng', '1.6.37'),
+    ('expat', '2.4.8'),
+    ('freetype', '2.12.1'),
+    ('libjpeg-turbo', '2.1.3'),
+    ('libxml2', '2.9.13'),
+    ('LibTIFF', '4.3.0'),
+    ('zlib', '1.2.12'),
+    ('netCDF', '4.9.0'),
+    ('netCDF-C++4', '4.3.1'),
+    ('netCDF-Fortran', '4.6.0'),
+    ('nlohmann_json', '3.10.5'),  # for ParFlow plugin
+    ('libcdi', '2.1.1', '', ('gcccoremkl', '11.3.0-2022.1.0')),  # for CDI plugin
+    ('mpi4py', '3.1.4'),
+    ('double-conversion', '3.2.0'),
+    ('Eigen', '3.4.0'),
+    ('Qt5', '5.15.5'),
+    ('SciPy-Stack', '2022a', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('OpenGL', '2022a'),
+    ('Catalyst', '2.0.0-rc3'),
+    ('ParaViewData', '5.11.0'),
+    ('VTKData', '9.2.5'),
+]
+
+separate_build_dir = True
+
+# ensure we do not use a too advanced GL-version at config/build-time, which might not be available at run-time
+preconfigopts = "export __EGL_VENDOR_LIBRARY_FILENAMES=${EBROOTOPENGL}/share/glvnd/egl_vendor.d/50_mesa.json && "
+prebuildopts = "export __EGL_VENDOR_LIBRARY_FILENAMES=${EBROOTOPENGL}/share/glvnd/egl_vendor.d/50_mesa.json && "
+
+########################################################################################
+# check ParaView Superbuild options                                                    #
+# https://gitlab.kitware.com/paraview/paraview-superbuild/tree/master                  #
+#                                                                                      #
+# check ParaView Spack options                                                         #
+# https://github.com/spack/spack/blob/develop/var/spack/repos/builtin/packages/paraview/package.py
+#                                                                                      #
+# check ParaView Build documenation                                                    #
+# https://gitlab.kitware.com/paraview/paraview/blob/master/Documentation/dev/build.md  #
+########################################################################################
+
+local_buildsrc = '%(builddir)s/easybuild_obj'
+local_installsrc = '%(installdir)s/debugsrc'
+
+# --- general settings --- #
+configopts = '-DCMAKE_VERBOSE_MAKEFILE=ON '
+configopts += '-DCMAKE_CXX_FLAGS="-fdebug-prefix-map=%s=%s $CMAKE_CXX_FLAGS" ' % (local_buildsrc, local_installsrc)
+configopts += '-DCMAKE_C_FLAGS="-fdebug-prefix-map=%s=%s $CMAKE_C_FLAGS" ' % (local_buildsrc, local_installsrc)
+configopts += '-DCMAKE_CXX_STANDARD=11 '
+configopts += '-DPARAVIEW_BUILD_LEGACY_SILENT=ON '
+
+# https://forum.openframeworks.cc/t/nvidia-drivers-pthreads-and-segfaults/2524
+# configopts += '-DCMAKE_CXX_FLAGS="-lpthread $CMAKE_CXX_FLAGS" '
+# configopts += '-DCMAKE_C_FLAGS="-lpthread $CMAKE_C_FLAGS" '
+
+configopts += '-DPARAVIEW_BUILD_EDITION=CANONICAL '
+configopts += '-DPARAVIEW_BUILD_WITH_KITS=OFF '
+configopts += '-DPARAVIEW_USE_QT=ON '
+
+# --- tuning --- #
+# better disable for now: https://discourse.paraview.org/t/array-dispatch-issues/10328
+# configopts += '-DVTK_BUILD_SCALED_SOA_ARRAYS=OFF '
+# configopts += '-DVTK_DISPATCH_SOA_ARRAYS=OFF '
+# configopts += '-DVTK_DISPATCH_TYPED_ARRAYS=OFF '
+
+# --- web --- #
+configopts += '-DPARAVIEW_ENABLE_WEB=ON '
+configopts += '-DPARAVIEW_USE_QTWEBENGINE=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_PVWebPython=YES '
+
+# --- python --- #
+configopts += '-DPARAVIEW_USE_PYTHON=ON '
+configopts += "-DPython3_EXECUTABLE=$EBROOTPYTHON/bin/python "
+
+configopts += '-DVTK_PYTHON_VERSION=3 '
+configopts += '-DVTK_NO_PYTHON_THREADS=OFF '
+# visibility depends on VTK_NO_PYTHON_THREADS=OFF
+configopts += '-DVTK_PYTHON_FULL_THREADSAFE=OFF '
+# If you pass VTK_PYTHON_FULL_THREADSAFE to true, then each and every call to python will be protected with GIL,
+# ensuring that you can have eg. other python interpreter in your application and still use python wrapping in vtk.
+
+# --- VTKm --- #
+configopts += '-DPARAVIEW_USE_VTKM=ON '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmCore=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmDataModel=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmFilters=YES '
+configopts += '-DVTKm_Vectorization=AVX2 '
+# configopts += '-DVTKm_ENABLE_KOKKOS=OFF '
+# configopts += '-DVTKm_ENABLE_TBB=OFF '
+# configopts += '-DVTKm_ENABLE_CUDA=ON '
+# configopts += '-DVTKm_ENABLE_LOGGING=ON '
+
+# --- parallel (on-node) --- #
+# https://blog.kitware.com/simple-parallel-computing-with-vtksmptools-2/
+configopts += '-DVTK_SMP_IMPLEMENTATION_TYPE=OpenMP '
+configopts += '-DVTK_MAX_THREADS=64 '
+configopts += '-DVTKm_ENABLE_OPENMP=ON '
+
+# --- parallel (distributed) --- #
+configopts += '-DMPIEXEC_MAX_NUMPROCS=24 '
+configopts += '-DPARAVIEW_USE_MPI=ON '
+configopts += '-DVTKm_ENABLE_MPI=ON '
+
+# --- IO --- #
+configopts += '-DXDMF_BUILD_MPI=ON '
+configopts += '-DPARAVIEW_ENABLE_XDMF3=ON '
+configopts += '-DPARAVIEW_ENABLE_ADIOS2=OFF '  # error: adios2.h not found
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_AdiosReaderPixie=ON '  # req. ADIOS1
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_AdiosReaderStaging=ON ' # req. ADIOS1
+configopts += '-DVTKm_ENABLE_HDF5_IO=ON '
+
+# --- large data --- #
+configopts += '-DVTK_USE_64BIT_IDS=ON '
+
+# --- rendering --- #
+
+# OpenGL (hardware)
+#  https://kitware.github.io/paraview-docs/latest/cxx/Offscreen.html
+#    If VTK_OPENGL_HAS_EGL or VTK_OPENGL_HAS_OSMESA is ON, the build supports headless rendering,
+#       otherwise VTK_USE_X must be ON and the build does not support headless,
+#       but can still support offscreen rendering.
+#    If VTK_USE_X is OFF, then either VTK_OPENGL_HAS_OSMESA or VTK_OPENGL_HAS_EGL must be ON.
+#       Then the build does not support onscreen rendering, but only headless rendering.
+#    If PARAVIEW_BUILD_QT_GUI is ON and VTK_USE_X is ON, while ParaView command line tools won't link against
+#       or use X calls, Qt will and hence an accessible X server is still needed to run the desktop client.
+#    If VTK_OPENGL_HAS_OSMESA is ON, and VTK_USE_X is ON,
+#       then all the OpenGL and OSMesa variables should point to the Mesa libraries.
+#    Likewise, if VTK_OPENGL_HAS_EGL is ON and VTK_USE_X is ON, then all the OpenGL and EGL variables
+#       should point to the system libraries providing both, typically the NVidia libraries.
+
+configopts += '-DOpenGL_GL_PREFERENCE=GLVND '
+configopts += '-DVTK_REPORT_OPENGL_ERRORS_IN_RELEASE_BUILDS=OFF '
+
+configopts += "-DOPENGL_INCLUDE_DIR=${EBROOTOPENGL}/include "
+configopts += "-DOPENGL_GLX_INCLUDE_DIR=${EBROOTOPENGL}/include "
+configopts += "-DOPENGL_EGL_INCLUDE_DIR=${EBROOTOPENGL}/include "
+# configopts += "-DOPENGL_xmesa_INCLUDE_DIR=IGNORE "
+
+configopts += "-DOPENGL_opengl_LIBRARY=${EBROOTOPENGL}/lib/libOpenGL.so.0 "
+configopts += "-DOPENGL_gl_LIBRARY=${EBROOTOPENGL}/lib/libGL.so "
+configopts += "-DOPENGL_glx_LIBRARY=${EBROOTOPENGL}/lib/libGLX.so.0 "
+configopts += "-DOPENGL_glu_LIBRARY=${EBROOTOPENGL}/lib/libGLU.so "
+configopts += "-DOPENGL_egl_LIBRARY=${EBROOTOPENGL}/lib/libEGL.so.1 "
+
+# OpenGL over X
+configopts += '-DVTK_USE_X=ON '  # OFF:headless rendering
+# already considered by Qt (https://gitlab.kitware.com/lorensen/vtk/commit/b29f6db3f746d84f830c81e4212e48db192e4dbb)
+configopts += '-DVTK_DEFAULT_RENDER_WINDOW_OFFSCREEN=OFF '
+# http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+configopts += '-DVTK_OPENGL_HAS_OSMESA=OFF '
+
+# EGL (off-screen rendering with OpenGL, but without the need for X)
+# call pvserver with –egl-device-index=0 or 1 and –disable-xdisplay-test
+# configopts += '-DVTK_OPENGL_HAS_EGL=ON '
+# configopts += '-DVTK_OPENGL_HAS_OSMESA=OFF '  # http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+# configopts += '-DVTK_USE_X=OFF '
+# configopts += '-DVTK_DEFAULT_EGL_DEVICE_INDEX=0 '
+# #configopts += '-DEGL_INCLUDE_DIR=${EBROOTOPENGL}/include/EGL/ ' # https://www.khronos.org/registry/EGL/
+# #configopts += '-DEGL_LIBRARY=${EBROOTOPENGL}/lib/libEGL.so.1 '
+# #configopts += '-DEGL_opengl_LIBRARY=${EBROOTOPENGL}/lib/libOpenGL.so.0 '
+# #configopts += '-DEGL_gldispatch_LIBRARY=${EBROOTOPENGL}/lib/libGLdispatch.so.0 ' # <path_to_libGLdispatch.so.0>
+
+# OSMesa (software)
+# With OSMesa the DISPLAY variable has no meaning and is not needed
+# When ON, implies that ParaView can use OSMesa to support headless modes of operation.
+# configopts += '-DVTK_OPENGL_HAS_OSMESA=ON ' # http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+# configopts += '-DVTK_USE_X=OFF '
+# configopts += '-DVTK_DEFAULT_RENDER_WINDOW_OFFSCREEN=ON '
+# configopts += '-DOSMESA_INCLUDE_DIR=${EBROOTOPENGL}/include '
+# configopts += '-DOSMESA_LIBRARY=${EBROOTOPENGL}/lib/libOSMesa.so '
+
+# Raytracing
+configopts += '-DPARAVIEW_ENABLE_RAYTRACING=ON '
+configopts += '-DVTK_ENABLE_OSPRAY=ON '
+configopts += '-DVTK_ENABLE_VISRTX=OFF '
+
+configopts += "-Dospray_DIR=${EBROOTOSPRAY} "
+configopts += "-Dembree_DIR=${EBROOTEMBREE}/lib64/cmake/embree-3.13.5 "
+configopts += '-DVTKOSPRAY_ENABLE_DENOISER=ON '
+
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_pvNVIDIAIndeX=YES '
+
+# --- extra features --- #
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_GeographicalMap=ON '
+
+configopts += "-DFFMPEG_ROOT=$EBROOTFFMPEG "
+configopts += '-DPARAVIEW_ENABLE_FFMPEG=ON '
+configopts += '-DVTK_MODULE_ENABLE_VTK_IOFFMPEG=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_IOVideo=YES '
+
+configopts += '-DVTK_MODULE_ENABLE_VTK_DICOMParser=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersReebGraph=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersSMP=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersSelection=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersTopology=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersTexture=YES '
+# configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersStatisticsGnu=YES '
+# configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersMatlab=YES '
+
+# --- coupling --- #
+configopts += '-DPARAVIEW_ENABLE_CATALYST=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_InSitu=YES '
+# configopts += '-DVTK_MODULE_USE_EXTERNAL_ParaView_vtkcatalyst=ON '
+configopts += '-Dcatalyst_DIR=${EBROOTCATALYST}/lib64/cmake/catalyst-2.0/ '
+
+# --- development & testing --- #
+configopts += '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON '
+configopts += '-DPARAVIEW_BUILD_DEVELOPER_DOCUMENTATION=OFF '
+configopts += '-DPARAVIEW_ENABLE_EXAMPLES=OFF '
+configopts += '-DPARAVIEW_BUILD_TESTING=OFF '
+configopts += '-DPARAVIEW_BUILD_VTK_TESTING=OFF '
+
+# --- external data --- #
+# https://cmake.org/cmake/help/latest/module/ExternalData.html
+# https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md
+# configopts += '-DCTEST_TEST_TIMEOUT=10800 '  # unknown setting
+# download inactivity, 0 = no timeout
+configopts += '-DExternalData_TIMEOUT_INACTIVITY=10 '
+# download abs. time, 0 = no timeout
+configopts += '-DExternalData_TIMEOUT_ABSOLUTE=60 '
+# Exclude test data download from default 'all' target.
+configopts += '-DPARAVIEW_DATA_EXCLUDE_FROM_ALL=ON '
+# Local directory holding ExternalData objects in the layout %(algo)/%(hash).
+configopts += '-DPARAVIEW_DATA_STORE=${EBROOTPARAVIEWDATA}/.ExternalData '
+configopts += '-DVTK_DATA_STORE=${EBROOTVTKDATA}/.ExternalData '
+# Local directory holding the real data files of ExternalData.
+configopts += '-DExternalData_BINARY_ROOT=${EBROOTPARAVIEWDATA} '
+# we need to combine VTK and ParaView's External data files as there can only be one ExternalData_BINARY_ROOT
+
+# --- XDMF options --- #
+configopts += '-DXDMF_USE_BZIP2=ON '
+configopts += '-DXDMF_USE_GZIP=ON '
+
+# --- VTK external libraries --- #
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_expat=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_freetype=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_hdf5=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_jpeg=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_libxml2=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_mpi4py=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_netcdf=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_png=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_tiff=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_zlib=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_doubleconversion=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_eigen=ON '
+
+# --- ParaView Extra-Reader --- #
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_CDIReader=ON '
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_ParFlow=ON '
+configopts += '-DPARAVIEW_ENABLE_MOTIONFX=ON '
+# configopts += '-DPARAVIEW_ENABLE_FIDES=ON '  # req. ADIOS2 as dependency
+# configopts += '-DPARAVIEW_ENABLE_GDAL=ON '  # req. GDAL as dependency
+# configopts += '-DPARAVIEW_ENABLE_LAS=ON '  # req. LAS as dependency
+# configopts += '-DPARAVIEW_ENABLE_PDAL=ON '  # req. PDAL as dependency
+# configopts += '-DPARAVIEW_ENABLE_OPENVDB=ON '  # req. OpenVDB as dependency
+
+# https://gitlab.kitware.com/paraview/visitbridge/-/blob/master/databases/CMakeLists.txt
+configopts += '-DPARAVIEW_ENABLE_VISITBRIDGE=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_IOVisItBridge=YES '
+# configopts += '-DVISIT_BUILD_READER_Boxlib3D=ON '  # req. external dependency
+# configopts += '-DVISIT_BUILD_READER_Mili=ON '  # req. external dependency
+# configopts += '-DVISIT_BUILD_READER_Silo=ON '  # req. external dependency
+# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7503
+# configopts += '-DVISIT_BUILD_READER_Nek5000=ON '  # MR still open
+
+postinstallcmds = [
+    'python -m compileall %(installdir)s/lib64/python%(pyshortver)s/site-packages/',
+    # 'cp -a %s %s' % (local_buildsrc, local_installsrc),  # copy source from build dir to install dir
+    # '', # move debug info to separate files:
+    #       http://stackoverflow.com/questions/866721/how-to-generate-gcc-debug-symbol-outside-the-build-target
+    # '', # debugedit -i --base-dir=%(builddir)s/ParaView-v%(version)s --dest-dir= %(installdir)s/src <file.debug>
+    #     # change path to source in debug info
+]
+
+modextravars = {
+    'PARAVIEW_VTK_DIR': '%(installdir)s/lib64/cmake/paraview-%(version_major_minor)/vtk',
+    # 'CUDA_VISIBLE_DEVICES': '0,1',
+    # OpenSWR fully supports OpenGL 3.0 and most of 3.3, but ParaView requires 3.3 -> clame to fully support 3.3
+    'MESA_GL_VERSION_OVERRIDE': '3.3',
+    'MESA_GLSL_VERSION_OVERRIDE': '330',
+    #  OpenMP will choose an optimum number of threads by default, which is usually the number of cores
+    # 'OMP_NUM_THREADS': '28', # fix number of threads used by paraview filters and parallel sections in the code
+    #  threads used by ospray - details https://github.com/ospray/ospray/blob/release-2.0.x/ospray/api/Device.cpp#L88
+    #  unset => OSPRAY uses all hardware threads
+    # 'OSPRAY_THREADS': '14',     # OSPRay <  2.0
+    # 'OSPRAY_NUM_THREADS': '14', # OSPRay >= 2.0
+    #  When TBB is used for OSPRAY: tbb::task_scheduler_init::default_num_threads() is default if no OSPRAY_NUM_THREADS
+    #    https://github.com/ospray/ospcommon/blob/master/ospcommon/tasking/detail/tasking_system_init.cpp#L47
+    #    https://www.threadingbuildingblocks.org/docs/doxygen/a00150.html
+    #  more ospray definitions: https://www.ospray.org/documentation.html#environment-variables
+    # max. threads used by OpenSWR (limited by number of hardware threads)
+    'KNOB_MAX_WORKER_THREADS': '65535',
+    #  details in https://gitlab.version.fz-juelich.de/vis/vis-software/issues/14
+    #  more knob defs: https://github.com/mesa3d/mesa/blob/master/src/gallium/docs/source/drivers/openswr/knobs.rst
+    'CATALYST_IMPLEMENTATION_NAME': 'paraview',
+    'CATALYST_IMPLEMENTATION_PATHS': '%(installdir)s/lib64/catalyst',
+    # details in https://catalyst-in-situ.readthedocs.io/en/latest/for_simulation_developers.html#catalyst-initialize
+}
+
+modextrapaths = {
+    'PYTHONPATH': [
+        'lib64/python%(pyshortver)s/site-packages',
+        'lib64/python%(pyshortver)s/site-packages/vtkmodules'  # required by Trilinos Catalyst adapter
+    ],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/p/ParaView/ParaView-5.11.0-gpsmkl-2022a-EGL.eb b/Golden_Repo/p/ParaView/ParaView-5.11.0-gpsmkl-2022a-EGL.eb
new file mode 100644
index 0000000000000000000000000000000000000000..12be5b994e8953b8d6347c7d2561ce86f0665dea
--- /dev/null
+++ b/Golden_Repo/p/ParaView/ParaView-5.11.0-gpsmkl-2022a-EGL.eb
@@ -0,0 +1,351 @@
+easyblock = 'CMakeMake'
+
+name = 'ParaView'
+version = '5.11.0'
+versionsuffix = '-EGL'
+
+homepage = "http://www.paraview.org"
+description = "Paraview is a scientific parallel visualizer."
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'pic': True, 'usempi': True}
+
+local_dwnlsfx_src = 'download.php?submit=Download&version=v%(version_major_minor)s&type=source&os=Sources&downloadFile='
+source_urls = [('http://www.paraview.org/paraview-downloads/%s' %
+                local_dwnlsfx_src)]
+sources = [("ParaView-v%(version)s.tar.gz")]
+
+patches = [
+    'cdireader_update_issue5715.patch',
+    'parflowreader_fix-nlohmann_merge6050.patch',
+]
+
+checksums = [
+    '68b1c6d15dd67ec442f964460c56212417e8af2a96763001f8548eb3cbc5ce87',
+    '064d6878409d9133ad56ce363503a000f7b4617d0c912fd81dd772994f6b5ac2',  # cdireader patch
+    'eb8b6967782bb47e81df129b0d8e192bbf31f11f815d0f53d1c5b4e53da95fd6',  # parflowreader patch
+]
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+    ('git', '2.36.0', '-nodocs'),
+    ('pkgconf', '1.8.0'),
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('Boost', '1.79.0'),
+    ('X11', '20220504'),
+    ('bzip2', '1.0.8'),
+    ('HDF5', '1.12.2'),
+    ('ADIOS2', '2.8.3'),
+    ('FFmpeg', '4.4.2'),
+    ('Embree', '3.13.5'),
+    ('OSPRay', '2.10.0'),
+    ('libpng', '1.6.37'),
+    ('expat', '2.4.8'),
+    ('freetype', '2.12.1'),
+    ('libjpeg-turbo', '2.1.3'),
+    ('libxml2', '2.9.13'),
+    ('LibTIFF', '4.3.0'),
+    ('zlib', '1.2.12'),
+    ('netCDF', '4.9.0'),
+    ('netCDF-C++4', '4.3.1'),
+    ('netCDF-Fortran', '4.6.0'),
+    ('nlohmann_json', '3.10.5'),  # for ParFlow plugin
+    ('libcdi', '2.1.1', '', ('gcccoremkl', '11.3.0-2022.1.0')),  # for CDI plugin
+    ('mpi4py', '3.1.4'),
+    ('double-conversion', '3.2.0'),
+    ('Eigen', '3.4.0'),
+    ('Qt5', '5.15.5'),
+    ('SciPy-Stack', '2022a', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('OpenGL', '2022a'),
+    ('Catalyst', '2.0.0-rc3'),
+    ('ParaViewData', '5.11.0'),
+    ('VTKData', '9.2.5'),
+]
+
+separate_build_dir = True
+
+# ensure we do not use a too advanced GL-version at config/build-time, which might not be available at run-time
+preconfigopts = "export __EGL_VENDOR_LIBRARY_FILENAMES=${EBROOTOPENGL}/share/glvnd/egl_vendor.d/50_mesa.json && "
+prebuildopts = "export __EGL_VENDOR_LIBRARY_FILENAMES=${EBROOTOPENGL}/share/glvnd/egl_vendor.d/50_mesa.json && "
+
+########################################################################################
+# check ParaView Superbuild options                                                    #
+# https://gitlab.kitware.com/paraview/paraview-superbuild/tree/master                  #
+#                                                                                      #
+# check ParaView Spack options                                                         #
+# https://github.com/spack/spack/blob/develop/var/spack/repos/builtin/packages/paraview/package.py
+#                                                                                      #
+# check ParaView Build documenation                                                    #
+# https://gitlab.kitware.com/paraview/paraview/blob/master/Documentation/dev/build.md  #
+########################################################################################
+
+local_buildsrc = '%(builddir)s/easybuild_obj'
+local_installsrc = '%(installdir)s/debugsrc'
+
+# --- general settings --- #
+configopts = '-DCMAKE_VERBOSE_MAKEFILE=ON '
+configopts += '-DCMAKE_CXX_FLAGS="-fdebug-prefix-map=%s=%s $CMAKE_CXX_FLAGS" ' % (local_buildsrc, local_installsrc)
+configopts += '-DCMAKE_C_FLAGS="-fdebug-prefix-map=%s=%s $CMAKE_C_FLAGS" ' % (local_buildsrc, local_installsrc)
+configopts += '-DCMAKE_CXX_STANDARD=11 '
+configopts += '-DPARAVIEW_BUILD_LEGACY_SILENT=ON '
+
+# https://forum.openframeworks.cc/t/nvidia-drivers-pthreads-and-segfaults/2524
+# configopts += '-DCMAKE_CXX_FLAGS="-lpthread $CMAKE_CXX_FLAGS" '
+# configopts += '-DCMAKE_C_FLAGS="-lpthread $CMAKE_C_FLAGS" '
+
+configopts += '-DPARAVIEW_BUILD_EDITION=CANONICAL '
+configopts += '-DPARAVIEW_BUILD_WITH_KITS=OFF '
+configopts += '-DPARAVIEW_USE_QT=OFF '
+
+# --- tuning --- #
+# better disable for now: https://discourse.paraview.org/t/array-dispatch-issues/10328
+# configopts += '-DVTK_BUILD_SCALED_SOA_ARRAYS=OFF '
+# configopts += '-DVTK_DISPATCH_SOA_ARRAYS=OFF '
+# configopts += '-DVTK_DISPATCH_TYPED_ARRAYS=OFF '
+
+# --- web --- #
+configopts += '-DPARAVIEW_ENABLE_WEB=ON '
+configopts += '-DPARAVIEW_USE_QTWEBENGINE=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_PVWebPython=YES '
+
+# --- python --- #
+configopts += '-DPARAVIEW_USE_PYTHON=ON '
+configopts += "-DPython3_EXECUTABLE=$EBROOTPYTHON/bin/python "
+
+configopts += '-DVTK_PYTHON_VERSION=3 '
+configopts += '-DVTK_NO_PYTHON_THREADS=OFF '
+# visibility depends on VTK_NO_PYTHON_THREADS=OFF
+configopts += '-DVTK_PYTHON_FULL_THREADSAFE=OFF '
+# If you pass VTK_PYTHON_FULL_THREADSAFE to true, then each and every call to python will be protected with GIL,
+# ensuring that you can have eg. other python interpreter in your application and still use python wrapping in vtk.
+
+# --- VTKm --- #
+configopts += '-DPARAVIEW_USE_VTKM=ON '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmCore=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmDataModel=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmFilters=YES '
+configopts += '-DVTKm_Vectorization=AVX2 '
+# configopts += '-DVTKm_ENABLE_KOKKOS=OFF '
+# configopts += '-DVTKm_ENABLE_TBB=OFF '
+# configopts += '-DVTKm_ENABLE_CUDA=ON '
+# configopts += '-DVTKm_ENABLE_LOGGING=ON '
+
+# --- parallel (on-node) --- #
+# https://blog.kitware.com/simple-parallel-computing-with-vtksmptools-2/
+configopts += '-DVTK_SMP_IMPLEMENTATION_TYPE=OpenMP '
+configopts += '-DVTK_MAX_THREADS=64 '
+configopts += '-DVTKm_ENABLE_OPENMP=ON '
+
+# --- parallel (distributed) --- #
+configopts += '-DMPIEXEC_MAX_NUMPROCS=24 '
+configopts += '-DPARAVIEW_USE_MPI=ON '
+configopts += '-DVTKm_ENABLE_MPI=ON '
+
+# --- IO --- #
+configopts += '-DXDMF_BUILD_MPI=ON '
+configopts += '-DPARAVIEW_ENABLE_XDMF3=ON '
+configopts += '-DPARAVIEW_ENABLE_ADIOS2=OFF '  # error: adios2.h not found
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_AdiosReaderPixie=ON '  # req. ADIOS1
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_AdiosReaderStaging=ON ' # req. ADIOS1
+configopts += '-DVTKm_ENABLE_HDF5_IO=ON '
+
+# --- large data --- #
+configopts += '-DVTK_USE_64BIT_IDS=ON '
+
+# --- rendering --- #
+
+# OpenGL (hardware)
+#  https://kitware.github.io/paraview-docs/latest/cxx/Offscreen.html
+#    If VTK_OPENGL_HAS_EGL or VTK_OPENGL_HAS_OSMESA is ON, the build supports headless rendering,
+#       otherwise VTK_USE_X must be ON and the build does not support headless,
+#       but can still support offscreen rendering.
+#    If VTK_USE_X is OFF, then either VTK_OPENGL_HAS_OSMESA or VTK_OPENGL_HAS_EGL must be ON.
+#       Then the build does not support onscreen rendering, but only headless rendering.
+#    If PARAVIEW_BUILD_QT_GUI is ON and VTK_USE_X is ON, while ParaView command line tools won't link against
+#       or use X calls, Qt will and hence an accessible X server is still needed to run the desktop client.
+#    If VTK_OPENGL_HAS_OSMESA is ON, and VTK_USE_X is ON,
+#       then all the OpenGL and OSMesa variables should point to the Mesa libraries.
+#    Likewise, if VTK_OPENGL_HAS_EGL is ON and VTK_USE_X is ON, then all the OpenGL and EGL variables
+#       should point to the system libraries providing both, typically the NVidia libraries.
+
+configopts += '-DOpenGL_GL_PREFERENCE=GLVND '
+configopts += '-DVTK_REPORT_OPENGL_ERRORS_IN_RELEASE_BUILDS=OFF '
+
+configopts += "-DOPENGL_INCLUDE_DIR=${EBROOTOPENGL}/include "
+configopts += "-DOPENGL_GLX_INCLUDE_DIR=${EBROOTOPENGL}/include "
+configopts += "-DOPENGL_EGL_INCLUDE_DIR=${EBROOTOPENGL}/include "
+# configopts += "-DOPENGL_xmesa_INCLUDE_DIR=IGNORE "
+
+configopts += "-DOPENGL_opengl_LIBRARY=${EBROOTOPENGL}/lib/libOpenGL.so.0 "
+configopts += "-DOPENGL_gl_LIBRARY=${EBROOTOPENGL}/lib/libGL.so "
+configopts += "-DOPENGL_glx_LIBRARY=${EBROOTOPENGL}/lib/libGLX.so.0 "
+configopts += "-DOPENGL_glu_LIBRARY=${EBROOTOPENGL}/lib/libGLU.so "
+configopts += "-DOPENGL_egl_LIBRARY=${EBROOTOPENGL}/lib/libEGL.so.1 "
+
+# OpenGL over X
+# configopts += '-DVTK_USE_X=ON '  # OFF:headless rendering
+# already considered by Qt (https://gitlab.kitware.com/lorensen/vtk/commit/b29f6db3f746d84f830c81e4212e48db192e4dbb)
+# configopts += '-DVTK_DEFAULT_RENDER_WINDOW_OFFSCREEN=OFF '
+# configopts += '-DVTK_OPENGL_HAS_OSMESA=OFF '  # http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+
+# EGL (off-screen rendering with OpenGL, but without the need for X)
+# call pvserver with –egl-device-index=0 or 1 and –disable-xdisplay-test
+configopts += '-DVTK_OPENGL_HAS_EGL=ON '
+# http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+configopts += '-DVTK_OPENGL_HAS_OSMESA=OFF '
+configopts += '-DVTK_USE_X=OFF '
+configopts += '-DVTK_DEFAULT_EGL_DEVICE_INDEX=0 '
+# configopts += '-DEGL_INCLUDE_DIR=${EBROOTOPENGL}/include/EGL/ ' # https://www.khronos.org/registry/EGL/
+# configopts += '-DEGL_LIBRARY=${EBROOTOPENGL}/lib/libEGL.so.1 '
+# configopts += '-DEGL_opengl_LIBRARY=${EBROOTOPENGL}/lib/libOpenGL.so.0 '
+# configopts += '-DEGL_gldispatch_LIBRARY=${EBROOTOPENGL}/lib/libGLdispatch.so.0 ' # <path_to_libGLdispatch.so.0>
+
+# OSMesa (software)
+# With OSMesa the DISPLAY variable has no meaning and is not needed
+# When ON, implies that ParaView can use OSMesa to support headless modes of operation.
+# configopts += '-DVTK_OPENGL_HAS_OSMESA=ON ' # http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+# configopts += '-DVTK_USE_X=OFF '
+# configopts += '-DVTK_DEFAULT_RENDER_WINDOW_OFFSCREEN=ON '
+# configopts += '-DOSMESA_INCLUDE_DIR=${EBROOTOPENGL}/include '
+# configopts += '-DOSMESA_LIBRARY=${EBROOTOPENGL}/lib/libOSMesa.so '
+
+# Raytracing
+configopts += '-DPARAVIEW_ENABLE_RAYTRACING=ON '
+configopts += '-DVTK_ENABLE_OSPRAY=ON '
+configopts += '-DVTK_ENABLE_VISRTX=OFF '
+
+configopts += "-Dospray_DIR=${EBROOTOSPRAY} "
+configopts += "-Dembree_DIR=${EBROOTEMBREE}/lib64/cmake/embree-3.13.5 "
+configopts += '-DVTKOSPRAY_ENABLE_DENOISER=ON '
+
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_pvNVIDIAIndeX=YES '
+
+# --- extra features --- #
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_GeographicalMap=ON '
+
+configopts += "-DFFMPEG_ROOT=$EBROOTFFMPEG "
+configopts += '-DPARAVIEW_ENABLE_FFMPEG=ON '
+configopts += '-DVTK_MODULE_ENABLE_VTK_IOFFMPEG=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_IOVideo=YES '
+
+configopts += '-DVTK_MODULE_ENABLE_VTK_DICOMParser=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersReebGraph=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersSMP=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersSelection=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersTopology=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersTexture=YES '
+# configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersStatisticsGnu=YES '
+# configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersMatlab=YES '
+
+# --- coupling --- #
+configopts += '-DPARAVIEW_ENABLE_CATALYST=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_InSitu=YES '
+# configopts += '-DVTK_MODULE_USE_EXTERNAL_ParaView_vtkcatalyst=ON '
+configopts += '-Dcatalyst_DIR=${EBROOTCATALYST}/lib64/cmake/catalyst-2.0/ '
+
+# --- development & testing --- #
+configopts += '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON '
+configopts += '-DPARAVIEW_BUILD_DEVELOPER_DOCUMENTATION=OFF '
+configopts += '-DPARAVIEW_ENABLE_EXAMPLES=OFF '
+configopts += '-DPARAVIEW_BUILD_TESTING=OFF '
+configopts += '-DPARAVIEW_BUILD_VTK_TESTING=OFF '
+
+# --- external data --- #
+# https://cmake.org/cmake/help/latest/module/ExternalData.html
+# https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md
+# configopts += '-DCTEST_TEST_TIMEOUT=10800 '  # unknown setting
+# download inactivity, 0 = no timeout
+configopts += '-DExternalData_TIMEOUT_INACTIVITY=10 '
+# download abs. time, 0 = no timeout
+configopts += '-DExternalData_TIMEOUT_ABSOLUTE=60 '
+# Exclude test data download from default 'all' target.
+configopts += '-DPARAVIEW_DATA_EXCLUDE_FROM_ALL=ON '
+# Local directory holding ExternalData objects in the layout %(algo)/%(hash).
+configopts += '-DPARAVIEW_DATA_STORE=${EBROOTPARAVIEWDATA}/.ExternalData '
+configopts += '-DVTK_DATA_STORE=${EBROOTVTKDATA}/.ExternalData '
+# Local directory holding the real data files of ExternalData.
+configopts += '-DExternalData_BINARY_ROOT=${EBROOTPARAVIEWDATA} '
+# we need to combine VTK and ParaView's External data files as there can only be one ExternalData_BINARY_ROOT
+
+# --- XDMF options --- #
+configopts += '-DXDMF_USE_BZIP2=ON '
+configopts += '-DXDMF_USE_GZIP=ON '
+
+# --- VTK external libraries --- #
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_expat=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_freetype=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_hdf5=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_jpeg=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_libxml2=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_mpi4py=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_netcdf=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_png=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_tiff=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_zlib=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_doubleconversion=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_eigen=ON '
+
+# --- ParaView Extra-Reader --- #
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_CDIReader=ON '
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_ParFlow=ON '
+configopts += '-DPARAVIEW_ENABLE_MOTIONFX=ON '
+# configopts += '-DPARAVIEW_ENABLE_FIDES=ON '  # req. ADIOS2 as dependency
+# configopts += '-DPARAVIEW_ENABLE_GDAL=ON '  # req. GDAL as dependency
+# configopts += '-DPARAVIEW_ENABLE_LAS=ON '  # req. LAS as dependency
+# configopts += '-DPARAVIEW_ENABLE_PDAL=ON '  # req. PDAL as dependency
+# configopts += '-DPARAVIEW_ENABLE_OPENVDB=ON '  # req. OpenVDB as dependency
+
+# https://gitlab.kitware.com/paraview/visitbridge/-/blob/master/databases/CMakeLists.txt
+configopts += '-DPARAVIEW_ENABLE_VISITBRIDGE=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_IOVisItBridge=YES '
+# configopts += '-DVISIT_BUILD_READER_Boxlib3D=ON '  # req. external dependency
+# configopts += '-DVISIT_BUILD_READER_Mili=ON '  # req. external dependency
+# configopts += '-DVISIT_BUILD_READER_Silo=ON '  # req. external dependency
+# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7503
+# configopts += '-DVISIT_BUILD_READER_Nek5000=ON '  # MR still open
+
+postinstallcmds = [
+    'python -m compileall %(installdir)s/lib64/python%(pyshortver)s/site-packages/',
+    # 'cp -a %s %s' % (local_buildsrc, local_installsrc),  # copy source from build dir to install dir
+    # '', # move debug info to separate files:
+    #       http://stackoverflow.com/questions/866721/how-to-generate-gcc-debug-symbol-outside-the-build-target
+    # '', # debugedit -i --base-dir=%(builddir)s/ParaView-v%(version)s --dest-dir= %(installdir)s/src <file.debug>
+    #     # change path to source in debug info
+]
+
+modextravars = {
+    'PARAVIEW_VTK_DIR': '%(installdir)s/lib64/cmake/paraview-%(version_major_minor)/vtk',
+    # 'CUDA_VISIBLE_DEVICES': '0,1',
+    # OpenSWR fully supports OpenGL 3.0 and most of 3.3, but ParaView requires 3.3 -> clame to fully support 3.3
+    'MESA_GL_VERSION_OVERRIDE': '3.3',
+    'MESA_GLSL_VERSION_OVERRIDE': '330',
+    #  OpenMP will choose an optimum number of threads by default, which is usually the number of cores
+    # 'OMP_NUM_THREADS': '28', # fix number of threads used by paraview filters and parallel sections in the code
+    #  threads used by ospray - details https://github.com/ospray/ospray/blob/release-2.0.x/ospray/api/Device.cpp#L88
+    #  unset => OSPRAY uses all hardware threads
+    # 'OSPRAY_THREADS': '14',     # OSPRay <  2.0
+    # 'OSPRAY_NUM_THREADS': '14', # OSPRay >= 2.0
+    #  When TBB is used for OSPRAY: tbb::task_scheduler_init::default_num_threads() is default if no OSPRAY_NUM_THREADS
+    #    https://github.com/ospray/ospcommon/blob/master/ospcommon/tasking/detail/tasking_system_init.cpp#L47
+    #    https://www.threadingbuildingblocks.org/docs/doxygen/a00150.html
+    #  more ospray definitions: https://www.ospray.org/documentation.html#environment-variables
+    # max. threads used by OpenSWR (limited by number of hardware threads)
+    'KNOB_MAX_WORKER_THREADS': '65535',
+    #  details in https://gitlab.version.fz-juelich.de/vis/vis-software/issues/14
+    #  more knob defs: https://github.com/mesa3d/mesa/blob/master/src/gallium/docs/source/drivers/openswr/knobs.rst
+    'CATALYST_IMPLEMENTATION_NAME': 'paraview',
+    'CATALYST_IMPLEMENTATION_PATHS': '%(installdir)s/lib64/catalyst',
+    # details in https://catalyst-in-situ.readthedocs.io/en/latest/for_simulation_developers.html#catalyst-initialize
+}
+
+modextrapaths = {
+    'PYTHONPATH': [
+        'lib64/python%(pyshortver)s/site-packages',
+        'lib64/python%(pyshortver)s/site-packages/vtkmodules'  # required by Trilinos Catalyst adapter
+    ],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/p/ParaView/ParaView-5.11.0-gpsmkl-2022a.eb b/Golden_Repo/p/ParaView/ParaView-5.11.0-gpsmkl-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..680fbdd7e6f7f765ae92ecfa6e6f9bbe151f948e
--- /dev/null
+++ b/Golden_Repo/p/ParaView/ParaView-5.11.0-gpsmkl-2022a.eb
@@ -0,0 +1,350 @@
+easyblock = 'CMakeMake'
+
+name = 'ParaView'
+version = '5.11.0'
+
+homepage = "http://www.paraview.org"
+description = "Paraview is a scientific parallel visualizer."
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'pic': True, 'usempi': True}
+
+local_dwnlsfx_src = 'download.php?submit=Download&version=v%(version_major_minor)s&type=source&os=Sources&downloadFile='
+source_urls = [('http://www.paraview.org/paraview-downloads/%s' %
+                local_dwnlsfx_src)]
+sources = [("ParaView-v%(version)s.tar.gz")]
+
+patches = [
+    'cdireader_update_issue5715.patch',
+    'parflowreader_fix-nlohmann_merge6050.patch',
+]
+
+checksums = [
+    '68b1c6d15dd67ec442f964460c56212417e8af2a96763001f8548eb3cbc5ce87',
+    '064d6878409d9133ad56ce363503a000f7b4617d0c912fd81dd772994f6b5ac2',  # cdireader patch
+    'eb8b6967782bb47e81df129b0d8e192bbf31f11f815d0f53d1c5b4e53da95fd6',  # parflowreader patch
+]
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+    ('git', '2.36.0', '-nodocs'),
+    ('pkgconf', '1.8.0'),
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('Boost', '1.79.0'),
+    ('X11', '20220504'),
+    ('bzip2', '1.0.8'),
+    ('HDF5', '1.12.2'),
+    ('ADIOS2', '2.8.3'),
+    ('FFmpeg', '4.4.2'),
+    ('Embree', '3.13.5'),
+    ('OSPRay', '2.10.0'),
+    ('libpng', '1.6.37'),
+    ('expat', '2.4.8'),
+    ('freetype', '2.12.1'),
+    ('libjpeg-turbo', '2.1.3'),
+    ('libxml2', '2.9.13'),
+    ('LibTIFF', '4.3.0'),
+    ('zlib', '1.2.12'),
+    ('netCDF', '4.9.0'),
+    ('netCDF-C++4', '4.3.1'),
+    ('netCDF-Fortran', '4.6.0'),
+    ('nlohmann_json', '3.10.5'),  # for ParFlow plugin
+    ('libcdi', '2.1.1', '', ('gcccoremkl', '11.3.0-2022.1.0')),  # for CDI plugin
+    ('mpi4py', '3.1.4'),
+    ('double-conversion', '3.2.0'),
+    ('Eigen', '3.4.0'),
+    ('Qt5', '5.15.5'),
+    ('SciPy-Stack', '2022a', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('OpenGL', '2022a'),
+    ('Catalyst', '2.0.0-rc3'),
+    ('ParaViewData', '5.11.0'),
+    ('VTKData', '9.2.5'),
+]
+
+separate_build_dir = True
+
+# ensure we do not use a too advanced GL-version at config/build-time, which might not be available at run-time
+preconfigopts = "export __EGL_VENDOR_LIBRARY_FILENAMES=${EBROOTOPENGL}/share/glvnd/egl_vendor.d/50_mesa.json && "
+prebuildopts = "export __EGL_VENDOR_LIBRARY_FILENAMES=${EBROOTOPENGL}/share/glvnd/egl_vendor.d/50_mesa.json && "
+
+########################################################################################
+# check ParaView Superbuild options                                                    #
+# https://gitlab.kitware.com/paraview/paraview-superbuild/tree/master                  #
+#                                                                                      #
+# check ParaView Spack options                                                         #
+# https://github.com/spack/spack/blob/develop/var/spack/repos/builtin/packages/paraview/package.py
+#                                                                                      #
+# check ParaView Build documenation                                                    #
+# https://gitlab.kitware.com/paraview/paraview/blob/master/Documentation/dev/build.md  #
+########################################################################################
+
+local_buildsrc = '%(builddir)s/easybuild_obj'
+local_installsrc = '%(installdir)s/debugsrc'
+
+# --- general settings --- #
+configopts = '-DCMAKE_VERBOSE_MAKEFILE=ON '
+configopts += '-DCMAKE_CXX_FLAGS="-fdebug-prefix-map=%s=%s $CMAKE_CXX_FLAGS" ' % (local_buildsrc, local_installsrc)
+configopts += '-DCMAKE_C_FLAGS="-fdebug-prefix-map=%s=%s $CMAKE_C_FLAGS" ' % (local_buildsrc, local_installsrc)
+configopts += '-DCMAKE_CXX_STANDARD=11 '
+configopts += '-DPARAVIEW_BUILD_LEGACY_SILENT=ON '
+
+# https://forum.openframeworks.cc/t/nvidia-drivers-pthreads-and-segfaults/2524
+# configopts += '-DCMAKE_CXX_FLAGS="-lpthread $CMAKE_CXX_FLAGS" '
+# configopts += '-DCMAKE_C_FLAGS="-lpthread $CMAKE_C_FLAGS" '
+
+configopts += '-DPARAVIEW_BUILD_EDITION=CANONICAL '
+configopts += '-DPARAVIEW_BUILD_WITH_KITS=OFF '
+configopts += '-DPARAVIEW_USE_QT=ON '
+
+# --- tuning --- #
+# better disable for now: https://discourse.paraview.org/t/array-dispatch-issues/10328
+# configopts += '-DVTK_BUILD_SCALED_SOA_ARRAYS=OFF '
+# configopts += '-DVTK_DISPATCH_SOA_ARRAYS=OFF '
+# configopts += '-DVTK_DISPATCH_TYPED_ARRAYS=OFF '
+
+# --- web --- #
+configopts += '-DPARAVIEW_ENABLE_WEB=ON '
+configopts += '-DPARAVIEW_USE_QTWEBENGINE=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_PVWebPython=YES '
+
+# --- python --- #
+configopts += '-DPARAVIEW_USE_PYTHON=ON '
+configopts += "-DPython3_EXECUTABLE=$EBROOTPYTHON/bin/python "
+
+configopts += '-DVTK_PYTHON_VERSION=3 '
+configopts += '-DVTK_NO_PYTHON_THREADS=OFF '
+# visibility depends on VTK_NO_PYTHON_THREADS=OFF
+configopts += '-DVTK_PYTHON_FULL_THREADSAFE=OFF '
+# If you pass VTK_PYTHON_FULL_THREADSAFE to true, then each and every call to python will be protected with GIL,
+# ensuring that you can have eg. other python interpreter in your application and still use python wrapping in vtk.
+
+# --- VTKm --- #
+configopts += '-DPARAVIEW_USE_VTKM=ON '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmCore=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmDataModel=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_AcceleratorsVTKmFilters=YES '
+configopts += '-DVTKm_Vectorization=AVX2 '
+# configopts += '-DVTKm_ENABLE_KOKKOS=OFF '
+# configopts += '-DVTKm_ENABLE_TBB=OFF '
+# configopts += '-DVTKm_ENABLE_CUDA=ON '
+# configopts += '-DVTKm_ENABLE_LOGGING=ON '
+
+# --- parallel (on-node) --- #
+# https://blog.kitware.com/simple-parallel-computing-with-vtksmptools-2/
+configopts += '-DVTK_SMP_IMPLEMENTATION_TYPE=OpenMP '
+configopts += '-DVTK_MAX_THREADS=64 '
+configopts += '-DVTKm_ENABLE_OPENMP=ON '
+
+# --- parallel (distributed) --- #
+configopts += '-DMPIEXEC_MAX_NUMPROCS=24 '
+configopts += '-DPARAVIEW_USE_MPI=ON '
+configopts += '-DVTKm_ENABLE_MPI=ON '
+
+# --- IO --- #
+configopts += '-DXDMF_BUILD_MPI=ON '
+configopts += '-DPARAVIEW_ENABLE_XDMF3=ON '
+configopts += '-DPARAVIEW_ENABLE_ADIOS2=OFF '  # error: adios2.h not found
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_AdiosReaderPixie=ON '  # req. ADIOS1
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_AdiosReaderStaging=ON ' # req. ADIOS1
+configopts += '-DVTKm_ENABLE_HDF5_IO=ON '
+
+# --- large data --- #
+configopts += '-DVTK_USE_64BIT_IDS=ON '
+
+# --- rendering --- #
+
+# OpenGL (hardware)
+#  https://kitware.github.io/paraview-docs/latest/cxx/Offscreen.html
+#    If VTK_OPENGL_HAS_EGL or VTK_OPENGL_HAS_OSMESA is ON, the build supports headless rendering,
+#       otherwise VTK_USE_X must be ON and the build does not support headless,
+#       but can still support offscreen rendering.
+#    If VTK_USE_X is OFF, then either VTK_OPENGL_HAS_OSMESA or VTK_OPENGL_HAS_EGL must be ON.
+#       Then the build does not support onscreen rendering, but only headless rendering.
+#    If PARAVIEW_BUILD_QT_GUI is ON and VTK_USE_X is ON, while ParaView command line tools won't link against
+#       or use X calls, Qt will and hence an accessible X server is still needed to run the desktop client.
+#    If VTK_OPENGL_HAS_OSMESA is ON, and VTK_USE_X is ON,
+#       then all the OpenGL and OSMesa variables should point to the Mesa libraries.
+#    Likewise, if VTK_OPENGL_HAS_EGL is ON and VTK_USE_X is ON, then all the OpenGL and EGL variables
+#       should point to the system libraries providing both, typically the NVidia libraries.
+
+configopts += '-DOpenGL_GL_PREFERENCE=GLVND '
+configopts += '-DVTK_REPORT_OPENGL_ERRORS_IN_RELEASE_BUILDS=OFF '
+
+configopts += "-DOPENGL_INCLUDE_DIR=${EBROOTOPENGL}/include "
+configopts += "-DOPENGL_GLX_INCLUDE_DIR=${EBROOTOPENGL}/include "
+configopts += "-DOPENGL_EGL_INCLUDE_DIR=${EBROOTOPENGL}/include "
+# configopts += "-DOPENGL_xmesa_INCLUDE_DIR=IGNORE "
+
+configopts += "-DOPENGL_opengl_LIBRARY=${EBROOTOPENGL}/lib/libOpenGL.so.0 "
+configopts += "-DOPENGL_gl_LIBRARY=${EBROOTOPENGL}/lib/libGL.so "
+configopts += "-DOPENGL_glx_LIBRARY=${EBROOTOPENGL}/lib/libGLX.so.0 "
+configopts += "-DOPENGL_glu_LIBRARY=${EBROOTOPENGL}/lib/libGLU.so "
+configopts += "-DOPENGL_egl_LIBRARY=${EBROOTOPENGL}/lib/libEGL.so.1 "
+
+# OpenGL over X
+configopts += '-DVTK_USE_X=ON '  # OFF:headless rendering
+# already considered by Qt (https://gitlab.kitware.com/lorensen/vtk/commit/b29f6db3f746d84f830c81e4212e48db192e4dbb)
+configopts += '-DVTK_DEFAULT_RENDER_WINDOW_OFFSCREEN=OFF '
+# http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+configopts += '-DVTK_OPENGL_HAS_OSMESA=OFF '
+
+# EGL (off-screen rendering with OpenGL, but without the need for X)
+# call pvserver with –egl-device-index=0 or 1 and –disable-xdisplay-test
+# configopts += '-DVTK_OPENGL_HAS_EGL=ON '
+# configopts += '-DVTK_OPENGL_HAS_OSMESA=OFF '  # http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+# configopts += '-DVTK_USE_X=OFF '
+# configopts += '-DVTK_DEFAULT_EGL_DEVICE_INDEX=0 '
+# #configopts += '-DEGL_INCLUDE_DIR=${EBROOTOPENGL}/include/EGL/ ' # https://www.khronos.org/registry/EGL/
+# #configopts += '-DEGL_LIBRARY=${EBROOTOPENGL}/lib/libEGL.so.1 '
+# #configopts += '-DEGL_opengl_LIBRARY=${EBROOTOPENGL}/lib/libOpenGL.so.0 '
+# #configopts += '-DEGL_gldispatch_LIBRARY=${EBROOTOPENGL}/lib/libGLdispatch.so.0 ' # <path_to_libGLdispatch.so.0>
+
+# OSMesa (software)
+# With OSMesa the DISPLAY variable has no meaning and is not needed
+# When ON, implies that ParaView can use OSMesa to support headless modes of operation.
+# configopts += '-DVTK_OPENGL_HAS_OSMESA=ON ' # http://www.paraview.org/Wiki/ParaView_And_Mesa_3D
+# configopts += '-DVTK_USE_X=OFF '
+# configopts += '-DVTK_DEFAULT_RENDER_WINDOW_OFFSCREEN=ON '
+# configopts += '-DOSMESA_INCLUDE_DIR=${EBROOTOPENGL}/include '
+# configopts += '-DOSMESA_LIBRARY=${EBROOTOPENGL}/lib/libOSMesa.so '
+
+# Raytracing
+configopts += '-DPARAVIEW_ENABLE_RAYTRACING=ON '
+configopts += '-DVTK_ENABLE_OSPRAY=ON '
+configopts += '-DVTK_ENABLE_VISRTX=OFF '
+
+configopts += "-Dospray_DIR=${EBROOTOSPRAY} "
+configopts += "-Dembree_DIR=${EBROOTEMBREE}/lib64/cmake/embree-3.13.5 "
+configopts += '-DVTKOSPRAY_ENABLE_DENOISER=ON '
+
+# configopts += '-DPARAVIEW_PLUGIN_ENABLE_pvNVIDIAIndeX=YES '
+
+# --- extra features --- #
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_GeographicalMap=ON '
+
+configopts += "-DFFMPEG_ROOT=$EBROOTFFMPEG "
+configopts += '-DPARAVIEW_ENABLE_FFMPEG=ON '
+configopts += '-DVTK_MODULE_ENABLE_VTK_IOFFMPEG=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_IOVideo=YES '
+
+configopts += '-DVTK_MODULE_ENABLE_VTK_DICOMParser=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersReebGraph=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersSMP=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersSelection=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersTopology=YES '
+configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersTexture=YES '
+# configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersStatisticsGnu=YES '
+# configopts += '-DVTK_MODULE_ENABLE_VTK_FiltersMatlab=YES '
+
+# --- coupling --- #
+configopts += '-DPARAVIEW_ENABLE_CATALYST=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_InSitu=YES '
+# configopts += '-DVTK_MODULE_USE_EXTERNAL_ParaView_vtkcatalyst=ON '
+configopts += '-Dcatalyst_DIR=${EBROOTCATALYST}/lib64/cmake/catalyst-2.0/ '
+
+# --- development & testing --- #
+configopts += '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON '
+configopts += '-DPARAVIEW_BUILD_DEVELOPER_DOCUMENTATION=OFF '
+configopts += '-DPARAVIEW_ENABLE_EXAMPLES=OFF '
+configopts += '-DPARAVIEW_BUILD_TESTING=OFF '
+configopts += '-DPARAVIEW_BUILD_VTK_TESTING=OFF '
+
+# --- external data --- #
+# https://cmake.org/cmake/help/latest/module/ExternalData.html
+# https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md
+# configopts += '-DCTEST_TEST_TIMEOUT=10800 '  # unknown setting
+# download inactivity, 0 = no timeout
+configopts += '-DExternalData_TIMEOUT_INACTIVITY=10 '
+# download abs. time, 0 = no timeout
+configopts += '-DExternalData_TIMEOUT_ABSOLUTE=60 '
+# Exclude test data download from default 'all' target.
+configopts += '-DPARAVIEW_DATA_EXCLUDE_FROM_ALL=ON '
+# Local directory holding ExternalData objects in the layout %(algo)/%(hash).
+configopts += '-DPARAVIEW_DATA_STORE=${EBROOTPARAVIEWDATA}/.ExternalData '
+configopts += '-DVTK_DATA_STORE=${EBROOTVTKDATA}/.ExternalData '
+# Local directory holding the real data files of ExternalData.
+configopts += '-DExternalData_BINARY_ROOT=${EBROOTPARAVIEWDATA} '
+# we need to combine VTK and ParaView's External data files as there can only be one ExternalData_BINARY_ROOT
+
+# --- XDMF options --- #
+configopts += '-DXDMF_USE_BZIP2=ON '
+configopts += '-DXDMF_USE_GZIP=ON '
+
+# --- VTK external libraries --- #
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_expat=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_freetype=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_hdf5=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_jpeg=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_libxml2=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_mpi4py=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_netcdf=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_png=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_tiff=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_zlib=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_doubleconversion=ON '
+configopts += '-DVTK_MODULE_USE_EXTERNAL_VTK_eigen=ON '
+
+# --- ParaView Extra-Reader --- #
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_CDIReader=ON '
+configopts += '-DPARAVIEW_PLUGIN_ENABLE_ParFlow=ON '
+configopts += '-DPARAVIEW_ENABLE_MOTIONFX=ON '
+# configopts += '-DPARAVIEW_ENABLE_FIDES=ON '  # req. ADIOS2 as dependency
+# configopts += '-DPARAVIEW_ENABLE_GDAL=ON '  # req. GDAL as dependency
+# configopts += '-DPARAVIEW_ENABLE_LAS=ON '  # req. LAS as dependency
+# configopts += '-DPARAVIEW_ENABLE_PDAL=ON '  # req. PDAL as dependency
+# configopts += '-DPARAVIEW_ENABLE_OPENVDB=ON '  # req. OpenVDB as dependency
+
+# https://gitlab.kitware.com/paraview/visitbridge/-/blob/master/databases/CMakeLists.txt
+configopts += '-DPARAVIEW_ENABLE_VISITBRIDGE=ON '
+configopts += '-DVTK_MODULE_ENABLE_ParaView_IOVisItBridge=YES '
+# configopts += '-DVISIT_BUILD_READER_Boxlib3D=ON '  # req. external dependency
+# configopts += '-DVISIT_BUILD_READER_Mili=ON '  # req. external dependency
+# configopts += '-DVISIT_BUILD_READER_Silo=ON '  # req. external dependency
+# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7503
+# configopts += '-DVISIT_BUILD_READER_Nek5000=ON '  # MR still open
+
+postinstallcmds = [
+    'python -m compileall %(installdir)s/lib64/python%(pyshortver)s/site-packages/',
+    # 'cp -a %s %s' % (local_buildsrc, local_installsrc),  # copy source from build dir to install dir
+    # '', # move debug info to separate files:
+    #       http://stackoverflow.com/questions/866721/how-to-generate-gcc-debug-symbol-outside-the-build-target
+    # '', # debugedit -i --base-dir=%(builddir)s/ParaView-v%(version)s --dest-dir= %(installdir)s/src <file.debug>
+    #     # change path to source in debug info
+]
+
+modextravars = {
+    'PARAVIEW_VTK_DIR': '%(installdir)s/lib64/cmake/paraview-%(version_major_minor)/vtk',
+    # 'CUDA_VISIBLE_DEVICES': '0,1',
+    # OpenSWR fully supports OpenGL 3.0 and most of 3.3, but ParaView requires 3.3 -> clame to fully support 3.3
+    'MESA_GL_VERSION_OVERRIDE': '3.3',
+    'MESA_GLSL_VERSION_OVERRIDE': '330',
+    #  OpenMP will choose an optimum number of threads by default, which is usually the number of cores
+    # 'OMP_NUM_THREADS': '28', # fix number of threads used by paraview filters and parallel sections in the code
+    #  threads used by ospray - details https://github.com/ospray/ospray/blob/release-2.0.x/ospray/api/Device.cpp#L88
+    #  unset => OSPRAY uses all hardware threads
+    # 'OSPRAY_THREADS': '14',     # OSPRay <  2.0
+    # 'OSPRAY_NUM_THREADS': '14', # OSPRay >= 2.0
+    #  When TBB is used for OSPRAY: tbb::task_scheduler_init::default_num_threads() is default if no OSPRAY_NUM_THREADS
+    #    https://github.com/ospray/ospcommon/blob/master/ospcommon/tasking/detail/tasking_system_init.cpp#L47
+    #    https://www.threadingbuildingblocks.org/docs/doxygen/a00150.html
+    #  more ospray definitions: https://www.ospray.org/documentation.html#environment-variables
+    # max. threads used by OpenSWR (limited by number of hardware threads)
+    'KNOB_MAX_WORKER_THREADS': '65535',
+    #  details in https://gitlab.version.fz-juelich.de/vis/vis-software/issues/14
+    #  more knob defs: https://github.com/mesa3d/mesa/blob/master/src/gallium/docs/source/drivers/openswr/knobs.rst
+    'CATALYST_IMPLEMENTATION_NAME': 'paraview',
+    'CATALYST_IMPLEMENTATION_PATHS': '%(installdir)s/lib64/catalyst',
+    # details in https://catalyst-in-situ.readthedocs.io/en/latest/for_simulation_developers.html#catalyst-initialize
+}
+
+modextrapaths = {
+    'PYTHONPATH': [
+        'lib64/python%(pyshortver)s/site-packages',
+        'lib64/python%(pyshortver)s/site-packages/vtkmodules'  # required by Trilinos Catalyst adapter
+    ],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/p/ParaView/cdireader_update_issue5715.patch b/Golden_Repo/p/ParaView/cdireader_update_issue5715.patch
new file mode 100644
index 0000000000000000000000000000000000000000..102dab4802da16080a50703f159a3d51f1fd343a
--- /dev/null
+++ b/Golden_Repo/p/ParaView/cdireader_update_issue5715.patch
@@ -0,0 +1,3165 @@
+From 26251ad52273fc9d3aad86faa7cb0f56d6ebbdef Mon Sep 17 00:00:00 2001
+From: Florian Ziemen <ziemen@dkrz.de>
+Date: Fri, 22 Apr 2022 17:00:09 +0200
+Subject: [PATCH 1/5] Added support for multiple 2d levels in one file.
+
+CDI can assign different vertical axis id to 2d fields depending on
+netcdf atrribues of the variable (level_type=abc).
+We better accept that they all are 2d and merge them into one 2D thing.
+
+working towards support for multiple grids -- problems w/ ext grids.
+
+External grid files currently are trouble.
+
+Basically, the grid ids are diffent in the files, and we need to keep
+track of that and of which file we are looking at.
+
+Will be solved by having the grid and the data open simultaneously in
+commits to come.
+
+Starting to move file related things outside the main reader.
+
+Fixups for grid handling
+
+fixed a segfault in parallel mode on large grids
+
+double clon_vert[size2] is illegal in c++, as size2 is not known at
+compile time. On DKRZ's levante it leads to a segfault when accessing this
+for large (5km global) grids in parallel operation.
+
+Do not use BuildVarArrays for checking whether the variables are valid
+
+BuildVarArrays enables all variables in the SelectionStatus
+
+Caught a SetDimensions in statefile loading
+
+SetDimensinos gets called before setting the file name when loading a
+state file. This gets rid of a warning message in that case.
+---
+ Plugins/CDIReader/Reader/CMakeLists.txt   |   1 +
+ Plugins/CDIReader/Reader/DataSource.cxx   |  56 +++
+ Plugins/CDIReader/Reader/DataSource.h     |  39 ++
+ Plugins/CDIReader/Reader/vtkCDIReader.cxx | 572 +++++++++++-----------
+ Plugins/CDIReader/Reader/vtkCDIReader.h   |  26 +-
+ 5 files changed, 417 insertions(+), 277 deletions(-)
+ create mode 100644 Plugins/CDIReader/Reader/DataSource.cxx
+ create mode 100644 Plugins/CDIReader/Reader/DataSource.h
+
+diff --git a/Plugins/CDIReader/Reader/CMakeLists.txt b/Plugins/CDIReader/Reader/CMakeLists.txt
+index 274104664b..7a1a985fe0 100644
+--- a/Plugins/CDIReader/Reader/CMakeLists.txt
++++ b/Plugins/CDIReader/Reader/CMakeLists.txt
+@@ -4,6 +4,7 @@ set(classes
+ set (sources
+     cdi_tools.cxx
+     projections.cxx
++    DataSource.cxx
+     )
+ set (private_headers
+     cdi_tools.h
+diff --git a/Plugins/CDIReader/Reader/DataSource.cxx b/Plugins/CDIReader/Reader/DataSource.cxx
+new file mode 100644
+index 0000000000..4f5075bb58
+--- /dev/null
++++ b/Plugins/CDIReader/Reader/DataSource.cxx
+@@ -0,0 +1,56 @@
++//#include "cdi_tools.h"
++#include "DataSource.h"
++#include "cdi.h"
++
++namespace DataSource
++{
++
++CDIObject::CDIObject(std::string newURI)
++{
++  this->openURI(newURI);
++}
++
++int CDIObject::openURI(std::string newURI)
++{
++  this->setVoid();
++  this->URI = newURI;
++
++  // check if we got either *.Grib or *.nc data
++  std::string check = this->URI.substr((URI.size() - 4), this->URI.size());
++  if (check == "grib" || check == ".grb")
++  {
++    this->type = GRIB;
++  }
++  else
++  {
++    this->type = NC;
++  }
++
++  this->StreamID = streamOpenRead(this->URI.c_str());
++  if (this->StreamID < 0)
++  {
++    this->setVoid();
++    return 0;
++  }
++
++  this->VListID = streamInqVlist(this->StreamID);
++  return 1;
++}
++
++void CDIObject::setVoid()
++{
++  if (this->StreamID > -1)
++    streamClose(this->StreamID);
++
++  StreamID = -1;
++  VListID = -1;
++  type = VOID;
++}
++
++CDIObject::~CDIObject()
++{
++  URI = "";
++  this->setVoid();
++}
++
++};
+diff --git a/Plugins/CDIReader/Reader/DataSource.h b/Plugins/CDIReader/Reader/DataSource.h
+new file mode 100644
+index 0000000000..f3749f2f21
+--- /dev/null
++++ b/Plugins/CDIReader/Reader/DataSource.h
+@@ -0,0 +1,39 @@
++#ifndef CDI_DATA_SOURCE
++#define CDI_DATA_SOURCE
++
++#include <string>
++
++namespace DataSource
++{
++class CDIObject
++{
++  enum stype
++  {
++    VOID,
++    GRIB,
++    NC
++  };
++  std::string URI;
++  int StreamID;
++  int VListID;
++  stype type;
++
++public:
++  void setVoid();
++  CDIObject(std::string URI);
++  CDIObject()
++  {
++    this->StreamID = -1;
++    this->setVoid();
++  }
++  ~CDIObject();
++  int openURI(std::string URI);
++  std::string getURI() const { return URI; }
++  int getStreamID() const { return StreamID; }
++  int getVListID() const { return VListID; }
++  stype getType() const { return type; }
++  bool isVoid() const { return this->type == VOID; }
++};
++
++};
++#endif // CDI_DATA_SOURCE
+diff --git a/Plugins/CDIReader/Reader/vtkCDIReader.cxx b/Plugins/CDIReader/Reader/vtkCDIReader.cxx
+index 2a1916bb61..28bd568721 100644
+--- a/Plugins/CDIReader/Reader/vtkCDIReader.cxx
++++ b/Plugins/CDIReader/Reader/vtkCDIReader.cxx
+@@ -57,6 +57,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #include "vtksys/FStream.hxx"
+ #include "vtksys/SystemTools.hxx"
+ 
++#include "DataSource.h"
+ #include "cdi_tools.h"
+ 
+ #include <set>
+@@ -176,8 +177,6 @@ vtkCDIReader::vtkCDIReader()
+   this->SetNumberOfInputPorts(0);
+   this->SetNumberOfOutputPorts(1);
+ 
+-  this->StreamID = -1;
+-  this->VListID = -1;
+   this->VariableDimensions = vtkSmartPointer<vtkStringArray>::New();
+   this->AllDimensions = vtkSmartPointer<vtkStringArray>::New();
+   this->AllVariableArrayNames = vtkSmartPointer<vtkStringArray>::New();
+@@ -231,13 +230,6 @@ void vtkCDIReader::DestroyData()
+ vtkCDIReader::~vtkCDIReader()
+ {
+   vtkDebugMacro("Destructing vtkCDIReader...");
+-  this->SetFileName(nullptr);
+-
+-  if (this->StreamID >= 0)
+-  {
+-    streamClose(this->StreamID);
+-    this->StreamID = -1;
+-  }
+ 
+   this->DestroyData();
+ 
+@@ -307,9 +299,13 @@ int vtkCDIReader::RequestInformation(
+ 
+   vtkDebugMacro("In vtkCDIReader::RequestInformation setting VerticalLevelRange");
+   this->VerticalLevelRange[0] = 0;
+-  this->VerticalLevelRange[1] = this->MaximumNVertLevels - 1;
++  if (VerticalLevelRange[1] != this->MaximumNVertLevels - 1)
++  {
++    this->VerticalLevelRange[1] = this->MaximumNVertLevels - 1;
++    this->Modified();
++  }
+ 
+-  if (!this->BuildVarArrays())
++  if (!this->GetVars())
+   {
+     return 0;
+   }
+@@ -334,9 +330,9 @@ vtkSmartPointer<vtkDoubleArray> vtkCDIReader::ReadTimeAxis()
+   if ((this->FileSeriesNumber == 0) && (!this->TimeSet))
+   {
+ 
+-    int taxisID = vlistInqTaxis(this->VListID);
++    int taxisID = vlistInqTaxis(this->DataFile.getVListID());
+     int calendar = taxisInqCalendar(taxisID);
+-    streamInqTimestep(this->StreamID, 0);
++    streamInqTimestep(this->DataFile.getStreamID(), 0);
+     int vdate = taxisInqVdate(taxisID);
+     int vtime = taxisInqVtime(taxisID);
+ 
+@@ -371,9 +367,9 @@ vtkSmartPointer<vtkDoubleArray> vtkCDIReader::ReadTimeAxis()
+   int end = start + this->NumberOfTimeSteps;
+   for (int step = start; step < end; step++)
+   {
+-    int taxisID = vlistInqTaxis(this->VListID);
++    int taxisID = vlistInqTaxis(this->DataFile.getVListID());
+     int calendar = taxisInqCalendar(taxisID);
+-    streamInqTimestep(this->StreamID, counter);
++    streamInqTimestep(this->DataFile.getStreamID(), counter);
+     int vdate = taxisInqVdate(taxisID);
+     int vtime = taxisInqVtime(taxisID);
+     double timevalue = date_to_julday(calendar, vdate);
+@@ -629,7 +625,7 @@ int vtkCDIReader::RegenerateVariables()
+   this->NumberOfCellVars = 0;
+   this->NumberOfDomainVars = 0;
+ 
+-  if (!this->GetDims())
++  if (this->FileName.empty() || !this->GetDims())
+   {
+     return 0;
+   }
+@@ -769,9 +765,8 @@ void vtkCDIReader::SetDefaults()
+   this->DTime = 0;
+   this->FileSeriesNumber = 0;
+   this->NumberOfFiles = 1;
+-  this->NeedHorizontalGridFile = false;
+   this->NeedVerticalGridFile = false;
+-
++  this->GridID = -1;
+   this->NumberOfProcesses = 1;
+ 
+   this->BuildDomainArrays = false;
+@@ -786,50 +781,14 @@ void vtkCDIReader::SetDefaults()
+ //----------------------------------------------------------------------------
+ // Get dimensions of key NetCDF variables
+ //----------------------------------------------------------------------------
+-int vtkCDIReader::OpenFile()
+-{
+-  // check if we got either *.Grib or *.nc data
+-  std::string file = this->FileName;
+-  std::string check = file.substr((file.size() - 4), file.size());
+-  if (check == "grib" || check == ".grb")
+-  {
+-    this->Grib = true;
+-  }
+-  else
+-  {
+-    this->Grib = false;
+-  }
+-
+-  if (this->StreamID >= 0)
+-  {
+-    streamClose(this->StreamID);
+-    this->StreamID = -1;
+-    this->VListID = -1;
+-  }
+-
+-  this->StreamID = streamOpenRead(this->FileNameGrid.c_str());
+-  if (this->StreamID < 0)
+-  {
+-    return 0;
+-  }
+-
+-  vtkDebugMacro("In vtkCDIReader::RequestInformation read file okay");
+-  this->VListID = streamInqVlist(this->StreamID);
+-
+-  int nvars = vlistNvars(this->VListID);
+-  char varname[CDI_MAX_NAME];
+-  for (int varID = 0; varID < nvars; ++varID)
+-  {
+-    vlistInqVarName(this->VListID, varID, varname);
+-  }
+-
+-  return 1;
+-}
+ 
+ //----------------------------------------------------------------------------
+ void vtkCDIReader::GuessGridFile()
+ {
+-  std::string fallback = vtksys::SystemTools::GetParentDirectory(this->FileName) + "/grid.nc";
++  std::string fallback = vtksys::SystemTools::GetParentDirectory(this->FileName);
++  if (fallback.empty())
++    fallback = ".";
++  fallback += "/grid.nc";
+ 
+   std::string guess;
+   if (!this->Grib)
+@@ -839,15 +798,22 @@ void vtkCDIReader::GuessGridFile()
+   {
+     if (vtksys::SystemTools::TestFileAccess(guess, vtksys::TEST_FILE_READ))
+     {
+-      this->FileNameGrid = guess;
+-      return;
++      this->GridFile.openURI(guess);
++      if (this->GridFile.isVoid())
++      {
++        vtkWarningMacro("Cannot handle grid file "
++          << guess << " indicated by grid_file_uri attribute in " << this->FileName
++          << " Trying fallback guess " << fallback);
++      }
++      else
++        return;
+     }
+     else
+-      vtkWarningMacro("Could not find grid file "
++      vtkWarningMacro("Cannot open grid file "
+         << guess << " indicated by grid_file_uri attribute in " << this->FileName
+         << " Trying fallback guess " << fallback);
+   }
+-  this->FileNameGrid = fallback;
++  this->GridFile.openURI(fallback);
+ }
+ 
+ //----------------------------------------------------------------------------
+@@ -855,147 +821,132 @@ void vtkCDIReader::GuessGridFile()
+ //----------------------------------------------------------------------------
+ int vtkCDIReader::GetDims()
+ {
+-  if (!this->FileName.empty())
++  if (this->FileName.empty())
+   {
+-    this->FileNameGrid = this->FileName;
+-    if (this->VListID < 0 || this->StreamID < 0)
+-    {
+-      if (!this->OpenFile())
+-      {
+-        return 0;
+-      }
+-    }
+-
+-    this->ReadHorizontalGridData();
+-    if (this->NeedHorizontalGridFile)
+-    {
+-      // if there is no grid information in the data file, try opening
+-      // an additional grid file named grid.nc in the same directory to
+-      // read in the grid information
+-      if (this->StreamID >= 0)
+-      {
+-        streamClose(this->StreamID);
+-        this->StreamID = -1;
+-        this->VListID = -1;
+-      }
++    vtkErrorMacro("No file name provided. Cannot get dimensions");
++    return 0;
++  }
+ 
+-      char* directory = new char[strlen(this->FileName.c_str()) + 1];
+-      strcpy(directory, this->FileName.c_str());
++  DataFile.openURI(FileName);
++  if (DataFile.isVoid())
++  {
++    vtkErrorMacro("GetDims: Could not open " << DataFile.getURI());
++    return 0;
++  }
+ 
+-      this->GuessGridFile();
+-      if (!this->OpenFile())
+-      {
+-        return 0;
+-      }
+-      if (!this->ReadHorizontalGridData())
+-      {
+-        vtkErrorMacro("Couldn't open grid information in data nor in the grid file.");
+-        return 0;
+-      }
++  if (GridFile.isVoid())
++    GridFile.openURI(FileName);
++  if (GridFile.isVoid())
++  {
++    vtkErrorMacro("GetDims: Could not open horizontal grid file.\nTried " << GridFile.getURI());
++    return 0;
++  }
+ 
+-      this->FileNameGrid = this->FileName;
+-      if (!this->OpenFile())
+-      {
+-        return 0;
+-      }
++  if (!this->ReadHorizontalGridData())
++  {
++    this->GuessGridFile();
++    if (!this->ReadHorizontalGridData())
++    {
++      vtkErrorMacro("Could not get horizontal Grid. \nTried " << GridFile.getURI());
++      return 0;
+     }
++  }
+ 
+-    this->ReadVerticalGridData();
+-    if (this->NeedVerticalGridFile)
+-    {
+-      // if there is no grid information in the data file, try opening
+-      // an additional grid file named grid.nc in the same directory to
+-      // read in the grid information
+-      if (this->StreamID >= 0)
+-      {
+-        streamClose(this->StreamID);
+-        this->StreamID = -1;
+-        this->VListID = -1;
+-      }
++  VGridFile.openURI(FileName);
++  int found = ReadVerticalGridData();
++  if (!found)
++  {
++    VGridFile.openURI(GridFile.getURI());
++    found = ReadVerticalGridData();
++  }
+ 
+-      char* directory = new char[strlen(this->FileName.c_str()) + 1];
+-      strcpy(directory, this->FileName.c_str());
+-      if (!this->OpenFile())
+-      {
+-        return 0;
+-      }
++  if (!found)
++  {
++    vtkErrorMacro("Could not get Vertical grid");
++    return 0;
++  }
+ 
+-      if (!this->ReadVerticalGridData())
+-      {
+-        vtkDebugMacro("Couldn't neither open grid information within the data netCDF file, nor "
+-                      "in the grid.nc file.");
+-        vtkErrorMacro("Couldn't neither open grid information within the data netCDF file, nor "
+-                      "in the grid.nc file.");
+-        return 0;
+-      }
++  this->FillGridDimensions();
+ 
+-      this->FileNameGrid = this->FileName;
+-      if (!this->OpenFile())
++  try
++  {
++    if (this->DimensionSelection >= 0)
++    {
++      if (DimensionSelection >= DimensionSets.size())
+       {
++        vtkErrorMacro("Trying to select inexistent dimensionset "
++          << DimensionSelection << " " << DimensionSets.size() << " are available.");
+         return 0;
+       }
++      for (int i = 0; i < Grids.size(); i++)
++        if (this->DimensionSets.at(this->DimensionSelection).GridSize == Grids.at(i).Size)
++        {
++          this->DimensionSets.at(this->DimensionSelection).GridID = Grids.at(i).GridID;
++          this->GridID = i;
++        }
++      this->ZAxisID = this->DimensionSets.at(this->DimensionSelection).ZAxisID;
++      vtkDebugMacro("NEW ZAxisID" << ZAxisID << " from "
++                                  << this->DimensionSets.at(this->DimensionSelection).ZAxisID);
+     }
++  }
++  catch (const std::out_of_range& oor)
++  {
++    vtkErrorMacro("Out of Range error in GetDims trying to set Grid and ZAxisID: " << oor.what());
++    return 0;
++  }
+ 
+-    if (this->DimensionSelection > 0)
+-    {
+-      vlistNgrids(this->VListID);
+-      int nzaxis = vlistNzaxis(this->VListID);
+-
+-      this->GridID = vlistGrid(this->VListID, this->DimensionSelection / nzaxis);
+-      this->ZAxisID = vlistZaxis(
+-        this->VListID, this->DimensionSelection - (nzaxis * this->DimensionSelection / nzaxis));
+-    }
+-
+-    if (this->GridID != -1)
+-    {
+-      this->NumberOfCells = static_cast<int>(gridInqSize(this->GridID));
+-
+-      if (this->NumberOfPoints and
+-        this->NumberOfPoints != static_cast<int>(gridInqSize(this->GridID)))
+-        vtkDebugMacro("GetDims: Changing number of points from  "
+-          << this->NumberOfPoints << " to " << static_cast<int>(gridInqSize(this->GridID)));
+-      this->NumberOfPoints = static_cast<int>(gridInqSize(this->GridID));
+-      this->PointsPerCell = gridInqNvertex(this->GridID);
+-    }
+-
+-    int ntsteps = 0;
+-    if (this->Grib)
+-    {
+-      while (streamInqTimestep(this->StreamID, ntsteps))
+-        ntsteps++;
+-    }
+-    else
++  try
++  {
++    if (GridID != -1 && Grids.at(this->GridID).GridID != -1)
+     {
+-      ntsteps = vlistNtsteps(this->VListID);
+-    }
+-    this->NumberOfTimeSteps = ntsteps;
++      this->NumberOfCells = static_cast<int>(Grids.at(GridID).Size);
+ 
+-    this->MaximumNVertLevels = 1;
+-    if (this->ZAxisID != -1)
+-    {
+-      this->MaximumNVertLevels = zaxisInqSize(this->ZAxisID);
++      if (this->NumberOfPoints and this->NumberOfPoints != this->NumberOfCells)
++        vtkDebugMacro("GetDims: Changing number of points from  " << this->NumberOfPoints << " to "
++                                                                  << this->NumberOfCells);
++      this->NumberOfPoints = this->NumberOfCells;
++      this->PointsPerCell = Grids.at(this->GridID).PointsPerCell;
++      vtkDebugMacro("GetDims: Found PointsPerCell to be  " << this->PointsPerCell << " for grid  "
++                                                           << this->GridID);
+     }
++  }
++  catch (const std::out_of_range& oor)
++  {
++    vtkErrorMacro("Out of Range error in GetDims trying to set NumberOfPoints " << oor.what());
++    vtkErrorMacro("Grids.size " << Grids.size() << "\t GridID " << GridID);
++    return 0;
++  }
+ 
+-    this->FillGridDimensions();
++  int ntsteps = 0;
++  if (this->Grib)
++  {
++    while (streamInqTimestep(this->DataFile.getStreamID(), ntsteps))
++      ntsteps++;
+   }
+   else
+   {
+-    vtkDebugMacro("No Filename yet set!");
++    ntsteps = vlistNtsteps(this->DataFile.getVListID());
++  }
++  this->NumberOfTimeSteps = ntsteps;
++
++  this->MaximumNVertLevels = 1;
++  if (this->ZAxisID != -1)
++  {
++    this->MaximumNVertLevels = zaxisInqSize(this->ZAxisID);
+   }
+ 
+   return 1;
+ }
+ 
+-//----------------------------------------------------------------------------
++//---------------------------------------------------------------------------------------------------
+ // Read Horizontal Grid Data
+-//----------------------------------------------------------------------------
++// Checks if there is at least one grid with >= 3 vertices, and if yes, sets GridID to this grid's
++// ID
++//---------------------------------------------------------------------------------------------------
+ int vtkCDIReader::ReadHorizontalGridData()
+ {
+-  int vlistID_l = this->VListID;
+-  this->GridID = -1;
+-  this->ZAxisID = -1;
+-  this->SurfID = -1;
+-
++  Grids.resize(0);
++  int vlistID_l = this->GridFile.getVListID();
+   int ngrids = vlistNgrids(vlistID_l);
+   for (int i = 0; i < ngrids; ++i)
+   {
+@@ -1004,17 +955,13 @@ int vtkCDIReader::ReadHorizontalGridData()
+ 
+     if (nv >= 3) //  ((nv == 3 || nv == 4)) // && gridInqType(gridID_l) == GRID_UNSTRUCTURED)
+     {
+-      this->GridID = gridID_l;
+-      break;
++      Grid grid{ .GridID = gridID_l, .Size = gridInqSize(gridID_l), .PointsPerCell = nv };
++      Grids.push_back(grid);
+     }
+   }
+ 
+-  if (this->GridID == -1)
+-  {
+-    this->NeedHorizontalGridFile = true;
++  if (Grids.size() == 0)
+     return 0;
+-  }
+-
+   return 1;
+ }
+ 
+@@ -1024,37 +971,30 @@ int vtkCDIReader::ReadHorizontalGridData()
+ int vtkCDIReader::ReadVerticalGridData()
+ {
+   this->ZAxisID = -1;
+-  this->SurfID = -1;
+-  int nzaxis = vlistNzaxis(this->VListID);
+-
++  int nzaxis = vlistNzaxis(this->VGridFile.getVListID());
++  int found = 0;
+   for (int i = 0; i < nzaxis; ++i)
+   {
+-    int zaxisID_l = vlistZaxis(this->VListID, i);
++    int zaxisID_l = vlistZaxis(this->VGridFile.getVListID(), i);
+     if (zaxisInqSize(zaxisID_l) == 1 || zaxisInqType(zaxisID_l) == ZAXIS_SURFACE)
+     {
+-      this->SurfID = zaxisID_l;
+-      this->ZAxisID = zaxisID_l;
+-      break;
++      this->SurfIDs.insert(zaxisID_l);
++
++      found = 1;
+     }
+   }
+ 
+   for (int i = 0; i < nzaxis; ++i)
+   {
+-    int zaxisID_l = vlistZaxis(this->VListID, i);
++    int zaxisID_l = vlistZaxis(this->VGridFile.getVListID(), i);
+     if (zaxisInqSize(zaxisID_l) > 1)
+     {
+-      this->ZAxisID = zaxisID_l;
++      found = 1;
+       break;
+     }
+   }
+ 
+-  if (this->ZAxisID == -1)
+-  {
+-    this->NeedVerticalGridFile = true;
+-    return 0;
+-  }
+-
+-  return 1;
++  return found;
+ }
+ 
+ //----------------------------------------------------------------------------
+@@ -1065,37 +1005,42 @@ int vtkCDIReader::GetVars()
+   int cellVarIndex = -1;
+   int pointVarIndex = -1;
+   int domainVarIndex = -1;
++  int numVars = vlistNvars(this->DataFile.getVListID());
++
++  vtkDebugMacro("Found " << numVars << " as Variables for VListID " << this->DataFile.getVListID());
+ 
+-  int numVars = vlistNvars(this->VListID);
+   for (int i = 0; i < numVars; i++)
+   {
+     int varID = i;
+     cdi_tools::CDIVar aVar;
+ 
+-    aVar.StreamID = this->StreamID;
++    aVar.StreamID = this->DataFile.getStreamID();
+     aVar.VarID = varID;
+-    aVar.GridID = vlistInqVarGrid(this->VListID, varID);
+-    aVar.ZAxisID = vlistInqVarZaxis(this->VListID, varID);
++    aVar.GridID = vlistInqVarGrid(this->DataFile.getVListID(), varID);
++    aVar.ZAxisID = vlistInqVarZaxis(this->DataFile.getVListID(), varID);
+     aVar.GridSize = static_cast<int>(gridInqSize(aVar.GridID));
+     aVar.NLevel = zaxisInqSize(aVar.ZAxisID);
+     aVar.Type = 0;
+     aVar.ConstTime = 0;
++    vlistInqVarName(this->DataFile.getVListID(), varID, aVar.Name);
++    vtkDebugMacro("Processing variable " << i << '\t' << aVar.Name);
+ 
+     // to do multiple grids:
+     // - Check how many grids are available
+     // - Check if all grids can be reconstructed, or if bnds are all zero
+     // - Reform gui to load either Cell, Point or Edge data
+ 
+-    if (vlistInqVarTsteptype(this->VListID, varID) == TIME_CONSTANT)
++    if (vlistInqVarTsteptype(this->DataFile.getVListID(), varID) == TIME_CONSTANT)
+     {
+       aVar.ConstTime = 1;
+     }
+-    if (aVar.ZAxisID != this->ZAxisID && aVar.ZAxisID != this->SurfID)
++    if (aVar.ZAxisID != this->ZAxisID && SurfIDs.count(aVar.ZAxisID) == 0)
++    // We are handling a different 3D Axis.
+     {
++      vtkDebugMacro("Skipping " << aVar.Name << " as it has the wrong ZAxis " << aVar.ZAxisID);
+       continue;
+     }
+ 
+-    vlistInqVarName(this->VListID, varID, aVar.Name);
+     aVar.Type = 2;
+     if (aVar.NLevel > 1)
+     {
+@@ -1112,19 +1057,23 @@ int vtkCDIReader::GetVars()
+     }
+     else if ((aVar.GridSize < this->NumberOfCells) && (this->PointsPerCell == 3))
+     {
++      vtkDebugMacro("Skipping " << aVar.Name << " as it has the wrong GridSize " << aVar.GridSize
++                                << " != " << this->NumberOfCells);
+       if (this->NumberOfPoints and this->NumberOfPoints != aVar.GridSize)
+       {
+         vtkWarningMacro("Not adding "
+           << aVar.Name << " as point var, as it's size " << aVar.GridSize
+           << " does not correspond to our understanding of the correct size for 'the' point grid: "
+           << this->NumberOfPoints);
+-        break;
++        continue;
+       }
+       isPointData = true;
+       this->NumberOfPoints = aVar.GridSize;
+     }
+     else
+     {
++      vtkDebugMacro("Skipping " << aVar.Name << " as it has the wrong GridSize " << aVar.GridSize
++                                << " != " << this->NumberOfCells);
+       continue;
+     }
+ 
+@@ -1240,7 +1189,7 @@ int vtkCDIReader::BuildVarArrays()
+                                        << " NumberOfPointVars: " << this->NumberOfPointVars);
+     if (this->NumberOfCellVars == 0)
+     {
+-      vtkErrorMacro("No cell variables found!");
++      vtkDebugMacro("No cell variables found!");
+     }
+ 
+     for (int var = 0; var < this->NumberOfPointVars; var++)
+@@ -1443,39 +1392,63 @@ int vtkCDIReader::ConstructGridGeometry()
+   CHECK_NEW(this->DepthVar);
+ 
+   vtkDebugMacro("Start reading Vertices");
+-  gridInqXboundsPart(
+-    this->GridID, (this->BeginCell * this->PointsPerCell), size, cLonVertices.data());
+-  gridInqYboundsPart(
+-    this->GridID, (this->BeginCell * this->PointsPerCell), size, cLatVertices.data());
++  try
++  {
++    gridInqXboundsPart(Grids.at(this->GridID).GridID, (this->BeginCell * this->PointsPerCell), size,
++      cLonVertices.data());
++    gridInqYboundsPart(Grids.at(this->GridID).GridID, (this->BeginCell * this->PointsPerCell), size,
++      cLatVertices.data());
++  }
++  catch (const std::out_of_range& oor)
++  {
++    vtkErrorMacro(
++      "Out of Range error trying to get the grid id for reading vertices: " << oor.what());
++    return 0;
++  }
+   vtkDebugMacro("Done reading Vertices");
++  vtkDebugMacro("Getting vertical axis" << this->ZAxisID << " expecting up to "
++                                        << this->MaximumNVertLevels << " levels.");
+   zaxisInqLevels(this->ZAxisID, this->DepthVar);
++  vtkDebugMacro("Got vertical axis" << this->ZAxisID);
+   char units[CDI_MAX_NAME];
+   this->OrigConnections.resize(size);
+   int new_cells[2];
+-
+-  if (this->ProjectionMode != projection::CATALYST)
++  try
+   {
+-    gridInqXunits(this->GridID, units);
+-    if (strncmp(units, "degree", 6) == 0)
++    if (this->ProjectionMode != projection::CATALYST)
+     {
+-      for (int i = 0; i < size; i++)
++      gridInqXunits(Grids.at(this->GridID).GridID, units);
++      if (strncmp(units, "degree", 6) == 0)
+       {
+-        cLonVertices[i] = vtkMath::RadiansFromDegrees(cLonVertices[i]);
++        for (int i = 0; i < size; i++)
++        {
++          cLonVertices[i] = vtkMath::RadiansFromDegrees(cLonVertices[i]);
++        }
+       }
+-    }
+-    gridInqYunits(this->GridID, units);
+-    if (strncmp(units, "degree", 6) == 0)
+-    {
+-      for (int i = 0; i < size; i++)
++      gridInqYunits(Grids.at(this->GridID).GridID, units);
++      if (strncmp(units, "degree", 6) == 0)
+       {
+-        cLatVertices[i] = vtkMath::RadiansFromDegrees(cLatVertices[i]);
++        for (int i = 0; i < size; i++)
++        {
++          cLatVertices[i] = vtkMath::RadiansFromDegrees(cLatVertices[i]);
++        }
+       }
+     }
+   }
++  catch (const std::out_of_range& oor)
++  {
++    vtkErrorMacro("Out of Range error trying to get the grid id for getting the coordinate units "
++                  "for projecting: "
++      << oor.what());
++    return 0;
++  }
+ 
+   // check for duplicates in the Point list and update the triangle list
++  vtkDebugMacro("Removing duplicates for clon/clat, size = " << size);
++
+   this->RemoveDuplicates(
+     cLonVertices.data(), cLatVertices.data(), size, &this->OrigConnections[0], new_cells);
++  vtkDebugMacro("Removed duplicates for clon/clat");
+   this->NumberLocalCells = new_cells[0] / this->PointsPerCell;
+   this->NumberLocalPoints = new_cells[1];
+   if (this->NumberOfPoints and this->NumberOfPoints != new_cells[1])
+@@ -1524,31 +1497,43 @@ int vtkCDIReader::ConstructGridGeometry()
+     if (this->Piece == 0)
+     {
+       int new_cells2[2];
+-      double clon_vert2[size2];
+-      double clat_vert2[size2];
+-
+-      gridInqXboundsPart(this->GridID, 0, size2, clon_vert2);
+-      gridInqYboundsPart(this->GridID, 0, size2, clat_vert2);
+-
+-      gridInqXunits(this->GridID, units);
+-      if (strncmp(units, "degree", 6) == 0)
++      std::vector<double> clon_vert2(size2);
++      std::vector<double> clat_vert2(size2);
++      try
+       {
+-        for (int i = 0; i < size2; i++)
++        gridInqXboundsPart(Grids.at(this->GridID).GridID, 0, size2, clon_vert2.data());
++        gridInqYboundsPart(Grids.at(this->GridID).GridID, 0, size2, clat_vert2.data());
++
++        gridInqXunits(Grids.at(this->GridID).GridID, units);
++        if (strncmp(units, "degree", 6) == 0)
+         {
+-          clon_vert2[i] = vtkMath::RadiansFromDegrees(clon_vert2[i]);
++          for (int i = 0; i < size2; i++)
++          {
++            clon_vert2[i] = vtkMath::RadiansFromDegrees(clon_vert2[i]);
++          }
+         }
+-      }
+ 
+-      gridInqYunits(this->GridID, units);
+-      if (strncmp(units, "degree", 6) == 0)
+-      {
+-        for (int i = 0; i < size2; i++)
++        gridInqYunits(Grids.at(this->GridID).GridID, units);
++        if (strncmp(units, "degree", 6) == 0)
+         {
+-          clat_vert2[i] = vtkMath::RadiansFromDegrees(clat_vert2[i]);
++          for (int i = 0; i < size2; i++)
++          {
++            clat_vert2[i] = vtkMath::RadiansFromDegrees(clat_vert2[i]);
++          }
+         }
+       }
++      catch (const std::out_of_range& oor)
++      {
++        vtkErrorMacro(
++          "Out of Range error trying to get the grid id for converting lat/lon in parallel: "
++          << oor.what());
++        return 0;
++      }
++
++      vtkDebugMacro("Removing duplicates for clon/clat2");
+ 
+-      this->RemoveDuplicates(clon_vert2, clat_vert2, size2, vertex_ids2.data(), new_cells2);
++      this->RemoveDuplicates(
++        clon_vert2.data(), clat_vert2.data(), size2, vertex_ids2.data(), new_cells2);
+       for (int i = 1; i < this->NumPieces; i++)
+       {
+         this->Controller->Send(vertex_ids2.data(), size2, i, 101);
+@@ -1676,25 +1661,38 @@ int vtkCDIReader::LoadClonClatVars()
+   std::vector<double> cLon_l(this->NumberLocalCells);
+   std::vector<double> cLat_l(this->NumberLocalCells);
+ 
+-  gridInqXvalsPart(this->GridID, this->BeginCell, this->NumberLocalCells, cLon_l.data());
+-  gridInqYvalsPart(this->GridID, this->BeginCell, this->NumberLocalCells, cLat_l.data());
++  gridInqXvalsPart(
++    Grids.at(this->GridID).GridID, this->BeginCell, this->NumberLocalCells, cLon_l.data());
++  gridInqYvalsPart(
++    Grids.at(this->GridID).GridID, this->BeginCell, this->NumberLocalCells, cLat_l.data());
+ 
+   char units[CDI_MAX_NAME];
+-  gridInqXunits(this->GridID, units);
+-  if (strncmp(units, "degree", 6) == 0)
++
++  try
+   {
+-    for (int i = 0; i < this->NumberLocalCells; i++)
++    gridInqXunits(Grids.at(this->GridID).GridID, units);
++    if (strncmp(units, "degree", 6) == 0)
++    {
++      for (int i = 0; i < this->NumberLocalCells; i++)
++      {
++        cLon_l[i] = vtkMath::RadiansFromDegrees(cLon_l[i]);
++      }
++    }
++    gridInqYunits(Grids.at(this->GridID).GridID, units);
++    if (strncmp(units, "degree", 6) == 0)
+     {
+-      cLon_l[i] = vtkMath::RadiansFromDegrees(cLon_l[i]);
++      for (int i = 0; i < this->NumberLocalCells; i++)
++      {
++        cLat_l[i] = vtkMath::RadiansFromDegrees(cLat_l[i]);
++      }
+     }
+   }
+-  gridInqYunits(this->GridID, units);
+-  if (strncmp(units, "degree", 6) == 0)
++  catch (const std::out_of_range& oor)
+   {
+-    for (int i = 0; i < this->NumberLocalCells; i++)
+-    {
+-      cLat_l[i] = vtkMath::RadiansFromDegrees(cLat_l[i]);
+-    }
++    vtkErrorMacro(
++      "Out of Range error trying to get the grid id for converting lat/lon in LoadClonClatVars: "
++      << oor.what());
++    return 0;
+   }
+ 
+   if (this->ShowMultilayerView)
+@@ -1823,7 +1821,7 @@ int vtkCDIReader::CheckForMaskData()
+   {
+     const double maskVal = this->UseCustomMaskValue
+       ? this->CustomMaskValue
+-      : vlistInqVarMissval(this->VListID, this->Internals->CellVars[mask_pos].VarID);
++      : vlistInqVarMissval(this->DataFile.getVListID(), this->Internals->CellVars[mask_pos].VarID);
+ 
+     cdi_tools::CDIVar* cdiVar = &(this->Internals->CellVars[mask_pos]);
+     if (this->ShowMultilayerView)
+@@ -1923,7 +1921,7 @@ bool vtkCDIReader::BuildDomainCellVars()
+   CHECK_NEW(this->DomainCellVar);
+   double val = 0;
+   int mask_pos = 0;
+-  int numVars = vlistNvars(this->VListID);
++  int numVars = vlistNvars(this->DataFile.getVListID());
+ 
+   for (int i = 0; i < numVars; i++)
+   {
+@@ -2780,7 +2778,7 @@ int vtkCDIReader::LoadCellVarDataTemplate(
+ //------------------------------------------------------------------------------
+ int vtkCDIReader::ReplaceFillWithNan(const int varID, vtkDataArray* dataArray)
+ {
+-  double miss = vlistInqVarMissval(this->VListID, varID);
++  double miss = vlistInqVarMissval(this->DataFile.getVListID(), varID);
+ 
+   // NaN only available with float and double.
+   if (dataArray->GetDataType() == VTK_FLOAT)
+@@ -3093,11 +3091,11 @@ int vtkCDIReader::LoadDomainVarData(int variableIndex)
+ //-----------------------------------------------------------------------------
+ int vtkCDIReader::FillGridDimensions()
+ {
+-  int ngrids = vlistNgrids(this->VListID);
+-  int nzaxis = vlistNzaxis(this->VListID);
+-  int nvars = vlistNvars(this->VListID);
+-  this->AllDimensions->SetNumberOfValues(0);
+-  this->VariableDimensions->SetNumberOfValues(ngrids * nzaxis);
++  this->DimensionSets.resize(0);
++
++  int ngrids = vlistNgrids(this->DataFile.getVListID());
++  int nzaxis = vlistNzaxis(this->DataFile.getVListID());
++  int nvars = vlistNvars(this->DataFile.getVListID());
+   char nameGridX[CDI_MAX_NAME];
+   char nameGridY[CDI_MAX_NAME];
+   char nameLev[CDI_MAX_NAME];
+@@ -3106,40 +3104,59 @@ int vtkCDIReader::FillGridDimensions()
+ 
+   for (int k = 0; k < nvars; k++)
+   {
+-    int i = vlistInqVarGrid(this->VListID, k);
+-    int j = vlistInqVarZaxis(this->VListID, k);
++    int i = vlistInqVarGrid(this->DataFile.getVListID(), k);
++    int j = vlistInqVarZaxis(this->DataFile.getVListID(), k);
+     hits.insert(std::to_string(i) + "x" + std::to_string(j));
+     // IDs are not 0 to n-1 but can be 30-ish for a file with 3 grids.
+     // they map to the gridID_l and zaxisID_l values below.
+     // Thus we need to a map to catch rather unpredictable values.
+   }
+-
++  size_t counter = 0;
+   for (int i = 0; i < ngrids; ++i)
+   {
+     for (int j = 0; j < nzaxis; ++j)
+     {
+       std::string dimEncoding("(");
+-      int gridID_l = vlistGrid(this->VListID, i);
++      int gridID_l = vlistGrid(this->DataFile.getVListID(), i);
+       gridInqXname(gridID_l, nameGridX);
+       gridInqYname(gridID_l, nameGridY);
+       dimEncoding += nameGridX;
+       dimEncoding += ", ";
+       dimEncoding += nameGridY;
+       dimEncoding += ", ";
+-      int zaxisID_l = vlistZaxis(this->VListID, j);
++      int zaxisID_l = vlistZaxis(this->DataFile.getVListID(), j);
+       zaxisInqName(zaxisID_l, nameLev);
+       dimEncoding += nameLev;
+       dimEncoding += ")";
+ 
+       if (hits.count(std::to_string(gridID_l) + "x" + std::to_string(zaxisID_l)) == 0)
+       {
++        vtkDebugMacro("vtkCDIReader::FillGridDimensions: i, j, dimEncoding: "
++          << i << '\t' << j << "\t" << gridID_l << '\t' << zaxisID_l << "\t" << dimEncoding
++          << " - has no hits.\n");
+         continue; // skip empty grid combinations
+       }
++      vtkDebugMacro("vtkCDIReader::FillGridDimensions: i, j, GridID, ZAxisID, dimEncoding: "
++        << i << '\t' << j << "\t" << gridID_l << '\t' << zaxisID_l << "\t" << dimEncoding
++        << " - has hits.\n");
+ 
+-      this->AllDimensions->InsertNextValue(dimEncoding);
+-      this->VariableDimensions->SetValue(i * nzaxis + j, dimEncoding.c_str());
++      dimset ds{ .DimsetID = counter,
++        .GridID = -1,
++        .ZAxisID = zaxisID_l,
++        .GridSize = gridInqSize(gridID_l),
++        .NLevel = zaxisInqSize(zaxisID_l),
++        .label = dimEncoding };
++      DimensionSets.push_back(ds);
++      counter++;
+     }
+   }
++  this->AllDimensions->SetNumberOfValues(0);
++  this->VariableDimensions->SetNumberOfValues(counter);
++  for (int i = 0; i < counter; i++)
++  {
++    this->AllDimensions->InsertNextValue(DimensionSets[i].label);
++    this->VariableDimensions->SetValue(i, DimensionSets[i].label.c_str());
++  }
+ 
+   return 1;
+ }
+@@ -3149,6 +3166,7 @@ int vtkCDIReader::FillGridDimensions()
+ //-----------------------------------------------------------------------------
+ void vtkCDIReader::SetDimensions(const char* dimensions)
+ {
++  vtkDebugMacro("In SetDimensions");
+   for (vtkIdType i = 0; i < this->VariableDimensions->GetNumberOfValues(); i++)
+   {
+     if (this->VariableDimensions->GetValue(i) == dimensions)
+@@ -3172,7 +3190,10 @@ void vtkCDIReader::SetDimensions(const char* dimensions)
+   this->DestroyData();
+   this->RegenerateVariables();
+   if (this->GridReconstructed)
++  {
+     this->RegenerateGeometry();
++  }
++  vtkDebugMacro("Out SetDimensions");
+ }
+ 
+ //----------------------------------------------------------------------------
+@@ -3319,18 +3340,13 @@ const char* vtkCDIReader::GetDomainArrayName(int index)
+ }
+ 
+ //----------------------------------------------------------------------------
+-// Set to lat/lon (equidistant cylindrical) projection.
++// Load a new file.
+ //----------------------------------------------------------------------------
+ void vtkCDIReader::SetFileName(const char* val)
+ {
+   if (this->FileName.empty() || val == nullptr || strcmp(this->FileName.c_str(), val) != 0)
+   {
+-    if (this->StreamID >= 0)
+-    {
+-      streamClose(this->StreamID);
+-      this->StreamID = -1;
+-      this->VListID = -1;
+-    }
++    this->DataFile.setVoid();
+     this->Modified();
+     if (val == nullptr)
+     {
+@@ -3351,13 +3367,21 @@ void vtkCDIReader::SetVerticalLevel(int level)
+ {
+   if (this->VerticalLevelSelected != level)
+   {
+-    if (level < 0 || level > this->MaximumNVertLevels - 1)
++    if (level < 0)
+     {
+       vtkErrorMacro("Requested inexistent vertical level: "
+         << level << ".\nThe level must be the in range [ 0 ; " << this->MaximumNVertLevels - 1
+         << " ].");
+       return;
+     }
++
++    if (level > this->MaximumNVertLevels - 1)
++    {
++      vtkWarningMacro("Requested inexistent vertical level: "
++        << level << ".\nThe level must be the in range [ 0 ; " << this->MaximumNVertLevels - 1
++        << " ]. \nTriying with 0.");
++      level = 0;
++    }
+     this->VerticalLevelSelected = level;
+     this->Modified();
+     vtkDebugMacro("Set VerticalLevelSelected to: " << level);
+diff --git a/Plugins/CDIReader/Reader/vtkCDIReader.h b/Plugins/CDIReader/Reader/vtkCDIReader.h
+index 0e1001694c..44f9073a97 100644
+--- a/Plugins/CDIReader/Reader/vtkCDIReader.h
++++ b/Plugins/CDIReader/Reader/vtkCDIReader.h
+@@ -46,7 +46,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ #include "projections.h" // for projection enum
+ 
++#include "DataSource.h"
+ #include <memory> // for unique_ptr
++#include <unordered_set>
+ #include <vector> // for std::vector
+ 
+ class vtkCallbackCommand;
+@@ -54,6 +56,23 @@ class vtkDoubleArray;
+ class vtkFieldData;
+ class vtkMultiProcessController;
+ 
++struct dimset
++{
++  size_t DimsetID;
++  int GridID;
++  int ZAxisID;
++  size_t GridSize;
++  int NLevel;
++  std::string label;
++};
++
++struct Grid
++{
++  int GridID;
++  size_t Size;
++  int PointsPerCell;
++};
++
+ /**
+  *
+  * @class vtkCDIReader
+@@ -326,6 +345,8 @@ protected:
+   double Layer0OffsetRange[2];
+ 
+   int DimensionSelection;
++  std::vector<dimset> DimensionSets;
++  std::vector<Grid> Grids;
+   bool InvertZAxis;
+   bool AddCoordinateVars;
+   projection::Projection ProjectionMode;
+@@ -370,11 +391,10 @@ protected:
+   int NumberOfDomainVars;
+   bool GridReconstructed;
+ 
+-  int StreamID;
+-  int VListID;
++  DataSource::CDIObject DataFile, GridFile, VGridFile;
+   int GridID;
+   int ZAxisID;
+-  int SurfID;
++  std::unordered_set<int> SurfIDs;
+ 
+   std::string TimeUnits;
+   std::string Calendar;
+-- 
+GitLab
+
+
+From 772c2460e34deeb47c3d716283299190f3d51e7a Mon Sep 17 00:00:00 2001
+From: Nils-Arne Dreier <dreier@dkrz.de>
+Date: Wed, 2 Nov 2022 19:38:06 +0100
+Subject: [PATCH 2/5] clean up and formating
+
+including:
+- move internal things to unnamed namespace in vtkCDIReader.cxx
+- move structs to unnamed namespace
+- captitalize struct name Dimset
+- add missing braces
+- add `this->` where appropriate
+- no need to clear std::vector before they go out of scope
+- explicit cast int to `size_t` to avoid narrowing conversion warning
+- move variables which type is in unnamed namespace to Internals
+- prevent crash if no grid file is available
+- capitalize member variable `Type`
+- fix warning `size()==0` -> `empty()`
+- add some braces
+---
+ Plugins/CDIReader/Reader/CMakeLists.txt   |   1 -
+ Plugins/CDIReader/Reader/DataSource.cxx   |  56 ----
+ Plugins/CDIReader/Reader/DataSource.h     |  39 ---
+ Plugins/CDIReader/Reader/vtkCDIReader.cxx | 336 +++++++++++++++-------
+ Plugins/CDIReader/Reader/vtkCDIReader.h   |  21 --
+ 5 files changed, 239 insertions(+), 214 deletions(-)
+ delete mode 100644 Plugins/CDIReader/Reader/DataSource.cxx
+ delete mode 100644 Plugins/CDIReader/Reader/DataSource.h
+
+diff --git a/Plugins/CDIReader/Reader/CMakeLists.txt b/Plugins/CDIReader/Reader/CMakeLists.txt
+index 7a1a985fe0..274104664b 100644
+--- a/Plugins/CDIReader/Reader/CMakeLists.txt
++++ b/Plugins/CDIReader/Reader/CMakeLists.txt
+@@ -4,7 +4,6 @@ set(classes
+ set (sources
+     cdi_tools.cxx
+     projections.cxx
+-    DataSource.cxx
+     )
+ set (private_headers
+     cdi_tools.h
+diff --git a/Plugins/CDIReader/Reader/DataSource.cxx b/Plugins/CDIReader/Reader/DataSource.cxx
+deleted file mode 100644
+index 4f5075bb58..0000000000
+--- a/Plugins/CDIReader/Reader/DataSource.cxx
++++ /dev/null
+@@ -1,56 +0,0 @@
+-//#include "cdi_tools.h"
+-#include "DataSource.h"
+-#include "cdi.h"
+-
+-namespace DataSource
+-{
+-
+-CDIObject::CDIObject(std::string newURI)
+-{
+-  this->openURI(newURI);
+-}
+-
+-int CDIObject::openURI(std::string newURI)
+-{
+-  this->setVoid();
+-  this->URI = newURI;
+-
+-  // check if we got either *.Grib or *.nc data
+-  std::string check = this->URI.substr((URI.size() - 4), this->URI.size());
+-  if (check == "grib" || check == ".grb")
+-  {
+-    this->type = GRIB;
+-  }
+-  else
+-  {
+-    this->type = NC;
+-  }
+-
+-  this->StreamID = streamOpenRead(this->URI.c_str());
+-  if (this->StreamID < 0)
+-  {
+-    this->setVoid();
+-    return 0;
+-  }
+-
+-  this->VListID = streamInqVlist(this->StreamID);
+-  return 1;
+-}
+-
+-void CDIObject::setVoid()
+-{
+-  if (this->StreamID > -1)
+-    streamClose(this->StreamID);
+-
+-  StreamID = -1;
+-  VListID = -1;
+-  type = VOID;
+-}
+-
+-CDIObject::~CDIObject()
+-{
+-  URI = "";
+-  this->setVoid();
+-}
+-
+-};
+diff --git a/Plugins/CDIReader/Reader/DataSource.h b/Plugins/CDIReader/Reader/DataSource.h
+deleted file mode 100644
+index f3749f2f21..0000000000
+--- a/Plugins/CDIReader/Reader/DataSource.h
++++ /dev/null
+@@ -1,39 +0,0 @@
+-#ifndef CDI_DATA_SOURCE
+-#define CDI_DATA_SOURCE
+-
+-#include <string>
+-
+-namespace DataSource
+-{
+-class CDIObject
+-{
+-  enum stype
+-  {
+-    VOID,
+-    GRIB,
+-    NC
+-  };
+-  std::string URI;
+-  int StreamID;
+-  int VListID;
+-  stype type;
+-
+-public:
+-  void setVoid();
+-  CDIObject(std::string URI);
+-  CDIObject()
+-  {
+-    this->StreamID = -1;
+-    this->setVoid();
+-  }
+-  ~CDIObject();
+-  int openURI(std::string URI);
+-  std::string getURI() const { return URI; }
+-  int getStreamID() const { return StreamID; }
+-  int getVListID() const { return VListID; }
+-  stype getType() const { return type; }
+-  bool isVoid() const { return this->type == VOID; }
+-};
+-
+-};
+-#endif // CDI_DATA_SOURCE
+diff --git a/Plugins/CDIReader/Reader/vtkCDIReader.cxx b/Plugins/CDIReader/Reader/vtkCDIReader.cxx
+index 28bd568721..c44e81f6bb 100644
+--- a/Plugins/CDIReader/Reader/vtkCDIReader.cxx
++++ b/Plugins/CDIReader/Reader/vtkCDIReader.cxx
+@@ -57,13 +57,79 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #include "vtksys/FStream.hxx"
+ #include "vtksys/SystemTools.hxx"
+ 
+-#include "DataSource.h"
+ #include "cdi_tools.h"
+ 
+ #include <set>
+ #include <sstream>
+ 
+-constexpr static int MAX_VARS = 100;
++namespace
++{
++class CDIObject
++{
++  enum stype
++  {
++    VOID,
++    GRIB,
++    NC
++  };
++  std::string URI;
++  int StreamID;
++  int VListID;
++  stype Type;
++
++public:
++  CDIObject(std::string URI) { this->openURI(URI); }
++  CDIObject()
++  {
++    this->StreamID = -1;
++    this->setVoid();
++  }
++  ~CDIObject() { this->setVoid(); }
++  int openURI(std::string URI)
++  {
++    this->setVoid();
++    this->URI = URI;
++
++    // check if we got either *.Grib or *.nc data
++    std::string check = this->URI.substr((URI.size() - 4), this->URI.size());
++    if (check == "grib" || check == ".grb")
++    {
++      this->Type = GRIB;
++    }
++    else
++    {
++      this->Type = NC;
++    }
++
++    this->StreamID = streamOpenRead(this->URI.c_str());
++    if (this->StreamID < 0)
++    {
++      this->setVoid();
++      return 0;
++    }
++
++    this->VListID = streamInqVlist(this->StreamID);
++    return 1;
++  }
++
++  std::string getURI() const { return this->URI; }
++  int getStreamID() const { return this->StreamID; }
++  int getVListID() const { return this->VListID; }
++  stype getType() const { return this->Type; }
++  void setVoid()
++  {
++    if (this->StreamID > -1)
++    {
++      streamClose(this->StreamID);
++    }
++
++    this->StreamID = -1;
++    this->VListID = -1;
++    this->Type = VOID;
++  }
++
++  bool isVoid() const { return this->Type == VOID; }
++};
+ 
+ struct Point
+ {
+@@ -77,6 +143,26 @@ struct PointWithIndex
+   int Idx;
+ };
+ 
++constexpr static int MAX_VARS = 100;
++
++struct Dimset
++{
++  size_t DimsetID;
++  int GridID;
++  int ZAxisID;
++  size_t GridSize;
++  int NLevel;
++  std::string label;
++};
++
++struct Grid
++{
++  int GridID;
++  size_t Size;
++  int PointsPerCell;
++};
++}
++
+ //----------------------------------------------------------------------------
+ // Internal class to avoid name pollution
+ //----------------------------------------------------------------------------
+@@ -106,6 +192,10 @@ public:
+   vtkSmartPointer<vtkIdTypeArray> PointsToSendToProcesses;
+   vtkSmartPointer<vtkIdTypeArray> PointsToSendToProcessesLengths;
+   vtkSmartPointer<vtkIdTypeArray> PointsToSendToProcessesOffsets;
++
++  std::vector<Dimset> DimensionSets;
++  std::vector<Grid> Grids;
++  CDIObject DataFile, GridFile, VGridFile;
+ };
+ 
+ namespace
+@@ -299,7 +389,7 @@ int vtkCDIReader::RequestInformation(
+ 
+   vtkDebugMacro("In vtkCDIReader::RequestInformation setting VerticalLevelRange");
+   this->VerticalLevelRange[0] = 0;
+-  if (VerticalLevelRange[1] != this->MaximumNVertLevels - 1)
++  if (this->VerticalLevelRange[1] != this->MaximumNVertLevels - 1)
+   {
+     this->VerticalLevelRange[1] = this->MaximumNVertLevels - 1;
+     this->Modified();
+@@ -330,9 +420,9 @@ vtkSmartPointer<vtkDoubleArray> vtkCDIReader::ReadTimeAxis()
+   if ((this->FileSeriesNumber == 0) && (!this->TimeSet))
+   {
+ 
+-    int taxisID = vlistInqTaxis(this->DataFile.getVListID());
++    int taxisID = vlistInqTaxis(this->Internals->DataFile.getVListID());
+     int calendar = taxisInqCalendar(taxisID);
+-    streamInqTimestep(this->DataFile.getStreamID(), 0);
++    streamInqTimestep(this->Internals->DataFile.getStreamID(), 0);
+     int vdate = taxisInqVdate(taxisID);
+     int vtime = taxisInqVtime(taxisID);
+ 
+@@ -345,7 +435,9 @@ vtkSmartPointer<vtkDoubleArray> vtkCDIReader::ReadTimeAxis()
+   if (!this->TimeSeriesTimeStepsAllSet)
+   {
+     if (this->TimeSeriesTimeSteps.size() < this->FileSeriesNumber + 1)
++    {
+       this->TimeSeriesTimeSteps.resize(this->FileSeriesNumber + 1);
++    }
+     this->TimeSeriesTimeSteps[this->FileSeriesNumber] = this->NumberOfTimeSteps;
+   }
+ 
+@@ -367,9 +459,9 @@ vtkSmartPointer<vtkDoubleArray> vtkCDIReader::ReadTimeAxis()
+   int end = start + this->NumberOfTimeSteps;
+   for (int step = start; step < end; step++)
+   {
+-    int taxisID = vlistInqTaxis(this->DataFile.getVListID());
++    int taxisID = vlistInqTaxis(this->Internals->DataFile.getVListID());
+     int calendar = taxisInqCalendar(taxisID);
+-    streamInqTimestep(this->DataFile.getStreamID(), counter);
++    streamInqTimestep(this->Internals->DataFile.getStreamID(), counter);
+     int vdate = taxisInqVdate(taxisID);
+     int vtime = taxisInqVtime(taxisID);
+     double timevalue = date_to_julday(calendar, vdate);
+@@ -383,8 +475,10 @@ vtkSmartPointer<vtkDoubleArray> vtkCDIReader::ReadTimeAxis()
+       timeValues->InsertNextTuple1(timevalue);
+       if (!this->TimeSeriesTimeStepsAllSet)
+       {
+-        if (TimeSteps.size() < step + 1)
+-          TimeSteps.resize(step + 1);
++        if (this->TimeSteps.size() < step + 1)
++        {
++          this->TimeSteps.resize(step + 1);
++        }
+         this->TimeSteps[step] = timevalue;
+       }
+     }
+@@ -438,7 +532,9 @@ int vtkCDIReader::GetTimeIndex(double dataTimeStep)
+   for (int step = start; step < end; step++)
+   {
+     if (this->TimeSteps[step] == dataTimeStep)
++    {
+       return (step - start);
++    }
+   }
+   return 0;
+ }
+@@ -787,33 +883,41 @@ void vtkCDIReader::GuessGridFile()
+ {
+   std::string fallback = vtksys::SystemTools::GetParentDirectory(this->FileName);
+   if (fallback.empty())
++  {
+     fallback = ".";
++  }
+   fallback += "/grid.nc";
+ 
+   std::string guess;
+   if (!this->Grib)
++  {
+     guess = cdi_tools::GuessGridFileFromUri(this->FileName);
++  }
+ 
+   if (!guess.empty())
+   {
+     if (vtksys::SystemTools::TestFileAccess(guess, vtksys::TEST_FILE_READ))
+     {
+-      this->GridFile.openURI(guess);
+-      if (this->GridFile.isVoid())
++      this->Internals->GridFile.openURI(guess);
++      if (this->Internals->GridFile.isVoid())
+       {
+         vtkWarningMacro("Cannot handle grid file "
+           << guess << " indicated by grid_file_uri attribute in " << this->FileName
+           << " Trying fallback guess " << fallback);
+       }
+       else
++      {
+         return;
++      }
+     }
+     else
++    {
+       vtkWarningMacro("Cannot open grid file "
+         << guess << " indicated by grid_file_uri attribute in " << this->FileName
+         << " Trying fallback guess " << fallback);
++    }
+   }
+-  this->GridFile.openURI(fallback);
++  this->Internals->GridFile.openURI(fallback);
+ }
+ 
+ //----------------------------------------------------------------------------
+@@ -827,18 +931,22 @@ int vtkCDIReader::GetDims()
+     return 0;
+   }
+ 
+-  DataFile.openURI(FileName);
+-  if (DataFile.isVoid())
++  this->Internals->DataFile.openURI(this->FileName);
++  if (this->Internals->DataFile.isVoid())
+   {
+-    vtkErrorMacro("GetDims: Could not open " << DataFile.getURI());
++    vtkErrorMacro("GetDims: Could not open " << this->Internals->DataFile.getURI());
+     return 0;
+   }
+ 
+-  if (GridFile.isVoid())
+-    GridFile.openURI(FileName);
+-  if (GridFile.isVoid())
++  if (this->Internals->GridFile.isVoid())
++  {
++    this->Internals->GridFile.openURI(this->FileName);
++  }
++
++  if (this->Internals->GridFile.isVoid())
+   {
+-    vtkErrorMacro("GetDims: Could not open horizontal grid file.\nTried " << GridFile.getURI());
++    vtkErrorMacro("GetDims: Could not open horizontal grid file.\nTried "
++      << this->Internals->GridFile.getURI());
+     return 0;
+   }
+ 
+@@ -847,17 +955,18 @@ int vtkCDIReader::GetDims()
+     this->GuessGridFile();
+     if (!this->ReadHorizontalGridData())
+     {
+-      vtkErrorMacro("Could not get horizontal Grid. \nTried " << GridFile.getURI());
++      vtkErrorMacro(
++        "Could not get horizontal Grid. \nTried " << this->Internals->GridFile.getURI());
+       return 0;
+     }
+   }
+ 
+-  VGridFile.openURI(FileName);
+-  int found = ReadVerticalGridData();
++  this->Internals->VGridFile.openURI(this->FileName);
++  int found = this->ReadVerticalGridData();
+   if (!found)
+   {
+-    VGridFile.openURI(GridFile.getURI());
+-    found = ReadVerticalGridData();
++    this->Internals->VGridFile.openURI(this->Internals->GridFile.getURI());
++    found = this->ReadVerticalGridData();
+   }
+ 
+   if (!found)
+@@ -872,21 +981,25 @@ int vtkCDIReader::GetDims()
+   {
+     if (this->DimensionSelection >= 0)
+     {
+-      if (DimensionSelection >= DimensionSets.size())
++      if (this->DimensionSelection >= this->Internals->DimensionSets.size())
+       {
+         vtkErrorMacro("Trying to select inexistent dimensionset "
+-          << DimensionSelection << " " << DimensionSets.size() << " are available.");
++          << this->DimensionSelection << " " << this->Internals->DimensionSets.size()
++          << " are available.");
+         return 0;
+       }
+-      for (int i = 0; i < Grids.size(); i++)
+-        if (this->DimensionSets.at(this->DimensionSelection).GridSize == Grids.at(i).Size)
++      for (int i = 0; i < this->Internals->Grids.size(); i++)
++        if (this->Internals->DimensionSets.at(this->DimensionSelection).GridSize ==
++          this->Internals->Grids.at(i).Size)
+         {
+-          this->DimensionSets.at(this->DimensionSelection).GridID = Grids.at(i).GridID;
++          this->Internals->DimensionSets.at(this->DimensionSelection).GridID =
++            this->Internals->Grids.at(i).GridID;
+           this->GridID = i;
+         }
+-      this->ZAxisID = this->DimensionSets.at(this->DimensionSelection).ZAxisID;
+-      vtkDebugMacro("NEW ZAxisID" << ZAxisID << " from "
+-                                  << this->DimensionSets.at(this->DimensionSelection).ZAxisID);
++      this->ZAxisID = this->Internals->DimensionSets.at(this->DimensionSelection).ZAxisID;
++      vtkDebugMacro(
++        "NEW ZAxisID" << this->ZAxisID << " from "
++                      << this->Internals->DimensionSets.at(this->DimensionSelection).ZAxisID);
+     }
+   }
+   catch (const std::out_of_range& oor)
+@@ -897,15 +1010,17 @@ int vtkCDIReader::GetDims()
+ 
+   try
+   {
+-    if (GridID != -1 && Grids.at(this->GridID).GridID != -1)
++    if (this->GridID != -1 && this->Internals->Grids.at(this->GridID).GridID != -1)
+     {
+-      this->NumberOfCells = static_cast<int>(Grids.at(GridID).Size);
++      this->NumberOfCells = static_cast<int>(this->Internals->Grids.at(GridID).Size);
+ 
+       if (this->NumberOfPoints and this->NumberOfPoints != this->NumberOfCells)
++      {
+         vtkDebugMacro("GetDims: Changing number of points from  " << this->NumberOfPoints << " to "
+                                                                   << this->NumberOfCells);
++      }
+       this->NumberOfPoints = this->NumberOfCells;
+-      this->PointsPerCell = Grids.at(this->GridID).PointsPerCell;
++      this->PointsPerCell = this->Internals->Grids.at(this->GridID).PointsPerCell;
+       vtkDebugMacro("GetDims: Found PointsPerCell to be  " << this->PointsPerCell << " for grid  "
+                                                            << this->GridID);
+     }
+@@ -913,19 +1028,21 @@ int vtkCDIReader::GetDims()
+   catch (const std::out_of_range& oor)
+   {
+     vtkErrorMacro("Out of Range error in GetDims trying to set NumberOfPoints " << oor.what());
+-    vtkErrorMacro("Grids.size " << Grids.size() << "\t GridID " << GridID);
++    vtkErrorMacro("Grids.size " << this->Internals->Grids.size() << "\t GridID " << this->GridID);
+     return 0;
+   }
+ 
+   int ntsteps = 0;
+   if (this->Grib)
+   {
+-    while (streamInqTimestep(this->DataFile.getStreamID(), ntsteps))
++    while (streamInqTimestep(this->Internals->DataFile.getStreamID(), ntsteps))
++    {
+       ntsteps++;
++    }
+   }
+   else
+   {
+-    ntsteps = vlistNtsteps(this->DataFile.getVListID());
++    ntsteps = vlistNtsteps(this->Internals->DataFile.getVListID());
+   }
+   this->NumberOfTimeSteps = ntsteps;
+ 
+@@ -945,8 +1062,13 @@ int vtkCDIReader::GetDims()
+ //---------------------------------------------------------------------------------------------------
+ int vtkCDIReader::ReadHorizontalGridData()
+ {
+-  Grids.resize(0);
+-  int vlistID_l = this->GridFile.getVListID();
++  this->Internals->Grids.resize(0);
++  int vlistID_l = this->Internals->GridFile.getVListID();
++  if (vlistID_l == CDI_UNDEFID)
++  {
++    vtkErrorMacro("No VList found in Grid file.");
++    return 0;
++  }
+   int ngrids = vlistNgrids(vlistID_l);
+   for (int i = 0; i < ngrids; ++i)
+   {
+@@ -955,13 +1077,17 @@ int vtkCDIReader::ReadHorizontalGridData()
+ 
+     if (nv >= 3) //  ((nv == 3 || nv == 4)) // && gridInqType(gridID_l) == GRID_UNSTRUCTURED)
+     {
+-      Grid grid{ .GridID = gridID_l, .Size = gridInqSize(gridID_l), .PointsPerCell = nv };
+-      Grids.push_back(grid);
++      Grid grid{
++        .GridID = gridID_l, .Size = static_cast<size_t>(gridInqSize(gridID_l)), .PointsPerCell = nv
++      };
++      this->Internals->Grids.push_back(grid);
+     }
+   }
+ 
+-  if (Grids.size() == 0)
++  if (this->Internals->Grids.empty())
++  {
+     return 0;
++  }
+   return 1;
+ }
+ 
+@@ -971,11 +1097,11 @@ int vtkCDIReader::ReadHorizontalGridData()
+ int vtkCDIReader::ReadVerticalGridData()
+ {
+   this->ZAxisID = -1;
+-  int nzaxis = vlistNzaxis(this->VGridFile.getVListID());
++  int nzaxis = vlistNzaxis(this->Internals->VGridFile.getVListID());
+   int found = 0;
+   for (int i = 0; i < nzaxis; ++i)
+   {
+-    int zaxisID_l = vlistZaxis(this->VGridFile.getVListID(), i);
++    int zaxisID_l = vlistZaxis(this->Internals->VGridFile.getVListID(), i);
+     if (zaxisInqSize(zaxisID_l) == 1 || zaxisInqType(zaxisID_l) == ZAXIS_SURFACE)
+     {
+       this->SurfIDs.insert(zaxisID_l);
+@@ -986,7 +1112,7 @@ int vtkCDIReader::ReadVerticalGridData()
+ 
+   for (int i = 0; i < nzaxis; ++i)
+   {
+-    int zaxisID_l = vlistZaxis(this->VGridFile.getVListID(), i);
++    int zaxisID_l = vlistZaxis(this->Internals->VGridFile.getVListID(), i);
+     if (zaxisInqSize(zaxisID_l) > 1)
+     {
+       found = 1;
+@@ -1005,24 +1131,25 @@ int vtkCDIReader::GetVars()
+   int cellVarIndex = -1;
+   int pointVarIndex = -1;
+   int domainVarIndex = -1;
+-  int numVars = vlistNvars(this->DataFile.getVListID());
++  int numVars = vlistNvars(this->Internals->DataFile.getVListID());
+ 
+-  vtkDebugMacro("Found " << numVars << " as Variables for VListID " << this->DataFile.getVListID());
++  vtkDebugMacro(
++    "Found " << numVars << " as Variables for VListID " << this->Internals->DataFile.getVListID());
+ 
+   for (int i = 0; i < numVars; i++)
+   {
+     int varID = i;
+     cdi_tools::CDIVar aVar;
+ 
+-    aVar.StreamID = this->DataFile.getStreamID();
++    aVar.StreamID = this->Internals->DataFile.getStreamID();
+     aVar.VarID = varID;
+-    aVar.GridID = vlistInqVarGrid(this->DataFile.getVListID(), varID);
+-    aVar.ZAxisID = vlistInqVarZaxis(this->DataFile.getVListID(), varID);
++    aVar.GridID = vlistInqVarGrid(this->Internals->DataFile.getVListID(), varID);
++    aVar.ZAxisID = vlistInqVarZaxis(this->Internals->DataFile.getVListID(), varID);
+     aVar.GridSize = static_cast<int>(gridInqSize(aVar.GridID));
+     aVar.NLevel = zaxisInqSize(aVar.ZAxisID);
+     aVar.Type = 0;
+     aVar.ConstTime = 0;
+-    vlistInqVarName(this->DataFile.getVListID(), varID, aVar.Name);
++    vlistInqVarName(this->Internals->DataFile.getVListID(), varID, aVar.Name);
+     vtkDebugMacro("Processing variable " << i << '\t' << aVar.Name);
+ 
+     // to do multiple grids:
+@@ -1030,11 +1157,11 @@ int vtkCDIReader::GetVars()
+     // - Check if all grids can be reconstructed, or if bnds are all zero
+     // - Reform gui to load either Cell, Point or Edge data
+ 
+-    if (vlistInqVarTsteptype(this->DataFile.getVListID(), varID) == TIME_CONSTANT)
++    if (vlistInqVarTsteptype(this->Internals->DataFile.getVListID(), varID) == TIME_CONSTANT)
+     {
+       aVar.ConstTime = 1;
+     }
+-    if (aVar.ZAxisID != this->ZAxisID && SurfIDs.count(aVar.ZAxisID) == 0)
++    if (aVar.ZAxisID != this->ZAxisID && this->SurfIDs.count(aVar.ZAxisID) == 0)
+     // We are handling a different 3D Axis.
+     {
+       vtkDebugMacro("Skipping " << aVar.Name << " as it has the wrong ZAxis " << aVar.ZAxisID);
+@@ -1180,7 +1307,7 @@ int vtkCDIReader::BuildVarArrays()
+ 
+   if (!this->FileName.empty())
+   {
+-    if (!GetVars())
++    if (!this->GetVars())
+     {
+       return 0;
+     }
+@@ -1394,10 +1521,10 @@ int vtkCDIReader::ConstructGridGeometry()
+   vtkDebugMacro("Start reading Vertices");
+   try
+   {
+-    gridInqXboundsPart(Grids.at(this->GridID).GridID, (this->BeginCell * this->PointsPerCell), size,
+-      cLonVertices.data());
+-    gridInqYboundsPart(Grids.at(this->GridID).GridID, (this->BeginCell * this->PointsPerCell), size,
+-      cLatVertices.data());
++    gridInqXboundsPart(Internals->Grids.at(this->GridID).GridID,
++      (this->BeginCell * this->PointsPerCell), size, cLonVertices.data());
++    gridInqYboundsPart(Internals->Grids.at(this->GridID).GridID,
++      (this->BeginCell * this->PointsPerCell), size, cLatVertices.data());
+   }
+   catch (const std::out_of_range& oor)
+   {
+@@ -1417,7 +1544,7 @@ int vtkCDIReader::ConstructGridGeometry()
+   {
+     if (this->ProjectionMode != projection::CATALYST)
+     {
+-      gridInqXunits(Grids.at(this->GridID).GridID, units);
++      gridInqXunits(this->Internals->Grids.at(this->GridID).GridID, units);
+       if (strncmp(units, "degree", 6) == 0)
+       {
+         for (int i = 0; i < size; i++)
+@@ -1425,7 +1552,7 @@ int vtkCDIReader::ConstructGridGeometry()
+           cLonVertices[i] = vtkMath::RadiansFromDegrees(cLonVertices[i]);
+         }
+       }
+-      gridInqYunits(Grids.at(this->GridID).GridID, units);
++      gridInqYunits(this->Internals->Grids.at(this->GridID).GridID, units);
+       if (strncmp(units, "degree", 6) == 0)
+       {
+         for (int i = 0; i < size; i++)
+@@ -1452,8 +1579,10 @@ int vtkCDIReader::ConstructGridGeometry()
+   this->NumberLocalCells = new_cells[0] / this->PointsPerCell;
+   this->NumberLocalPoints = new_cells[1];
+   if (this->NumberOfPoints and this->NumberOfPoints != new_cells[1])
++  {
+     vtkDebugMacro("ConstructGridGeometry: Changing number of points from  "
+       << this->NumberOfPoints << " to " << new_cells[1]);
++  }
+ 
+   this->NumberOfPoints = new_cells[1];
+ 
+@@ -1470,8 +1599,8 @@ int vtkCDIReader::ConstructGridGeometry()
+   // now get the individual coordinates out of the clon/clat vertices
+   for (int i = 0; i < this->NumberLocalPoints; i++)
+   {
+-    projection::longLatToCartesian(
+-      cLonVertices[i], cLatVertices[i], &PointX[i], &PointY[i], &PointZ[i], this->ProjectionMode);
++    projection::longLatToCartesian(cLonVertices[i], cLatVertices[i], &this->PointX[i],
++      &this->PointY[i], &this->PointZ[i], this->ProjectionMode);
+   }
+ 
+   // mirror the mesh if needed
+@@ -1501,10 +1630,12 @@ int vtkCDIReader::ConstructGridGeometry()
+       std::vector<double> clat_vert2(size2);
+       try
+       {
+-        gridInqXboundsPart(Grids.at(this->GridID).GridID, 0, size2, clon_vert2.data());
+-        gridInqYboundsPart(Grids.at(this->GridID).GridID, 0, size2, clat_vert2.data());
++        gridInqXboundsPart(
++          this->Internals->Grids.at(this->GridID).GridID, 0, size2, clon_vert2.data());
++        gridInqYboundsPart(
++          this->Internals->Grids.at(this->GridID).GridID, 0, size2, clat_vert2.data());
+ 
+-        gridInqXunits(Grids.at(this->GridID).GridID, units);
++        gridInqXunits(this->Internals->Grids.at(this->GridID).GridID, units);
+         if (strncmp(units, "degree", 6) == 0)
+         {
+           for (int i = 0; i < size2; i++)
+@@ -1513,7 +1644,7 @@ int vtkCDIReader::ConstructGridGeometry()
+           }
+         }
+ 
+-        gridInqYunits(Grids.at(this->GridID).GridID, units);
++        gridInqYunits(this->Internals->Grids.at(this->GridID).GridID, units);
+         if (strncmp(units, "degree", 6) == 0)
+         {
+           for (int i = 0; i < size2; i++)
+@@ -1556,8 +1687,6 @@ int vtkCDIReader::ConstructGridGeometry()
+   this->CurrentExtraPoint = this->NumberLocalPoints;
+   this->CurrentExtraCell = this->NumberLocalCells;
+ 
+-  cLonVertices.clear();
+-  cLatVertices.clear();
+   vtkDebugMacro("Grid Reconstruction complete...");
+   return 1;
+ }
+@@ -1587,7 +1716,7 @@ int vtkCDIReader::AllocSphereGeometry()
+ {
+   vtkDebugMacro("In AllocSphereGeometry...");
+ 
+-  if (!GridReconstructed || this->ReconstructNew)
++  if (!this->GridReconstructed || this->ReconstructNew)
+   {
+     this->ConstructGridGeometry();
+   }
+@@ -1624,7 +1753,7 @@ int vtkCDIReader::AllocLatLonGeometry()
+     return 0;
+   }
+ 
+-  if (!GridReconstructed || this->ReconstructNew)
++  if (!this->GridReconstructed || this->ReconstructNew)
+   {
+     this->ConstructGridGeometry();
+   }
+@@ -1661,16 +1790,16 @@ int vtkCDIReader::LoadClonClatVars()
+   std::vector<double> cLon_l(this->NumberLocalCells);
+   std::vector<double> cLat_l(this->NumberLocalCells);
+ 
+-  gridInqXvalsPart(
+-    Grids.at(this->GridID).GridID, this->BeginCell, this->NumberLocalCells, cLon_l.data());
+-  gridInqYvalsPart(
+-    Grids.at(this->GridID).GridID, this->BeginCell, this->NumberLocalCells, cLat_l.data());
++  gridInqXvalsPart(this->Internals->Grids.at(this->GridID).GridID, this->BeginCell,
++    this->NumberLocalCells, cLon_l.data());
++  gridInqYvalsPart(this->Internals->Grids.at(this->GridID).GridID, this->BeginCell,
++    this->NumberLocalCells, cLat_l.data());
+ 
+   char units[CDI_MAX_NAME];
+ 
+   try
+   {
+-    gridInqXunits(Grids.at(this->GridID).GridID, units);
++    gridInqXunits(this->Internals->Grids.at(this->GridID).GridID, units);
+     if (strncmp(units, "degree", 6) == 0)
+     {
+       for (int i = 0; i < this->NumberLocalCells; i++)
+@@ -1678,7 +1807,7 @@ int vtkCDIReader::LoadClonClatVars()
+         cLon_l[i] = vtkMath::RadiansFromDegrees(cLon_l[i]);
+       }
+     }
+-    gridInqYunits(Grids.at(this->GridID).GridID, units);
++    gridInqYunits(this->Internals->Grids.at(this->GridID).GridID, units);
+     if (strncmp(units, "degree", 6) == 0)
+     {
+       for (int i = 0; i < this->NumberLocalCells; i++)
+@@ -1821,7 +1950,8 @@ int vtkCDIReader::CheckForMaskData()
+   {
+     const double maskVal = this->UseCustomMaskValue
+       ? this->CustomMaskValue
+-      : vlistInqVarMissval(this->DataFile.getVListID(), this->Internals->CellVars[mask_pos].VarID);
++      : vlistInqVarMissval(
++          this->Internals->DataFile.getVListID(), this->Internals->CellVars[mask_pos].VarID);
+ 
+     cdi_tools::CDIVar* cdiVar = &(this->Internals->CellVars[mask_pos]);
+     if (this->ShowMultilayerView)
+@@ -1889,7 +2019,7 @@ int vtkCDIReader::AddMaskHalo()
+         {
+           int l = j * this->MaximumNVertLevels;
+           int k = this->MaximumNVertLevels * this->CellMap[j - this->NumberLocalCells];
+-          this->CellMask[l + levelNum] = (CellMask[k + levelNum]);
++          this->CellMask[l + levelNum] = (this->CellMask[k + levelNum]);
+         }
+       }
+     }
+@@ -1921,7 +2051,7 @@ bool vtkCDIReader::BuildDomainCellVars()
+   CHECK_NEW(this->DomainCellVar);
+   double val = 0;
+   int mask_pos = 0;
+-  int numVars = vlistNvars(this->DataFile.getVListID());
++  int numVars = vlistNvars(this->Internals->DataFile.getVListID());
+ 
+   for (int i = 0; i < numVars; i++)
+   {
+@@ -2156,7 +2286,7 @@ int vtkCDIReader::Wrap(int axis)
+       }
+     }
+ 
+-    if (!ShowMultilayerView)
++    if (!this->ShowMultilayerView)
+     {
+       this->MaximumCells = static_cast<int>(this->CurrentExtraCell);
+       this->MaximumPoints = static_cast<int>(this->CurrentExtraPoint);
+@@ -2284,8 +2414,10 @@ void vtkCDIReader::OutputPoints(bool init)
+         {
+           retval = projection::cartesianToSpherical(x, y, z, &rho, &phi, &theta);
+           if (!retval)
++          {
+             retval = projection::sphericalToCartesian(
+               rho + this->Layer0Offset * adjustedLayerThickness, phi, theta, &x, &y, &z);
++          }
+         }
+       }
+ 
+@@ -2480,9 +2612,13 @@ void vtkCDIReader::OutputCells(bool init)
+             polygon[k + this->PointsPerCell] = val;
+           }
+           if (cellType == VTK_POLYHEDRON)
++          {
+             this->InsertPolyhedron(polygon);
++          }
+           else
++          {
+             output->InsertNextCell(cellType, pointsPerPolygon, polygon.data());
++          }
+         }
+       }
+     }
+@@ -2568,7 +2704,9 @@ void vtkCDIReader::InsertPolyhedron(std::vector<vtkIdType> polygon)
+ int vtkCDIReader::LoadPointVarData(int variableIndex, double dTimeStep)
+ {
+   if (!(this->PointsPerCell == 3))
++  {
+     return 0;
++  }
+ 
+   this->PointDataSelected = variableIndex;
+ 
+@@ -2778,7 +2916,7 @@ int vtkCDIReader::LoadCellVarDataTemplate(
+ //------------------------------------------------------------------------------
+ int vtkCDIReader::ReplaceFillWithNan(const int varID, vtkDataArray* dataArray)
+ {
+-  double miss = vlistInqVarMissval(this->DataFile.getVListID(), varID);
++  double miss = vlistInqVarMissval(this->Internals->DataFile.getVListID(), varID);
+ 
+   // NaN only available with float and double.
+   if (dataArray->GetDataType() == VTK_FLOAT)
+@@ -2914,7 +3052,7 @@ int vtkCDIReader::LoadPointVarDataTemplate(
+         }
+ 
+         // layer below, which is repeated ...
+-        dataBlock[i++] = dataTmp[j + ((MaximumNVertLevels - 1) * this->NumberLocalPoints)];
++        dataBlock[i++] = dataTmp[j + ((this->MaximumNVertLevels - 1) * this->NumberLocalPoints)];
+       }
+     }
+   }
+@@ -3091,11 +3229,11 @@ int vtkCDIReader::LoadDomainVarData(int variableIndex)
+ //-----------------------------------------------------------------------------
+ int vtkCDIReader::FillGridDimensions()
+ {
+-  this->DimensionSets.resize(0);
++  this->Internals->DimensionSets.resize(0);
+ 
+-  int ngrids = vlistNgrids(this->DataFile.getVListID());
+-  int nzaxis = vlistNzaxis(this->DataFile.getVListID());
+-  int nvars = vlistNvars(this->DataFile.getVListID());
++  int ngrids = vlistNgrids(this->Internals->DataFile.getVListID());
++  int nzaxis = vlistNzaxis(this->Internals->DataFile.getVListID());
++  int nvars = vlistNvars(this->Internals->DataFile.getVListID());
+   char nameGridX[CDI_MAX_NAME];
+   char nameGridY[CDI_MAX_NAME];
+   char nameLev[CDI_MAX_NAME];
+@@ -3104,8 +3242,8 @@ int vtkCDIReader::FillGridDimensions()
+ 
+   for (int k = 0; k < nvars; k++)
+   {
+-    int i = vlistInqVarGrid(this->DataFile.getVListID(), k);
+-    int j = vlistInqVarZaxis(this->DataFile.getVListID(), k);
++    int i = vlistInqVarGrid(this->Internals->DataFile.getVListID(), k);
++    int j = vlistInqVarZaxis(this->Internals->DataFile.getVListID(), k);
+     hits.insert(std::to_string(i) + "x" + std::to_string(j));
+     // IDs are not 0 to n-1 but can be 30-ish for a file with 3 grids.
+     // they map to the gridID_l and zaxisID_l values below.
+@@ -3117,14 +3255,14 @@ int vtkCDIReader::FillGridDimensions()
+     for (int j = 0; j < nzaxis; ++j)
+     {
+       std::string dimEncoding("(");
+-      int gridID_l = vlistGrid(this->DataFile.getVListID(), i);
++      int gridID_l = vlistGrid(this->Internals->DataFile.getVListID(), i);
+       gridInqXname(gridID_l, nameGridX);
+       gridInqYname(gridID_l, nameGridY);
+       dimEncoding += nameGridX;
+       dimEncoding += ", ";
+       dimEncoding += nameGridY;
+       dimEncoding += ", ";
+-      int zaxisID_l = vlistZaxis(this->DataFile.getVListID(), j);
++      int zaxisID_l = vlistZaxis(this->Internals->DataFile.getVListID(), j);
+       zaxisInqName(zaxisID_l, nameLev);
+       dimEncoding += nameLev;
+       dimEncoding += ")";
+@@ -3140,13 +3278,13 @@ int vtkCDIReader::FillGridDimensions()
+         << i << '\t' << j << "\t" << gridID_l << '\t' << zaxisID_l << "\t" << dimEncoding
+         << " - has hits.\n");
+ 
+-      dimset ds{ .DimsetID = counter,
++      Dimset ds{ .DimsetID = counter,
+         .GridID = -1,
+         .ZAxisID = zaxisID_l,
+-        .GridSize = gridInqSize(gridID_l),
++        .GridSize = static_cast<size_t>(gridInqSize(gridID_l)),
+         .NLevel = zaxisInqSize(zaxisID_l),
+         .label = dimEncoding };
+-      DimensionSets.push_back(ds);
++      this->Internals->DimensionSets.push_back(ds);
+       counter++;
+     }
+   }
+@@ -3154,8 +3292,8 @@ int vtkCDIReader::FillGridDimensions()
+   this->VariableDimensions->SetNumberOfValues(counter);
+   for (int i = 0; i < counter; i++)
+   {
+-    this->AllDimensions->InsertNextValue(DimensionSets[i].label);
+-    this->VariableDimensions->SetValue(i, DimensionSets[i].label.c_str());
++    this->AllDimensions->InsertNextValue(this->Internals->DimensionSets[i].label);
++    this->VariableDimensions->SetValue(i, this->Internals->DimensionSets[i].label.c_str());
+   }
+ 
+   return 1;
+@@ -3281,7 +3419,9 @@ void vtkCDIReader::SetMaskingVariable(const char* name)
+ void vtkCDIReader::SetUseCustomMaskValue(bool val)
+ {
+   if (val == this->UseCustomMaskValue)
++  {
+     return;
++  }
+ 
+   this->UseCustomMaskValue = val;
+ 
+@@ -3301,7 +3441,9 @@ void vtkCDIReader::SetUseCustomMaskValue(bool val)
+ void vtkCDIReader::SetCustomMaskValue(double val)
+ {
+   if (val == this->CustomMaskValue)
++  {
+     return;
++  }
+ 
+   this->CustomMaskValue = val;
+ 
+@@ -3346,7 +3488,7 @@ void vtkCDIReader::SetFileName(const char* val)
+ {
+   if (this->FileName.empty() || val == nullptr || strcmp(this->FileName.c_str(), val) != 0)
+   {
+-    this->DataFile.setVoid();
++    this->Internals->DataFile.setVoid();
+     this->Modified();
+     if (val == nullptr)
+     {
+diff --git a/Plugins/CDIReader/Reader/vtkCDIReader.h b/Plugins/CDIReader/Reader/vtkCDIReader.h
+index 44f9073a97..fa90313d4d 100644
+--- a/Plugins/CDIReader/Reader/vtkCDIReader.h
++++ b/Plugins/CDIReader/Reader/vtkCDIReader.h
+@@ -46,7 +46,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ #include "projections.h" // for projection enum
+ 
+-#include "DataSource.h"
+ #include <memory> // for unique_ptr
+ #include <unordered_set>
+ #include <vector> // for std::vector
+@@ -56,23 +55,6 @@ class vtkDoubleArray;
+ class vtkFieldData;
+ class vtkMultiProcessController;
+ 
+-struct dimset
+-{
+-  size_t DimsetID;
+-  int GridID;
+-  int ZAxisID;
+-  size_t GridSize;
+-  int NLevel;
+-  std::string label;
+-};
+-
+-struct Grid
+-{
+-  int GridID;
+-  size_t Size;
+-  int PointsPerCell;
+-};
+-
+ /**
+  *
+  * @class vtkCDIReader
+@@ -345,8 +327,6 @@ protected:
+   double Layer0OffsetRange[2];
+ 
+   int DimensionSelection;
+-  std::vector<dimset> DimensionSets;
+-  std::vector<Grid> Grids;
+   bool InvertZAxis;
+   bool AddCoordinateVars;
+   projection::Projection ProjectionMode;
+@@ -391,7 +371,6 @@ protected:
+   int NumberOfDomainVars;
+   bool GridReconstructed;
+ 
+-  DataSource::CDIObject DataFile, GridFile, VGridFile;
+   int GridID;
+   int ZAxisID;
+   std::unordered_set<int> SurfIDs;
+-- 
+GitLab
+
+
+From 751b0f14bdfbde85a79e6c06dda1aeff6e36e495 Mon Sep 17 00:00:00 2001
+From: Nils-Arne Dreier <dreier@dkrz.de>
+Date: Mon, 21 Nov 2022 16:10:42 +0100
+Subject: [PATCH 3/5] store DimensionSelection as string instead of an index
+
+When the reader object is restored from a state file the
+`VariableDimensions` is not initialized when `SetDimensions` is
+called. We therefore need to store the actuall string representation
+of the dimension.
+---
+ Plugins/CDIReader/Reader/vtkCDIReader.cxx | 63 ++++++++---------------
+ Plugins/CDIReader/Reader/vtkCDIReader.h   |  2 +-
+ 2 files changed, 23 insertions(+), 42 deletions(-)
+
+diff --git a/Plugins/CDIReader/Reader/vtkCDIReader.cxx b/Plugins/CDIReader/Reader/vtkCDIReader.cxx
+index c44e81f6bb..763b6e6602 100644
+--- a/Plugins/CDIReader/Reader/vtkCDIReader.cxx
++++ b/Plugins/CDIReader/Reader/vtkCDIReader.cxx
+@@ -193,7 +193,7 @@ public:
+   vtkSmartPointer<vtkIdTypeArray> PointsToSendToProcessesLengths;
+   vtkSmartPointer<vtkIdTypeArray> PointsToSendToProcessesOffsets;
+ 
+-  std::vector<Dimset> DimensionSets;
++  std::map<std::string, Dimset> DimensionSets;
+   std::vector<Grid> Grids;
+   CDIObject DataFile, GridFile, VGridFile;
+ };
+@@ -828,7 +828,7 @@ void vtkCDIReader::SetDefaults()
+   this->HaveDomainVariable = false;
+   this->HaveDomainData = false;
+ 
+-  this->DimensionSelection = 0;
++  this->DimensionSelection = "";
+   this->InvertZAxis = false;
+   this->DoublePrecision = false;
+   this->ShowClonClat = false;
+@@ -977,36 +977,20 @@ int vtkCDIReader::GetDims()
+ 
+   this->FillGridDimensions();
+ 
+-  try
++  if (this->DimensionSelection.empty())
+   {
+-    if (this->DimensionSelection >= 0)
++    // select first by default
++    this->DimensionSelection = this->Internals->DimensionSets.begin()->first;
++  }
++  for (int i = 0; i < this->Internals->Grids.size(); i++)
++    if (this->Internals->DimensionSets.at(this->DimensionSelection).GridSize ==
++      this->Internals->Grids.at(i).Size)
+     {
+-      if (this->DimensionSelection >= this->Internals->DimensionSets.size())
+-      {
+-        vtkErrorMacro("Trying to select inexistent dimensionset "
+-          << this->DimensionSelection << " " << this->Internals->DimensionSets.size()
+-          << " are available.");
+-        return 0;
+-      }
+-      for (int i = 0; i < this->Internals->Grids.size(); i++)
+-        if (this->Internals->DimensionSets.at(this->DimensionSelection).GridSize ==
+-          this->Internals->Grids.at(i).Size)
+-        {
+-          this->Internals->DimensionSets.at(this->DimensionSelection).GridID =
+-            this->Internals->Grids.at(i).GridID;
+-          this->GridID = i;
+-        }
+-      this->ZAxisID = this->Internals->DimensionSets.at(this->DimensionSelection).ZAxisID;
+-      vtkDebugMacro(
+-        "NEW ZAxisID" << this->ZAxisID << " from "
+-                      << this->Internals->DimensionSets.at(this->DimensionSelection).ZAxisID);
++      this->Internals->DimensionSets.at(this->DimensionSelection).GridID =
++        this->Internals->Grids.at(i).GridID;
++      this->GridID = i;
+     }
+-  }
+-  catch (const std::out_of_range& oor)
+-  {
+-    vtkErrorMacro("Out of Range error in GetDims trying to set Grid and ZAxisID: " << oor.what());
+-    return 0;
+-  }
++  this->ZAxisID = this->Internals->DimensionSets.at(this->DimensionSelection).ZAxisID;
+ 
+   try
+   {
+@@ -3229,7 +3213,7 @@ int vtkCDIReader::LoadDomainVarData(int variableIndex)
+ //-----------------------------------------------------------------------------
+ int vtkCDIReader::FillGridDimensions()
+ {
+-  this->Internals->DimensionSets.resize(0);
++  this->Internals->DimensionSets.clear();
+ 
+   int ngrids = vlistNgrids(this->Internals->DataFile.getVListID());
+   int nzaxis = vlistNzaxis(this->Internals->DataFile.getVListID());
+@@ -3284,16 +3268,19 @@ int vtkCDIReader::FillGridDimensions()
+         .GridSize = static_cast<size_t>(gridInqSize(gridID_l)),
+         .NLevel = zaxisInqSize(zaxisID_l),
+         .label = dimEncoding };
+-      this->Internals->DimensionSets.push_back(ds);
++      this->Internals->DimensionSets[dimEncoding] = ds;
+       counter++;
+     }
+   }
+   this->AllDimensions->SetNumberOfValues(0);
+   this->VariableDimensions->SetNumberOfValues(counter);
+-  for (int i = 0; i < counter; i++)
++
++  int i = 0;
++  for (const auto& label_diset_tuple : this->Internals->DimensionSets)
+   {
+-    this->AllDimensions->InsertNextValue(this->Internals->DimensionSets[i].label);
+-    this->VariableDimensions->SetValue(i, this->Internals->DimensionSets[i].label.c_str());
++    this->AllDimensions->InsertNextValue(label_diset_tuple.first);
++    this->VariableDimensions->SetValue(i, label_diset_tuple.first.c_str());
++    ++i;
+   }
+ 
+   return 1;
+@@ -3305,13 +3292,7 @@ int vtkCDIReader::FillGridDimensions()
+ void vtkCDIReader::SetDimensions(const char* dimensions)
+ {
+   vtkDebugMacro("In SetDimensions");
+-  for (vtkIdType i = 0; i < this->VariableDimensions->GetNumberOfValues(); i++)
+-  {
+-    if (this->VariableDimensions->GetValue(i) == dimensions)
+-    {
+-      this->DimensionSelection = i;
+-    }
+-  }
++  this->DimensionSelection = dimensions;
+ 
+   this->PointDataArraySelection->RemoveAllArrays();
+   this->CellDataArraySelection->RemoveAllArrays();
+diff --git a/Plugins/CDIReader/Reader/vtkCDIReader.h b/Plugins/CDIReader/Reader/vtkCDIReader.h
+index fa90313d4d..3bbee37929 100644
+--- a/Plugins/CDIReader/Reader/vtkCDIReader.h
++++ b/Plugins/CDIReader/Reader/vtkCDIReader.h
+@@ -326,7 +326,7 @@ protected:
+   double Layer0Offset;
+   double Layer0OffsetRange[2];
+ 
+-  int DimensionSelection;
++  std::string DimensionSelection;
+   bool InvertZAxis;
+   bool AddCoordinateVars;
+   projection::Projection ProjectionMode;
+-- 
+GitLab
+
+
+From 622ba89edcd743d5603dbda519fb3c4bafe2c1cd Mon Sep 17 00:00:00 2001
+From: Nils-Arne Dreier <dreier@dkrz.de>
+Date: Tue, 22 Nov 2022 08:08:36 +0100
+Subject: [PATCH 4/5] clean up variable initialization
+
+use `vtkNew` instead of `vtkSmartPointer`
+
+remove initialization of std containers
+
+add CDIDimensionsTest
+
+use SetValue instead of InsertNextValue
+
+minor formating fixes
+---
+ Plugins/CDIReader/Reader/vtkCDIReader.cxx     | 115 ++---------
+ Plugins/CDIReader/Reader/vtkCDIReader.h       | 183 +++++++++---------
+ .../CDIReader/Testing/CDIDimensionsTest.xml   |  25 +++
+ Plugins/CDIReader/Testing/CMakeLists.txt      |   2 +
+ 4 files changed, 130 insertions(+), 195 deletions(-)
+ create mode 100644 Plugins/CDIReader/Testing/CDIDimensionsTest.xml
+
+diff --git a/Plugins/CDIReader/Reader/vtkCDIReader.cxx b/Plugins/CDIReader/Reader/vtkCDIReader.cxx
+index 763b6e6602..7df87eff14 100644
+--- a/Plugins/CDIReader/Reader/vtkCDIReader.cxx
++++ b/Plugins/CDIReader/Reader/vtkCDIReader.cxx
+@@ -41,7 +41,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #include "vtkCellData.h"
+ #include "vtkCellType.h"
+ #include "vtkDataObject.h"
+-#include "vtkDoubleArray.h"
+ #include "vtkDummyController.h"
+ #include "vtkFieldData.h"
+ #include "vtkFileSeriesReader.h"
+@@ -262,18 +261,10 @@ vtkCDIReader::vtkCDIReader()
+   : Internals(new Internal())
+ {
+   vtkDebugMacro("Starting to create vtkCDIReader...");
+-  this->Initialized = false;
+ 
+   this->SetNumberOfInputPorts(0);
+   this->SetNumberOfOutputPorts(1);
+ 
+-  this->VariableDimensions = vtkSmartPointer<vtkStringArray>::New();
+-  this->AllDimensions = vtkSmartPointer<vtkStringArray>::New();
+-  this->AllVariableArrayNames = vtkSmartPointer<vtkStringArray>::New();
+-  this->InfoRequested = false;
+-  this->DataRequested = false;
+-  this->HaveDomainData = false;
+-
+   // Setup selection callback to modify this object when array selection changes
+   this->SelectionObserver->SetCallback(&vtkCDIReader::SelectionCallback);
+   this->SelectionObserver->SetClientData(this);
+@@ -281,7 +272,6 @@ vtkCDIReader::vtkCDIReader()
+   this->PointDataArraySelection->AddObserver(vtkCommand::ModifiedEvent, this->SelectionObserver);
+   this->DomainDataArraySelection->AddObserver(vtkCommand::ModifiedEvent, this->SelectionObserver);
+ 
+-  this->Controller = nullptr;
+   this->SetController(vtkMultiProcessController::GetGlobalController());
+   if (!this->Controller)
+   {
+@@ -289,8 +279,6 @@ vtkCDIReader::vtkCDIReader()
+     this->SetController(dummyController);
+   }
+ 
+-  this->SetDefaults();
+-
+   vtkDebugMacro("MAX_VARS:" << MAX_VARS);
+   vtkDebugMacro("Created vtkCDIReader");
+ }
+@@ -802,78 +790,6 @@ int vtkCDIReader::RegenerateGeometry()
+   return 1;
+ }
+ 
+-//----------------------------------------------------------------------------
+-// Set defaults for various parameters and initialize some variables
+-//----------------------------------------------------------------------------
+-void vtkCDIReader::SetDefaults()
+-{
+-  this->Grib = false;
+-
+-  this->VerticalLevelRange[0] = 0;
+-  this->VerticalLevelRange[1] = 1;
+-  this->VerticalLevelSelected = 0;
+-  this->LayerThicknessRange[0] = 0;
+-  this->LayerThicknessRange[1] = 100;
+-  this->LayerThickness = 50;
+-  this->Bloat = 2.0;
+-
+-  this->Layer0OffsetRange[0] = -50;
+-  this->Layer0OffsetRange[1] = 51;
+-  this->Layer0Offset = 1e-30;
+-
+-  // this is hard coded for now but will change when data generation gets more mature
+-  this->PerformanceDataFile = "timer.atmo.";
+-  this->DomainVarName = "cell_owner";
+-  this->DomainDimension = "domains";
+-  this->HaveDomainVariable = false;
+-  this->HaveDomainData = false;
+-
+-  this->DimensionSelection = "";
+-  this->InvertZAxis = false;
+-  this->DoublePrecision = false;
+-  this->ShowClonClat = false;
+-  this->ProjectionMode = projection::SPHERICAL;
+-  this->ShowMultilayerView = false;
+-  this->ReconstructNew = false;
+-  this->CellDataSelected = 0;
+-  this->PointDataSelected = 0;
+-  this->MaskingVarname = "";
+-  this->GotMask = false;
+-  this->AddCoordinateVars = false;
+-  this->NumberOfTimeSteps = 0;
+-  this->NumberOfAllTimeSteps = 0;
+-  this->TimeSeriesTimeSteps.reserve(5);
+-  this->TimeSteps.reserve(100 * 250 + 25);
+-  this->TimeSeriesTimeStepsAllSet = false;
+-  this->GridReconstructed = false;
+-  this->CustomMaskValue = 0.0;
+-  this->InvertMask = false;
+-  this->UseMask = false;
+-  this->UseCustomMaskValue = false;
+-  this->Decomposition = false;
+-
+-  this->SkipGrid = false;
+-
+-  this->BeginCell = 0;
+-  this->FirstDay = -1;
+-  this->TimeSet = false;
+-
+-  this->DTime = 0;
+-  this->FileSeriesNumber = 0;
+-  this->NumberOfFiles = 1;
+-  this->NeedVerticalGridFile = false;
+-  this->GridID = -1;
+-  this->NumberOfProcesses = 1;
+-
+-  this->BuildDomainArrays = false;
+-  this->MaximumNVertLevels = 0;
+-  this->MaximumPoints = 0;
+-  this->MaximumCells = 0;
+-  this->DepthVar = nullptr;
+-
+-  this->NumberOfPoints = 0;
+-}
+-
+ //----------------------------------------------------------------------------
+ // Get dimensions of key NetCDF variables
+ //----------------------------------------------------------------------------
+@@ -983,6 +899,7 @@ int vtkCDIReader::GetDims()
+     this->DimensionSelection = this->Internals->DimensionSets.begin()->first;
+   }
+   for (int i = 0; i < this->Internals->Grids.size(); i++)
++  {
+     if (this->Internals->DimensionSets.at(this->DimensionSelection).GridSize ==
+       this->Internals->Grids.at(i).Size)
+     {
+@@ -990,6 +907,7 @@ int vtkCDIReader::GetDims()
+         this->Internals->Grids.at(i).GridID;
+       this->GridID = i;
+     }
++  }
+   this->ZAxisID = this->Internals->DimensionSets.at(this->DimensionSelection).ZAxisID;
+ 
+   try
+@@ -1047,16 +965,16 @@ int vtkCDIReader::GetDims()
+ int vtkCDIReader::ReadHorizontalGridData()
+ {
+   this->Internals->Grids.resize(0);
+-  int vlistID_l = this->Internals->GridFile.getVListID();
+-  if (vlistID_l == CDI_UNDEFID)
++  int vListID = this->Internals->GridFile.getVListID();
++  if (vListID == CDI_UNDEFID)
+   {
+     vtkErrorMacro("No VList found in Grid file.");
+     return 0;
+   }
+-  int ngrids = vlistNgrids(vlistID_l);
++  int ngrids = vlistNgrids(vListID);
+   for (int i = 0; i < ngrids; ++i)
+   {
+-    int gridID_l = vlistGrid(vlistID_l, i);
++    int gridID_l = vlistGrid(vListID, i);
+     int nv = gridInqNvertex(gridID_l);
+ 
+     if (nv >= 3) //  ((nv == 3 || nv == 4)) // && gridInqType(gridID_l) == GRID_UNSTRUCTURED)
+@@ -1499,8 +1417,7 @@ int vtkCDIReader::ConstructGridGeometry()
+   }
+   cLonVertices.resize(size);
+   cLatVertices.resize(size);
+-  this->DepthVar = new double[this->MaximumNVertLevels];
+-  CHECK_NEW(this->DepthVar);
++  this->DepthVar.resize(this->MaximumNVertLevels);
+ 
+   vtkDebugMacro("Start reading Vertices");
+   try
+@@ -1519,7 +1436,7 @@ int vtkCDIReader::ConstructGridGeometry()
+   vtkDebugMacro("Done reading Vertices");
+   vtkDebugMacro("Getting vertical axis" << this->ZAxisID << " expecting up to "
+                                         << this->MaximumNVertLevels << " levels.");
+-  zaxisInqLevels(this->ZAxisID, this->DepthVar);
++  zaxisInqLevels(this->ZAxisID, this->DepthVar.data());
+   vtkDebugMacro("Got vertical axis" << this->ZAxisID);
+   char units[CDI_MAX_NAME];
+   this->OrigConnections.resize(size);
+@@ -2030,9 +1947,8 @@ int vtkCDIReader::AddMaskHalo()
+ //----------------------------------------------------------------------------
+ bool vtkCDIReader::BuildDomainCellVars()
+ {
+-  this->DomainCellVar = new double[this->NumberOfCells * this->NumberOfDomainVars];
++  this->DomainCellVar.resize(this->NumberOfCells * this->NumberOfDomainVars);
+   std::vector<double> domainTMP(this->NumberOfCells);
+-  CHECK_NEW(this->DomainCellVar);
+   double val = 0;
+   int mask_pos = 0;
+   int numVars = vlistNvars(this->Internals->DataFile.getVListID());
+@@ -2058,7 +1974,7 @@ bool vtkCDIReader::BuildDomainCellVars()
+       val = this->DomainVarDataArray->GetArray(j)->GetComponent(domainTMP[k], 0l);
+       this->DomainCellVar[k + (j * this->NumberOfCells)] = val;
+     }
+-    domainVar->SetArray(this->DomainCellVar + (j * this->NumberOfCells), this->NumberLocalCells, 0,
++    domainVar->SetArray(&(this->DomainCellVar[j * this->NumberOfCells]), this->NumberLocalCells, 0,
+       vtkDoubleArray::VTK_DATA_ARRAY_FREE);
+     domainVar->SetName(this->Internals->DomainVars[j].c_str());
+     this->Output->GetCellData()->AddArray(domainVar);
+@@ -2364,7 +2280,7 @@ void vtkCDIReader::OutputPoints(bool init)
+     points->Allocate(this->MaximumPoints, this->MaximumPoints);
+   }
+ 
+-  if (this->DepthVar == nullptr)
++  if (this->DepthVar.empty())
+   {
+     vtkDebugMacro("OutputPoints: this->MaximumPoints: "
+       << this->MaximumPoints << " this->MaximumNVertLevels: " << this->MaximumNVertLevels
+@@ -2507,7 +2423,7 @@ void vtkCDIReader::OutputCells(bool init)
+                                       << " ShowMultilayerView: " << this->ShowMultilayerView
+                                       << " CurrentExtraCell: " << this->CurrentExtraCell);
+ 
+-  if (this->DepthVar == nullptr)
++  if (this->DepthVar.empty())
+   {
+     vtkErrorMacro(
+       "File " << this->FileName << " OutputCells: this->MaximumCells: " << this->MaximumCells
+@@ -2610,10 +2526,8 @@ void vtkCDIReader::OutputCells(bool init)
+ 
+   if (this->AddCoordinateVars && this->ShowClonClat)
+   {
+-    this->ClonArray = vtkSmartPointer<vtkDoubleArray>::New();
+     this->ClonArray->SetName("Center Longitude (CLON)");
+     this->ClonArray->SetNumberOfTuples(this->NumberLocalCells * this->MaximumNVertLevels);
+-    this->ClatArray = vtkSmartPointer<vtkDoubleArray>::New();
+     this->ClatArray->SetName("Center Latitude (CLAT)");
+     this->ClatArray->SetNumberOfTuples(this->NumberLocalCells * this->MaximumNVertLevels);
+     if (this->ShowMultilayerView)
+@@ -3132,7 +3046,6 @@ int vtkCDIReader::LoadDomainVarData(int variableIndex)
+   // the data available. Needs to be improved together with the modellers.
+   vtkDebugMacro("In vtkCDIReader::LoadDomainVarData");
+   std::string variable = this->Internals->DomainVars[variableIndex];
+-  this->DomainDataSelected = variableIndex;
+ 
+   // Allocate data array for this variable
+   if (!this->DomainVarDataArray->HasArray(variable.c_str()))
+@@ -3272,13 +3185,13 @@ int vtkCDIReader::FillGridDimensions()
+       counter++;
+     }
+   }
+-  this->AllDimensions->SetNumberOfValues(0);
++  this->AllDimensions->SetNumberOfValues(counter);
+   this->VariableDimensions->SetNumberOfValues(counter);
+ 
+   int i = 0;
+   for (const auto& label_diset_tuple : this->Internals->DimensionSets)
+   {
+-    this->AllDimensions->InsertNextValue(label_diset_tuple.first);
++    this->AllDimensions->SetValue(i, label_diset_tuple.first);
+     this->VariableDimensions->SetValue(i, label_diset_tuple.first.c_str());
+     ++i;
+   }
+diff --git a/Plugins/CDIReader/Reader/vtkCDIReader.h b/Plugins/CDIReader/Reader/vtkCDIReader.h
+index 3bbee37929..087fe35a54 100644
+--- a/Plugins/CDIReader/Reader/vtkCDIReader.h
++++ b/Plugins/CDIReader/Reader/vtkCDIReader.h
+@@ -41,8 +41,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #include "vtkUnstructuredGridAlgorithm.h"
+ 
+ #include "vtkDataArraySelection.h" // for ivars
+-#include "vtkSmartPointer.h"       // for ivars
+-#include "vtkStringArray.h"        // for ivars
++#include "vtkDoubleArray.h"
++#include "vtkSmartPointer.h" // for ivars
++#include "vtkStringArray.h"  // for ivars
+ 
+ #include "projections.h" // for projection enum
+ 
+@@ -94,11 +95,11 @@ public:
+   vtkGetMacro(NumberOfCellVars, int);
+   vtkGetMacro(NumberOfPointVars, int);
+ 
+-  vtkSmartPointer<vtkStringArray> VariableDimensions;
+-  vtkSmartPointer<vtkStringArray> AllDimensions;
++  vtkNew<vtkStringArray> VariableDimensions;
++  vtkNew<vtkStringArray> AllDimensions;
+   void SetDimensions(const char* dimensions);
+   vtkStringArray* GetAllVariableArrayNames();
+-  vtkSmartPointer<vtkStringArray> AllVariableArrayNames;
++  vtkNew<vtkStringArray> AllVariableArrayNames;
+   vtkGetObjectMacro(AllDimensions, vtkStringArray);
+   vtkGetObjectMacro(VariableDimensions, vtkStringArray);
+ 
+@@ -200,7 +201,6 @@ protected:
+ 
+   int OpenFile();
+   void DestroyData();
+-  void SetDefaults();
+   int CheckForMaskData();
+   int AddMaskHalo();
+   int GetVars();
+@@ -259,54 +259,52 @@ protected:
+   int AddMirrorPointX(int index, double dividerX, double offset);
+   int AddMirrorPointY(int index, double dividerY, double offset);
+ 
+-  vtkMultiProcessController* Controller;
+-
+-  bool Initialized;
+-
+-  int NumberOfProcesses;
+-  double CustomMaskValue;
+-  int BeginPoint, EndPoint, BeginCell, EndCell;
+-  int Piece, NumPieces;
+-  int NumberLocalCells;
+-  int NumberAllCells;
+-  int NumberLocalPoints;
+-  int NumberAllPoints;
+-  bool Decomposition;
+-  long FirstDay;
+-  int ModNumPoints;
+-  int ModNumCells;
+-  unsigned int CurrentExtraPoint;     // current extra point
+-  unsigned int CurrentExtraCell;      // current extra cell
++  vtkMultiProcessController* Controller = nullptr;
++
++  bool Initialized = false;
++
++  int NumberOfProcesses = 1;
++  double CustomMaskValue = 0.0;
++  int BeginPoint = 0, EndPoint = 0, BeginCell = 0, EndCell = 0;
++  int Piece = 0, NumPieces = 0;
++  int NumberLocalCells = 0;
++  int NumberAllCells = 0;
++  int NumberLocalPoints = 0;
++  int NumberAllPoints = 0;
++  bool Decomposition = false;
++  long FirstDay = -1;
++  int ModNumPoints = 0;
++  int ModNumCells = 0;
++  unsigned int CurrentExtraPoint = 0; // current extra point
++  unsigned int CurrentExtraCell = 0;  // current extra cell
+   std::vector<unsigned int> CellMap;  // maps from added cell to original cell #
+   std::vector<unsigned int> PointMap; // maps from added point to original point #
+ 
+-  std::string FileName;
+-  std::string FileNameGrid;
+-  std::string FileNameGridSelect;
+-  std::string FileSeriesFirstName;
+-  std::string MaskingVarname;
+-  int NumberOfTimeSteps;
+-  int NumberOfAllTimeSteps;
++  std::string FileName = "";
++  std::string FileSeriesFirstName = "";
++  std::string MaskingVarname = "";
++  int NumberOfTimeSteps = 0;
++  int NumberOfAllTimeSteps = 0;
+   std::vector<int> TimeSeriesTimeSteps;
+-  bool TimeSeriesTimeStepsAllSet;
+-  bool TimeSet;
+-  double DTime;
++  bool TimeSeriesTimeStepsAllSet = false;
++  bool TimeSet = false;
++  double DTime = 0;
+   std::vector<double> TimeSteps;
+-  int FileSeriesNumber;
+-  int NumberOfFiles;
+-  double Bloat;
++  int FileSeriesNumber = 0;
++  int NumberOfFiles = 1;
++  double Bloat = 2.0;
+ 
+-  bool UseMask;
+-  bool InvertMask;
+-  bool GotMask;
+-  bool UseCustomMaskValue;
++  bool UseMask = false;
++  bool InvertMask = false;
++  bool GotMask = false;
++  bool UseCustomMaskValue = false;
+ 
+-  bool SkipGrid;
++  bool SkipGrid = false;
+ 
+   vtkNew<vtkCallbackCommand> SelectionObserver;
+-  bool InfoRequested;
+-  bool DataRequested;
+-  bool Grib;
++  bool InfoRequested = false;
++  bool DataRequested = false;
++  bool Grib = false;
+ 
+   vtkNew<vtkDataArraySelection> CellDataArraySelection;
+   vtkNew<vtkDataArraySelection> PointDataArraySelection;
+@@ -316,69 +314,66 @@ protected:
+   vtkNew<vtkFieldData> PointVarDataArray;
+   vtkNew<vtkFieldData> DomainVarDataArray;
+ 
+-  int VerticalLevelSelected;
+-  int VerticalLevelRange[2];
+-  int CellDataSelected;
+-  int PointDataSelected;
+-  int DomainDataSelected;
+-  int LayerThickness;
+-  int LayerThicknessRange[2];
+-  double Layer0Offset;
+-  double Layer0OffsetRange[2];
+-
+-  std::string DimensionSelection;
+-  bool InvertZAxis;
+-  bool AddCoordinateVars;
+-  projection::Projection ProjectionMode;
+-  bool DoublePrecision;
+-  bool ShowClonClat;
+-  bool ShowMultilayerView;
+-  bool HaveDomainData;
+-  bool HaveDomainVariable;
+-  bool BuildDomainArrays;
+-  std::string DomainVarName;
+-  std::string DomainDimension;
+-  std::string PerformanceDataFile;
+-
+-  int MaximumNVertLevels;
+-  int NumberOfCells;
+-  int NumberOfVertices;
+-  int NumberOfPoints;
+-  int NumberOfTriangles;
+-  int NumberOfDomains;
+-  int PointsPerCell;
+-  bool ReconstructNew;
+-  bool NeedHorizontalGridFile;
+-  bool NeedVerticalGridFile;
+-  bool WrapOn;
++  int VerticalLevelSelected = 0;
++  int VerticalLevelRange[2] = { 0, 1 };
++  int CellDataSelected = 0;
++  int PointDataSelected = 0;
++  int LayerThickness = 50;
++  int LayerThicknessRange[2] = { 0, 100 };
++  double Layer0Offset = 1e-30;
++  double Layer0OffsetRange[2] = { -50, 51 };
++
++  std::string DimensionSelection = "";
++  bool InvertZAxis = false;
++  bool AddCoordinateVars = false;
++  projection::Projection ProjectionMode = projection::SPHERICAL;
++  bool DoublePrecision = false;
++  bool ShowClonClat = false;
++  bool ShowMultilayerView = false;
++  bool HaveDomainData = false;
++  bool HaveDomainVariable = false;
++  bool BuildDomainArrays = false;
++
++  // this is hard coded for now but will change when data generation gets more mature
++  std::string DomainVarName = "cell_owner";
++  std::string DomainDimension = "domains";
++  std::string PerformanceDataFile = "timer.atmo.";
++
++  int MaximumNVertLevels = 0;
++  int NumberOfCells = 0;
++  int NumberOfPoints = 0;
++  int NumberOfDomains = 0;
++  int PointsPerCell = 0;
++  bool ReconstructNew = false;
++  bool WrapOn = false;
+ 
+   std::vector<double> CLon;
+   std::vector<double> CLat;
+-  double* DepthVar;
++  std::vector<double> DepthVar;
+   std::vector<double> PointX;
+   std::vector<double> PointY;
+   std::vector<double> PointZ;
+   std::vector<int> OrigConnections;
+   std::vector<int> ModConnections;
+   std::vector<bool> CellMask;
+-  double* DomainCellVar;
+-  int MaximumCells;
+-  int MaximumPoints;
++  std::vector<double> DomainCellVar;
++  int MaximumCells = 0;
++  int MaximumPoints = 0;
+   std::vector<int> VertexIds;
+ 
+-  int NumberOfCellVars;
+-  int NumberOfPointVars;
+-  int NumberOfDomainVars;
+-  bool GridReconstructed;
++  int NumberOfCellVars = 0;
++  int NumberOfPointVars = 0;
++  int NumberOfDomainVars = 0;
++  bool GridReconstructed = false;
+ 
+-  int GridID;
+-  int ZAxisID;
++  int GridID = -1;
++  int ZAxisID = -1;
+   std::unordered_set<int> SurfIDs;
+ 
+-  std::string TimeUnits;
+-  std::string Calendar;
+-  vtkSmartPointer<vtkDoubleArray> ClonArray;
+-  vtkSmartPointer<vtkDoubleArray> ClatArray;
++  std::string TimeUnits = "";
++  std::string Calendar = "";
++  vtkNew<vtkDoubleArray> ClonArray;
++  vtkNew<vtkDoubleArray> ClatArray;
+   vtkNew<vtkUnstructuredGrid> Output;
+ 
+ private:
+diff --git a/Plugins/CDIReader/Testing/CDIDimensionsTest.xml b/Plugins/CDIReader/Testing/CDIDimensionsTest.xml
+new file mode 100644
+index 0000000000..4b71e0824b
+--- /dev/null
++++ b/Plugins/CDIReader/Testing/CDIDimensionsTest.xml
+@@ -0,0 +1,25 @@
++<?xml version="1.0" ?>
++<pqevents>
++  <pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" />
++  <pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/NetCDF/edges.nc" />
++  <pqevent object="pqClientMainWindow/pqSelectReaderDialog/okButton" command="activate" arguments="" />
++  <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/Show3DSurface/CheckBox" command="set_boolean" arguments="true" />
++  <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
++  <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="activated" arguments="p_ice_Tsurf" />
++  <pqevent object="pqClientMainWindow/cameraToolbar/actionIsometricView" command="activate" arguments="" />
++  <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionTest_0.png" width="300" height="300" />
++
++  <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
++  <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/Dimensions/ComboBox" command="activated" arguments="(clon, clat, depth_2)" />
++  <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
++  <pqevent object="pqClientMainWindow/cameraToolbar/actionIsometricView" command="activate" arguments="" />
++  <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionTest_1.png" width="300" height="300" />
++
++  <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/Dimensions/ComboBox" command="activated" arguments="(elon, elat, depth)" />
++  <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
++  <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="activated" arguments="VN" />
++  <pqevent object="pqClientMainWindow/cameraToolbar/actionIsometricView" command="activate" arguments="" />
++  <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
++</pqevents>
+diff --git a/Plugins/CDIReader/Testing/CMakeLists.txt b/Plugins/CDIReader/Testing/CMakeLists.txt
+index 1862dff5b2..7e3628e39d 100644
+--- a/Plugins/CDIReader/Testing/CMakeLists.txt
++++ b/Plugins/CDIReader/Testing/CMakeLists.txt
+@@ -10,11 +10,13 @@ ExternalData_Expand_Arguments(ParaViewData _
+   "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/NetCDF/fesom.nc}"
+   "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDISimpleRead.png,:}"
+   "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIUseMask.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIDimensionsTest.png,:}"
+ )
+ 
+ set (xml_tests
+   CDISimpleRead.xml
+   CDIUseMask.xml
++  CDIDimensionsTest.xml
+   )
+ 
+ paraview_add_client_tests(
+-- 
+GitLab
+
+
+From b3d4bc3426d112567a0072cb8cffa7cf8b2aa42f Mon Sep 17 00:00:00 2001
+From: Mathieu Westphal <mathieu.westphal@kitware.com>
+Date: Wed, 23 Nov 2022 13:55:04 +0100
+Subject: [PATCH 5/5] Adding testing data
+
+Add/fix baselines for testing in CDIReader plugin
+
+Fix tests
+---
+ Plugins/CDIReader/Testing/CDIDimensionsTest.xml |  4 ++--
+ Plugins/CDIReader/Testing/CDISimpleRead.xml     | 10 +++++-----
+ Plugins/CDIReader/Testing/CDIUseMask.xml        | 12 ++++++------
+ Plugins/CDIReader/Testing/CMakeLists.txt        | 17 ++++++++++++++---
+ .../Data/Baseline/CDIDimensionsTest.png.sha512  |  1 +
+ .../Baseline/CDIDimensionsTest_A.png.sha512     |  1 +
+ .../Baseline/CDIDimensionsTest_B.png.sha512     |  1 +
+ ..._0.png.sha512 => CDISimpleRead_A.png.sha512} |  0
+ ..._1.png.sha512 => CDISimpleRead_B.png.sha512} |  0
+ ..._2.png.sha512 => CDISimpleRead_C.png.sha512} |  0
+ ..._3.png.sha512 => CDISimpleRead_D.png.sha512} |  0
+ ..._4.png.sha512 => CDISimpleRead_E.png.sha512} |  0
+ ...ask_0.png.sha512 => CDIUseMask_A.png.sha512} |  0
+ ...ask_1.png.sha512 => CDIUseMask_B.png.sha512} |  0
+ ...ask_2.png.sha512 => CDIUseMask_C.png.sha512} |  0
+ ...ask_3.png.sha512 => CDIUseMask_D.png.sha512} |  0
+ ...ask_4.png.sha512 => CDIUseMask_E.png.sha512} |  0
+ ...ask_5.png.sha512 => CDIUseMask_F.png.sha512} |  0
+ .../Testing/Data/NetCDF/edges.nc.sha512         |  1 +
+ 19 files changed, 31 insertions(+), 16 deletions(-)
+ create mode 100644 Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest.png.sha512
+ create mode 100644 Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_A.png.sha512
+ create mode 100644 Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_B.png.sha512
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDISimpleRead_0.png.sha512 => CDISimpleRead_A.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDISimpleRead_1.png.sha512 => CDISimpleRead_B.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDISimpleRead_2.png.sha512 => CDISimpleRead_C.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDISimpleRead_3.png.sha512 => CDISimpleRead_D.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDISimpleRead_4.png.sha512 => CDISimpleRead_E.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDIUseMask_0.png.sha512 => CDIUseMask_A.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDIUseMask_1.png.sha512 => CDIUseMask_B.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDIUseMask_2.png.sha512 => CDIUseMask_C.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDIUseMask_3.png.sha512 => CDIUseMask_D.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDIUseMask_4.png.sha512 => CDIUseMask_E.png.sha512} (100%)
+ rename Plugins/CDIReader/Testing/Data/Baseline/{CDIUseMask_5.png.sha512 => CDIUseMask_F.png.sha512} (100%)
+ create mode 100644 Plugins/CDIReader/Testing/Data/NetCDF/edges.nc.sha512
+
+diff --git a/Plugins/CDIReader/Testing/CDIDimensionsTest.xml b/Plugins/CDIReader/Testing/CDIDimensionsTest.xml
+index 4b71e0824b..bdcb113c46 100644
+--- a/Plugins/CDIReader/Testing/CDIDimensionsTest.xml
++++ b/Plugins/CDIReader/Testing/CDIDimensionsTest.xml
+@@ -8,14 +8,14 @@
+   <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="activated" arguments="p_ice_Tsurf" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionIsometricView" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionTest_0.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_A.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/Dimensions/ComboBox" command="activated" arguments="(clon, clat, depth_2)" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionIsometricView" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionTest_1.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_B.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/Dimensions/ComboBox" command="activated" arguments="(elon, elat, depth)" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+diff --git a/Plugins/CDIReader/Testing/CDISimpleRead.xml b/Plugins/CDIReader/Testing/CDISimpleRead.xml
+index 3f787a306b..564721e3f5 100644
+--- a/Plugins/CDIReader/Testing/CDISimpleRead.xml
++++ b/Plugins/CDIReader/Testing/CDISimpleRead.xml
+@@ -16,27 +16,27 @@
+   <pqevent object="pqClientMainWindow/variableToolbar/actionScalarBarVisibility" command="set_boolean" arguments="false" />
+ 
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_0.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_A.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Spherical Projection" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_1.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_B.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Cassini Projection" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_2.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_C.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Mollweide Projection" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_3.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_D.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Catalyst (no scaling)" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_4.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_E.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Spilhouse Projection" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+diff --git a/Plugins/CDIReader/Testing/CDIUseMask.xml b/Plugins/CDIReader/Testing/CDIUseMask.xml
+index f140573c29..b39e4929da 100644
+--- a/Plugins/CDIReader/Testing/CDIUseMask.xml
++++ b/Plugins/CDIReader/Testing/CDIUseMask.xml
+@@ -11,31 +11,31 @@
+   <pqevent object="pqClientMainWindow/variableToolbar/displayColor/Variables" command="activated" arguments="thetao" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionNegativeY" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-    <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_0.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_A.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Spherical Projection" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_1.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_B.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Cassini Projection" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_2.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_C.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Mollweide Projection" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_3.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_D.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Catalyst (no scaling)" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_4.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_E.png" width="300" height="300" />
+ 
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/PropertiesFrame/ProxyPanel/SetProjection/ComboBox" command="activated" arguments="Spilhouse Projection" />
+   <pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
+   <pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
+-  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_5.png" width="300" height="300" />
++  <pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Container/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_F.png" width="300" height="300" />
+ 
+ </pqevents>
+diff --git a/Plugins/CDIReader/Testing/CMakeLists.txt b/Plugins/CDIReader/Testing/CMakeLists.txt
+index 7e3628e39d..e31c515f2b 100644
+--- a/Plugins/CDIReader/Testing/CMakeLists.txt
++++ b/Plugins/CDIReader/Testing/CMakeLists.txt
+@@ -6,11 +6,22 @@ endif()
+ 
+ set(_paraview_add_tests_default_test_data_target ParaViewData)
+ ExternalData_Expand_Arguments(ParaViewData _
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/NetCDF/edges.nc}"
+   "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/NetCDF/ts.nc}"
+   "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/NetCDF/fesom.nc}"
+-  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDISimpleRead.png,:}"
+-  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIUseMask.png,:}"
+-  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIDimensionsTest.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDISimpleRead_A.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDISimpleRead_B.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDISimpleRead_C.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDISimpleRead_D.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDISimpleRead_E.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIUseMask_A.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIUseMask_B.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIUseMask_C.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIUseMask_D.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIUseMask_E.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIUseMask_F.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIDimensionsTest_A.png,:}"
++  "DATA{${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline/CDIDimensionsTest_B.png,:}"
+ )
+ 
+ set (xml_tests
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest.png.sha512
+new file mode 100644
+index 0000000000..9b8b47efa6
+--- /dev/null
++++ b/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest.png.sha512
+@@ -0,0 +1 @@
++11c6513595364e3e3dec4e21f4711745deb4cccf8a0f6d3cf6343a4241cf8bbbbdd21e3390b7313e499fd3669f828548e3e88b0f262cb188735809efbd076e06
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_A.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_A.png.sha512
+new file mode 100644
+index 0000000000..2b763c05e8
+--- /dev/null
++++ b/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_A.png.sha512
+@@ -0,0 +1 @@
++2b8c39ffbb41b22699a3ec4e84c29ee9dc701171dc31367919b027559c1785a73c772351e0a6fca60781f1aad45c41f0cb3be8f9f165c06c9b9c9ac2ead7877c
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_B.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_B.png.sha512
+new file mode 100644
+index 0000000000..55a1a41256
+--- /dev/null
++++ b/Plugins/CDIReader/Testing/Data/Baseline/CDIDimensionsTest_B.png.sha512
+@@ -0,0 +1 @@
++a82a7f285150826a49c95253cd7b4ddbe83f138673b7979e00f3e7a137c8f6860a1847e7f5337722ef48cdf94c05654fa1d35b626b82edaf0d7f221d1f515324
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_0.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_A.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_0.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_A.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_1.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_B.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_1.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_B.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_2.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_C.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_2.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_C.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_3.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_D.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_3.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_D.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_4.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_E.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_4.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDISimpleRead_E.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_0.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_A.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_0.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_A.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_1.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_B.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_1.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_B.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_2.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_C.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_2.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_C.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_3.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_D.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_3.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_D.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_4.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_E.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_4.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_E.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_5.png.sha512 b/Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_F.png.sha512
+similarity index 100%
+rename from Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_5.png.sha512
+rename to Plugins/CDIReader/Testing/Data/Baseline/CDIUseMask_F.png.sha512
+diff --git a/Plugins/CDIReader/Testing/Data/NetCDF/edges.nc.sha512 b/Plugins/CDIReader/Testing/Data/NetCDF/edges.nc.sha512
+new file mode 100644
+index 0000000000..4b3e624b62
+--- /dev/null
++++ b/Plugins/CDIReader/Testing/Data/NetCDF/edges.nc.sha512
+@@ -0,0 +1 @@
++eb097c55f8df99e7f0be7b387de6c8970ba8255b6c633d3f2c4247ad5a8fe67238db8a98ff6322d4c03133a7c424832f1873f3e219734cdff517e731f60b60b6
+-- 
+GitLab
+
diff --git a/Golden_Repo/p/ParaView/parflowreader_fix-nlohmann_merge6050.patch b/Golden_Repo/p/ParaView/parflowreader_fix-nlohmann_merge6050.patch
new file mode 100644
index 0000000000000000000000000000000000000000..05b0a99a23f1b7cc4c1ebfcac1477f722d5a92af
--- /dev/null
+++ b/Golden_Repo/p/ParaView/parflowreader_fix-nlohmann_merge6050.patch
@@ -0,0 +1,160 @@
+From 1a32dd6fc394a75b6898b1d692157826ed235015 Mon Sep 17 00:00:00 2001
+From: David Thompson <david.thompson@kitware.com>
+Date: Sat, 3 Dec 2022 01:08:56 -0500
+Subject: [PATCH 1/2] Make the ParFlow Plugin work with modern nlohmann::json.
+
+The previous version worked with nlohmann::json v3.6.1 but
+is broken using v3.11.2. Rather than attempt to throw internal
+nlohmann::json exception types, throw standard C++ exceptions
+for our errors.
+---
+ Plugins/ParFlow/IO/vtkVectorJSON.h | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/Plugins/ParFlow/IO/vtkVectorJSON.h b/Plugins/ParFlow/IO/vtkVectorJSON.h
+index 8e4d23c7e4..fb7fb5ecdb 100644
+--- a/Plugins/ParFlow/IO/vtkVectorJSON.h
++++ b/Plugins/ParFlow/IO/vtkVectorJSON.h
+@@ -6,6 +6,8 @@
+ 
+ #include "nlohmann/json.hpp" // for json
+ 
++#include <stdexcept>
++
+ /// Convert a vtkVector (or any vtkTuple) into a json::array.
+ template <typename T, int S>
+ void to_json(nlohmann::json& j, const vtkTuple<T, S>& vec)
+@@ -19,12 +21,11 @@ void from_json(const nlohmann::json& j, vtkTuple<T, S>& vec)
+ {
+   if (!j.is_array())
+   {
+-    throw nlohmann::detail::type_error::create(
+-      302, "type must be array, but is " + std::string(j.type_name()));
++    throw std::invalid_argument("type must be array, but is " + std::string(j.type_name()));
+   }
+   if (static_cast<int>(j.size()) != vec.GetSize())
+   {
+-    throw nlohmann::detail::type_error::create(302, "array sizes do not match");
++    throw std::invalid_argument("array sizes do not match");
+   }
+   int ii = 0;
+   for (auto it = j.begin(); it != j.end(); ++it, ++ii)
+-- 
+GitLab
+
+
+From e7a0cb1c336fae38c41987e20ee2834eca034ae9 Mon Sep 17 00:00:00 2001
+From: David Thompson <david.thompson@kitware.com>
+Date: Sat, 3 Dec 2022 01:28:27 -0500
+Subject: [PATCH 2/2] Switch the ParFlow plugin to VTK's nlohmann::json.
+
+Using this version allows us to enable the plugin by
+default since it doesn't add any external dependencies.
+---
+ CMakeLists.txt                              | 2 +-
+ Plugins/ParFlow/IO/CMakeLists.txt           | 7 -------
+ Plugins/ParFlow/IO/vtk.module               | 1 +
+ Plugins/ParFlow/IO/vtkParFlowMetaReader.cxx | 7 ++++++-
+ Plugins/ParFlow/IO/vtkParFlowMetaReader.h   | 5 +++++
+ Plugins/ParFlow/IO/vtkVectorJSON.h          | 5 +++++
+ 6 files changed, 18 insertions(+), 9 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2674a59e83..e28ee1a594 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -312,7 +312,7 @@ set(paraview_default_plugins
+   PacMan
+   PanoramicProjectionView
+   ParametricSurfaces
+-  # ParFlow - Because of dependency to nlohmann_json
++  ParFlow
+   SaveStateAndScreenshot
+   SLACTools
+   StreamLinesRepresentation
+diff --git a/Plugins/ParFlow/IO/CMakeLists.txt b/Plugins/ParFlow/IO/CMakeLists.txt
+index ddafa4e6ab..733fd6cfc4 100644
+--- a/Plugins/ParFlow/IO/CMakeLists.txt
++++ b/Plugins/ParFlow/IO/CMakeLists.txt
+@@ -7,17 +7,10 @@ set(private_headers
+   vtkVectorJSON.h
+ )
+ 
+-vtk_module_find_package(
+-  PACKAGE nlohmann_json)
+-
+ vtk_module_add_module(ParFlow::IO
+   CLASSES ${classes}
+   PRIVATE_HEADERS ${private_headers}
+ )
+-vtk_module_link(ParFlow::IO
+-  PUBLIC nlohmann_json::nlohmann_json
+-)
+-
+ paraview_add_server_manager_xmls(
+   XMLS  ParFlowIO.xml
+ )
+diff --git a/Plugins/ParFlow/IO/vtk.module b/Plugins/ParFlow/IO/vtk.module
+index ea43242296..2caca0ba91 100644
+--- a/Plugins/ParFlow/IO/vtk.module
++++ b/Plugins/ParFlow/IO/vtk.module
+@@ -8,3 +8,4 @@ DEPENDS
+   VTK::CommonDataModel
+   VTK::CommonExecutionModel
+   VTK::ParallelCore
++  VTK::nlohmannjson
+diff --git a/Plugins/ParFlow/IO/vtkParFlowMetaReader.cxx b/Plugins/ParFlow/IO/vtkParFlowMetaReader.cxx
+index ba33a5eb77..06805bdf7d 100644
+--- a/Plugins/ParFlow/IO/vtkParFlowMetaReader.cxx
++++ b/Plugins/ParFlow/IO/vtkParFlowMetaReader.cxx
+@@ -25,7 +25,12 @@
+ #include "vtksys/FStream.hxx"
+ #include "vtksys/SystemTools.hxx"
+ 
+-#include "nlohmann/json.hpp"
++#if 0
++#include "nlohmann/json.hpp" // for json bits
++#else
++#include "vtk_nlohmannjson.h"        // Use VTK's mangled version
++#include VTK_NLOHMANN_JSON(json.hpp) // Use VTK's mangled version
++#endif
+ 
+ #include <algorithm>
+ #include <cmath>
+diff --git a/Plugins/ParFlow/IO/vtkParFlowMetaReader.h b/Plugins/ParFlow/IO/vtkParFlowMetaReader.h
+index 3fc07ca58c..ace47939ee 100644
+--- a/Plugins/ParFlow/IO/vtkParFlowMetaReader.h
++++ b/Plugins/ParFlow/IO/vtkParFlowMetaReader.h
+@@ -8,7 +8,12 @@
+ #include "vtkSmartPointer.h" // for ivars
+ #include "vtkVector.h"       // for vtkVector*
+ 
++#if 0
+ #include "nlohmann/json.hpp" // for json bits
++#else
++#include "vtk_nlohmannjson.h"        // Use VTK's mangled version
++#include VTK_NLOHMANN_JSON(json.hpp) // Use VTK's mangled version
++#endif
+ 
+ #include <map>    // for std::map
+ #include <set>    // for std::set
+diff --git a/Plugins/ParFlow/IO/vtkVectorJSON.h b/Plugins/ParFlow/IO/vtkVectorJSON.h
+index fb7fb5ecdb..57b39e94a1 100644
+--- a/Plugins/ParFlow/IO/vtkVectorJSON.h
++++ b/Plugins/ParFlow/IO/vtkVectorJSON.h
+@@ -4,7 +4,12 @@
+ 
+ #include "vtkVector.h"
+ 
++#if 0
+ #include "nlohmann/json.hpp" // for json
++#else
++#include "vtk_nlohmannjson.h"        // Use VTK's mangled version
++#include VTK_NLOHMANN_JSON(json.hpp) // Use VTK's mangled version
++#endif
+ 
+ #include <stdexcept>
+ 
+-- 
+GitLab
+
diff --git a/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-foss-2022a-EGL.eb b/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-foss-2022a-EGL.eb
new file mode 100644
index 0000000000000000000000000000000000000000..b2cfe635ec66e7a3471162c6e2dd5250a6393fc8
--- /dev/null
+++ b/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-foss-2022a-EGL.eb
@@ -0,0 +1,34 @@
+easyblock = 'CMakeMake'
+
+name = 'ParaViewPlugin-Nek5000'
+version = '20230208'
+versionsuffix = '-EGL'
+
+homepage = "http://www.paraview.org"
+description = "Plugin for ParaView. Paraview is a scientific parallel visualizer."
+
+toolchain = {'name': 'foss', 'version': '2022a'}
+toolchainopts = {'pic': True}
+
+source_urls = ['https://github.com/jfavre/ParaViewNek5000Plugin/archive/']
+sources = ['bade61018d40d5ad83c1b64f3babaed2bdbe1986.tar.gz']
+checksums = ['c5ad5471299cce305adacfa2748026354628d2cc6b5321a48214a0461f2597ff']
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+]
+
+dependencies = [
+    ('ParaView', '5.11.0', '-EGL'),
+]
+
+separate_build_dir = True
+
+modextrapaths = {'PV_PLUGIN_PATH': './lib/paraview-5.11/plugins/pvNek5000Reader/'}
+
+sanity_check_paths = {
+    'files': ['include/vtkNek5000Reader.h', 'lib/paraview-5.11/plugins/pvNek5000Reader/libNek5000Reader.so'],
+    'dirs': ['include', 'lib', 'lib/paraview-5.11/plugins/pvNek5000Reader']
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-foss-2022a.eb b/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-foss-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..a4f75618a95e8ffb5470afa138ba660ec48e7356
--- /dev/null
+++ b/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-foss-2022a.eb
@@ -0,0 +1,33 @@
+easyblock = 'CMakeMake'
+
+name = 'ParaViewPlugin-Nek5000'
+version = '20230208'
+
+homepage = "http://www.paraview.org"
+description = "Plugin for ParaView. Paraview is a scientific parallel visualizer."
+
+toolchain = {'name': 'foss', 'version': '2022a'}
+toolchainopts = {'pic': True}
+
+source_urls = ['https://github.com/jfavre/ParaViewNek5000Plugin/archive/']
+sources = ['bade61018d40d5ad83c1b64f3babaed2bdbe1986.tar.gz']
+checksums = ['c5ad5471299cce305adacfa2748026354628d2cc6b5321a48214a0461f2597ff']
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+]
+
+dependencies = [
+    ('ParaView', '5.11.0'),
+]
+
+separate_build_dir = True
+
+modextrapaths = {'PV_PLUGIN_PATH': './lib/paraview-5.11/plugins/pvNek5000Reader/'}
+
+sanity_check_paths = {
+    'files': ['include/vtkNek5000Reader.h', 'lib/paraview-5.11/plugins/pvNek5000Reader/libNek5000Reader.so'],
+    'dirs': ['include', 'lib', 'lib/paraview-5.11/plugins/pvNek5000Reader']
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-gpsmkl-2022a-EGL.eb b/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-gpsmkl-2022a-EGL.eb
new file mode 100644
index 0000000000000000000000000000000000000000..fd4b649192f3c574d77ec61716d40486b2567aea
--- /dev/null
+++ b/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-gpsmkl-2022a-EGL.eb
@@ -0,0 +1,34 @@
+easyblock = 'CMakeMake'
+
+name = 'ParaViewPlugin-Nek5000'
+version = '20230208'
+versionsuffix = '-EGL'
+
+homepage = "http://www.paraview.org"
+description = "Plugin for ParaView. Paraview is a scientific parallel visualizer."
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'pic': True}
+
+source_urls = ['https://github.com/jfavre/ParaViewNek5000Plugin/archive/']
+sources = ['bade61018d40d5ad83c1b64f3babaed2bdbe1986.tar.gz']
+checksums = ['c5ad5471299cce305adacfa2748026354628d2cc6b5321a48214a0461f2597ff']
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+]
+
+dependencies = [
+    ('ParaView', '5.11.0', '-EGL'),
+]
+
+separate_build_dir = True
+
+modextrapaths = {'PV_PLUGIN_PATH': './lib/paraview-5.11/plugins/pvNek5000Reader/'}
+
+sanity_check_paths = {
+    'files': ['include/vtkNek5000Reader.h', 'lib/paraview-5.11/plugins/pvNek5000Reader/libNek5000Reader.so'],
+    'dirs': ['include', 'lib', 'lib/paraview-5.11/plugins/pvNek5000Reader']
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-gpsmkl-2022a.eb b/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-gpsmkl-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..75d2cbfecb39fb8fea46a5a1daba62a00a1d3235
--- /dev/null
+++ b/Golden_Repo/p/ParaViewPlugin-Nek5000/ParaViewPlugin-Nek5000-20230208-gpsmkl-2022a.eb
@@ -0,0 +1,33 @@
+easyblock = 'CMakeMake'
+
+name = 'ParaViewPlugin-Nek5000'
+version = '20230208'
+
+homepage = "http://www.paraview.org"
+description = "Plugin for ParaView. Paraview is a scientific parallel visualizer."
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'pic': True}
+
+source_urls = ['https://github.com/jfavre/ParaViewNek5000Plugin/archive/']
+sources = ['bade61018d40d5ad83c1b64f3babaed2bdbe1986.tar.gz']
+checksums = ['c5ad5471299cce305adacfa2748026354628d2cc6b5321a48214a0461f2597ff']
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+]
+
+dependencies = [
+    ('ParaView', '5.11.0'),
+]
+
+separate_build_dir = True
+
+modextrapaths = {'PV_PLUGIN_PATH': './lib/paraview-5.11/plugins/pvNek5000Reader/'}
+
+sanity_check_paths = {
+    'files': ['include/vtkNek5000Reader.h', 'lib/paraview-5.11/plugins/pvNek5000Reader/libNek5000Reader.so'],
+    'dirs': ['include', 'lib', 'lib/paraview-5.11/plugins/pvNek5000Reader']
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/p/PySCF/PySCF-2.1.1-GCC-11.2.0.eb b/Golden_Repo/p/PySCF/PySCF-2.1.1-GCC-11.3.0.eb
similarity index 100%
rename from Golden_Repo/p/PySCF/PySCF-2.1.1-GCC-11.2.0.eb
rename to Golden_Repo/p/PySCF/PySCF-2.1.1-GCC-11.3.0.eb
diff --git a/Golden_Repo/p/psmpi/psmpi-5.8.0-1-GCC-11.3.0.eb b/Golden_Repo/p/psmpi/psmpi-5.8.0-1-GCC-11.3.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..79dbaeab0a1d58d2396480a8235c2deb750cdb49
--- /dev/null
+++ b/Golden_Repo/p/psmpi/psmpi-5.8.0-1-GCC-11.3.0.eb
@@ -0,0 +1,42 @@
+name = 'psmpi'
+version = '5.8.0-1'
+
+homepage = 'https://github.com/ParaStation/psmpi2'
+description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
+based on MPICH v3. It provides extra low level communication libraries and integration with
+various batch systems for tighter process control.
+"""
+
+toolchain = {'name': 'GCC', 'version': '11.3.0'}
+
+sources = [SOURCE_TAR_GZ]
+source_urls = ['https://gitlab.jsc.fz-juelich.de/ParTec/psmpi/uploads/762714c8eec01fe59239a52798a70e1c/']
+checksums = [
+    # psmpi-5.8.0-1.tar.gz
+    'bcebb42f68e062d4cf957c1ec12a8e2e50051265d38715854bafc34855ed3029',
+    # psmpi-5.5.0-1_ime.patch
+    'c2418b9511560dca197242508de9c7b6b117122912b6d3a4aa18398834f465ff',
+]
+
+dependencies = [
+    ('pscom', '5.6-default'),
+    # needed due to the inclusion of hwloc
+    ('libxml2', '2.9.13'),
+    # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed
+    ('CUDA', '11.7', '', SYSTEM)
+]
+
+patches = [
+    'psmpi-5.5.0-1_ime.patch'
+]
+
+mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio'
+
+preconfigopts = 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && '
+preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && '
+
+threaded = False
+
+cuda = True
+
+moduleclass = 'mpi'
diff --git a/Golden_Repo/p/psmpi/psmpi-5.8.0-1-NVHPC-22.11.eb b/Golden_Repo/p/psmpi/psmpi-5.8.0-1-NVHPC-22.11.eb
new file mode 100644
index 0000000000000000000000000000000000000000..7b3584281e90504462332b299909a7ee2ebc2c49
--- /dev/null
+++ b/Golden_Repo/p/psmpi/psmpi-5.8.0-1-NVHPC-22.11.eb
@@ -0,0 +1,42 @@
+name = 'psmpi'
+version = '5.8.0-1'
+
+homepage = 'https://github.com/ParaStation/psmpi2'
+description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
+based on MPICH v3. It provides extra low level communication libraries and integration with
+various batch systems for tighter process control.
+"""
+
+toolchain = {'name': 'NVHPC', 'version': '22.11'}
+
+sources = [SOURCE_TAR_GZ]
+source_urls = ['https://gitlab.jsc.fz-juelich.de/ParTec/psmpi/uploads/762714c8eec01fe59239a52798a70e1c/']
+checksums = [
+    # psmpi-5.8.0-1.tar.gz
+    'bcebb42f68e062d4cf957c1ec12a8e2e50051265d38715854bafc34855ed3029',
+    # psmpi-5.5.0-1_ime.patch
+    'c2418b9511560dca197242508de9c7b6b117122912b6d3a4aa18398834f465ff',
+]
+
+dependencies = [
+    ('pscom', '5.6-default'),
+    # needed due to the inclusion of hwloc
+    ('libxml2', '2.9.13'),
+    # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed
+    ('CUDA', '11.7', '', SYSTEM)
+]
+
+patches = [
+    'psmpi-5.5.0-1_ime.patch'
+]
+
+mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio'
+
+preconfigopts = 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && '
+preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && '
+
+threaded = False
+
+cuda = True
+
+moduleclass = 'mpi'
diff --git a/Golden_Repo/p/psmpi/psmpi-5.8.0-1-intel-compilers-2022.1.0.eb b/Golden_Repo/p/psmpi/psmpi-5.8.0-1-intel-compilers-2022.1.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..b2aa8e9048ed8c6cf5e11dfc594df2879418fc18
--- /dev/null
+++ b/Golden_Repo/p/psmpi/psmpi-5.8.0-1-intel-compilers-2022.1.0.eb
@@ -0,0 +1,42 @@
+name = 'psmpi'
+version = '5.8.0-1'
+
+homepage = 'https://github.com/ParaStation/psmpi2'
+description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
+based on MPICH v3. It provides extra low level communication libraries and integration with
+various batch systems for tighter process control.
+"""
+
+toolchain = {'name': 'intel-compilers', 'version': '2022.1.0'}
+
+sources = [SOURCE_TAR_GZ]
+source_urls = ['https://gitlab.jsc.fz-juelich.de/ParTec/psmpi/uploads/762714c8eec01fe59239a52798a70e1c/']
+checksums = [
+    # psmpi-5.8.0-1.tar.gz
+    'bcebb42f68e062d4cf957c1ec12a8e2e50051265d38715854bafc34855ed3029',
+    # psmpi-5.5.0-1_ime.patch
+    'c2418b9511560dca197242508de9c7b6b117122912b6d3a4aa18398834f465ff',
+]
+
+dependencies = [
+    ('pscom', '5.6-default'),
+    # needed due to the inclusion of hwloc
+    ('libxml2', '2.9.13'),
+    # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed
+    ('CUDA', '11.7', '', SYSTEM)
+]
+
+patches = [
+    'psmpi-5.5.0-1_ime.patch'
+]
+
+mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio'
+
+preconfigopts = 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && '
+preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && '
+
+threaded = False
+
+cuda = True
+
+moduleclass = 'mpi'
diff --git a/Golden_Repo/q/Qiskit-juqcs/Qiskit-juqcs-0.5.0-gpsmkl-2022a.eb b/Golden_Repo/q/Qiskit-juqcs/Qiskit-juqcs-0.5.0-gpsmkl-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..7f567c04e8b5b1e73f4ab1872ec6f2cc4f61e9d4
--- /dev/null
+++ b/Golden_Repo/q/Qiskit-juqcs/Qiskit-juqcs-0.5.0-gpsmkl-2022a.eb
@@ -0,0 +1,39 @@
+easyblock = 'PythonBundle'
+
+name = 'Qiskit-juqcs'
+version = '0.5.0'
+
+homepage = 'https://jugit.fz-juelich.de/qip/juniq-platform/qiskit-juqcs/'
+description = """Qiskit provider for JUQCS (Juelich Universal Quantum Computer Simulator)."""
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'pic': True}
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('Qiskit', '0.41.0'),
+]
+
+exts_default_options = {
+    'source_urls': [PYPI_SOURCE],
+    'use_pip': True,
+    'sanity_pip_check': True,
+    'download_dep_fail': True,
+    'use_pip_for_deps': False,
+}
+
+exts_list = [
+    ('PyJWT', '2.6.0', {
+        'modulename': 'jwt',
+        'checksums': ['69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd'],
+    }),
+    ('pyunicore', '0.14.1', {
+        'checksums': ['7efd4784d55ef02c4da4431232b54505814666577165c0f320c922ed2b32af01'],
+    }),
+    ('qiskit-juqcs', version, {
+        'modulename': False,
+        'checksums': ['6d8800986d5924e2e07635a315d15bfbc48297649604c83a4ec282ea7d6ba737'],
+    }),
+]
+
+moduleclass = 'quantum'
diff --git a/Golden_Repo/q/Qiskit/Qiskit-0.41.0-gpsmkl-2022a.eb b/Golden_Repo/q/Qiskit/Qiskit-0.41.0-gpsmkl-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..d594c9ef997065e3874f5c576612915ed3caa93f
--- /dev/null
+++ b/Golden_Repo/q/Qiskit/Qiskit-0.41.0-gpsmkl-2022a.eb
@@ -0,0 +1,153 @@
+easyblock = 'PythonBundle'
+
+name = 'Qiskit'
+version = '0.41.0'
+
+homepage = 'https://qiskit.org'
+description = """Qiskit is an open-source framework for working with noisy quantum computers
+ at the level of pulses, circuits, and algorithms."""
+
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.38'),
+    ('CMake', '3.23.1'),
+    ('Ninja', '1.10.2'),
+    ('pkgconf', '1.8.0'),
+    ('pybind11', '2.9.2'),  # for aer
+    ('Rust', '1.60.0'),  # for retworkx
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('SciPy-Stack', '2022a', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('scikit-build', '0.15.0'),  # for aer
+    ('scikit-learn', '1.1.2', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('CVXOPT', '1.3.0'),
+    ('h5py', '3.7.0'),
+    ('PySCF', '2.1.1'),
+    ('SymEngine-python', '0.9.2', '', ('GCC', '11.3.0')),
+    ('numba', '0.56.4', '-CUDA-11.7', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('nlohmann_json', '3.10.5'),  # for qiskit-aer
+    ('spdlog', '1.11.0'),
+    ('muparserx', '4.0.11'),  # for qiskit-aer
+    ('networkx', '2.8.4', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+]
+
+local_common_opts = {
+    'req_py_majver': '3',
+    'req_py_minver': '0'
+}
+
+# qiskit-aer must not use CONAN to install dependencies
+modextravars = {'DISABLE_CONAN': 'YES'}
+
+exts_default_options = {
+    'source_urls': [PYPI_SOURCE],
+    'use_pip': True,
+    # DISABLED: because 'pip check' does not find pyscf (not installed with pip)
+    'sanity_pip_check': True,
+    'download_dep_fail': True,
+    'use_pip_for_deps': False,
+}
+
+exts_list = [
+    ('dill', '0.3.5.1', {
+        'checksums': ['d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86'],
+    }),
+    ('ntlm-auth', '1.5.0', {
+        'checksums': ['c9667d361dc09f6b3750283d503c689070ff7d89f2f6ff0d38088d5436ff8543'],
+    }),
+    ('retworkx', '0.11.0', {
+        'checksums': ['a4c2a5ad3f8402493d41ad20ad91a03777ea214a3636c290272bbfaf36161161'],
+    }),
+    ('stevedore', '4.1.1', {
+        'checksums': ['7f8aeb6e3f90f96832c301bff21a7eb5eefbe894c88c506483d355565d88cc1a'],
+    }),
+    ('rustworkx', '0.12.1', {
+        'checksums': ['13a19a2f64dff086b3bffffb294c4630100ecbc13634b4995d9d36a481ae130e'],
+    }),
+    ('websockets', '10.4', {
+        'checksums': ['eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3'],
+    }),
+    ('websocket-client', '1.3.3', {
+        'checksums': ['d58c5f284d6a9bf8379dab423259fe8f85b70d5fa5d2916d5791a84594b122b1'],
+        'modulename': False,
+    }),
+    ('requests_ntlm', '1.1.0', {
+        'checksums': ['9189c92e8c61ae91402a64b972c4802b2457ce6a799d658256ebf084d5c7eb71'],
+    }),
+    ('fastdtw', '0.3.4', {
+        'checksums': ['2350fa6ec36bcad186eaf81f46eff35181baf04e324f522de8aeb43d0243f64f'],
+    }),
+    ('inflection', '0.5.1', {
+        'checksums': ['1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417'],
+    }),
+    ('beautifulsoup4', '4.11.1', {
+        'checksums': ['ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693'],
+        'modulename': 'bs4',
+    }),
+    ('pytz', '2022.7.1', {
+        'checksums': ['01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0'],
+    }),
+    ('multitasking', '0.0.11', {
+        'checksums': ['4d6bc3cc65f9b2dca72fb5a787850a88dae8f620c2b36ae9b55248e51bcd6026'],
+    }),
+    ('frozendict', '2.3.4', {
+        'checksums': ['15b4b18346259392b0d27598f240e9390fafbff882137a9c48a1e0104fb17f78'],
+    }),
+    ('Nasdaq_Data_Link', '1.0.4', {
+        'source_tmpl': '%(name)s-%(version)s-py2.py3-none-any.whl',
+        'checksums': ['214a620551da1c7521476839fb96f932234d4d78e7ba44310722709ca37b0691'],
+        'modulename': False,
+    }),
+    ('docplex', '2.25.236', {
+        'checksums': ['256914b4c0113a4e1c78f32ea20c7d76dc8efe286fe890270e75cfad50fe510f'],
+    }),
+    ('yfinance', '0.2.9', {
+        'checksums': ['449f9d54ff7868bdbb2d25b628a97d21fdd05e293a0f9975bba7aaa9984d08e6'],
+    }),
+    ('qiskit-nature', '0.5.2', {
+        'modulename': 'qiskit_nature',
+        'checksums': ['1786e1e825c450ae0ae4971246b0ca717bc5285696c3d342313f5cb125ce4202'],
+    }),
+    ('qiskit-optimization', '0.5.0', {
+        'modulename': 'qiskit_optimization',
+        'checksums': ['4804831e590a7159c2bd2be71750cde0c95a3b06e14a4843346e2ebcc7231e01'],
+    }),
+    ('qiskit-finance', '0.3.4', {
+        'modulename': 'qiskit_finance',
+        'checksums': ['b22fc7e0f23837ee659d1dbe974f3d69ec0d291e51486a2ad81dcf17b4ad8a4f'],
+    }),
+    ('qiskit-machine-learning', '0.5.0', {
+        'modulename': 'qiskit_machine_learning',
+        'checksums': ['c332e9d3ea658b2d24b401e5264b239f1093378952a70ba46c73a69a3ce7c727'],
+    }),
+    ('qiskit-terra', '0.23.1', {
+        'modulename': 'qiskit.qobj',
+        'patches': ['qiskit-terra-0.18.3_fix-qiskit-version-env.patch'],
+        'checksums': [
+            {'qiskit-terra-0.23.1.tar.gz': '71dfb4510b2f1fdb7589b412e8304d928534fa2eece66a65b3f841baf5412afb'},
+            {'qiskit-terra-0.18.3_fix-qiskit-version-env.patch':
+             '1296cc650a7d4d2d908a6a5de6b4ce52106748464a54d47744a4648494f4c24e'},
+        ],
+    }),
+    ('qiskit-ignis', '0.7.1', {
+        'modulename': 'qiskit.ignis',
+        'checksums': ['71efb17933717c0b8161a291ebd4f8d4fe8d7dfd1fdc66fa23a0b6d14fd10cf3'],
+    }),
+    ('qiskit-aer', '0.11.2', {
+        'modulename': 'qiskit.providers.aer',
+        'checksums': ['1bc1d3b46f7fc8976084a900cb9a2a80e8b25df6e59a88fd11136f24e1297fc1'],
+    }),
+    ('qiskit-ibmq-provider', '0.20.0', {
+        'modulename': 'qiskit.providers.ibmq',
+        'checksums': ['758938ce13a09f53ada9f4852891d7ca7ba98fddab6b9850417bbcb0efc26c2e'],
+    }),
+    ('qiskit', version, {
+        'checksums': ['fa613d0312061a654b9b69e21374bac2dc04bb6df872b52370975d6dd51d7d81'],
+    }),
+]
+
+moduleclass = 'quantum'
diff --git a/Golden_Repo/v/VMD/VMD-1.9.3_plugins.patch b/Golden_Repo/v/VMD/VMD-1.9.3_plugins.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f4cf63549263fd9462ccfefa556b6508369e9a25
--- /dev/null
+++ b/Golden_Repo/v/VMD/VMD-1.9.3_plugins.patch
@@ -0,0 +1,29 @@
+Fix hard coded compiler, flags and tcl lib version for plugins
+
+Ake Sandgren, 20190823
+--- plugins/Make-arch.orig	2016-10-21 23:34:39.000000000 +0200
++++ plugins/Make-arch	2019-08-23 10:45:51.403545042 +0200
+@@ -337,17 +337,17 @@
+ 	"ARCH = LINUXAMD64" \
+ 	"COPTO = -fPIC -m64 -o " \
+ 	"LOPTO = -fPIC -m64 -lstdc++ -o " \
+-	"CC = gcc" \
+-	"CXX = g++" \
++	"CC = $(CC)" \
++	"CXX = $(CXX)" \
+ 	"DEF = -D" \
+-	"CCFLAGS = -m64 -O2 -fPIC -Wall" \
+-	"CXXFLAGS = -m64 -O2 -fPIC -Wall" \
+-	"TCLLDFLAGS = -ltcl8.5 -ldl" \
++	"CCFLAGS = $(CFLAGS)" \
++	"CXXFLAGS = $(CXXFLAGS)" \
++	"TCLLDFLAGS = $(TCLLDFLAGS)" \
+ 	"NETCDFLDFLAGS = -lnetcdf " \
+ 	"AR = ar" \
+ 	"NM = nm -p" \
+ 	"RANLIB = touch" \
+-	"SHLD = gcc -shared"
++	"SHLD = $(CC) -shared"
+ 
+ LINUXCARMA:
+ 	$(MAKE) dynlibs staticlibs bins \
diff --git a/Golden_Repo/v/VMD/VMD-1.9.3_stride_MAX_AT_IN_RES.patch b/Golden_Repo/v/VMD/VMD-1.9.3_stride_MAX_AT_IN_RES.patch
new file mode 100644
index 0000000000000000000000000000000000000000..9011384eff52af2075f6d7977d0b0de7e5bad400
--- /dev/null
+++ b/Golden_Repo/v/VMD/VMD-1.9.3_stride_MAX_AT_IN_RES.patch
@@ -0,0 +1,15 @@
+Increase number of atoms allowed per residues as per stride README from VMD
+
+Åke Sandgren, 2017-05-02
+diff -ru vmd-1.9.3.orig/lib/stride/stride.h vmd-1.9.3/lib/stride/stride.h
+--- vmd-1.9.3.orig/lib/stride/stride.h	2017-05-02 13:47:26.484463970 +0200
++++ vmd-1.9.3/lib/stride/stride.h	2017-05-02 13:47:43.748279797 +0200
+@@ -40,7 +40,7 @@
+ #define MAX_BOND                  100
+ #define MAX_ASSIGN                500
+ #define MAX_INFO                  1000
+-#define MAX_AT_IN_RES             75
++#define MAX_AT_IN_RES             100
+ #define MAX_AT_IN_HETERORES       200
+ #define MAXRESDNR                 6
+ #define MAXRESACC                 6 
diff --git a/Golden_Repo/v/VMD/VMD-1.9.3_stride_Makefile.patch b/Golden_Repo/v/VMD/VMD-1.9.3_stride_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..036430db8ffe77867d6e4ebf20fc57e422ff95f3
--- /dev/null
+++ b/Golden_Repo/v/VMD/VMD-1.9.3_stride_Makefile.patch
@@ -0,0 +1,37 @@
+Make stride use CC, CFLAGS and LDFLAGS from EB.
+
+Åke Sandgren, 2017-05-02
+diff -ru vmd-1.9.3.orig/lib/stride/Makefile vmd-1.9.3/lib/stride/Makefile
+--- vmd-1.9.3.orig/lib/stride/Makefile	2003-04-08 14:03:14.000000000 +0200
++++ vmd-1.9.3/lib/stride/Makefile	2017-05-02 13:46:01.973365383 +0200
+@@ -1,13 +1,14 @@
+ #FLAGS = -lm -L/usr/pub/lib -lefence -o
+ #CC = cc -O2 -fullwarn -TENV:large_GOT
+ #CC = cc -g -Wall
+-CC = gcc -O2  # at least for SunOS
++#CC = gcc -O2  # at least for SunOS
+ #CC = cc -g
+ 
+ #CC = cc -O2 -fullwarn
+ 
+ #CC = cc -O2
+-FLAGS = -lm  -o
++#FLAGS = -lm  -o
++LIBS = -lm
+ 
+ SOURCE = stride.c splitstr.c rdpdb.c initchn.c geometry.c thr2one.c one2thr.c filename.c tolostr.c strutil.c place_h.c hbenergy.c memory.c helix.c sheet.c rdmap.c phipsi.c command.c molscr.c die.c hydrbond.c mergepat.c fillasn.c escape.c p_jrnl.c p_rem.c p_atom.c p_helix.c p_sheet.c p_turn.c p_ssbond.c p_expdta.c p_model.c p_compnd.c report.c nsc.c area.c ssbond.c chk_res.c chk_atom.c turn.c pdbasn.c dssp.c outseq.c chkchain.c elem.c measure.c asngener.c p_endmdl.c stred.c contact_order.c contact_map.c
+ 
+@@ -15,12 +16,9 @@
+ 
+ BINDIR = .
+ 
+-.c.o: 
+-	$(CC) -c $< -o $@
+-
+ 
+ stride : $(OBJECT)
+-	$(CC) $(OBJECT) $(FLAGS)  $(BINDIR)/stride${ARCH}
++	$(CC) $(LDFLAGS) $(OBJECT) $(LIBS) -o stride
+ 
+ $(OBJECT) : stride.h protot.h
+ 
diff --git a/Golden_Repo/v/VMD/VMD-1.9.3_surf_Makefile.patch b/Golden_Repo/v/VMD/VMD-1.9.3_surf_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..93f430a64a158b7c7ca07cfee06a7e00b5251307
--- /dev/null
+++ b/Golden_Repo/v/VMD/VMD-1.9.3_surf_Makefile.patch
@@ -0,0 +1,112 @@
+Fix surf Makefile.
+Use CC, CFLAGS, etc from EB.
+Drop bad make depend lines.
+
+Åke Sandgren, 2017-05-02
+diff -ru vmd-1.9.3.orig/lib/surf/Makefile vmd-1.9.3/lib/surf/Makefile
+--- vmd-1.9.3.orig/lib/surf/Makefile	1994-03-22 16:44:20.000000000 +0100
++++ vmd-1.9.3/lib/surf/Makefile	2017-05-02 13:41:51.911991381 +0200
+@@ -1,12 +1,7 @@
+ # Compilation flags
+-#CC	    = cc
+-CC	    = cc
+ INCLUDE     = -I. 
+-#LINCLUDE    = -lcurses -ltermcap -lm
+-LINCLUDE    = -lm
+-OPT_CFLAGS  = -O2 $(FLAGS) $(INCLUDE)
+-#CFLAGS	    = -g $(FLAGS) $(INCLUDE)
+-CFLAGS	    = -O2 $(FLAGS) $(INCLUDE)
++LIBS    = -lm
++CFLAGS	    = $(OPT) $(INCLUDE)
+ 
+ # These are the user object files in the application
+ SRCS        = surf.c io.c compute.c dual.c utils.c lp.c chull.c tessel_cases.c \
+@@ -18,7 +13,7 @@
+ 
+ # make objects
+ surf: $(OBJS) Makefile 
+-	$(CC) $(CFLAGS) $(OBJS) -o surf $(LINCLUDE)
++	$(CC) $(LDFLAGS) $(OBJS) -o surf $(LIBS)
+ 
+ lint:
+ 	lint $(INCLUDE) $(SRCS)
+@@ -30,9 +25,6 @@
+ 	tar -cvf surf.tar README *.[hc] Makefile
+ 	compress surf.tar
+ 
+-.c.o: 
+-	$(CC) $(CFLAGS) -c $*.c
+-
+ 
+ # make depend makes the proper include file dependencies.  You _could_ run
+ # it on a sun4, but there's a bug in the SunOS version of sed that causes
+@@ -61,48 +53,3 @@
+ 	@ echo '  ' >> Makefile
+ 
+ # DO NOT DELETE THIS LINE -- make depend depends on it.
+-  
+- 
+-# DO NOT DELETE THIS LINE -- make depend depends on it.
+-
+-surf.o: surf.h /usr/include/stdio.h /usr/include/math.h /usr/include/stdlib.h
+-surf.o: /usr/include/sgidefs.h /usr/include/string.h /usr/include/sys/time.h
+-surf.o: linalg.h
+-io.o: surf.h /usr/include/stdio.h /usr/include/math.h /usr/include/stdlib.h
+-io.o: /usr/include/sgidefs.h /usr/include/string.h /usr/include/sys/time.h
+-io.o: linalg.h
+-compute.o: surf.h /usr/include/stdio.h /usr/include/math.h
+-compute.o: /usr/include/stdlib.h /usr/include/sgidefs.h /usr/include/string.h
+-compute.o: /usr/include/sys/time.h linalg.h chull.h dual.h
+-dual.o: surf.h /usr/include/stdio.h /usr/include/math.h /usr/include/stdlib.h
+-dual.o: /usr/include/sgidefs.h /usr/include/string.h /usr/include/sys/time.h
+-dual.o: linalg.h dual.h chull.h
+-utils.o: surf.h /usr/include/stdio.h /usr/include/math.h
+-utils.o: /usr/include/stdlib.h /usr/include/sgidefs.h /usr/include/string.h
+-utils.o: /usr/include/sys/time.h linalg.h
+-lp.o: surf.h /usr/include/stdio.h /usr/include/math.h /usr/include/stdlib.h
+-lp.o: /usr/include/sgidefs.h /usr/include/string.h /usr/include/sys/time.h
+-lp.o: linalg.h
+-chull.o: surf.h /usr/include/stdio.h /usr/include/math.h
+-chull.o: /usr/include/stdlib.h /usr/include/sgidefs.h /usr/include/string.h
+-chull.o: /usr/include/sys/time.h linalg.h chull.h
+-tessel_cases.o: surf.h /usr/include/stdio.h /usr/include/math.h
+-tessel_cases.o: /usr/include/stdlib.h /usr/include/sgidefs.h
+-tessel_cases.o: /usr/include/string.h /usr/include/sys/time.h linalg.h dual.h
+-tessel_patches.o: surf.h /usr/include/stdio.h /usr/include/math.h
+-tessel_patches.o: /usr/include/stdlib.h /usr/include/sgidefs.h
+-tessel_patches.o: /usr/include/string.h /usr/include/sys/time.h linalg.h
+-tessel_convex.o: surf.h /usr/include/stdio.h /usr/include/math.h
+-tessel_convex.o: /usr/include/stdlib.h /usr/include/sgidefs.h
+-tessel_convex.o: /usr/include/string.h /usr/include/sys/time.h linalg.h
+-tessel_concave.o: surf.h /usr/include/stdio.h /usr/include/math.h
+-tessel_concave.o: /usr/include/stdlib.h /usr/include/sgidefs.h
+-tessel_concave.o: /usr/include/string.h /usr/include/sys/time.h linalg.h
+-tessel_torus.o: surf.h /usr/include/stdio.h /usr/include/math.h
+-tessel_torus.o: /usr/include/stdlib.h /usr/include/sgidefs.h
+-tessel_torus.o: /usr/include/string.h /usr/include/sys/time.h linalg.h
+-  
+-# DEPENDENCIES MUST END AT END OF FILE
+-# IF YOU PUT STUFF HERE IT WILL GO AWAY
+-# see make depend above
+-  
+diff -ru vmd-1.9.3.orig/lib/surf/surf.c vmd-1.9.3/lib/surf/surf.c
+--- vmd-1.9.3.orig/lib/surf/surf.c	1994-03-21 10:33:00.000000000 +0100
++++ vmd-1.9.3/lib/surf/surf.c	2017-05-02 13:41:51.911991381 +0200
+@@ -7,7 +7,7 @@
+ #define	EXTERN	
+ #include "surf.h"
+ 
+-void
++int
+ main(ac,av)
+ int	ac;
+ char*	av[];
+@@ -56,6 +56,8 @@
+    if (Write_Option == 2) output_dataset();
+ 
+    if (Write_Option) end_output_dataset();
++
++   return(0);
+ }
+ 
+ 
diff --git a/Golden_Repo/v/VMD/VMD-1.9.3_surf_bad_printfs.patch b/Golden_Repo/v/VMD/VMD-1.9.3_surf_bad_printfs.patch
new file mode 100644
index 0000000000000000000000000000000000000000..9b9db3889bf08c48fb6a469303e1db1423d2b734
--- /dev/null
+++ b/Golden_Repo/v/VMD/VMD-1.9.3_surf_bad_printfs.patch
@@ -0,0 +1,74 @@
+Fix some bad printfs in surf.
+
+Åke Sandgren, 2017-05-02
+diff -ru vmd-1.9.3.orig/lib/surf/chull.c vmd-1.9.3/lib/surf/chull.c
+--- vmd-1.9.3.orig/lib/surf/chull.c	1994-03-19 06:50:54.000000000 +0100
++++ vmd-1.9.3/lib/surf/chull.c	2017-05-02 13:44:07.046582827 +0200
+@@ -378,7 +378,7 @@
+ print_out( v )
+ struct tvertex *v;
+ {
+-	fprintf( stderr, "\nAdding vertex %6x :\n", v );
++	fprintf( stderr, "\nAdding vertex %6p :\n", v );
+ 	print_verts();
+ 	print_edges();
+ 	print_fs();
+@@ -398,11 +398,11 @@
+ 	temp = vertices;
+ 	fprintf (stderr, "Vertex List\n");
+ 	if (vertices) do {
+-            fprintf(stderr,"  addr %6x\t", vertices );
++            fprintf(stderr,"  addr %6p\t", vertices );
+             fprintf(stderr,"(%g,%g,%g)",vertices->v[X],
+                     vertices->v[Y], vertices->v[Z] );
+             fprintf(stderr,"   active:%3d", vertices->active );
+-            fprintf(stderr,"   duplicate:%5x", vertices->duplicate );
++            fprintf(stderr,"   duplicate:%5p", vertices->duplicate );
+             fprintf(stderr,"   mark:%2d\n", vertices->mark );
+             vertices = vertices->next;
+             } while ( vertices != temp );
+@@ -424,13 +424,13 @@
+ 	temp = edges;
+ 	fprintf (stderr, "Edge List\n");
+ 	if (edges) do {
+-            fprintf( stderr, "  addr: %6x\t", edges );
++            fprintf( stderr, "  addr: %6p\t", edges );
+             fprintf( stderr, "adj: ");
+             for (i=0; i<3; ++i) 
+-                 fprintf( stderr, "%6x", edges->adjface[i] );
++                 fprintf( stderr, "%6p", edges->adjface[i] );
+             fprintf( stderr, "  endpts:");
+             for (i=0; i<2; ++i) 
+-                 fprintf( stderr, "%8x", edges->endpts[i]);
++                 fprintf( stderr, "%8p", edges->endpts[i]);
+             fprintf( stderr, "  del:%3d\n", edges->deleted );
+             edges = edges->next; 
+             } while (edges != temp );
+@@ -452,13 +452,13 @@
+ 	temp = faces;
+ 	fprintf (stderr, "Face List\n");
+ 	if (faces) do {
+-            fprintf(stderr, "  addr: %6x\t", faces );
++            fprintf(stderr, "  addr: %6p\t", faces );
+             fprintf(stderr, "  edges:");
+             for( i=0; i<3; ++i )
+-                 fprintf(stderr, "%6x", faces->edg[i] );
++                 fprintf(stderr, "%6p", faces->edg[i] );
+             fprintf(stderr, "  vert:");
+             for ( i=0; i<3; ++i)
+-                  fprintf(stderr, "%6x", faces->vert[i] );
++                  fprintf(stderr, "%6p", faces->vert[i] );
+             fprintf(stderr, "  vis: %d\n", faces->visible );
+             faces= faces->next;
+             } while ( faces != temp );
+@@ -552,8 +552,8 @@
+                 temp_v = temp_v->next;
+                 } while ( temp_v != vertices );
+              do {                           
+-                printf("3%5d%6d%6d\n", temp_f->vert[0]->vnum,
+-                        temp_f->vert[1]->vnum, temp_f->vert[2]->vnum );
++                printf("3%5d%6d%6d\n", temp_f->vert[0]->vnum[0],
++                        temp_f->vert[1]->vnum[0], temp_f->vert[2]->vnum[0] );
+                 temp_f = temp_f->next;
+                 } while ( temp_f != faces );
+ }
diff --git a/Golden_Repo/v/VMD/VMD-1.9.4a51_extra_colors.patch b/Golden_Repo/v/VMD/VMD-1.9.4a51_extra_colors.patch
new file mode 100644
index 0000000000000000000000000000000000000000..26e9ba954dbbbb816975a947d97c4d1a69ca1f95
--- /dev/null
+++ b/Golden_Repo/v/VMD/VMD-1.9.4a51_extra_colors.patch
@@ -0,0 +1,46 @@
+Add some additional colors, e.g. to allow for color blind compatible rendering.
+Bob Dröge, 2020-06-23
+--- src/Scene.C.orig	2020-06-23 09:37:41.000000000 +0200
++++ src/Scene.C		2020-06-23 09:40:59.000000000 +0200
+@@ -63,7 +63,10 @@
+  ,"yellow2",  "yellow3",   "green2",    "green3",
+   "cyan2",    "cyan3",     "blue2",     "blue3",
+   "violet",   "violet2",   "magenta",   "magenta2",  
+-  "red2",     "red3",      "orange2",   "orange3"
++  "red2",     "red3",      "orange2",   "orange3",
++  "matisse", "flamenco", "forest_green", "punch",
++  "wisteria", "spicy_mix", "orchid", "gray2",
++  "lime_pie", "java"
+ #endif
+ 
+ };
+@@ -89,7 +92,17 @@
+    0.27f, 0.00f, 0.98f,  0.45f, 0.00f, 0.90f, // violet
+    0.90f, 0.00f, 0.90f,  1.00f, 0.00f, 0.66f, // magenta
+    0.98f, 0.00f, 0.23f,  0.81f, 0.00f, 0.00f, // red
+-   0.89f, 0.35f, 0.00f,  0.96f, 0.72f, 0.00f  // orange
++   0.89f, 0.35f, 0.00f,  0.96f, 0.72f, 0.00f, // orange
++   0.1f, 0.5f, 0.7f, // MPL1, matisse
++   1.0f, 0.5f, 0.1f, // MPL2, flamenco
++   0.2f, 0.6f, 0.2f, // MPL3, forest green
++   0.8f, 0.2f, 0.2f, // MPL4, punch
++   0.6f, 0.4f, 0.7f, // MPL5, wisteria
++   0.5f, 0.3f, 0.3f, // MPL6, spicy mix
++   0.9f, 0.5f, 0.8f, // MPL7, orchid
++   0.5f, 0.5f, 0.5f, // MPL8, gray
++   0.7f, 0.7f, 0.1f, // MPL9, key lime pie
++   0.1f, 0.7f, 0.8f // MPL10, java
+ #endif
+ 
+ };
+--- src/Scene.h.orig	2020-06-23 09:37:45.000000000 +0200
++++ src/Scene.h		2020-06-23 09:42:21.000000000 +0200
+@@ -37,7 +37,7 @@
+ #define DISP_LIGHTS 4
+ 
+ // total number of colors defined here
+-#define REGCLRS         33
++#define REGCLRS         43
+ #define EXTRACLRS       1
+ #define VISCLRS         (REGCLRS - EXTRACLRS)
+ #define MAPCLRS         1024    
diff --git a/Golden_Repo/v/VMD/VMD-1.9.4a57-gcccoremkl-11.3.0-2022.1.0.eb b/Golden_Repo/v/VMD/VMD-1.9.4a57-gcccoremkl-11.3.0-2022.1.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..e10877f760359227728ec9262448704d50ab4cc1
--- /dev/null
+++ b/Golden_Repo/v/VMD/VMD-1.9.4a57-gcccoremkl-11.3.0-2022.1.0.eb
@@ -0,0 +1,73 @@
+##
+# Author:    Robert Mijakovic <robert.mijakovic@lxp.lu>
+##
+name = 'VMD'
+version = '1.9.4a57'
+
+homepage = 'https://www.ks.uiuc.edu/Research/vmd'
+description = """VMD is a molecular visualization program for displaying, animating, and analyzing large biomolecular
+ systems using 3-D graphics and built-in scripting."""
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.3.0-2022.1.0'}
+
+source_urls = [
+    'https://www.ks.uiuc.edu/Research/vmd/vmd-1.9.4/files/alpha/',
+    'https://www.ks.uiuc.edu/Research/vmd/vmd-%(version)s/files/final',
+    'http://webclu.bio.wzw.tum.de/stride/'
+]
+sources = [
+    'vmd-%(version)s.src.tar.gz',
+    {'filename': 'stride.tar.gz', 'extract_cmd': "tar -C vmd-%(version)s/lib/stride -xf %s"},
+]
+patches = [
+    ('VMD-1.9.3_plugins.patch'),
+    ('VMD-1.9.3_surf_Makefile.patch', 'vmd-%(version)s'),
+    ('VMD-1.9.3_surf_bad_printfs.patch', 'vmd-%(version)s'),
+    ('VMD-1.9.3_stride_Makefile.patch', 'vmd-%(version)s'),
+    ('VMD-1.9.3_stride_MAX_AT_IN_RES.patch', 'vmd-%(version)s'),
+    ('VMD-1.9.4a57_configure.patch', 'vmd-%(version)s'),
+    ('VMD-1.9.4a51_extra_colors.patch', 'vmd-%(version)s'),
+]
+checksums = [
+    'de278d0c5d969336d89068e0806fb50aaa0cb0f546ba985d840b279357860679',  # vmd-1.9.4a57.src.tar.gz
+    '51a8bc2988bb184bd08216124f61725225bb1a6f563bdf8cd35154cb5d621c1a',  # stride.tar.gz
+    '85760d6ae838e2b09801e34b36b484532383f7aaf2e8634b3ef808002a92baa3',  # VMD-1.9.3_plugins.patch
+    'd5cfa88064b7cffbc75accd69707d4e45fda974e8127de9ab606fdad501bd68a',  # VMD-1.9.3_surf_Makefile.patch
+    'f3c2a8c155e38db8e644cee6a01f6beaea5988e72ac74cde26b71670b151cc34',  # VMD-1.9.3_surf_bad_printfs.patch
+    'eb194ac0d8c086b73f87b29f7d732687f902431b1cdfa139c090401fefdee51e',  # VMD-1.9.3_stride_Makefile.patch
+    'eff1ca00cec637a6c8a156b2fb038e078d1835ba0eb15a571ed820bca5a866d9',  # VMD-1.9.3_stride_MAX_AT_IN_RES.patch
+    'ad22b02f0261bb94768e084b42c74c1c6cd4d2a3428f4f22534565e232f2d237',  # VMD-1.9.4a51_configure.patch
+    '253eba282b570eb00e4764f46f77fd5ca898d10360d5707dd50ad1f14615af80',  # VMD-1.9.4a51_extra_colors.patch
+]
+
+builddependencies = [
+    ('binutils', '2.38'),
+]
+
+dependencies = [
+    ('tcsh', '6.24.01'),
+    ('Tcl', '8.6.12'),
+    ('Tk', '8.6.12'),
+    ('FLTK', '1.3.8'),
+    ('Python', '3.10.4'),
+    ('SciPy-bundle', '2022.05'),
+    ('Tkinter', '%(pyver)s'),
+    ('X11', '20220504'),
+    ('fontconfig', '2.14.0'),
+    ('OpenGL', '2022a'),
+    ('netCDF', '4.9.0', '-serial'),
+    ('FFmpeg', '4.4.2'),
+    ('ImageMagick', '7.1.0-37'),
+    ('ACTC', '1.1'),
+    ('OptiX', '6.5.0', '', SYSTEM),
+    ('zlib', '1.2.12'),
+    ('libpng', '1.6.37'),
+    ('POV-Ray', '3.7.0.10'),
+    ('CUDA', '11.7', '', SYSTEM),
+]
+
+postinstallcmds = [
+    'sed -i "s%#!/bin/csh%#!$EBROOTTCSH/bin/tcsh%g" %(installdir)s/bin/vmd ',
+]
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/v/VMD/VMD-1.9.4a57_configure.patch b/Golden_Repo/v/VMD/VMD-1.9.4a57_configure.patch
new file mode 100644
index 0000000000000000000000000000000000000000..42c726a4c397fb84f660782dd9d69b83ccfa911c
--- /dev/null
+++ b/Golden_Repo/v/VMD/VMD-1.9.4a57_configure.patch
@@ -0,0 +1,179 @@
+diff -Naur vmd-1.9.4a57.orig/configure vmd-1.9.4a57/configure
+--- vmd-1.9.4a57.orig/configure	2022-04-27 08:21:11.000000000 +0200
++++ vmd-1.9.4a57/configure	2023-02-06 22:04:22.188887855 +0100
+@@ -498,17 +498,16 @@
+ 
+ $arch_cc          = "cc";
+ $arch_ccpp        = "CC";
+-$arch_nvcc        = "/usr/local/cuda-10.2/bin/nvcc";
++$arch_nvcc        = "$ENV{'EBROOTCUDA'}/bin/nvcc";
+ $arch_nvccflags   = "-lineinfo --ptxas-options=-v " . 
+-                    "-gencode arch=compute_30,code=compute_30 " .
+-                    "-gencode arch=compute_30,code=sm_35 " .
+-                    "-gencode arch=compute_30,code=sm_37 " .
+                     "-gencode arch=compute_50,code=compute_50 " .
+                     "-gencode arch=compute_50,code=sm_50 " .
+                     "-gencode arch=compute_60,code=compute_60 " .
+                     "-gencode arch=compute_60,code=sm_60 " .
+                     "-gencode arch=compute_70,code=compute_70 " .
+                     "-gencode arch=compute_70,code=sm_70 " .
++                    "-gencode arch=compute_75,code=sm_75 " .
++                    "-gencode arch=compute_80,code=sm_80 " .
+                     "--ftz=true ";
+ #                    "-gencode arch=compute_75,code=sm_75 " .
+ $arch_gcc         = "gcc";
+@@ -634,17 +633,17 @@
+ # location of Mesa library and include files; basically does the same
+ # as OpenGL.  This is based on the default instructions from the Mesa
+ # README; the include files should by default be in /usr/local/include/GL.
+-$mesa_dir         = "$vmd_library_dir/Mesa";
++$mesa_dir         = $ENV{'EBROOTMESA'};
+ $mesa_include     = "-I$mesa_dir/include";
+ $mesa_library     = "-L$mesa_dir/lib_$config_arch";
+ #$mesa_libs        = "-lMesaGL -lMesaGLU"; 
+-$mesa_libs        = "-lMesaGL"; 
++$mesa_libs        = "-lGL -lGLU"; 
+ $mesa_defines     = "-DUSELINEAXES -DVMDMESA -DVMDOPENGL";
+ @mesa_cc          = ();
+ @mesa_cu          = ();
+-@mesa_ccpp        = @opengl_ccpp;
+-@mesa_h           = @opengl_h;
+-@mesa_extra       = @opengl_extra;
++@mesa_ccpp        = ();
++@mesa_h           = ();
++@mesa_extra       = ();
+ 
+ 
+ #
+@@ -720,10 +719,10 @@
+ 
+ ################ FLTK GUI
+ $fltk_defines     = "-DVMDGUI -DVMDFLTK";
+-$fltk_dir         = "$vmd_library_dir/fltk";
++$fltk_dir         = $ENV{'EBROOTFLTK'};
+ $fltk_include     = "-I$fltk_dir/include";
+ $fltk_library     = "-L$fltk_dir/$config_arch";
+-$fltk_libs        = "-lfltk -lX11";
++$fltk_libs        = "-lfltk -lX11 -lXfixes -lXcursor -lXinerama";
+ #@fltk_cc          = ('forms_ui.c');
+ @fltk_cu          = ();
+ @fltk_ccpp        = ( 'ColorFltkMenu.C',
+@@ -765,7 +764,6 @@
+ $stock_tcl_include_dir=$ENV{"TCL_INCLUDE_DIR"} || "$vmd_library_dir/tcl/include";
+ $stock_tcl_library_dir=$ENV{"TCL_LIBRARY_DIR"} || "$vmd_library_dir/tcl/lib_$config_arch";
+ 
+-
+ # location of Tk (for TK option)
+ #$stock_tk_include_dir=$ENV{"TK_INCLUDE_DIR"} || "/usr/local/include";
+ #$stock_tk_library_dir=$ENV{"TK_LIBRARY_DIR"} || "/usr/local/lib";
+@@ -783,8 +781,8 @@
+ if ($config_tk) { $tcl_include .= " -I$stock_tk_include_dir"; }
+ $tcl_library      = "-L$stock_tcl_library_dir";
+ if ($config_tk) { $tcl_library .= " -L$stock_tk_library_dir"; }
+-$tcl_libs         = "-ltcl8.5";  
+-if ($config_tk) { $tcl_libs = "-ltk8.5 -lX11 " . $tcl_libs; }
++$tcl_libs         = "-ltcl8.6";  
++if ($config_tk) { $tcl_libs = "-ltk8.6 -lX11 " . $tcl_libs; }
+ 
+ @tcl_cc           = ();
+ @tcl_cu           = ();
+@@ -1006,7 +1004,7 @@
+ #   This option enables the use of CUDA GPU acceleration functions.
+ #######################
+ $cuda_defines     = "-DVMDCUDA -DMSMPOT_CUDA";
+-$cuda_dir         = "/usr/local/cuda-10.2";
++$cuda_dir         = "$ENV{'CUDA_HOME'}";
+ $cuda_include     = "";
+ $cuda_library     = "";
+ $cuda_libs        = "-Wl,-rpath -Wl,\$\$ORIGIN/ -lcudart_static -lrt";
+@@ -1215,7 +1213,7 @@
+ # $liboptix_dir         = "/usr/local/encap/NVIDIA-OptiX-SDK-5.0.1-linux64";
+ # $liboptix_dir         = "/usr/local/encap/NVIDIA-OptiX-SDK-5.1.0-linux64";
+ # $liboptix_dir         = "/usr/local/encap/NVIDIA-OptiX-SDK-6.0.0-linux64";
+-$liboptix_dir         = "/usr/local/encap/NVIDIA-OptiX-SDK-6.5.0-linux64";
++$liboptix_dir         = "$ENV{'EBROOTOPTIX'}";
+ # $liboptix_dir         = "/usr/local/encap/NVIDIA-OptiX-SDK-7.0.0-linux64";
+ 
+ # NCSA Blue Waters
+@@ -1370,7 +1368,7 @@
+   die "LIBPNG option requires ZLIB!";
+ }
+ $libpng_defines     = "-DVMDLIBPNG";
+-$libpng_dir         = "/Projects/vmd/vmd/lib/libpng";
++$libpng_dir         = "$ENV{'EBROOTLIBPNG'}";
+ $libpng_include     = "-I$libpng_dir/include";
+ $libpng_library     = "-L$libpng_dir/lib_$config_arch";
+ $libpng_libs        = "-lpng16";
+@@ -1398,7 +1396,7 @@
+ # OPTIONAL COMPONENT: Data compresssion library 
+ # This may be commented out if not required.
+ $zlib_defines     = "-DVMDZLIB";
+-$zlib_dir         = "/Projects/vmd/vmd/lib/zlib";
++$zlib_dir         = "$ENV{'EBROOTZLIB'}";
+ $zlib_include     = "-I$zlib_dir/include";
+ $zlib_library     = "-L$zlib_dir/lib_$config_arch";
+ $zlib_libs        = "-lz";
+@@ -1589,7 +1587,7 @@
+ #   primitives.
+ #######################
+ $actc_defines     = "-DVMDACTC";
+-$actc_dir         = "$vmd_library_dir/actc";
++$actc_dir         = "$ENV{'EBROOTACTC'}";
+ $actc_include     = "-I$actc_dir/include";
+ $actc_library     = "-L$actc_dir/lib_$config_arch";
+ $actc_libs        = "-lactc";
+@@ -1604,7 +1602,7 @@
+ # OPTIONAL COMPONENT: NetCDF I/O Library (Used by cdfplugin)
+ #######################
+ $netcdf_defines     = "";
+-$netcdf_dir         = "$vmd_library_dir/netcdf";
++$netcdf_dir         = "$ENV{'EBROOTNETCDF'}";
+ $netcdf_include     = "-I$netcdf_dir/include";
+ $netcdf_library     = "-L$netcdf_dir/lib_$config_arch";
+ $netcdf_libs        = "-lnetcdf";
+@@ -1662,7 +1660,7 @@
+   $stock_python_library_dir=$ENV{"PYTHON_LIBRARY_DIR"} || "$conda_root/lib/python3.7/config-3.7m-x86_64-linux-gnu";
+   $stock_numpy_include_dir=$ENV{"NUMPY_INCLUDE_DIR"} || "$conda_root/lib/python3.7/site-packages/numpy/core/include/numpy";
+   $stock_numpy_library_dir=$ENV{"NUMPY_LIBRARY_DIR"} || "$conda_root/lib/python-3.7/site-packages/numpy/core/include";
+-  $python_libs        = "-fno-lto -lpython3.7m -lpthread";
++  $python_libs        = "$ENV{'PYTHON_LIBRARIES'}" || "-fno-lto -lpython3.7m -lpthread";
+ } else {
+ #  $stock_python_include_dir=$ENV{"PYTHON_INCLUDE_DIR"} || "/usr/local/include";
+ #  $stock_python_library_dir=$ENV{"PYTHON_LIBRARY_DIR"} || "/usr/local/lib";
+@@ -1673,7 +1671,7 @@
+ #  $stock_numpy_library_dir=$ENV{"NUMPY_LIBRARY_DIR"} || "/usr/local/lib";
+   $stock_numpy_include_dir=$ENV{"NUMPY_INCLUDE_DIR"} || "$vmd_library_dir/numpy/lib_$config_arch/include";
+   $stock_numpy_library_dir=$ENV{"NUMPY_LIBRARY_DIR"} || "$vmd_library_dir/python/lib_$config_arch/lib/python2.5/site-packages/numpy/core/include";
+-  $python_libs        = "-lpython2.5 -lpthread";
++  $python_libs        = "$ENV{'PYTHON_LIBRARIES'}" || "-lpython2.5 -lpthread";
+ }
+ 
+ $python_defines     = "-DVMDPYTHON";
+@@ -2593,7 +2591,7 @@
+ 
+     if ($config_cuda) {
+       $arch_nvccflags   .= " --machine 64 -O3 $cuda_include";
+-      $cuda_library     = "-L/usr/local/cuda-10.2/lib64";
++      $cuda_library     = "-L/$ENV{'EBROOTCUDA'}/lib64";
+     }
+ 
+     $arch_lex		= "flex"; # has problems with vendor lex
+@@ -2603,7 +2601,7 @@
+     # they likely serve no useful purpose going forward.
+     if (!$config_opengl_dispatch) {
+       $opengl_dep_libs	= "-L/usr/X11R6/lib64 -lGL -lX11";
+-      $mesa_libs          = "-lMesaGL -L/usr/X11R6/lib64 -lXext -lX11";
++      $mesa_libs          = "-lGL -lGLU -L/usr/X11R6/lib64 -lXext -lX11";
+     }
+ 
+     # this is to make tcl happy
+@@ -3789,8 +3787,7 @@
+ 
+ .cu.ptx:
+ 	\$(ECHO) "Compiling " \$< " --> " \$*.ptx " ..."; \\
+-	\$(NVCC) \$(DEFINES) --use_fast_math $liboptix_include -gencode arch=compute_50,code=compute_50 -ptx \$< $arch_coptout$vmd_arch_dir/\$\@
+-
++        \$(NVCC) \$(DEFINES) --use_fast_math $liboptix_include -gencode arch=compute_80,code=compute_80 -ptx \$< $arch_coptout$vmd_arch_dir/\$\@
+ .y.o:
+ 
+ .l.o:
diff --git a/Golden_Repo/v/VTK/VTK-9.2.5-foss-2022a.eb b/Golden_Repo/v/VTK/VTK-9.2.5-foss-2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..8b48eb2a3b4fcc8815d576df04ed2795271493e8
--- /dev/null
+++ b/Golden_Repo/v/VTK/VTK-9.2.5-foss-2022a.eb
@@ -0,0 +1,187 @@
+easyblock = 'CMakeMake'
+
+name = 'VTK'
+version = '9.2.5'
+
+homepage = 'http://www.vtk.org'
+description = """The Visualization Toolkit (VTK) is an open-source, freely available software system for
+ 3D computer graphics, image processing and visualization. VTK consists of a C++ class library and several
+ interpreted interface layers including Tcl/Tk, Java, and Python. VTK supports a wide variety of visualization
+ algorithms including: scalar, vector, tensor, texture, and volumetric methods; and advanced modeling techniques
+ such as: implicit modeling, polygon reduction, mesh smoothing, cutting, contouring, and Delaunay triangulation."""
+
+toolchain = {'name': 'foss', 'version': '2022a'}
+toolchainopts = {'pic': True, 'usempi': True}
+
+source_urls = ['https://www.vtk.org/files/release/%(version_major_minor)s']
+sources = [
+    SOURCE_TAR_GZ,
+    '%(name)sData-%(version)s.tar.gz',
+]
+patches = [('vtk-version.egg-info', '.')]
+checksums = [
+    '128d601baa980e98ee034207974b33fb38d2c98ab9cf4a5756efdb09ed6c0949',  # VTK-9.2.5.tar.gz
+    '8a812f96346b3a38ff0fc3b1a1a372f3727a71ebf450c02d659a75dbe1113515',  # VTKData-9.2.5.tar.gz
+    '787b82415ae7a4a1f815b4db0e25f7abc809a05fc85d7d219627f3a7e5d3867b',  # vtk-version.egg-info
+]
+
+builddependencies = [
+    ('CMake', '3.23.1'),
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('HDF5', '1.12.2',),
+    ('SciPy-Stack', '2022a', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('mpi4py', '3.1.4'),
+    ('libxc', '5.2.3'),
+    ('netCDF', '4.9.0',),
+    ('X11', '20220504'),
+    ('OpenGL', '2022a'),
+]
+
+separate_build_dir = True
+
+configopts = "-DCMAKE_INSTALL_LIBDIR=lib "
+
+configopts += "-DVTK_USE_SYSTEM_MPI4PY=ON "
+configopts += "-DVTK_USE_SYSTEM_LZMA=ON "
+configopts += "-DVTK_USE_SYSTEM_HDF5=ON "
+configopts += "-DVTK_USE_SYSTEM_NETCDF=ON "
+
+configopts += "-DBUILD_SHARED_LIBS=ON "
+configopts += "-DBUILD_TESTING=OFF "
+
+configopts += "-DVTK_USE_MPI=ON "
+configopts += "-DVTK_SMP_IMPLEMENTATION_TYPE=OPENMP "
+configopts += "-DVTK_Group_MPI:BOOL=ON "
+configopts += "-DVTK_Group_Web:BOOL=ON "
+
+configopts += '-DOpenGL_GL_PREFERENCE=GLVND '  # "GLVND" or "LEGACY"
+configopts += "-DOPENGL_EGL_INCLUDE_DIR=$EBROOTOPENGL/include "
+configopts += "-DOPENGL_GLX_INCLUDE_DIR=$EBROOTOPENGL/include "
+configopts += "-DOPENGL_INCLUDE_DIR=$EBROOTOPENGL/include "
+configopts += "-DOPENGL_egl_LIBRARY=$EBROOTOPENGL/lib/libEGL.so.1 "
+configopts += "-DOPENGL_glx_LIBRARY=$EBROOTOPENGL/lib/libGLX.so.0 "
+configopts += "-DOPENGL_opengl_LIBRARY=$EBROOTOPENGL/lib/libOpenGL.so.0 "
+configopts += "-DOPENGL_glu_LIBRARY=$EBROOTOPENGL/lib/libGLU.so "
+
+configopts += "-DVTK_WRAP_PYTHON=ON "
+configopts += "-DVTK_PYTHON_OPTIONAL_LINK=OFF "
+configopts += "-DPYTHON_EXECUTABLE:PATH=$EBROOTPYTHON/bin/python%(pyshortver)s "
+configopts += "-DPYTHON_INCLUDE_DIR:PATH=$EBROOTPYTHON/include/python%(pyshortver)s "
+configopts += "-DPYTHON_LIBRARY:PATH=$EBROOTPYTHON/lib/libpython%%(pyshortver)s.%s " % SHLIB_EXT
+
+configopts += "-DHDF5_INCLUDE_DIRS=$EBROOTHDF5/include "
+
+configopts += "-DModule_vtkAcceleratorsVTKm:BOOL=ON "
+# configopts += "-DModule_vtkDomainsMicroscopy:BOOL=OFF "
+# configopts += "-DModule_vtkDomainsParallelChemistry:BOOL=OFF "
+# configopts += "-DModule_vtkFiltersOpenTurns:BOOL=OFF "
+# configopts += "-DModule_vtkFiltersParallelDIY2:BOOL=OFF "
+# configopts += "-DModule_vtkFiltersParallelFlowPaths:BOOL=OFF "
+configopts += "-DModule_vtkFiltersParallelGeometry:BOOL=ON "
+configopts += "-DModule_vtkFiltersParallelMPI:BOOL=ON "
+configopts += "-DModule_vtkFiltersParallelStatistics:BOOL=ON "
+# configopts += "-DModule_vtkFiltersParallelVerdict:BOOL=OFF "
+# configopts += "-DModule_vtkFiltersReebGraph:BOOL=OFF "
+# configopts += "-DModule_vtkGUISupportQt:BOOL=OFF "
+# configopts += "-DModule_vtkGUISupportQtOpenGL:BOOL=OFF "
+# configopts += "-DModule_vtkGUISupportQtSQL:BOOL=OFF "
+# configopts += "-DModule_vtkGUISupportQtWebkit:BOOL=OFF "
+# configopts += "-DModule_vtkGeovisGDAL:BOOL=OFF "
+# configopts += "-DModule_vtkIOADIOS:BOOL=OFF "
+# configopts += "-DModule_vtkIOFFMPEG:BOOL=OFF "
+# configopts += "-DModule_vtkIOGDAL:BOOL=OFF "
+# configopts += "-DModule_vtkIOGeoJSON:BOOL=OFF "
+# configopts += "-DModule_vtkIOLAS:BOOL=OFF "
+# configopts += "-DModule_vtkIOMPIImage:BOOL=ON "
+# configopts += "-DModule_vtkIOMPIParallel:BOOL=ON "
+# configopts += "-DModule_vtkIOMotionFX:BOOL=OFF "
+# configopts += "-DModule_vtkIOMySQL:BOOL=OFF "
+# configopts += "-DModule_vtkIOODBC:BOOL=OFF "
+# configopts += "-DModule_vtkIOPDAL:BOOL=OFF "
+# configopts += "-DModule_vtkIOParallelExodus:BOOL=OFF "
+# configopts += "-DModule_vtkIOParallelLSDyna:BOOL=OFF "
+# configopts += "-DModule_vtkIOParallelNetCDF:BOOL=OFF "
+# configopts += "-DModule_vtkIOParallelXdmf3:BOOL=OFF "
+# configopts += "-DModule_vtkIOPostgreSQL:BOOL=OFF "
+# configopts += "-DModule_vtkIOTRUCHAS:BOOL=OFF "
+# configopts += "-DModule_vtkIOVPIC:BOOL=OFF "
+# configopts += "-DModule_vtkIOXdmf2:BOOL=OFF "
+# configopts += "-DModule_vtkIOXdmf3:BOOL=OFF "
+# configopts += "-DModule_vtkImagingOpenGL2:BOOL=OFF "
+# configopts += "-DModule_vtkInfovisBoost:BOOL=OFF "
+# configopts += "-DModule_vtkInfovisBoostGraphAlg:BOOL=OFF
+configopts += "-DModule_vtkParallelMPI:BOOL=ON "
+configopts += "-DModule_vtkPython:BOOL=ON "
+# configopts += "-DModule_vtkPythonInterpreter:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingExternal:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingFreeTypeFontConfig:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingLICOpenGL2:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingMatplotlib:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingOSPRay:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingOpenVR:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingOptiX:BOOL=OFF "
+configopts += "-DModule_vtkRenderingParallel:BOOL=ON "
+configopts += "-DModule_vtkRenderingParallelLIC:BOOL=ON "
+# configopts += "-DModule_vtkRenderingQt:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingSceneGraph:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingTk:BOOL=OFF "
+# configopts += "-DModule_vtkRenderingVolumeAMR:BOOL=OFF "
+# configopts += "-DModule_vtkTclTk:BOOL=OFF "
+# configopts += "-DModule_vtkTestingCore:BOOL=OFF "
+# configopts += "-DModule_vtkTestingGenericBridge:BOOL=OFF "
+# configopts += "-DModule_vtkTestingIOSQL:BOOL=OFF "
+# configopts += "-DModule_vtkTestingRendering:BOOL=OFF "
+# configopts += "-DModule_vtkUtilitiesBenchmarks:BOOL=OFF "
+# configopts += "-DModule_vtkUtilitiesEncodeString:BOOL=OFF "
+# configopts += "-DModule_vtkVPIC:BOOL=OFF "
+configopts += "-DModule_vtkVTKm:BOOL=ON "
+# configopts += "-DModule_vtkViewsGeovis:BOOL=OFF "
+# configopts += "-DModule_vtkViewsQt:BOOL=OFF "
+# configopts += "-DModule_vtkWebCore:BOOL=OFF "
+# configopts += "-DModule_vtkWebGLExporter:BOOL=OFF "
+# configopts += "-DModule_vtkWebPython:BOOL=OFF "
+# configopts += "-DModule_vtkWrappingJava:BOOL=OFF "
+# configopts += "-DModule_vtkWrappingPythonCore:BOOL=OFF "
+# configopts += "-DModule_vtkWrappingTools:BOOL=OFF "
+# configopts += "-DModule_vtkdiy2:BOOL=OFF "
+# configopts += "-DModule_vtkkissfft:BOOL=OFF "
+configopts += "-DModule_vtkmpi4py:BOOL=ON "
+# configopts += "-DModule_vtkpegtl:BOOL=OFF "
+# configopts += "-DModule_vtkxdmf2:BOOL=OFF "
+# configopts += "-DModule_vtkxdmf3:BOOL=OFF "
+# configopts += "-DModule_vtkzfp:BOOL=OFF "
+
+preinstallopts = "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && "
+
+# Install a egg-info file so VTK is more python friendly, required for mayavi
+local_egg_info_src = '%(builddir)s/VTK-%(version)s/vtk-version.egg-info'
+local_egg_info_dest = '%(installdir)s/lib/python%(pyshortver)s/site-packages/vtk-%(version)s.egg-info'
+postinstallcmds = [
+    'sed "s/#VTK_VERSION#/%%(version)s/" %s > %s' % (local_egg_info_src, local_egg_info_dest),
+]
+
+modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']}
+
+local_vtk_exec = ['vtk%s-%%(version_major_minor)s' % x
+                  for x in ['WrapJava', 'ParseJava', 'WrapPythonInit', 'WrapPython', 'WrapHierarchy']]
+local_vtk_exec += ['vtkpython']
+local_vtk_libs = ['CommonCore', 'IONetCDF', 'ParallelCore', 'RenderingOpenGL2']
+
+sanity_check_paths = {
+    'files': ['bin/%s' % x for x in local_vtk_exec] + ['include/vtk-%(version_major_minor)s/vtkMPI.h'] +
+             ['lib/libvtk%s-%%(version_major_minor)s.%s' % (l, SHLIB_EXT) for l in local_vtk_libs],
+    'dirs': ['lib/python%(pyshortver)s/site-packages/', 'include/vtk-%(version_major_minor)s'],
+}
+
+sanity_check_commands = [
+    "python -c 'import %(namelower)s'",
+    "python -c 'import pkg_resources; pkg_resources.get_distribution(\"vtk\")'",
+    # make sure that VTK Python libraries link to libpython (controlled via DVTK_PYTHON_OPTIONAL_LINK=OFF),
+    # see https://gitlab.kitware.com/vtk/vtk/-/issues/17881
+    "ldd $EBROOTVTK/lib/libvtkPythonContext2D-%%(version_major_minor)s.%s | grep /libpython" % SHLIB_EXT,
+]
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/v/VTK/VTK-9.2.5-gpsmpi-2022a.eb b/Golden_Repo/v/VTK/VTK-9.2.5-gpsmkl-2022a.eb
similarity index 98%
rename from Golden_Repo/v/VTK/VTK-9.2.5-gpsmpi-2022a.eb
rename to Golden_Repo/v/VTK/VTK-9.2.5-gpsmkl-2022a.eb
index 2afb89cd458dee3b364c96ba27e987f6881933f6..801c5d4ffe646e49e9acc55eb4533769ec624cf0 100644
--- a/Golden_Repo/v/VTK/VTK-9.2.5-gpsmpi-2022a.eb
+++ b/Golden_Repo/v/VTK/VTK-9.2.5-gpsmkl-2022a.eb
@@ -11,7 +11,7 @@ description = """The Visualization Toolkit (VTK) is an open-source, freely avail
  such as: implicit modeling, polygon reduction, mesh smoothing, cutting, contouring, and Delaunay triangulation."""
 
 
-toolchain = {'name': 'gpsmpi', 'version': '2022a'}
+toolchain = {'name': 'gpsmkl', 'version': '2022a'}
 toolchainopts = {'pic': True, 'usempi': True}
 
 source_urls = ['https://www.vtk.org/files/release/%(version_major_minor)s']
@@ -32,11 +32,11 @@ builddependencies = [
 
 dependencies = [
     ('Python', '3.10.4'),
-    ('HDF5', '1.12.2', '-serial'),
+    ('HDF5', '1.12.2',),
     ('SciPy-Stack', '2022a', '', ('gcccoremkl', '11.3.0-2022.1.0')),
     ('mpi4py', '3.1.4'),
     ('libxc', '5.2.3'),
-    ('netCDF', '4.9.0', '-serial'),
+    ('netCDF', '4.9.0',),
     ('X11', '20220504'),
     ('OpenGL', '2022a'),
 ]
diff --git a/Golden_Repo/x/xpra/xpra-4.4.3-GCCcore-11.3.0.eb b/Golden_Repo/x/xpra/xpra-4.4.3-GCCcore-11.3.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..8dd309ac345e83215a4db2541474a5d8778b54a5
--- /dev/null
+++ b/Golden_Repo/x/xpra/xpra-4.4.3-GCCcore-11.3.0.eb
@@ -0,0 +1,187 @@
+easyblock = 'Bundle'
+
+name = 'xpra'
+version = '4.4.3'
+
+homepage = "http://www.xpra.org"
+description = """Xpra is an open-source multi-platform persistent remote display server and client
+for forwarding applications and desktop screens.
+"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.3.0'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.38'),
+    ('pkgconf', '1.8.0'),
+    ('Brotli', '1.0.9'),
+    ('uglifyjs', '3.17.4'),
+    ('CMake', '3.23.1'),
+    ('Meson', '0.62.1'),
+    ('scikit-build', '0.15.0'),  # for patchelf
+]
+
+dependencies = [
+    ('Python', '3.10.4'),
+    ('X11', '20220504'),
+    ('OpenGL', '2022a'),
+    ('SciPy-Stack', '2022a', '', ('gcccoremkl', '11.3.0-2022.1.0')),
+    ('PyCairo', '1.23.0'),
+    ('PyGObject', '3.42.2'),
+    ('Pandoc', '2.19.2', '', SYSTEM),
+    ('GTK+', '3.24.34'),
+    ('rencode', '1.0.5'),
+    ('lz4', '1.9.3'),
+    ('yuicompressor', '2.4.8'),
+    ('x264', '20220620'),
+    ('x265', '3.5'),
+    ('libvpx', '1.12.0'),
+    ('FFmpeg', '4.4.2'),
+    ('GStreamer', '1.20.2'),
+    ('libwebp', '1.2.4'),
+    ('libpng', '1.6.37'),
+    ('libspng', '0.7.3'),
+    ('libjpeg-turbo', '2.1.3'),
+    ('zlib', '1.2.12'),
+    ('LibTIFF', '4.3.0'),
+    ('nvidia-Video_Codec_SDK', '11.1.5', '', SYSTEM),
+    ('freetype', '2.12.1'),
+    ('libyuv', '20210428'),
+    ('DBus', '1.14.0'),
+    ('XServer', '21.1.6'),
+    ('CUDA', '11.7', '', SYSTEM),
+]
+
+prebuildopts = 'export CFLAGS="-Wno-error=unused-function" && '
+
+# this is a bundle of Python packages
+exts_defaultclass = 'PythonPackage'
+exts_default_options = {
+    'use_pip': True,
+    'source_urls': [PYPI_SOURCE],
+    'sanity_pip_check':  True,
+    'use_pip_for_deps': False,
+    'download_dep_fail': True,
+}
+
+exts_list = [
+    ('pyinotify', '0.9.6', {
+        'checksums': ['9c998a5d7606ca835065cdabc013ae6c66eb9ea76a00a1e3bc6e0cfe2b4f71f4'],
+    }),
+    ('pyproject-metadata', '0.7.1', {
+        'checksums': ['0a94f18b108b9b21f3a26a3d541f056c34edcb17dc872a144a15618fed7aef67'],
+    }),
+    ('meson', '1.0.0', {
+        'modulename': False,
+        'checksums': ['aa50a4ba4557c25e7d48446abfde857957dcdf58385fffbe670ba0e8efacce05'],
+    }),
+    ('meson_python', '0.12.0', {
+        'modulename': 'mesonpy',
+        'checksums': ['8cb159a8093a2e73cfa897f8092ec93b74e3842f94dff7fde381c6fe0e0b064d'],
+    }),
+    ('patchelf', '0.17.2.0', {
+        'modulename': False,
+        'checksums': ['dedf987a83d7f6d6f5512269e57f5feeec36719bd59567173b6d9beabe019efe'],
+    }),
+    ('dbus-python', '1.3.2', {
+        'modulename': 'dbus',
+        'checksums': ['ad67819308618b5069537be237f8e68ca1c7fcc95ee4a121fe6845b1418248f8'],
+    }),
+    ('pyxdg', '0.28', {
+        'modulename': 'xdg',
+        'checksums': ['3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4'],
+    }),
+    ('python-uinput', '0.11.2', {
+        'modulename': 'uinput',
+        'checksums': ['99392b676c77b5795b86b7d75274db33fe754fd1e06fb3d58b167c797dc47f0c'],
+    }),
+    ('ifaddr', '0.2.0', {
+        'checksums': ['cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4'],
+    }),
+    ('async-timeout', '4.0.2', {
+        'checksums': ['2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15'],
+    }),
+    ('zeroconf', '0.47.1', {
+        'checksums': ['65ab91068f8fafe00856b63756c72296b69682709681e96e8bb5d101345d5011'],
+    }),
+    (name, version, {
+        'modulename': False,
+        'buildopts': "--without-strict --with-nvenc --with-enc_x264 --with-enc_x265 --with-Xdummy",
+        'installopts': "--with-tests --without-service",
+        'source_tmpl': 'v%(version)s.tar.gz',
+        'source_urls': ['https://github.com/Xpra-org/%(name)s/archive/'],
+        'patches': ['xpra-4.4.3-use_Xorg_on_PATH_first.patch'],
+        'use_pip': False,
+        'checksums': [
+            'fc394c5b346791cc941c8917bbdd44bb26be76a021e497fa6f661e62cc4dd57a',
+            'ff1e8984f367ebcc90b56d2c1b87012a7ce53fe4f68686cf042e5bbce16be198',
+        ],
+    }),
+    ('xpra-html5', '6.1', {
+        'modulename': False,
+        'skipsteps': [
+            'configure',
+            'build',
+            'install',
+        ],
+        'source_tmpl': 'v%(version)s.tar.gz',
+        'source_urls': ['https://github.com/Xpra-org/%(name)s/archive/'],
+        'use_pip': False,
+        'checksums': ['298f85bdd99f075c9d58dcfb904d117283c8034b5f5d24f494d50433ed998ec0'],
+    }),
+]
+
+postinstallcmds = [
+    (
+        # installing xpra-html5
+        'pushd %(builddir)s/xprahtml5/xpra-html5-6.1 && '
+        './setup.py install %(installdir)s /share/xpra/www /etc/xpra/html5-client && '
+        'popd'
+    ),
+    # set specific configurations
+    (
+        # set xpra default configs
+        'cp -a %(builddir)s/xpra/xpra-4.4.3/build/etc %(installdir)s && '
+        # initialize script that can modify the environment of the server
+        'touch %(installdir)s/etc/xpra/server.env && '
+        "sed -i 's!^source =.*!source = %(installdir)s/etc/xpra/server.env!' "
+        "       %(installdir)s/etc/xpra/conf.d/60_server.conf"
+    ),
+    # make Xpra randomly choose a GPU for acceleration if present
+    'mv %(installdir)s/bin/xpra %(installdir)s/bin/xpra.orig',
+    'head -1 %(installdir)s/bin/xpra.orig > %(installdir)s/bin/xpra',
+    (
+        '{ cat >> %(installdir)s/bin/xpra; } << \'EOF\'\n'
+        'from os import environ \n'
+        'if not \'CUDA_VISIBLE_DEVICES\' in environ: \n'
+        '  try: \n'
+        '    from pycuda import driver \n'
+        '    driver.init() \n'
+        '    num_gpus = driver.Device.count() \n'
+        '  except: \n'
+        '    num_gpus = 0 \n'
+        '\n'
+        '  if num_gpus > 0: \n'
+        '    from random import randint \n'
+        '    active_gpuid=randint(0,num_gpus-1) \n'
+        '    environ[\'CUDA_VISIBLE_DEVICES\'] = str(active_gpuid) \n'
+        'EOF'
+    ),
+    'tail -n +2 %(installdir)s/bin/xpra.orig >> %(installdir)s/bin/xpra',
+    'chmod +x %(installdir)s/bin/xpra',
+]
+
+modextravars = {
+    'XPRA_SYSTEM_CONF_DIRS': '%(installdir)s/etc/xpra',
+    # 'XPRA_XORG_BIN': '%(installdir)s/bin/xpra',  # fails if defined at install time. Added patch instead.
+}
+modextrapaths = {
+    'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'],
+}
+
+sanity_check_paths = {
+    'files': ['bin/xpra'],
+    'dirs': ['lib/python%(pyshortver)s/site-packages'],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/x/xpra/xpra-4.4.3-use_Xorg_on_PATH_first.patch b/Golden_Repo/x/xpra/xpra-4.4.3-use_Xorg_on_PATH_first.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5b9bd50cbd49041765a9758ca2f9dafd0a4e00a8
--- /dev/null
+++ b/Golden_Repo/x/xpra/xpra-4.4.3-use_Xorg_on_PATH_first.patch
@@ -0,0 +1,29 @@
+diff -Naur xpra-4.4.3.orig/xpra/scripts/config.py xpra-4.4.3/xpra/scripts/config.py
+--- xpra-4.4.3.orig/xpra/scripts/config.py	2022-11-27 15:21:57.000000000 +0100
++++ xpra-4.4.3/xpra/scripts/config.py	2023-02-08 00:44:55.979689272 +0100
+@@ -69,6 +69,13 @@
+     xorg = os.environ.get("XPRA_XORG_BIN")
+     if xorg:
+         return xorg
++
++    #look for it in $PATH:
++    for x in os.environ.get("PATH").split(os.pathsep): # pragma: no cover
++        xorg = os.path.join(x, "Xorg")
++        if os.path.isfile(xorg):
++            return xorg
++
+     # Detect Xorg Binary
+     if is_arm() and is_Debian() and os.path.exists("/usr/bin/Xorg"):
+         #Raspbian breaks if we use a different binary..
+@@ -82,11 +89,6 @@
+               ):
+         if os.path.exists(p):
+             return p
+-    #look for it in $PATH:
+-    for x in os.environ.get("PATH").split(os.pathsep): # pragma: no cover
+-        xorg = os.path.join(x, "Xorg")
+-        if os.path.isfile(xorg):
+-            return xorg
+     return None
+ 
+ 
diff --git a/Overlays/hdfml_overlay/p/psmpi/psmpi-5.8.0-1-GCC-11.3.0.eb b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.8.0-1-GCC-11.3.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..d09949c276b2ed038b208ef39fdc78402cd78385
--- /dev/null
+++ b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.8.0-1-GCC-11.3.0.eb
@@ -0,0 +1,38 @@
+name = 'psmpi'
+version = '5.8.0-1'
+
+homepage = 'https://github.com/ParaStation/psmpi2'
+description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
+based on MPICH v3. It provides extra low level communication libraries and integration with
+various batch systems for tighter process control.
+"""
+
+toolchain = {'name': 'GCC', 'version': '11.3.0'}
+
+sources = [SOURCE_TAR_GZ]
+source_urls = ['https://gitlab.jsc.fz-juelich.de/ParTec/psmpi/uploads/762714c8eec01fe59239a52798a70e1c/']
+checksums = [
+    # psmpi-5.8.0-1.tar.gz
+    'bcebb42f68e062d4cf957c1ec12a8e2e50051265d38715854bafc34855ed3029',
+]
+
+dependencies = [
+    ('pscom', '5.6-default'),
+    # needed due to the inclusion of hwloc
+    ('libxml2', '2.9.13'),
+    # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed
+    ('CUDA', '11.7', '', SYSTEM)
+]
+
+# We don't have IME in HDFML so we skip this
+# mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio'
+#
+# preconfigopts = 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && '
+# preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && '
+mpich_opts = '--enable-static --with-file-system=ufs+gpfs --enable-romio'
+
+threaded = False
+
+cuda = True
+
+moduleclass = 'mpi'
diff --git a/Overlays/hdfml_overlay/p/psmpi/psmpi-5.8.0-1-NVHPC-22.11.eb b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.8.0-1-NVHPC-22.11.eb
new file mode 100644
index 0000000000000000000000000000000000000000..3ad1f7e18ab2003ce0e739013275f9219d200eb1
--- /dev/null
+++ b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.8.0-1-NVHPC-22.11.eb
@@ -0,0 +1,38 @@
+name = 'psmpi'
+version = '5.8.0-1'
+
+homepage = 'https://github.com/ParaStation/psmpi2'
+description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
+based on MPICH v3. It provides extra low level communication libraries and integration with
+various batch systems for tighter process control.
+"""
+
+toolchain = {'name': 'NVHPC', 'version': '22.11'}
+
+sources = [SOURCE_TAR_GZ]
+source_urls = ['https://gitlab.jsc.fz-juelich.de/ParTec/psmpi/uploads/762714c8eec01fe59239a52798a70e1c/']
+checksums = [
+    # psmpi-5.8.0-1.tar.gz
+    'bcebb42f68e062d4cf957c1ec12a8e2e50051265d38715854bafc34855ed3029',
+]
+
+dependencies = [
+    ('pscom', '5.6-default'),
+    # needed due to the inclusion of hwloc
+    ('libxml2', '2.9.13'),
+    # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed
+    ('CUDA', '11.7', '', SYSTEM)
+]
+
+# We don't have IME in HDFML so we skip this
+# mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio'
+#
+# preconfigopts = 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && '
+# preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && '
+mpich_opts = '--enable-static --with-file-system=ufs+gpfs --enable-romio'
+
+threaded = False
+
+cuda = True
+
+moduleclass = 'mpi'
diff --git a/Overlays/hdfml_overlay/p/psmpi/psmpi-5.8.0-1-intel-compilers-2022.1.0.eb b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.8.0-1-intel-compilers-2022.1.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..aee0894cfdf2ba22bf704646a34d8da1b8d3a8dc
--- /dev/null
+++ b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.8.0-1-intel-compilers-2022.1.0.eb
@@ -0,0 +1,38 @@
+name = 'psmpi'
+version = '5.8.0-1'
+
+homepage = 'https://github.com/ParaStation/psmpi2'
+description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
+based on MPICH v3. It provides extra low level communication libraries and integration with
+various batch systems for tighter process control.
+"""
+
+toolchain = {'name': 'intel-compilers', 'version': '2022.1.0'}
+
+sources = [SOURCE_TAR_GZ]
+source_urls = ['https://gitlab.jsc.fz-juelich.de/ParTec/psmpi/uploads/762714c8eec01fe59239a52798a70e1c/']
+checksums = [
+    # psmpi-5.8.0-1.tar.gz
+    'bcebb42f68e062d4cf957c1ec12a8e2e50051265d38715854bafc34855ed3029',
+]
+
+dependencies = [
+    ('pscom', '5.6-default'),
+    # needed due to the inclusion of hwloc
+    ('libxml2', '2.9.13'),
+    # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed
+    ('CUDA', '11.7', '', SYSTEM)
+]
+
+# We don't have IME in HDFML so we skip this
+# mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio'
+#
+# preconfigopts = 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && '
+# preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && '
+mpich_opts = '--enable-static --with-file-system=ufs+gpfs --enable-romio'
+
+threaded = False
+
+cuda = True
+
+moduleclass = 'mpi'
diff --git a/acls.yml b/acls.yml
index b61a429f0e770daaa852cfd76ee8f10527d40f29..69c078016c9e6e3496fbfef0485584377be32831 100644
--- a/acls.yml
+++ b/acls.yml
@@ -83,6 +83,9 @@ software:
   - name: 'ceres-solver'
     owner: 'goebbert1'
     base: True
+  - name: 'Catalyst'
+    owner: 'goebbert1'
+    mpi: True
   - name: 'Cirq'
     owner: 'goebbert1'
     base: True
@@ -1152,7 +1155,7 @@ software:
     base: True
     mpi: True
   - name: 'h5py'
-    owner: ['griessbach1', 'strube1']
+    owner: ['griessbach1', 'strube1', 'goebbert1']
     base: True
     mpi: True
   - name: 'Eigen'